结对作业:

  成员:201631062115(partner),201631062613(me)

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

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

  partner的博客:https://www.cnblogs.com/ackary/p/9803601.html

PSP表格:

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

80

100

· Estimate

· 估计这个任务需要多少时间

80

100

Development

开发

1290

1910

· Analysis

· 需求分析 (包括学习新技术)

100

200

· Design Spec

· 生成设计文档

60

80

· Design Review

· 设计复审 (和同事审核设计文档)

80

100

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

60

60

· Design

· 具体设计

50

60

· Coding

· 具体编码

600

1000

· Code Review

· 代码复审

100

150

· Test

· 测试(自我测试,修改代码,提交修改)

240

260

Reporting

报告

300

530

· Test Report

· 测试报告

80

150

· Size Measurement

· 计算工作量

100

180

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

120

200

合计

1670

2540

码互审情况:

在开发过程中,HalfofHeart 同学主要负责的是函数功能编写,F丶Y同学负责的是图形化界面的扩展和测试代码的编写。

F丶Y:对于HalfofHeart 同学,代码写的逻辑清晰,读起来易懂,就是注释有点少了,希望多写点注释。解析命令和实现统计单个文件和遍历文件的代码全在主函数中,这样显得主函数过于臃肿,建议将解析命令的部分抽离出去。

HalfofHeart:对于F丶Y同学,你的测试代码写的一般,感觉是不是应该用Assert来测试啊,这样测试比较正规!

设计过程:

由于我们之前已经实现了基础功能和拓展功能(详情参考HalfofHeart 同学的博客https://www.cnblogs.com/ackary/p/9697199.html),因此我们将这部分的代码按照一定规范整合后,再编写对应的高级功能。高级功能的实现就非常的简单了,只需要建好相应的UI界面,之后调用整合编写好的代码实现对应的计数,然后将结果显示在界面上的TextArea里面即可。

大致流程如下:

关键代码:

UI界面:

界面布局的关键代码:
final JFrame f = new JFrame("WordCount");f.setLayout(null);final JFileChooser fc = new JFileChooser();
JButton bOpenDir = new JButton("打开文件或文件夹");bOpenDir.setContentAreaFilled(false);JButton bWriteFile=new JButton("将结果写入文件");bWriteFile.setContentAreaFilled(false);JCheckBox cb=new JCheckBox("选用停用词表stopList");bOpenDir.setBounds(42,15,140,30);bWriteFile.setBounds(190,15,140,30);cb.setBounds(390,10,150,40);

JTextArea ja = new JTextArea();ja.setFont(new Font("黑体",Font.BOLD,15));ja.setEditable(false);

JScrollPane jsp=new JScrollPane(ja);jsp.setBounds(42,50,600,400);f.add(bOpenDir);f.add(bWriteFile);f.add(cb);f.add(jsp);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(700, 500);f.setLocationRelativeTo(null);f.setVisible(true);

重写的用于输出统计结果到UI界面的output()方法:

1 public String output(String inputFile){
2         String output="";
3         output=inputFile + "\r\n" + "字符个数:" + charNum + "\r\n" + "单词个数:" + wordNum + "\r\n" + "文件总行数:" + lineNum+ "\r\n" +
4                 "代码行数:" + codeNum + "\r\n" + "空行行数:" + emptyNum + "\r\n" + "注释行数:" + noteNum;
5         return output;
6     }

主函数部分:

 1 public class wordCount {
 2     public static void main(String[] args) throws IOException {
 3         outputCount WC = new outputCount();
 4         showCount sc=new showCount();
 5         String inputFile = "";
 6         String stopFile = "stopList.txt";
 7         String outputFile = "result.txt";
 8
 9         for (int j = 0;j < args.length;j++) {
10             if (args[j].equals("-x")) {
11                 sc.showUI();
12                 break;
13             }
14             else {
15                 for (int i = 0; i < args.length; i++) {
16                     if (args[i].length() > 2 && !args[i-1].equals("-o") && !args[i-1].equals("-e"))
17                         inputFile = args[i];
18                     if (args[i].equals("-o"))
19                         outputFile = args[i + 1];
20                     if (args[i].equals("-e")){
21                         outputCount.isStop=true;
22                         if((i!=(args.length-1))&&args[i+1].endsWith(".txt"))
23                             stopFile=args[i+1];
24                     }
25                 }
26                 boolean flag=false;
27                 for(int i=0;i<args.length;i++){
28                     if(args[i].equals("-s"))
29                         flag=true;
30                 }
31                 if(flag){
32                     for (int i = 0; i < args.length; i++) {
33                         if ((args[i].indexOf("*") != -1)) {
34                             outputCount.endString = args[i].substring(args[i].lastIndexOf("*") + 1, args[i].length());
35                             outputCount.getPath = args[i].substring(0, args[i].lastIndexOf("*"));
36                             if (outputCount.getPath.equals(""))
37                                 outputCount.getPath = ".";
38                         }
39                     }
40                     File dir = new File(outputCount.getPath);//.表示当前目录
41                     List<File> files = outputCount.getFile(dir);//获取当前目录
42                     for (File file : files) {
43                         outputCount filesWC = new outputCount();
44                         String filePath = file.getAbsolutePath();
45                         filesWC.count(filePath, stopFile);
46                         filesWC.output(args, filePath, outputFile, filesWC);
47                         outputCount.lineNum=outputCount.wordNum=outputCount.charNum=outputCount.codeNum=outputCount.emptyNum=outputCount.noteNum=0;
48                     }
49                 }
50                 else{
51                     WC.count(inputFile, stopFile);
52                     WC.output(args, inputFile, outputFile, WC);
53                 }
54             }
55             break;
56         }
57     }
58 }

测试过程:

新建测试模块Test:

使用Juit为每个模块编写测试代码:

测试不含停用词的输出:

代码:

 1 @org.junit.Test
 2     public void testOutputWithoutStopfile() {
 3         try {
 4             outputCount.count(inputfile,stopfile);
 5         } catch (IOException e) {
 6             e.printStackTrace();
 7         }
 8         System.out.println("字符数:"+ outputCount.charNum);
 9         System.out.println("单词数(不含停用词):"+ outputCount.wordNum);
10         System.out.println("总行数:"+ outputCount.lineNum);
11         System.out.println("代码行:"+ outputCount.codeNum);
12         System.out.println("空行:"+ outputCount.emptyNum);
13         System.out.println("注释行:"+ outputCount.noteNum);
14     }

输出结果:(符合预期)

测试包含停用词的输出:

代码:

 1 @org.junit.Test
 2     public void testOutputWithStopfile() {
 3         outputCount.isStop=true;
 4         try {
 5             outputCount.count(inputfile,stopfile);
 6         } catch (IOException e) {
 7             e.printStackTrace();
 8         }
 9         System.out.println("字符数:"+ outputCount.charNum);
10         System.out.println("单词数(含停用词):"+ outputCount.wordNum);
11         System.out.println("总行数:"+ outputCount.lineNum);
12         System.out.println("代码行:"+ outputCount.codeNum);
13         System.out.println("空行:"+ outputCount.emptyNum);
14         System.out.println("注释行:"+ outputCount.noteNum);
15     }

输出结果:(符合预期)

测试遍历文件功能:

代码:

 1 @org.junit.Test
 2     public void dirFile() {
 3         File dir = new File(outputCount.getPath);
 4         List<File> files = outputCount.getFile(dir);
 5         for (File file : files) {
 6             outputCount filesWC = new outputCount();
 7             String filePath = file.getAbsolutePath();
 8             try {
 9                 filesWC.count(filePath, stopfile);
10             } catch (IOException e) {
11                 e.printStackTrace();
12             }
13             System.out.println(filePath);
14             System.out.println("字符数:"+ outputCount.charNum);
15             System.out.println("单词数(不含停用词):"+ outputCount.wordNum);
16             System.out.println("总行数:"+ outputCount.lineNum);
17             System.out.println("代码行:"+ outputCount.codeNum);
18             System.out.println("空行:"+ outputCount.emptyNum);
19             System.out.println("注释行:"+ outputCount.noteNum);
20             outputCount.lineNum=outputCount.wordNum=outputCount.charNum=outputCount.codeNum=outputCount.emptyNum=outputCount.noteNum=0;
21         }
22     }

输出结果:(符合预期)

测试UI界面:

代码:

1 @org.junit.Test
2     public void testUI() {
3         showCount.showUI();
4         try {
5             Thread.sleep(100000);
6         } catch (InterruptedException e) {
7             e.printStackTrace();
8         }
9     }

结果:(符合预期)

总结:

两个人合作感觉写起来更加有效率,有问题可以及时的相互讨论,相互学习,但有时候遇到某些情况,总是争执不下来,各抒己见。但总的来说,合作写项目更加有激情,有动力,遇到问题处理起来的速度也更快。所以我们认为结对编程是一种行之有效的方法,这样的1+1是大于2的。

转载于:https://www.cnblogs.com/xiaobaiky/p/9796054.html

结对项目--wordCount相关推荐

  1. 系统分析与设计结对项目———Wordcount

    系统分析与设计结对项目---Wordcount 合作者:201631062513.201631062511 本次作业要求链接地址:https://edu.cnblogs.com/campus/xnsy ...

  2. 软件工程基础-结对项目-WordCount(单词计数)

    结对项目要求 Github项目地址 https://github.com/richardevan/wordcount PSP表格 PSP2.1 Personal Software Process St ...

  3. 结对项目-WordCount

    结对作业: 成员:201631062115(me),201631062613(partner) 代码地址:https://gitee.com/ackary/WordCount 作业的链接地址:http ...

  4. WordCount结对项目

    合作者:201631062124,201631062423 代码地址:https://gitee.com/yryx/WordCount 作业地址:https://edu.cnblogs.com/cam ...

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

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

  6. 201671030123叶虹《英文文本统计分析》结对项目报告

    项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 作业链接地址 课程学习目标 熟悉软件开发整体流程,提升自身能力 本次作业在哪个具体方面帮助我们实现目标 第一次体验一个完整的工程 任务 ...

  7. 201671030127赵津莹 《英文文本统计分析》结对项目报告

    博文简要信息表 项目 内容 作业所属课程 软件工程 作业要求 实验四 软件项目结对 课程学习目标 熟悉软件开发整体流程,提升自身能力 帮助实现目标 第一次体验一个完整的工程 任务一 1.点评的博客地址 ...

  8. 201671010447杨露露 实验四软件工程结对项目

    一:作业点评 点评内容: 评价博文链接:https://www.cnblogs.com/runju/p/10558809.html 1.缺点:博文结构不太清晰,排版可以在美化一些,博文的内容中对程序功 ...

  9. 软件工程导论结对项目

    小学四则运算结对项目 一.项目地址 https://git.coding.net/chenxin1998/Arithmetic.git 结对成员:马乐平,地址:https://git.coding.n ...

最新文章

  1. mysql什么情况会加意向锁_Mysql 数据库意向锁意义
  2. sql 一对多获得一条数据_从真实销售数据获得insights——SQL部分
  3. EM 期望最大化算法
  4. java 常见数据类型
  5. 文件描述符和fcntl及阻塞非阻塞
  6. 【转】wpf从我炫系列2----布局控件的使用(下)
  7. 基于java springmvc+mybatis学生考试系统设计和实现
  8. python爬取京东手机配置信息(正则)
  9. mac --snip 滚动截屏
  10. 实现元素拖拽放大缩小_G6 3.6:放大每一处细节
  11. 打车软件是不是一个市场泡沫?
  12. 协程asyncio_迭代器,生成器,协程
  13. 《计算机网络 自顶向下方法》(第7版)答案(第四章)
  14. 听刘万祥老师讲“风险矩阵分析图”
  15. 千呼万唤始出来—2019 FLAG
  16. 2020年度计划 - 本立道生
  17. C++程序设计的技巧-Pimple的使用
  18. 栅格地图矢量化的一个思路
  19. 什么样的游戏最适合GameFi?
  20. [向前一小步]Android简单实现指纹识别登录

热门文章

  1. IDEA 中生成 MyBatis 逆向工程实践
  2. HTTP Status 500 - An exception occurred processing JSP page /common/../left.jsp at line 20
  3. MySQL设置当前时间为默认值的方法
  4. Unity C# 反编译
  5. 路由器再度躺枪:主流厂商设备中被发现后门
  6. HDU X问题 中国剩余定理--求满足条件的个数
  7. IE10兼容性故障的解决办法
  8. citrix 产品上线
  9. php按城市显示搜索结果,在php错误中突出显示搜索结果
  10. 3d游戏编程大师技巧 源代码_C/C++编程入门基础系列:俄罗斯方块小游戏制作,直接源代码分享...