这几天一直在探索有关结对编程的知识。关于结对的基本理论,上篇博客已经基本阐述了,这次主要总结一下结对编程在项目中和单元测试中如何去推行。
在项目中:
1、结对的双方限定为同一项目组;
2、领航者和实施者坐在同一台速度较快、配置较高的机器前,要保证两个人都能看清屏幕,尤其是领航者(可以考虑接一个显示屏);
3、两个人至少保证每分钟交流一次;
4、在我们提高班,建议用有经验的“老手”带“新手”的方式或者“新手”之间组合,尽量避免两个人都特别经验丰富,“老手”或“新手”在工作开始之前应该向对方解释清楚自己正在做的工作;
5、两名开发人员先共同制定一套设计方案,但绝大部分应由实施者完成;
6、代码完成后进行单元测试;
7、代码审查小组进行审查;
8、实施结对轮转机制,包括两方面:
(1)、领航者和实施者在一定时间内互换角色(比如一个小时,双方可以根据实际情况协调)
(2)、每个小模块完成后进行人员轮换,即更换结对对象(由于结对本来的目的之一就是每个人都需要了解整个项目的需求,所以几乎不存在“合作思维中断”现象)。
在单元测试中:
1、在两个搭档开始写出第一行代码之前,先要写出第一个自动化单元测试用例。程序员必须严格按照“先创建几个测试用例,在编写出一些产品代码”的规则来循环第进行开发。也就是说,在编写面向代码时,程序员们必须要为他们打算实现的每一个方法写出单元测试。
2、不同的人对它的理解会有所不同的。我们定义的结对测试是两个测试人员坐在一起(根据需要,他们可以共用一套环境,也可以用不同的环境平台)。其中,一个测试人员主要负责测试操作,而另一个主要负责记录测试结果、测试场景讨论和问题讨论等。但是需要注意的是,结对测试的两位成员是平等的,在测试过程中他们需要对测试提出自己的想法、思路和问题,避免某位成员只是一个记录员的角色。因此,结对测试中两个人共同努力对整个测试会话作出贡献很重要。
3、我们在实践结对测试过程中,是以文档化的测试用例为基础,但又不限于测试用例,鼓励在整个过程中运用更多的探索性测试。文档化的测试用例与探索性测试的有效结合,可以更好的满足脚本化的覆盖率要求,同时可以更加主动性创造性地发现更多的缺陷。同时,由于大家教育经历、看问题的角度、思维方式的差异等,都会帮助不同测试人员在测试同一个对象的时候,取长补短、优势互补,更好的发现缺陷。下面是结对测试的步骤:
(1)选择一个合适的结对测试伙伴;
(2)选择和建立合适的结对测试环境;
(3)计划测试的时间跨度,定义测试范围、测试关注点、测试目标、测试的输出等,类似于探索性测试中的测试章程;
(4)执行结对测试的会话:一人主导,另一个辅助。注意的是测试过程中需要不断进行测试场景、测试问题等的讨论;
(5)评估结对测试的结果:评估发现的问题、结对测试的效率和有效性评估、未解决的问题、下次会话的计划等。
未解决问题:
结对编程中还有一个“乒乓结对编程”:实施者编写失败的测试用例,领航者修改代码以通过该用例,实施者编写新的单元测试用例,等等。这个循环持续到观察者不能写出失败的测试用例。它与结对单元测试之间有什么关系还没有分析清楚,需要进一步探索。
总结:结对编程从理论上来讲好处很多,但综合来说,做好实践的还是很少的。因人因时地进行结对可以取得事半功倍的效果。所以,结对时要弄清解决什么样的问题,而且中途遇到困难是在所难免的,着力分析和解决解决这些困难才是最宝贵的经验。