结对项目--wordCount

结对作业:

  成员: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值