极限编程 - 成对编程
成对编程是一种编程风格,其中两位程序员并排坐在一台电脑前,共享一个屏幕、键盘和鼠标,持续协作完成相同的设计、算法、代码或测试。
一位程序员,称为驱动者,控制键盘/鼠标并主动实现代码或编写测试。另一位程序员,称为领航员,持续观察驱动者的工作以识别缺陷,并从战略角度思考工作的方向。
如有必要,两位程序员可以一起头脑风暴任何具有挑战性的问题。两位程序员定期轮换角色,平等合作开发软件。
成对编程——优势
成对编程的显著优势在于:
许多错误在键入时就被发现,而不是在质量保证测试或现场发现。
最终缺陷数量在统计上较低。
设计更好,代码更短。
团队解决问题更快。
人们对系统和软件开发的了解显著增加。
项目最终有多个人理解系统的每个部分。
人们学会一起工作,更频繁地沟通,从而改善信息流和团队动态。
人们更享受他们的工作。
成对编程实验
成对编程实践已被证明可以提高软件产品的生产力和质量。
成对编程研究表明:
成对编程的人时不比单人编程多。
成对编程产生的缺陷更少。
成对编程编写的代码行数更少。
成对编程的人更享受他们的工作。
犹他大学对成对编程进行了实验。结果表明:
成对编程的团队在程序上花费的时间比个人多 15%。
成对编程编写的代码始终比个人编写的代码通过更多的测试用例。
成对编程始终以更少的代码行实现了个人所完成的相同功能。
在一个能够快速获得切实结果的环境中学习编程很有趣,并且可以更快地学习。
适应成对编程
大多数程序员习惯于独自工作,并且经常抵制向成对编程的转变。但是,通过实践,他们最终可以完成这一转变。
根据劳里·A·威廉姆斯和罗伯特·R·凯斯勒在其著作《我在幼儿园学到的关于成对编程的所有知识》中所述,它很好地解释了如何培养我们在幼儿园学到的技能,以建立团队凝聚力,尤其是在成对编程中。
作为成对程序员的转变和持续成功通常需要每天练习礼貌。
以下部分摘自此出版物,可以帮助您成为有效的成对程序员。
幼儿园的教训
在幼儿园,我们学习了以下内容:
分享一切
公平竞争
不要打人
把东西放回原处
清理你自己的烂摊子
不要拿不属于你的东西
当你伤害别人的时候说对不起
饭前洗手
冲厕所
温热的饼干和冷牛奶对你有好处
过平衡的生活——每天都要学习、思考、绘画、唱歌、跳舞、玩耍和工作。
每天下午小睡一会儿
当你走向世界的时候,注意交通,牵着手,团结在一起
感受奇迹
接下来,我们根据上述教诲,探讨成对编程的原则。
分享一切
在成对编程中:
两位程序员坐在一起,共同制作一个工件(设计、算法、代码等)。
一人打字或写作,另一人持续审查工作。两人
都是流程中平等的参与者
对工件的各个方面负责
拥有所有权
公平竞争
在成对编程中:
一人担任驱动者,即控制键盘或记录设计思路,另一人持续审查工作。
他们定期轮换角色,即使其中一人比另一人经验丰富得多,以确保平等参与。
当驱动者思考实现时,另一人持续审查代码,思考可能的更简单的设计,当前开发如何融入当前的整体系统。
不要打你的搭档
在成对编程中:
确保你的搭档保持专注并按计划进行。
你也要保持专注并按计划进行。
确保你的搭档遵循规定的编码标准,从而维护对团队其他成员的承诺。
在成对编程调查中,发现实现了巨大的生产力提升和质量改进。这是因为:
每个人都让他们的搭档保持专注并按计划进行,没有懈怠的可能性。
每个工件在制作过程中都会持续审查,以确保质量。
把东西放回原处
在成对编程中:
你需要相信你自己的技能和你搭档的技能。这方面的任何负面想法都应该丢进垃圾桶。
你必须确保表达你的知识,并在需要时向你的搭档学习。你可以通过观察他或立即获得他的反馈来向你的搭档学习。
你需要有信心:
无论何时可能落后,你都可以立即从你的搭档那里获得帮助。
作为一个团队,你们可以解决单独无法解决的问题。
你们可以帮助提高彼此的技能。
清理你自己的烂摊子
在成对编程中,使用“肩并肩观察”技术:
你会发现,你的搭档会注意到很多明显的但未被注意到的缺陷,这令人惊奇。
你们可以消除这些缺陷,而不会产生在正式检查会议中可能产生的自然敌意。
表征缺陷预防和缺陷去除效率。
不要把事情看得太严重
有一个搭档持续客观地审查设计和代码,这是成对编程的一个非常有益的方面。在成对编程中,你需要确保你的工作没有过度的自我或过少的自我。
这是必要的,因为:
过度的自我可以以两种方式表现出来:
具有“我的方式或高速公路”的态度会阻止程序员考虑他人的想法。
防御性会导致程序员不接受建设性批评或将这种批评视为不信任。
这两种自我表现方式都会损害合作关系。
另一方面,总是同意搭档以避免产生紧张感的人也会最小化协作工作的益处。为了有利的思想交流,在需要时应该有一些健康的意见分歧/辩论。
因此,需要在表现出过多的自我和过少的自我之间取得微妙的平衡。有效的成对程序员在最初的调整期间培养这种平衡,这可能需要几小时或几天,具体取决于个人、工作性质以及他们过去与成对编程的经验。
当你移动家具时,如果伤害了别人,要说对不起
程序员必须能够并排坐着编程,同时查看电脑屏幕并共享键盘和鼠标。极限程序员有一个“滑动键盘/不动椅子”的规则。
为了确保有效的沟通,在协作对内以及与其他协作对之间,无需付出太多努力,程序员需要互相看到,互相提问,并就集成问题等做出决定。程序员还可以从听到其他对话中获益,因为他们可以对这些对话做出重要的贡献。
在开始之前摒弃怀疑
为了成对编程的成功,双方必须理解编程中协作的价值、益处以及体验的乐趣。这方面的任何怀疑都需要在一开始就消除。
经验表明,有一位程序员非常积极和/或经验丰富,参与成对编程,可以带领该对成为一个团结协作的团队,最终取得胜利。
这样一个团队的产出大于相同的人在不团结的情况下工作。
人们从工作中获得的乐趣大于你根据工作的性质所期望的。
一旦团队开始凝聚,成功的可能性就会大大提高。
冲厕所
成对程序员可以独立完成一些工作。但是,当他们重新加入时,他们必须在合并之前审查独立完成的工作,或者冲洗并重写独立完成的工作,并持续审查工作,这将识别出其他缺陷。
在未经搭档审查的情况下,切勿合并任何独立完成的工作。这是因为研究表明,与成对完成的工作相比,独立完成的工作存在缺陷。
温热的饼干和冷牛奶对你有好处
成对程序员会互相保持持续的专注和按计划进行。这可能是非常紧张和精神上令人疲惫的。因此,定期休息以保持精力,以便进行下一轮富有成效的成对编程。
休息期间,最好与任务断开连接,并在重新开始时以新的状态来处理它。建议的活动包括查看电子邮件、打电话、浏览网页或吃零食。
过平衡的生活
定期与他人沟通是过平衡生活的关键。与你的搭档和其他程序员进行非正式讨论,可以有效地交流想法,并高效地传递信息。
每天下午休息一下,不要一起工作
不需要每天下午都单独工作,但接受10%-50%的时间单独工作。这是因为:
许多程序员更喜欢单独进行实验性原型设计、难度大、需要高度集中注意力的问题和逻辑思考。
简单、定义明确和例行的编码工作,由单独的程序员完成然后与搭档一起审查效率更高。
注意交通状况,互相配合,紧密合作。
在成对编程中:
两人之间不应该存在竞争。两人必须协同工作,仿佛产出物是由一个人的大脑完成的。
搭档需要信任彼此的判断力和对团队的忠诚度。
搭档不应该互相指责任何问题或缺陷。
意识到两个大脑的力量。
当两人一起工作时,每个人都拥有自己的一套知识和技能,包括:
一套共同的知识和技能,使他们能够有效地沟通。
独特的技能,使他们能够共同完成任务。
合作时,两人将:
提出比单独工作时多出两倍以上的解决方案。
更快地缩小到最佳解决方案。
更快地以更高的质量实施。
因此,结对编程是一种强大的技术,因为始终有两个大脑集中在一个问题上。它迫使一个人完全集中精力解决眼前的问题。