1.6 缺陷预防
《鹖冠子》世贤第十六中有“王独不闻魏文王之问扁鹊耶?曰:‘子昆弟三人其孰最善为医?’扁鹊曰:‘长兄最善,中兄次之,扁鹊最为下。’魏文侯曰:‘可得闻邪?’扁鹊曰:‘长兄于病视神,未有形而除之,故名不出于家。中兄治病,其在毫毛,故名不出于闾。若扁鹊者,镵血脉,投毒药,副肌肤,闲而名出闻于诸侯。’魏文侯曰:‘善。使管子行医术以扁鹊之道,曰桓公几能成其霸乎!’凡此者不病病,治之无名,使之无形,至功之成,其下谓之自然。”
这个故事对于我们讨论的缺陷发现主题是很有深意的。如果把软件中的缺陷作为疾病看待,那么必须“惩防并举、注重预防”,关键在于“预防”。预防是事前行为,不但能够最大限度地降低开销,提高软件产品的质量,而且也避免了最后发现问题时的大范围返工。从扁鹊三兄弟行医故事中,我们也充分认识到:“良医者,常治无病之病,故无病;圣人者,常治无患之患,故无患”(语出淮南子),软件缺陷的预防工作和事前工作与此同理,虽然起到了良好的经济效果,但是,这些都是扎扎实实、不显山露水的工作,把工作做在了平常,不那么张扬,也没有热闹的加班加点和返工的场面,名气就显现不出来,往往被埋没。
狭义的缺陷预防(Defect Prevention)是一种把统计过程控制(SPC)和过程管理整合在一起的管理策略。
本书中讨论的广义“缺陷预防”,是从需求开发与管理、配置管理以及变更管理等各个软件开发的关键过程进行预防和控制的,并采用有效复用、各种模式确保过程的有效和成果的合格。
实施缺陷预防能够减少软件开发过程中发现的以及残留的缺陷数。缺陷预防的着眼点在于缺陷的共性原因(Common Cause)。通过找寻、分析和处理缺陷的共性原因,实现缺陷预防,它是一个持续改进的流程。国内的软件缺陷处理需要逐步从缺陷检测(测试)过渡到缺陷预防。
软件组织应当在量化理解其过程能力的基础上,持续地改进组织级的开发过程、缺陷发现过程,引入新方法、新工具,加强经验交流,从而实现缺陷预防。其实,从中也可以看到,缺陷的发现和缺陷的预防两方面是不可分割的。像“同行评审”本身是缺陷发现的手段,而经过不断的积累,如何避免常见问题已经成为了习惯,此时最终的效果就是有效的缺陷预防。
有资料表明,经过缺陷发现的有效经验积累,个人行为的规范化可以减少缺陷注入率75%以上。
有关狭义的缺陷预防的高级内容,我们还将在本书的“缺陷管理”章节中进一步展开。