结对编程是极限编程(XP)的十二个实践之一,是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法以及同一段代码,并且两人的角色可以随时互换。XP认为结对编程能提高软件开发效率,很多国外软件企业都在热衷于结对编程,Facebook程序员肯特•贝克(Kent Beck)表示:“结对程序员之间的交流非常充分,你甚至可以再也不用言语进行交流。你只要简单描述再结合着手势就可以。”Grockit首席执行官罗伊•吉尔伯特(Roy Gilbert)表示,这种模式已经证明非常成功,他的程序员“正在继续推广这种做法。”而IBM还为结对编程推出了协同开发工具ECF。
在当今的软件工程概念中,代码走查是一个很重要的过程。代码走查的目的是提高软件的质量,以及可维护性,经过走查的代码是能够更容易地被项目组其他成员看懂的。然后代码走查的成本不低,有经验的软件工程师都清楚,要一个开发人员完全理解另一个人的代码是一件不容易的事情,不只是代码编程习惯的不同会导致阅读代码的困难,在复杂的业务逻辑下,不同的开发人员的设计思路也有很大不同的,导致不同的人对代码的理解有很大差异。所有很多时候代码走查紧紧只是看看代码中是否有语法上的错误,是否符合编程规范,而要发现业务逻辑上的深层错误是很困难的,以至很多浮躁的软件开发公司甚至直接省略代码走查这个步骤。
结对编程则正是提高代码走查效率和质量的非常有效的手段。两个开发人员坐在一起,共同思考和讨论设计思路,轮流编写程序代码,轮流走查另一个人在写的代码,代码走查和编码并行开展,而不是等完全编码之后才做代码走查,产生的程序代码风格是两个人都能接受的。这样就不存在要一个人去理解另一个的代码的问题,实际是两个人共同理解代码。而且由于两个人的思想盲区要远小于一个人的思想盲区,所以能够在编码过程中及时地发现程序在业务逻辑实现上的深层问题,大大提高代码走查的效率和质量。对于包含代码走查阶段的软件开发过程而言,结对编程是能大大提升软件开发效率的。
结对编程还有很多优点,比如提高软件代码的质量,促进知识传递,降低新员工学习成本等。除此之外,作者还发现结对编程还有一个很大的优点,就是能让敏捷开发所倡导的共同责任理念落到实处。
敏捷开发强调项目是整个项目团队共同拥有的,所以项目的问题是项目团队所有成员的责任,而不只是某个人的责任,项目团队的所有成员应该共同努力来解决和避免所有的项目问题。结对编程则能很好地体现这个理念,在结对编程中两个人频繁变换角色,对于程序代码存在错误,就很难分清是谁的责任,甚至很难分清楚哪里的代码是谁写的,所以代码问题至少是结对的两个人的共同责任,从根本上促进了共同责任的理念。
这次老师又给我们提出了一个新的项目——结对编程。经老师的解释,我的理解就是:结对编程就是两个人使用一台笔记本进行编程,其中一人负责坐在电脑面前敲代码,另外一人在其旁边提供思路或者检查是否有逻辑错误或者语法错误。
这次结对编程的是李志芳。老师给我们的结对题目是: 1. 用户可以输入待抽签的号码集合 2. 可选择是否允许重复抽签 3. 用户可以选择生成分组,如:35人,每组4-5人,可以生成随机分组 4. 显示号码滚动效果 5. 界面易操作,设计美观、友好
由于一个人思想的局限性,有很多的地方考虑不到又或是考虑的过多进入了死胡同。最后通过和结对的队友一起讨论,通过团队合作,将大家的想法总结到一起,才设计出更加完善的程序。