weitom1982

向各位技术前辈学习,学习再学习.
posts - 299, comments - 79, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
与软件质量——与缺陷共舞
浅谈人与软件质量——与缺陷共舞

文/尹立群

长期以来,软件质量一直是一个广泛又热门的话题。这可能与软件的现状有关:不论如何努力,稍具规模的软件产品总是不能完全做到没有问题,同时各行各业都越来越离不开软件的使用。软件产生问题的原因很多,本文只从人的认知和行为特点出发,企图揭示和解释其与软件问题之间的关系,提倡在软件生产和使用中的“容错”概念,并概括地提出一些对应措施,以期对于改进软件质量和软件生产的总体优化有所裨益。

软件质量的现状
为了了解软件质量的现状,从1994年开始,一个名叫 Standish Group 的智囊团用了十年的时间研究了多达三万五千个开发项目,用了多种方法对这些项目进行了评估,其对于项目成功的定义如下:
软件开发按时完成。
预算未超出。
软件功能涵盖了预定的要求。
软件没有被缺陷致残。
软件已被使用,而且产生了积极的效果。
最初的结果显示符合上述定义的成功软件项目只有16%。Standish 每年都会更新这一数字。之后的结果显示,该比例没有太大的改变。
多年来,软件业界采用了多种方法企图改善软件质量的现状。虽然 Standish Group 的研究指出成功软件的比例变化不大,却并不代表软件业界的努力没有成果。因为用户对于软件的要求越来越高,导致软件越来越来复杂,失败的概率也相应地越来越大。虽然一些有识之士例如 Ben Chelf 认识到人的因素对于软件产生缺陷至关重要,但是面对这一现实,多数还是朝着使人减少犯错误机会的方向去改进。这无疑是必要的。但是在短期不能奏效的局面下,在软件生产和使用中“容忍”缺陷是软件业得以生存和发展的关键一环,通俗地说,要与缺陷共舞。

人的认知和行为特点与软件质量的关系
俗话说,人无完人。通过犯错误认识世界是人的认知方法之一。试探法是方法论领域中重要的一支。我大学的高等数学老师当年曾经讲过前一年的一道研究生入学数学试题,是求解微分方程。绝大多数考生都是沿着传统的思路求解,等到把一套常用的方法试过一遍以后,10分钟已经过去,还是没有解出来,不得不放弃。这一道题唯一的解法是试探法。事实上该题的形式非常简单,是以自然对数为底的方程,只要想到用试探法,一分钟之内连答案都写好了。日常生活中的例子更是比比皆是。从蹒跚学步到牙牙学语,甚至到成年人伸手取物都是通过不断犯错误、修正错误来达到想要的结果。蒙上眼睛伸手取物常常失败,原因是伸手出去的过程中犯的错误没有通过视觉来动态修正。有了人不能不犯错误的共识以后,就不难理解为什么软件不可能没有缺陷。因为作为软件生产的主体的人,其认知与行为特点必然直接影响到软件本身。
软件工程与其它工程领域不同的是,软件的产生过程直到现在也还是手工业工作方式或者说是手工艺品的生产方式,还远远没有实现软件工程这一学科当初想要到达的软件生产工程化、规范化、可复制化或代码重用等理想目标。当设计完成以后,程序员根据设计以及该程序员选择的编码方式实现设计。由于受到时间和人力成本的限制,程序员通常不可能穷尽所有的方法来择优。因此不同的程序员从同一个设计出发,往往是通过不同的方法实现设计的。即使是在设计这一层面,虽然会有更多的机会讨论不同的设计方案,还是不容易做很多不同的设计去比较优劣。这种局面导致完成后的软件总是会有不尽人意的地方。
如果再考虑到人的群体行为,问题的复杂程度就增加了很多。比如,业务过程的描述往往很难对应到技术层面。人与人沟通中的误解错位是软件产品出现问题的重要原因之一。
面对这一现实,软件生产人员和用户的最佳选择是承认软件不可能没有缺陷的现实,在生产和使用中都引入软件“容错”的理念和机制,并把有限的时间和精力放在“关键”部位上,而不是一味追求最少的缺陷和不分重点地使用软件开发力量,这样才能达到总体最优的结果。从九十年代开始发展起来的软件容错技术,正是对于没有无缺陷软件事实的认同。
只有注册用户登录后才能发表评论。