【转】编程工作的破窗效应与童子军原则(4)

结对编程

结对编程是贯彻童子军原则的首选策略。结对编程中的两个程序员不仅在编程,而且自始至终互相影响。当遇到代码中存在的问题时,这种相互的影响力更容易促使他们直面问题,做出必要的修正或改进,而不是视而不见,甚至复制错误。这是因为:

  1. 两个人“故意”共同做出错误的决定,心理障碍要远高于一个人“悄悄”的这么做。这有点类似于“囚徒困境”。如果真的发生了,通常确实是一个“艰难”的决定,背后有不得不如此的充足理由。并且一个错误的决定有两个人知情,事后弥补的可能性要远高于单个程序员。

  2. 两个人更具有抗压性,轮番上场的合作方式,相互的鼓舞,一起探索最佳的解决方案等等,这些可以大大减轻承担起额外工作时的烦躁和畏惧心

  3. 有些不良程序并不是一眼可见,结对编程中,辅助的程序员有更多的精力和注意力发现潜藏的问题。同样,所谓当局者迷,写代码的人有时并没有意识到自己正在犯错,辅助者可以有效的注意到这些,提醒自己的伙伴及时纠正

因此,虽然结对编程导致两个程序员只能做一件事,但是要比一个程序员做的干净,有更多的积极性清扫往日的错误,有更多的警惕性避免新的错误。

如果因为某些原因不能实施结对编程,那么次优的方案就是代码审查(Code Review)。负责审查代码的人类似于检查童子军营地清扫效果的人。审查制度的存在,使得程序员心理上会更多的自我督促,即使修补发现的问题,并且小心翼翼不制造新的问题。

代码审查

相对于结对编程,代码审查的缺点在于实时性差,审查时代码的变动已经完成,变动背后的理由和策略等,需要写代码者口述。审查者要在提交前的很短时间内判断出代码是否更加干净,效果常常会打折扣,因此有些公司会采用多人审查的策略。

即便如此,如果能够采取良好的代码审查措施,依然能够高效的保证童子军原则。这些措施通常包括:

  • 选择合适的代码审查人员,通常要有较高的技术水平,并且严谨细心
  • 培养程序员自我审查的习惯,在他人审查前首先尽可能的找出新旧问题
  • 把代码审查变成学习和总结的机会,督促程序员归纳常犯的错误类型,学习和实践高级的编程技能,培养好的代码品味
  • 培养良好的checkin节奏,控制每次checkin的代码规模,提高代码审查的效率,减少错误被忽略的概率

最后总结一下,团队编程工作,应当采用结对编程或代码审查,使得每个人的每次代码改动都践行童子军原则,避免破窗效应的发生,使得代码质量随着代码量的增加依然有可能保持在较高的水平。

(本文完)

原文:《编程工作的破窗效应与童子军原则(4)

添加评论

Loading

友情链接:Smart Testing