现代软件工程第三周作业——Word Frequence

本博文是现代软件工程第二次结对编程Word Frequence(作业要求)的总结,本项目的源码在这里

how you collaborate: working separately? pair programming? VS Live Share? other style?

因为这次的项目是需要在一个基本的功能下不断加入新功能的方式来增加我们程序的功能,在项目开始之前的讨论中我们决定采用领航员与驾驶员的方式来进行这次结对编程。我的另一个小伙伴是驾驶员,主要负责代码的编写和各个功能的实现和各个单元测试。我是领航员,主要负责阅读文档和代码,测试各个功能的输出结果,并考虑各个功能的代码覆盖率和并进行效能分析,给编程的人员做优化时提出一些意见,如何优化和主要优化那一部分函数。

how do you discuss design guideline, coding convention and reach agreement?

我们结对编程时代码主要是另一位同学书写,我主要负责review,他的代码风格风格很好,而且代码的结构十分清晰,能让我迅速掌握整个代码的前后关系。

how did the two of you aim high and try to deliver the optimal result with your own time constraints? is this the best your could do? what prevent you from doing your best?

我在做效能分析时我们发现频繁调用一个简单的函数会导致很大的时间开销,如我们在做最简单的功能统计字母时如果采用调用类内的update()函数来修改字母的统计数,或采取直接将函数内的代码转移至调用处like here,从而省去了函数调用的开销。因为这个函数将被调用次数与文件内字母数次数相同,这是一个巨大的时间开销。

性能分析如下,使用调用函数方式的效能分析表

采用不调用函数的方式的效能分析表

由如上两幅图可知,update() 函数被调用551713次,修改后节约了大致92ms。
但我们组内讨论后认为如果采用修改后的方式的话违背了面向对象的编程原则,类的调用者对类内的变量应该是封闭的,而且据我所知python没有类似C++中的inline的关键字,因为python解释性语言并没有预处理的部分。

list 3 strengths and 1 weak area of your partner

Jinhua 的代码能力强,逻辑很严谨,代码结构十分完整易懂,唯一的美中不足在于代码注释较少,以后可以勤写注释,简单易懂的代码结构和完整的注释对代码reviewer来说看代码也是一种享受。

how do you use profile tools to find the performance bottleneck and improve speed? show some screenshots of your analysis

我们采用的是Pycharm自带的Profile工具,上面展示了一些功能的效能分析表的截图,在我们的github的库中test_unit文件夹下保存了更多我们不同功能的效能分析的结果截图和我们程序的一些标准输出。

posted on 2018-11-03 13:52  古越尚  阅读(261)  评论(1编辑  收藏  举报