一段代码一双人,结对编程走起来
结对编程是敏捷中的一项工程技术,由两个开发者一起工作,完成代码任务。
通常结对的两个开发者在一起工作时,好比一个“驾驶员”,一个“领航员”。“驾驶员”负责写代码,“领航员”负责检查代码。有时候,一个编码,另一个做单元测试。也会出现一个编码,另一个坐在旁边解释需求,确保更高层面的代码质量的情况。
这样做当然会增加编码阶段的成本,但其在代码质量方面的提升,将远高于此。
结对编程有许多好处,比如:
-
其中一人进行单元测试用例的开发,可以及时用于测试另一个人的代码
-
重构以提高代码的质量与可维护性
-
多开发者之间彼此熟悉,可以提高代码与架构的知识
-
有人作为“领航者”,可以帮助另一个人写出更有效的代码
-
及时进行代码指导,有助于遵守代码标准与实践
运用CMMI中的确认过程域,加强结对编程
结对编程的思想在于“俩比一个强”。
这项敏捷方法之所以奏效的原因之一,是在实践中建立起了较短的反馈循环。结对只是这类实践中的一种。无论以何种方式结对,直接而及时的工作反馈循环,可以促使确认变得简单而有效。通过扩展确认这一概念,CMMI可以为结对编程带来明确性与健壮性。比如:
-
工作产品不仅仅只有结对编程产生的代码。user story的来源也可以是培训材料、规范或其他用户说明。
-
为了使sprint高效起来,诸如报告缺陷的工具、方法等同行评审的输入,应该被定义且可实现。结对中的每个人都应该经过培训,以具备进行评审的能力。
-
完成计划中的同行评审活动,是交付高质量产品的重要成功因素。因此,同行评审不应被跳过。
-
在同行评审中获得的信息、经验等,应该被有意识地记录,并在sprint回顾中分享。比如,哪些工具好用,哪些不好用;某个过程步骤缺失或者同行评审输入的某个问题之类的。
运用CMMI中的验证过程域加强结对编程
CMMI模型中的验证过程域,可以令结对编程更加牢靠吗?其答案就在验证实践中,比如:
想一下软件的验证是如何进行的。如果视结对为一种方法,那么在预设的环境中开发与验证软件便是关键。因此,让一个人代表最终用户做使用体验,也是验证的好办法。
设定期望,所有必要的设备都已识别,并可在结对软件开发过程中使用。
确保结对中的每个人都经过软件验证方法与工具的培训。结对是经验丰富的开发者传播知识的有效途径。
运用CMMI中的技术解决方案过程域加强结对编程
使用敏捷开发的组织,必须使用可靠的技术实践来交付高质量的产品。敏捷不意味着混乱的“无政府”状态。一个好的DoD应该至少包含可以应用于所有user story的通用标准。常规的DoD在sprint期间均能得到满足,而不至于被推迟到较长开发阶段的结束时间点。“事后往往意味着永不。”不拖延便是sprint的好处所在。CMMI的技术解决方案过程域,要求在产品开发中使用合理的技术决策和实践。例如:
-
应该定义编程的方法,包含面向对象的,测试驱动的开发,或自动生成的代码
-
清晰的复用策略
-
应用于开发的编码标准
-
必须满足的代码复杂性度量
-
是否进行了单元测试,如何做的
-
运用静态或动态的代码分析工具,解决警报的需求
-
如何报告与管理缺陷
通用实践3.2收集经验教训,将满足完成条件过程中发现的改进,带入sprint回顾会议并分享给团队,从而令结对编程过程更加稳固。敏捷是制度化的学习。CMMI在这一点上,非常适合。