很早考虑过这个问题,但一直没落到笔头上。近重读人月神话,里面提到进度估算中常见的乐观主义导致的误差。作者认为程序员都是乐观主义者,但我觉得还真不一定。起码我自己在从事测试之前算是个悲观主义的程序员。具体表现是,在编写任何一段代码时首先考虑的不是“应该如何如何……”而是“万一如何如何……”。两种性格各有优劣。个人觉得,乐观的性格相对来说任务完成的较快,而悲观的性格相对来说代码质量较高(因为提前把很多能想到的意外情况避免了嘛)。实际上我认为现在相当流行的“测试驱动开发”方法是强迫程序员采用悲观式思维来进行代码编写。以前靠个人性格驱动,现在则可以靠技术手段驱动了。
  测试驱动开发要求先写好测试用例,当产品代码全部通过测试了,也算完成任务了。那么这些测试用例代码覆盖的广度、深度如何,直接影响着产品代码的质量。所以如果不改变思维模式,光靠技术手段也还是没用的。毕竟编程是一项极富个人创造力的活动。我个人觉得开发与测试人员结对编程的效果可能不错(在本公司还没有做类似实践)。
  悲观性思维的代价是任务完成的没有某些人(如老板、项目经理)预期的那么快。而且当任务紧迫时,会给这类人造成极大的心理压力和焦虑情绪。这些也是作为管理者需要认识到和尽力化解的方面。