现代软件工程第二次结对编程(统计词频)总结

作业要求及Github链接

作业要求:文本文件中英语单词的频率
项目源码:统计词频

合作方式

有了第一次结对编程的经验,我们这次有意识的采取了多种合作方式:

  • 结对编程,我和队友共用一台显示器和电脑完成了最简单的-c -f标签的处理和输入输出统一。
  • 各自独立编程,我和队友各自独立完成了-v,-p,-d,-s标签的处理
  • 远程编程,我和队友通过语音的方式共同进行性能优化。
    合作中有以下感触令我印象深刻:
  1. 在程序的开始阶段两个人结对编程能让两个人都对程序有很深刻的了解,尤其是函数的接口设置,要比简单在纸上写一下然后分头独立编深刻的多。
  2. 在搭完底层框架后可以考虑各自独立编程,好处是效率高,缺点是一旦分开编程后,就很难再对队友的程序有很多了解了,但鉴于软件工程总归不可能一个人了解所有代码,各自独立编程不失为一个赶进度的好方法。
  3. 在性能优化是很需要两个人的讨论的,我们两个都是第一次做优化,有一种慢工出细活的感觉,两个人讨论能想到很多细节。

代码风格讨论

我们两个人用python都比较多,而且在结对编程阶段,我们的代码风格很自然就统一了,接下来各自独立编程的时候,代码风格就一直一致的延续下来了。

时间分配

由于此次作业时间内我要回合肥做4天的物理实验,所以作业的时间比较赶,优化的时候没有做多线程的优化,只是在流水线的基础上做了简单优化,也没有改变存储的数据结构。

评价队友

优点:

  • 编程能力强,编得快
  • 熟练使用vs和pycharm的性能分析工具
  • 对编程有热情,勤奋

缺点:
对python的基本数据类型操作不是很熟练

代码优化

由于作业的后几天我们都在合肥或在出差,所以先赶出来了一个初始的版本,然后把各种功能加上去之后一测,要两秒多:

然后优化了以下几点:

  • 在第一个版本的代码里我们是用一个函数判断一个字符是不是一个小写字母,结果这个函数被调用了百万次,很费时间,我们把判断字符是否属于小写字母(或大写字母、数字、空格)优化成了set的in判断运算。
  • 在第一个版本中我们不论原始字符的大小写是什么,把它统一转化成小写,优化成了只有大写字母才转化。
  • 由于大多数情况下我们遇到的都是小写字母,我们在获取单词的函数中优化了if-else条件判断的顺序。
  • 优化了一些小细节,比如list.append(item)没有list+[item]快
  • 对于组合逻辑,如-v,-p,我们可以只扫描一遍txt文件,而不是扫描两遍,先处理-v,再处理-p。

优化完的时间为:

还是不是很快,但继续优化可能要用更深刻的优化方法,我们就没有再尝试了。
优化过程能很明显的感觉到,随着速度的提升,代码可读性和冗余都在增加。

上述优化我们是从底层一步一步优化的,比如-v是要用-f的功能的,我们只贴了最后一步的图。

对于单元测试,我们是在2.5s版本的基础上优化,每优化一步测试一下,保证输出是一样的。截图都是一样的结果,我就没有贴上去。
时间测试和代码覆盖率测试我们是用的pycharm的图形用户界面,没有调包。

posted @ 2018-11-03 16:38  ustcscallion  阅读(115)  评论(0编辑  收藏  举报