作业地址 :https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2879 |
GitHub项目地址:https://github.com/pbnbpb/WordCount.git |
结对伙伴博客地址:https://www.cnblogs.com/XiaoPB/p/10658874.html |
01. PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 10 | 15 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 15 |
Development | 开发 | 200 | 300 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 100 |
· Design Spec | · 生成设计文档 | 30 | 0 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 25 | 25 |
· Design | · 具体设计 | 10 | 15 |
· Coding | · 具体编码 | 180 | 300 |
· Code Review | · 代码复审 | 30 | 45 |
· Test | · 测试(自我测试,修改代码,提交修改) | 15 | 25 |
Reporting | 报告 | 20 | 30 |
· Test Report | · 测试报告 | 10 | 20 |
· Size Measurement | · 计算工作量 | 30 | 0 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 25 |
合计 | 515 | 915 |
02.结对讨论
我这次结对编程作业是和我室友庞斌同学组队完成的,由于我编程基础没有他的好,所以他负责编码工作,我在一旁帮他分析与他一同讨论,编码后的测试环节和性能分析环节由我完成。具体编码信息在我搭档的博文当中,而其他的在我的博文当中。
合作过程照片:
03. 计算模块接口的设计与实现过程:
看到这个作业要求我和队友都一头雾水,类似于统计文本字数的编程我只在大一时用C语言编过很简单的小程序,但是像这次这么多用户需求的程序我们两人找不到好的解决办法,于是在网上查阅了很多的资料,有将文本信息导入到 dictionary 函数中的方法,还有就是用hashtable的方法,我室友选择了后者。同是他讲编程的思路画了一张设计图如下:
具体的过程在我室友的博文当中。我就不过多描述了。
04.代码复审过程
我们用的是一片英文小说------《失物之书》进行文本的调用。
他写完代码过后,我与他经过不断的调试,将代码完善。
《遇到的问题》: 1.最开始我发现我们输出的结果 Word数并不正确,原因在于我们输出的是单词的种类,并不是他的总个数,于是他进行了代码的修改,最终输出正确答案。
最初输出结果:
修正过后输出结果:
2. 我发现他的代码有些地方构思很巧妙,我看了很久才看懂,比如通过ArrayList以及插入排序实现了对其频数的降序排序等等。
05.单元测试部分:
《遇到的问题》:1.他的很多方法的调用都在主函数当中进行,而单元测试的引用并不能从主函数当中直接调用,所以我将情况和他说明过后和他新建立了一个Test()类,将主函数中的类的调用写在Test()类中,而再由主函数来调用Test()类;代码如下:
public static void Main(string[] args) { Program pro = new Program(); pro.Test(); } public void Test() { string path = @"E:\Text\失物之书.txt"; StreamReader txt = new StreamReader(path);//读取文件内容 ArrayList AKEYS = new ArrayList(ht.Keys); string outpath = @"E:\Text\txt1.txt"; int line, letcount, n; int wordcount = 0; Console.WriteLine("列出前n个频数的单词"); n = int.Parse(Console.ReadLine().ToString()); line = LineCount(path);//行数统计 letcount = letterCount(path);//字符数统计 ht = WordCount(path, ht);//单词频数统计 wordcount = WordCount1(path, tmep);//单词总数统计 AKEYS = oreder(ht);//单词频数降序排列 outPut(path, ht, outpath, n, line, letcount, AKEYS, wordcount);//输出至文本内 txt.Close(); Console.WriteLine(ht[0]); Console.ReadKey(); }
2. 他在很多类当中申明了许多临时变量,无法再测试函数中引用,所以又将有的变量改为全局变量,而后完成了测试。
0.6 性能分析
这是我做的Cpu性能分析:
从图中我们可以看到 函数 WordCount 消耗的时间最多,CPU所占比例也很大,但是我不知道怎么改进。
0.7我与他商量定制的代码规范:
1.关键的代码,方法后要有注释,能清晰表达其作用。
2.代码缩进要有条理,让人明白大体结构。
0.8 提交项目
0.9 总结
这次两人合作的项目我们遇到了不少的困难,很多就是不懂,需要去查找资料,自己学习弄明白,在找资料的过程中花费了很多的时间,我认为我的搭档非常的认真和负责,很好地完成了他的工作并协助我完成我的工作。我从这次结对编程中体会到合作的重要性与难度,希望自己能在这种合作当中不断成长进步,能与自己的队友相处良好,多沟通,多交流,毕竟 1+1>2.