结对项目--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
结对项目--wordCount相关推荐
- 系统分析与设计结对项目———Wordcount
系统分析与设计结对项目---Wordcount 合作者:201631062513.201631062511 本次作业要求链接地址:https://edu.cnblogs.com/campus/xnsy ...
- 软件工程基础-结对项目-WordCount(单词计数)
结对项目要求 Github项目地址 https://github.com/richardevan/wordcount PSP表格 PSP2.1 Personal Software Process St ...
- 结对项目-WordCount
结对作业: 成员:201631062115(me),201631062613(partner) 代码地址:https://gitee.com/ackary/WordCount 作业的链接地址:http ...
- WordCount结对项目
合作者:201631062124,201631062423 代码地址:https://gitee.com/yryx/WordCount 作业地址:https://edu.cnblogs.com/cam ...
- 软工结对项目之词频统计update
队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...
- 201671030123叶虹《英文文本统计分析》结对项目报告
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 作业链接地址 课程学习目标 熟悉软件开发整体流程,提升自身能力 本次作业在哪个具体方面帮助我们实现目标 第一次体验一个完整的工程 任务 ...
- 201671030127赵津莹 《英文文本统计分析》结对项目报告
博文简要信息表 项目 内容 作业所属课程 软件工程 作业要求 实验四 软件项目结对 课程学习目标 熟悉软件开发整体流程,提升自身能力 帮助实现目标 第一次体验一个完整的工程 任务一 1.点评的博客地址 ...
- 201671010447杨露露 实验四软件工程结对项目
一:作业点评 点评内容: 评价博文链接:https://www.cnblogs.com/runju/p/10558809.html 1.缺点:博文结构不太清晰,排版可以在美化一些,博文的内容中对程序功 ...
- 软件工程导论结对项目
小学四则运算结对项目 一.项目地址 https://git.coding.net/chenxin1998/Arithmetic.git 结对成员:马乐平,地址:https://git.coding.n ...
最新文章
- mysql什么情况会加意向锁_Mysql 数据库意向锁意义
- sql 一对多获得一条数据_从真实销售数据获得insights——SQL部分
- EM 期望最大化算法
- java 常见数据类型
- 文件描述符和fcntl及阻塞非阻塞
- 【转】wpf从我炫系列2----布局控件的使用(下)
- 基于java springmvc+mybatis学生考试系统设计和实现
- python爬取京东手机配置信息(正则)
- mac --snip 滚动截屏
- 实现元素拖拽放大缩小_G6 3.6:放大每一处细节
- 打车软件是不是一个市场泡沫?
- 协程asyncio_迭代器,生成器,协程
- 《计算机网络 自顶向下方法》(第7版)答案(第四章)
- 听刘万祥老师讲“风险矩阵分析图”
- 千呼万唤始出来—2019 FLAG
- 2020年度计划 - 本立道生
- C++程序设计的技巧-Pimple的使用
- 栅格地图矢量化的一个思路
- 什么样的游戏最适合GameFi?
- [向前一小步]Android简单实现指纹识别登录
热门文章
- IDEA 中生成 MyBatis 逆向工程实践
- HTTP Status 500 - An exception occurred processing JSP page /common/../left.jsp at line 20
- MySQL设置当前时间为默认值的方法
- Unity C# 反编译
- 路由器再度躺枪:主流厂商设备中被发现后门
- HDU X问题 中国剩余定理--求满足条件的个数
- IE10兼容性故障的解决办法
- citrix 产品上线
- php按城市显示搜索结果,在php错误中突出显示搜索结果
- 3d游戏编程大师技巧 源代码_C/C++编程入门基础系列:俄罗斯方块小游戏制作,直接源代码分享...