4.7.1 结对项目的案例和论文
在现代软件工程教学的过程中,同学们已经总结了不少切身体会。例如:
总结1[i]:
那是project到了比较关键的创造阶段,整整一天,我们俩椅子靠椅子的坐在电脑前,一边讨论一般coding,那次才真正的体会到结对真的能够带来效率。一整天的coding是容易走神的事,还好有pair在旁边指导,总是不断在我敲某某变量之前提前告诉我成员变量的名字,数据修改时帮忙检查是否有漏掉的,变量和函数定义的时候一起为其取名字,感觉有点眼花了,就换了个角色,我也开始对他“指指点点”了,一个人coding,一个人review,确实能减少一些不必要的错误,减少一些漏洞,算法实现后一起做些简单的测试,看到bug了再一起分析,我能明显的感觉到与以前的个人编程不一样,我们能比较快的找到bug初始点,并能提出比较的修改方法。特别是当看到功能进一步实现时,心里确实挺happy,更重要的这份感受有同伴与你一起分享。
总结2[ii]:
于是我们进行了项目中最关键的一次Pair Programming,我们利用编译课上机时间,在机房里Pair完成了整个项目的类的设计与程序结构的设计。我们一起分析出类,然后找属性,写方法头,开始是WG用键盘,后来我用。一个明显的好处是,写完一条自己不确定的语句,马上可以跟Pair一起缕一缕思路。一下午下来,感觉甚为清爽,因为终于清楚这个项目的做法了。
学术界、工业界对结对编程已经有不少研究,请阅读至少两篇相关论文或论文[iii]。
4.7.2 性格对合作的影响
人和人不一样,在和别人合作的时候,要注意各人表达观点的方式和思考的方式不尽相同。请看网上关于MBTI的文章[iv],测试并分享各自的MBTI类型,讨论不同性格类型对合作有多大的影响, 在合作的各个阶段应该如何应对[v]。
4.7.3 是否需要有代码规范
对于是否需要有代码规范[vi],请考虑下列论点并反驳/支持:
- 这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时间的东西。
- 我是个艺术家,手艺人,我有自己的规范和原则。
- 规范不能强求一律,应该允许很多例外。
- 我擅长制定编码规范,你们听我的就好了。
4.7.4 代码复审的讨论
小飞: 哇,这么多酷的C++ 功能都不能用,那我们还学什么C++,为了迎接考试,我都把Operator Overload、Polymorphism背得滚瓜烂熟了,为什么不让我用?
阿超: 我们写程序是为了解决问题,不是“为赋新词强说愁”,这些高级的语言特性,不是不让用,而是要用得慎重,不要动不动就写三五个类,一个套一个,要把注意力集中在能否用简洁的方法解决问题上来。
小飞: 这么多规范,我不知道怎么写第一行程序了。
阿超: 自我复审也很重要——把代码摆在面前,当作是别的菜鸟写的。把你通常问别人的,以及别人会问你的问题都自己问一遍。这样就能发现不少问题。
小飞: 如果开发者很厉害,那么复审者就没有什么作用,也许这些复审都是走过场?
阿超: 同理可以推论,如果开发者很厉害,那么测试人员也没什么作用,也是走过场,干脆把他们送回家得了。我们敢这样做么?
小飞: 这些规范啊, 建议啊, 都是细枝末节的东西, 我们要做世界级的软件,搞这些东西是不是太小家子气了?
阿超: 首先世界级的软件也会因为小小的纰漏而导致世界级的问题。例如我们常常听到的安全漏洞和紧急补丁。其次,软件的开发是一个社会性的活动, 有它的规律。其中一个规律就是“破窗效应”(broken windows theory)[vii][YEKA1] [XZ2] ,如果团队成员看到同伴们连一些细小的规范都不遵守,那自己还要严格执行单元测试么?另一个成员看到这个模块连单元测试都没有,那他自己也随意修改算了。这样下去,整个软件的质量可想而知。
[i] 参见:http://www.cnblogs.com/ustc_msra_ase/archive/2010/11/28/1890424.html
[ii] 参见:http://www.cnblogs.com/xinz/archive/2010/11/27/1889978.html
[iii] 参见:http://c2.com/cgi/wiki?PairProgrammingCaseStudy 以及 http://www.thefreelibrary.com/Case+study%3a+using+pair+programming+in+development+of+a+complex+module.-a0246014267 以及 http://www.cs.utexas.edu/users/mckinley/305j/pair-hcs-2006.pdf
[iv] 请看: http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator
[v] 另外请参见 《对性格内向者的10个误解》: http://blog.jobbole.com/12488/
[vi] 参见:http://www.vaikan.com/the-conventions-we-follow/
http://www.aqee.net/things-everyone-should-do-code-review/
http://scientopia.org/blogs/goodmath/2011/07/14/stuff-everyone-should-do-part-2-coding-standards/
[vii] 参见:http://en.wikipedia.org/wiki/Broken_windows_theory
[YEKA1]上一章已经给出了注释,此处删去注释?
[XZ2]都挪走
现代软件工程 第四章 练习与讨论