合作者:201631062124,201631062423

代码地址:https://gitee.com/yryx/WordCount

作业地址:https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign/homework/2188


代码互审:

关于代码互审有一点需要说明,在之前实现wordcount的基本功能时我使用的是c++语言实现,而周欣则是使用的是java语言实现,所以在进行结对项目的时候我们商量了关于使用那种语言实现接下来的功能,最后我们确定使用java语言进行接下来的功能实现,所以在后面的实现过程中周欣主要负责实现代码,我则是在一旁进行相关的帮助,包括代码问题的解决,功能实现问题的解决以及代码测试。不过在开始扩展功能的实现之前我们还是对周欣之前实现的基本功能的代码进行了简单的审查。

代码审查 相关问题 想法和解决方案
代码的编码格式,语法,逻辑等相关部分 编码格式是否符合规范,语法是否正确,代码逻辑是否正确, 根据代码规范来检查完成的所有代码是否存在问题
程序的整体结构,包括类之间的关系 类的定义是否符合规范,整体结构是否紧凑完整 在进行类的定义之前先参考代码规范和程序流程图
文件处理部分的处理 由于文件的访问存在资源的使用,是否有资源泄漏的问题 对所有涉及了文件访问的地方重点检查资源的开闭,是否有资源泄漏的问题

结对psp表格:

PSP阶段 预计耗时(分钟) 实际耗时(分钟)
计划 10 10
.估计任务所需时间 10 10
开发  475 553
.需求分析 5 5
.生成设计文档  10  17
.设计复审  10  14
.代码规范  30  46
.具体设计  60  42
.具体编码  180  248
.代码复审  90  66
.测试  90  115
报告  50  59
.测试报告  10  13
.计算工作量  10  10
.事后总结  30  36
合计  535  622

设计过程:

整个程序一共设计了三个类,分别为test,FileChooser,Execute-Char,其中test类作为主函数所在类,负责整个程序的启动和运行,其中的逻辑负责分析输入的命令,然后再根据命令调用另外两个类中的方法实现对应的功能。FileChooser类中定义了三个方法:rePath(),用于返回输入的文件路径;FileChooser()为该类的构造方法,用于绘制进行文件选择的窗口;actionPerformed(ActionEvent e),用于进行文件的选择。该类的作用就是绘制一个窗口实现文件的选择,然后给出查询结果。Execute-Char类就是所有功能实现的类,其中定义了9个方法,实现了查询总字符数,总单词数,总行数,某个单词出现次数,读取文件,读取总的空行,代码行和注释行,停词表。这些具体的实现方法会在test类中得到调用,从而实现相应功能。

代码说明:

FileChooser类中实现文件选择的代码:

//定义一个文件选择类,用于实现窗口文件选择
public class FileChooser extends JFrame implements ActionListener{
JButton open=null;
String path;
//绘制文件选择框
public FileChooser(){
open=new JButton("open");
this.add(open);
this.setBounds(400, 200, 100, 100);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
open.addActionListener(this);
}
@Override
//重写actionPerformed()方法,用于实现文件选择
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFileChooser jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.showDialog(new JLabel(), "选择");
File file=jfc.getSelectedFile();
path=file.getAbsolutePath();
}
//返回文件路径
public String rePath()
{ return path;
} }

查询代码行,空行,注释行:

try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(
file));
String coun = null;
while ((coun = bufferedReader.readLine()) != null) {
line++;
if (coun.trim().length() == 0 || coun.trim().length() == 1) {
nuline++;
} else {
for (int i = 0; i < coun.length() - 2; i++) {
temp = coun.substring(i, i + 1);
if (temp.equals("/")
&& coun.substring(i + 1, i + 2).equals("/")) {
annoline++;
}
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
codeline = line - nuline - annoline;
System.out.println("代码行:" + codeline + "\n" + "空行:" + nuline + "\n"
+ "注释行:" + annoline);

停词表:

int ReStopList(File file) {
String str = null;
int stopword = 0;
int k = 0;
String reg1 = "\\s+|,+";
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(
file));
while ((str = bufferedReader.readLine()) != null) {
String strc[] = str.split(reg1);
for (String s : strc) {
k = count_word(s);
stopword += k;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stopword;
}

由于在上一次的博客中已经实现了查询总字符数,单词数,总行数,所以在这里就不再展示代码,具体的可以参考:https://www.cnblogs.com/zhouxin523/p/9733271.html

总结与感受:

关于结对编程开发:以前进行程序开发的时候要么是自己进行程序开发,要么都是组成了多人的团队进行程序开发,从来没有体会过两人进行结对编程,在这次课程中得以体会了一次结对编程,首先来说结对编程有一点好处就是多了一双眼看代码,多了一个脑子想问题,多了张嘴讲建议,所以在进行编程的时候可以注意到许多一个人进行编程时发现不了的问题,并且两个人都在对一个问题进行思考,使得解决问题的思路得到了更多的拓展,并且在交流的过程中还会产生新的想法, 我觉得这是很棒的。其次,在代码完成速度上感觉也有了明显的不同,在进行编程之前如果进行了明确分工,在合理的代码规范前提下两人分工完成各自的任务,使得完成的时间得到了很大程度的减少,并且代码完成的质量在合成一份程序之后就可以得到验证,而不必反复在编程的各个阶段进行代码测试,减少了很多时间的浪费。

关于在构建之法的一些体会:在构建之法这本书中我感觉自己确实是学到了很多知识,首先是系统的软件工程的知识,在接触这本书之前虽然已经学习了不少软件工程的相关知识,但是一种感觉都是零散的,独立的知识片段,但是在学习了构建之法后感觉这些知识都到了一定程度的整合,慢慢开始形成一个整体,并且感觉脑子里的思路也清晰起来。然后构建之法中在每一章的结尾都给出了大量的知识链接,这些知识链接可以丰富我的阅读,拓宽视野,并且加深我自己对于课堂知识的理解,  对于我来说是起到了极大的帮助的,我相信就算在这门课结束之后我还是会经常把这本书拿出来阅读,感觉还可以收获更多的东西。

WordCount结对项目的更多相关文章

  1. WordCount 2.0(结对项目)

    序言 合作伙伴 201631062220      201631062120 项目码云地址: https://gitee.com/zhege/WordCount 作业详细要求 系统分析与设计结对项目 ...

  2. 系统分析与设计结对项目——WordCount

    结对项目完成WordCount 合作者:201631062507  201631062526(学号) 代码地址:https://gitee.com/WordCountMC/WordCountTeam ...

  3. 软工结对项目之词频统计update

    队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...

  4. 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~

    结对项目:Web复利计算 搭档博客地址:25江志彬  http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...

  5. 高级四则运算器—结对项目反思(193 & 105)

    高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格   PSP2.1 P ...

  6. 高级四则运算器—结对项目总结(193 &105)

    高级四则运算器—结对项目总结 为了将感想与项目经验体会分割一下,特在此新开一篇博文. 界面设计 啥都不说,先上图震慑一下... 上面的三个界面是我们本次结对项目的主界面,恩,我也觉得挺漂亮的!你问我界 ...

  7. 高级软件工程2017第3次作业——结对项目:四则运算题目生成程序(基于GUI)

    Deadline:2017-10-11(周三)21:00pm (注:以下内容参考集大作业 ) 前言 想过和别人一起探索世界吗?多么希望,遇到困难时,有人能一起探讨:想要懈怠时,有人推你一把:当你专注于 ...

  8. 2018-2019-2 《Java程序设计》结对项目阶段总结《四则运算——整数》(二)

    20175218 2018-2019-2 <Java程序设计>结对项目阶段总结<四则运算--整数> 一.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加,减, ...

  9. 结对项目——四则运算GUI项目

    一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...

随机推荐

  1. ansible基础-playbooks

    1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...

  2. [Swift]LeetCode109. 有序链表转换二叉搜索树 | Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  3. 为什么大一先要学C语言(面向过程)再学C++或JAVA(面向对象)?

    面向对象和面向过程各有千秋 一.面向过程与面向对象对比  面向过程:强调的是每一个功能的步骤,有很多很多方法组成,这些方法相互调用,完成需求. 面向对象:强调的是对象,然后由对象去调用功能. 面向过程 ...

  4. 用Flutter开发的跨平台项目,完美运行在Android和IOS上,Material简洁风格,包括启动页、引导页、注册、登录、首页、体系、公众号、导航、项目,还有漂亮的妹子图库,运行极度流畅,结构清晰,代码规范,值得拥有

    Flutter学习资源汇总持续更新中...... Flutter官方网站 Flutter中文网 wendux的Flutter实战 Flutter官方exampleflutter_gallery 阿里巴 ...

  5. ASP.NET Core 2.1 Web API + Identity Server 4 + Angular 6 + Angular Material 实战小项目视频

    视频简介 ASP.NET Core Web API + Angular 6的教学视频 我是后端开发人员, 前端的Angular部分讲的比较差一些, 可以直接看代码!!!! 这是一个小项目的实战视频, ...

  6. C# 使用 HttpClient 调用 WebService 提示 NoSOAPAction

    问题 在自行构造 HttpClient 请求 SOAP 接口之后,返回 500 错误,并且提示 NoSOAPAction 信息. 原因 造成这个问题的主要原因是因为缺少了 SOAPAction 标头, ...

  7. Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结

    一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...

  8. 给vs2015添加EF

    今天做EF的小例子时,发现需要添加实体数据模型,但是不管怎么找在新建项中都找不到这个选项,这是怎么回事,于是就开始百度吧,有的说可能是VS安装时没有全选,也有的人说可能是重装VS时,没有将注册表清除, ...

  9. java~spring-ioc的使用

    spring-ioc的使用 IOC容器在很多框架里都在使用,而在spring里它被应用的最大广泛,在框架层面 上,很多功能都使用了ioc技术,下面我们看一下ioc的使用方法. 把服务注册到ioc容器 ...

  10. 采用config方式灵活配置我们的Quarz.net中的Job,Trigger

    经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说 Quartz,它具有功能强大和应用的灵活性,我想使用过的人都 ...