为什么软件开发需要实施“原因分析”?

在GJB5000/CMMI体系中有个过程域/实践域叫做“原因分析”(CAR),就是要对选定的某个结果进行原因分析,找出造成这一结果的根本原因,并通过采取有效的措施避免坏的结果产生或促进好的结果产生。

为什么软件开发过程需要实施原因分析?因为很多事情并不像表面上看起来那样简单,不找到根本原因,可能只会头痛医头,脚痛医脚,解决不了根本问题。

在医学上有个术语叫“牵涉性疼痛”。它的意思是指疼痛不是表现在让人一眼看到的病源位置,实际上是表现在身体的其他部位。

比如,有些病人感觉到腿部疼痛,但是实际问题并不是腿部出现病变,而是椎间盘脱垂压迫脊椎神经导致。对于这样的病人,如果没有找到真正的病因,你再怎么治疗病人的腿脚都没有用——因为病因不再那里。类似地,患有心脏病的病人通常会感觉左臂疼痛,但是治疗左臂对他没有任何帮助。

笔者有位朋友经常感到腰痛,服用了很多治疗腰痛的药物都没有效果,后来病情严重的时候才发现是得了肺癌,癌细胞早就转移了……

很多软件Bug也并不像表面看起来那样简单。明面上好像是某个功能出现了故障,而实际上可能是软件的架构出现了问题。

如果没有很好地进行原因分析,没有找到Bug产生的根本原因,那么只会给软件表现出故障的功能打补丁,这样就算软件暂时能够运行,不久之后也会在这里或其他地方再次出现问题。

如果总是这么一个一个补丁打上去,就像在一个一个伤口上贴创可贴,虽然看上去比外科手术更便宜更划算,但却遗留了很大的隐患。而一旦这个隐患爆发出来,那个代价可能是无法承受的。

所以,原因分析对于软件开发很重要,这个实践域如果能够很好地实施,会使软件开发少走很多弯路。

这大概也是GJB5000B将原因分析从GJB5000A的5级过程域降低到三级实践域的原因吧!

这正是:

治病指标不治本,病因没能分析清

软件开发也如是,弄清原因好行动

参考书目:项目百态:深入理解软件项目行为模式,作者:(美)Tom DeMarco等,译者:金明,出版社:人民邮电出版社


作者简介:王小双,长期从事GJB5000推广、实施、评价、改进的工作,创建《软件工程之思》微信公众号,一直在《软件工程之思》分享GJB5000、CMMI、软件工程的知识和感悟。现致力于GJB5000咨询以及软件过程改进、软件工程能力提升的研究工作。

发表评论

登录后才能评论
联系客服
联系客服
分享本页
返回顶部