博文简要信息表
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 软件工程 |
这个作业的要求在哪里 | 软件工程结对项目 |
课程学习目标 | 熟悉软件开发整体流程提升自身能力 |
本次作业在哪个具体方面帮助我们实现目标 | 第一次体验一个完整的工程 |
点评信息
点评博客 | 王立新的博客 |
---|---|
github地址 | 王立新的github |
任务一
两两自由结对,对结对方的《实验二 软件工程个人项目》的项目成果进行评价
博文整体结构符合要求、 博文内容详实但是博文中对重点没有突出,希望以后多加粗或者改变字体颜色进行突出显示,使阅读借鉴者更清晰明了的抓住重点,节省阅读时间提高效率。
PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化主要有一下几点:
对于具体任务操作步骤不熟练,没有掌握好任务时间。
编程能力的欠缺,导致在编程过程中花费了大量时间,并且还没有实现全部的功能。
在软件测试过程中软件的健壮性不够,代码没有模块化,阅读花费了不少时间,运行比较耗时。
心得
这次结对的搭档是我的一个舍友,因此前期的交流问题不是很多。一开始的问题就是用谁的作业3和用谁的开发工具,经过一点讨论才有的结果。还有就是关于文件流的用法,我们都有一些个人的看法,后来还是在网上搜索了下用法,才有这最后的最终版本。对于过程中的模块化存在的问题还是比较严重。
源码地址
源码可在此处查看
任务二
结对项目实施
需求分析
根据实验四 软件工程结对项目所提要求,我们分析的主要需求有:
(1)实验二要求的功能;
(2)单词频数可视化柱状图要求是以下样式:
(3)统计该文本行数及字符数;
(4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(5)可处理任意用户导入的任意英文文本;
(6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
(8)附加分功能:统计前10个两个单词组成的词组频率。
软件设计
本次使用了结构化设计的理念,故只有一个主类(WordCount)其设计流程如下:
核心功能代码展示:展示核心功能代码
public static void main(String[] args) throws FileNotFoundException,IOException{
try{
//使用流的方法读取文件
BufferedReader br = new BufferedReader(new FileReader(
"F:\\javademo\\softwar_pro\\MRDemo\\words.txt"));
//使用TreeMap方法自动将结果按Integer列
TreeMap<String,Integer> treemap = new TreeMap<String,Integer>();
//用来存储读取的单词
String readLine = null;
//记录单词的总数
int count = 0;
while((readLine = br.readLine())!=null){
//将字母排序为小写
readLine = readLine.toLowerCase();
//将所有单词以大写输出
//readLine = readLine.toUpperCase();
//过滤出只含有字母的字段
String[] str = readLine.split("[\\s]");
//过滤掉多个空格,“+”代表多个空格的意思
for(int i = 0;i<str.length;i++){
count++;
String word = str[i].trim();//trim()用来去掉字符串首尾的空格
if(treemap.containsKey(word)){//判断此映射是否包含指定键的映射关系
treemap.put(word, treemap.get(word)+1);
}else{
treemap.put(word, 1);
}
}
}
Iterator<Map.Entry<String,Integer>> it = treemap.entrySet().iterator();
//判断是否存在下一个单词
while(it.hasNext()){
Map.Entry<String, Integer> entry = it.next();//获取map中每一个键值
//输出结果
System.out.println(entry.getKey()+" "+entry.getValue());
br.close();//关闭流
}
System.out.println("单词总数为:"+count+"个");
}catch(FileNotFoundException e){//异常处理
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
程序运行:程序运行时每个功能界面截图
描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)
提供此次结对作业的PSP
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
计划 | 10 | 5 |
估计这个任务需要的时间,并规划大致工作步骤 | 5 | 3 |
开发 | 100 | 120 |
需求分析(包括学习新技术) | 7 | 9 |
生成设计文档 | 15 | 20 |
设计复审 | 5 | 7 |
代码规范(为目前的开发制定合适的规范) | 5 | 5 |
具体设计 | 6 | 8 |
具体编码 | 60 | 80 |
代码复审 | 10 | 25 |
测试(自我测试、修改代码、提交修改) | 10 | 8 |
报告 | 20 | 25 |
测试报告 | 10 | 10 |
事后总结,并提出过程改进计划 | 25 | 20 |
从PSP表中可以发现项目在实施工程中的时间比预计时间要长,可能和自己对开发流程不熟悉、算法设计不精有关。在以后的 开发中要多加改进。
心得体会
这是第一次尝试结对编程,感觉还蛮不错的。“寸有所短,尺有所长”,两个人的组合果然大大的降低了错误的发生率,提高了效率。注重细节的,能减少低级错误的发生;看中整体的,能从大方向上把握。尽管是对前面作业的复审与再编,但是通过这次作业也改正了个人编程时的一些不良习惯,汲取了小伙伴身上的优点,互惠互利吧。尽管在编程时我们会各执己见,但这也算是另一种收获吧。同时,我也体验到了代码复审的好处。它能让我调整前面的错误,优化完善程序,提高程序的性能。虽说是一次小小的练习,但我想我会把复审应用在以后的编程中的,毕竟经常复审复审也许能提高自我的能力呢!
以前我们也一起讨论过不少在各自编程中遇到的问题,但是由于不了解具体内容往往无法戳中要点,但是不得不说的是,当你在遇到问题而烦躁的时候,找个人交流一下问题,即使无法得到解决方法,也会使自己的思维有改变。
结对编程能是双方互相督促,一个人工作的时候另一个人可以充当一下程序猿鼓励师由于各自的编程习惯不同,代码看起来有点乱(规范很重要啊)思考问题的角度不同遇到问题想到的解决方法也不一样,多个思路多条活路吧。一个人工作一个人思考,轮流进行,以至于身体不会很疲惫出错后找原因有点小麻烦(看别人的代码果然不是一件简单的事情:规范确实很重要)