第三次作业 201731082208 黄亚恒&肖莉
Github项目地址:https://github.com/HYHSTUDEY/WordCount.git
作业地址:https://www.cnblogs.com/hyhhyh090628/p/10657618.html
结对伙伴(肖莉)作业地址:https://www.cnblogs.com/xx0709/p/10659242.html
一、结对过程
我的结对小伙伴是我的室友,我们两个人都不是很擅长交际,所以在作业下来的时候没有考虑得那么多,基本在大家结对完成之后我们才结对成功。这也对我们的作业完成造成了一定的影响。在结对成功之后我们及时开始讨论各自对于作业的思路,交流我们在拿到作业后对于作业编码部分的想法。因为是近距离地,而且在同一个宿舍我们交流的时间相对较多,也比较及时,所以后期我们的配合还是比较默契的。
结对分工:我们一人负责两个功能,根据难易算得上是平均分配。后期函数整合我们一起完成,测试主要由肖莉负责,我负责Github上传部分。
结对过程中的照片:
二、PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
·Planning |
·计划 |
30 |
25 |
·Estimate |
·估计这个任务需要多少时间 |
|
|
·Development |
·开发 |
120 |
160 |
·Analysis |
·需求分析 (包括学习新技术) |
60 |
50 |
·Design Spec |
·生成设计文档 |
|
|
·Design Review |
·设计复审 (和同事审核设计文档) |
|
|
·Coding Standard |
·代码规范 (为目前的开发制定合适的规范) |
40 |
30 |
·Design |
·具体设计 |
45 |
50 |
·Coding |
·具体编码 |
300 |
360 |
·Code Review |
·代码复审 |
15 |
15 |
·Test |
·测试(自我测试,修改代码,提交修改) |
30 |
25 |
·Reporting |
·报告 |
|
|
· Test Report |
· 测试报告 |
|
|
· Size Measurement |
· 计算工作量 |
20 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
20 |
|
合计 |
680 |
755 |
三、解题思路描述
四、设计实现过程
设计:
基本功能实现:(我们选择在主函数中实现文件读入,然后对函数进行调用)
功能函数基本框架:保证基本功能的实现。因为我们的两人能力限制,所以我们只是实现了基本功能,对于后面的新增功能没有进行实现。
实现:
运行截图:
(1)此为运行无误的截图。(当文本中单词数较少时)
(2)出错图(文本数量较大时会出现单词数出错和记录单词数的函数会出现错误)我们下来也有修改,但是并没有很完满的解决。
五、单元测试
测试代码如下:
效能分析:
六、制定的代码规范以及互审情况
代码规范:
1、在每一个功能函数前需要简单注释,对于主要运用的函数也需要注释,以便队友直接明了的看懂代码。
2、在复杂表达式中,必须使用括号。(例如if语句下,尽量使用大括号,使得代码看起来更加清晰明了)
3、关于分行,多个语句不能写在同一行。(看起来很杂乱)
4、变量和函数名,统一采用英文,且首字母大写。
5、名称的选择与命名,尽量选择易读的标识符名称,可读性比简洁性更重要,同时避免使用与常用编程语言的关键字冲突的标识符。
6、使用动词或动词短语作为事件的名称。在为事件命名时,使用现在时或过去时表示时间上的前后观念。
互审情况:
设计代码的过程中,肖莉负责Character(统计字符数)、Lines(统计行数)和Words(统计单词总数)函数的完善,我负责Frequency(单词出现频率)、WordSort(单词排序)以及main函数的完善,采取了“一人一个函数”交替进行的方式,避免一个人长时间编程产生视觉疲劳和思路不清的情况。一个人写,另一个在旁边及时检查,出现问题及时讨论解决,提高工作效率。在护身的过程中,我们对于互相的思路也有了一个更加清晰的了解。也可以去了解不同的思路,互相学习。同时也会发现我们两都存在的一些不足,对于我们以后的学习也有所帮助。
七、代码说明及改进
1、在我们写代码的过行程中,我们在实现前两个功能(有效行数的统计和字符数的统计)的时候都比较顺利,虽然遇到一些问题,但是我们依靠查询资料和讨论解决相关小问题。
2、第二个就是在我们传入文件的部分,写完代码之后再进行操作,发现无法读取文件,于是后续的工作都无法进行操作。问了同学和老师都没有解决,我们不得不重新写该部分的内容,才得以解决。
3、在统计单词总数和统计单词出现频率时,我们遇到了较大的问题,函数总是在在样本数比较大时容易出错。关于统计单词总数方面写出来的代码没有语法错误,但是我们发现每一次结果出来之后,结果总是显示为一,不能输出正确结果,于是我们两人在网上进行了查阅,也和同学进行了交流并进行了修改。但是遗憾的是,我们经过多次调整代码之后我们发现数据仍然存在问题,希望之后能和别的队伍交流得到解决方案。同样的在统计单词出现频率时,我们采用Hashtable来进行编写函数,但是问题是首先结果无法显示,在进行修改之后发现能显示但是每一个单词的频率都一样,这让我们很困惑。
代码截图(单词出现频率,排序):
八、Github上传
由于在第二次作业中经历了诸多错误,此次上传整体都很顺利。
Github上传完成后的截图如下:
九、心得体会
通过此次的结对编程,我明白了在学习中不仅仅是一个人的事情,就好比这次寻找结对的伙伴对于我来说都是一个问题。在以后的生活中也应当多和朋友,同学之间交流心得。在这次作业当中,我发现我的小伙伴在代码方面明显要比我强,有的地方我不明白。我跟她交流之后就会有所收获,甚至有新的想法。遇到问题的时候我们一同解决,一同寻找出错的地方,相对于一个人来说,两个人解决起来也更快,所以我认为在这次的结对编程中我们是1+1<2的。但是对于我们两个来说此次的劣势在于我们两个人的编码能力都相对较弱,能够想到的解决办法也有限。所以有的问题靠我们两个人讨论无法解决,我认为在后期的学习中,我们两个都还需要进步,特别是在编码方面。此外,我认为这样的结对项目需要较强的加较弱的小伙伴结对对于大部分的小伙伴来说才能收获较大。