项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2016级计算机科学与工程学院软件工程(西北师范大学) |
这个作业的要求在哪里 | 实验四 软件工程结对项目 |
课程学习目标 | 1.体验软件项目开发中的两人合作,练习结对编程。 2.掌握Github上增量发布软件的操作方法。 |
本次作业在哪个具体方面帮助我们实现目标 | 第一次体验完整的工程 |
任务1:两两自由结对,对结对方的《实验二 软件工程个人项目》的项目成果进行评价:
- 点评:
- 点评201671030106 词频统计软件项目报告
- 结对方Github
- 博文编写格式十分符合任务要求,这点值得我们学习。在PSP中,任务预计完成时间和实际完成时间差距最大的是开发,这也是很多人开发项目会遇到的,开发是一个项目最重要的部分,需要我们很缜密的去思考,明确需求,进行具体设计以及编码测试。其中,具体编码的时间差又是较大的,主要原因应该就是博主在总结中提到的对java编程的不熟悉造成的。
运行博主的程序后,程序以命令行方式执行,程序结构较清晰,但代码的规范性还需要再改进,对任务要求的实现不是很完整,只完成了三个部分,希望博主有时间的话去完善下这个项目。
- 阅读心得:阅读201671030106 词频统计软件项目报告 后,我认真的反思了我博文的不足,其项目报告博文中的格式、信息量、排版等方面很完整,我需要向其学习。以后的博文编写会更加用心的。
任务2:开发英文文本统计分析软件:
项目源码仓库
需求分析:
(1)程序可输出文本单词及对应的词频数;
(2)可查看并输出指定单词的单词及词频数;
(3)可将单词及词频存入文件result.txt中
(4)单词频数可视化柱状图要求是以下样式:
(5)统计该文本行数及字符数;
(6)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(7)可处理任意用户导入的任意英文文本;
(8)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(9)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
(10)附加分功能:统计前10个两个单词组成的词组频率。软件设计:
类之间的关系:
- 核心功能代码展示:
- 例:统计文本中除介词的高频词:
for(Entry<String,Integer> entry : aMap2.entrySet()) { F=0; for(int s=0;s<Preposition.length;s++) /* 数组Preposition中存放介词*/ { if(Preposition[s].equals(entry.getKey())) { F=1; } } if(F==0) { text.append("单词: " +entry.getKey() + " 次数 :" + entry.getValue()+"\r\n"); count=count+1; } if(count==Integer.parseInt(num.getText())) break; }
- 统计文本行数与字符数:
StringBuffer sb1= new StringBuffer(); try { String file1 =file_.getText(); BufferedReader in = new BufferedReader(new FileReader(file1)); while ((str = in.readLine())!= null) { str = str.toLowerCase(); sb1.append(str); line++; } text.append("文件行数 : "+line +"\n"); in.close(); String str2 = sb1.toString(); String[] wordsArr1 = str2.split("[^a-zA-Z]"); //过滤出只含有字母的 for (String word : wordsArr1) { wordCount++; } text.append("字符数 :"+ wordCount + "\n"); } catch (IOException e1) { e1.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因 }
- 程序运行结果:
- 登陆界面:
- 菜单界面:
- 统计该文本行数及字符数:
- 将单词及词频存入文件result.txt中
- 查看并输出指定单词的单词及词频数:
- 附加任务1:统计文本中除冠词、代词、介词之外的高频词:
- 登陆界面:
结对过程:
PSP:
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 30 |
Development | 开发 | 300 | 420 |
Analysis | 需求分析(包括学习新技术) | 120 | 100 |
Design Spec | 生成设计文档 | 120 | 120 |
Design Review | 设计复审 | 30 | 20 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 10 | 8 |
Design | 具体设计 | 90 | 120 |
Coding | 具体编码 | 120 | 180 |
Code Review | 代码复审 | 30 | 35 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 40 |
Reporting | 报告 | 60 | 70 |
Test Report | 测试报告 | 20 | 25 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 30 |
- 总结:
在这次项目设计中,我感受到了结对编程的优秀,它极大的提高了我们项目的进度。结对编程的优点在于两个人合作,一人编程,一人观察程序的正误,这样使程序的错误率大幅度的降低。结对编程对于开发人员也是很有帮助的,这一点我深有体会,在定义有歧义的变量或无用变量时,观察者总是可以发现,进而改变我编程的一些不好的习惯。完美诠释了“当局者迷,旁观者清”这句话。结对编程对我的编程很有帮助,以后会经常使用。而此次项目设计中遗憾的是在项目的实现中,柱状图和计时功能由于时间和技术原因,没能实现。