个体软件过程 —— 缺陷查找技术 欧阳柳波 湖南大学软件学院 一、发现缺陷的步骤 尽管可以利用各种工具和方法,但决定程序质量的最重要的因素是软件工程师个人对产品质量的承诺。 尽管没有办法不引入缺陷,但在开发过程中尽早地发现和修复缺陷还是可能的。尽早排除缺陷既省时间又能开发出好的产品。 一、发现缺陷的步骤 有很多种发现缺陷的方法,基本上,这些方法都包括以下几步: (1)标识缺陷征兆; (2)从征兆推断出缺陷的位置; (3)确定程序中的错误; (4)决定如何修复; (5)修复缺陷; (6)验证这个修复是否已经解决了问题。 二、发现和修复缺陷的方法 1、使用编译器发现缺陷。 编译器是软件工程师最常用的工具,其基本任务是生成目标代码。编译器扫描源代码是看能否生成目标代码,若能,它不管源代码是否正确而生成目标码。 编译器能标识出大部分语法错误,但它不能辩认你的意图。它常为看起来很简单的错误提供很多出错信息。 二、发现和修复缺陷的方法 编译器只提供了缺陷的征兆,你必须自己对问题定位,并确定是什么问题,定位的快慢靠个人的技能与经验。 编译器不能检查出所有的拼写、标点符号或其他不符合语法的缺陷,原因是编译器可以在源程序有缺陷时生成目标代码。 编译器检查不出来的大部分是设计错误,也有一些是语法错误。C++的缺陷数据表明,大约有9.4%的语法错误会通过编译。 二、发现和修复缺陷的方法 2、通过测试找出缺陷。 测试报告要求测试人员提供测试数据和测试条件(或称测试用例)。测试质量是由这些测试用例覆盖所有程序功能的程度决定。测试人员运行这些测试用例来查看程序运行是否得出正确的结果。 测试可以验证程序几乎所有的功能,但它只能给出缺陷的征兆,需要你去找出问题的根源,然后开始修复。 二、发现和修复缺陷的方法 全面的测试会花费大量的时间,因为即使很简单的程序也包括许多条数据和可操作条件的可能组合。事实上,除了最简单的程序,任何程序的完全测试都是不可能的。 例如,一个求两个数(X和Y)乘积的程序,如果用X=11和Y=15进行测试,就可以知道这组值的运行情况,但还是不知道当输入负数、零、最大正数、最大负数或任何其它一对数时,其乘积会怎么样。 二、发现和修复缺陷的方法 3、通过用户发现和反馈找出缺陷。 这是一种常见的方法,事实证明,这也是花费最大的策略,如IBM每年花费大约2.5亿美元用于修复1.3万个客户反馈的缺陷和重新安装修复后的版本,每个缺陷花费约2000美元。 二、发现和修复缺陷的方法 4、通过代码复查技术找出缺陷。 代码复查就是个人复查源程序清单。这是最快和最有效的发现和修复缺陷的方法。 代码复查最好在源程序编码完成并在编译和测试之前进行。由于大部分软件缺陷源于疏忽或是失误,所以在刚完成设计或编码时最容易发现缺陷,因为这时程序员还可能记住他的意图,因而最有可能知道如何修复任何问题。 二、发现和修复缺陷的方法 代码复查方法,一般是打出源程序清单,也可以是在计算机屏幕上复查代码。一般打印出来的程序清单复查起来较方便,因为你的目光可快速地在代码段之间切换、做笔记标识出已经完成的部分。 尽管代码复查非常费时,但它比测试更有效率。有数据表明,代码复查的效率是最初测试或单元测试效率的3~5倍。对于一般的工程师,单元测试1小时可以找出4~6个缺陷,而代码复查每小时可以找出6~10个缺陷。 二、发现和修复缺陷的方法 代码复查有效率的原因是:在代码复查时看到的缺陷本身而不是征兆。 代码复查也有缺点:一是非常耗时,二是很难恰当地进行。 复查是一种技能,可以通过学习和实践来提高。即使有经验程序员,也只能发现程序中平均75~80%的缺陷。对于每100行源程序进行详细的复查至少需要30分钟,一般复查得越快,缺陷漏掉的越多。 三、发现和修复缺陷的费用 随着系统的规模和复杂性不同,个人测试、集成测试、组件测试、产品测试、系统测试的类型、持续时间、复杂度不同,但几乎所有规模的软件产品都要经历这个过程。 开发过程每前进一步,发现和修复缺陷的平均代价要增长10倍。 在代码复查时,平均1~2分钟就可发现和修复一个缺陷,而在初始测试中,修复一个缺陷平均时间为10~20分钟,甚至更多。 三、发现和修复缺陷的费用 在集成测试、组件测试、系统测试时,发现缺陷的时间随着系统的规模和复杂性的不同而变化,越是大型、复杂系统,发现和修复缺陷的所需时间越多。 在集成测试时,每个缺陷可花费1个小时或更多的时间,在系统测试时每个缺陷花费多达10~40个工程师小时。 一旦产品发给客户,发现和修复缺陷的代价会更大,其值与产品的种类和客户的类型及数目有关。 三、发现和修复缺陷的费用 发现和修复C++缺陷的时间数据图 三、发现和修复缺陷的费用 几个示例: 一个小型商业软件开发
原创力文档

文档评论(0)