软件工程:实践者的研究方法第8章软件质量保证

软件工程:实践者的研究方法第8章软件质量保证,第1张

软件工程:实践者的研究方法第8章软件质量保证,第2张

第8章 软件质量保证

  本书中所描述的软件工程方法的目标是:生产出高质量的软件。但是许多读者会遇到这种难题的挑战:“什么是软件质量?”

  Philip Crosby [CRP79]在他关于质量的划时代著作中为上述问题提供了一个谎谬的答案:

  质量管理的问题不在于人们不知道什么是质量,问题在于人们认为他们自己知道什么…

  在这一点上,质量与性共性颇多。每个人都需要它(当然,是在某种条件之下)。每个人都觉得自己理解它(尽管人们不愿意解释它)。每个人都认为实行它只需遵从自然的趋势(毕竟我们不管怎样都还做得不错)。当然,大多数人认为这一领域的问题都是由他人引起的(假设只要他们花了时间就能把事情做好)。

  有些软件开发者仍然相信软件质量是在编码之后才应该开始担心的事情。这太谎谬了!“软件质量保证”(SQA)是一种应用于整个软件过程的保护性活动(参见第2章)。SQA包括:(1)一种质量管理方法,(2)有效的软件工程技术(方法和工具),(3)在整个软件过程中采用的正式技术复审,(4)一种多层次的测试策略,(5)对软件文档及其修改的控制、(6)保证软件遵从软件开发标准的规程(在适用时),以及(7)度量和报告机制。

  在本章中,我们将集中讨论与软件组织“在正确的时间、以正确的方式、做正确的事情”相关的管理问题和特定过程活动。有关质量的量化讨论将在第18章中给出。

8.1质量概念①

  据说没有两片雪花是完全相同的。当然在我们望着雪花飘落时,很难想象雪花的不同,更不会想到每一片雪花都具有独一无二的结构。为了观察雪花之间的差异,我们必须非常仔细地检查各个标本,也许要用放大镜才行。实际上观察得越仔细,发现的不同之处就越多。

  这种现象称为“样本间差异”,不但适用于自然界的万物,而且适用于人类的一切产品。例如,如果非常仔细的观察两个“相同”的电路板,就可以观察到电路板上的铜线路在几何形状、位置和厚度上都有所不同,而且电路板上钻孔的位置和直径也各不相同。

  所有的工程和制造产品都会表现出差异。也许不借助于精密仪器对几何特征、电路特征、或者其他零件属性进行测量,不同样本之间的差异将非常不明显。但是在足够精密的仪器帮助下,我们就会得到这样的结论:没有任何物品的两个样本是完全一样的。

  这一物理世界中的规律同样适用于软件吗?想象一个程序,在它执行过程中的某一点上需要按照某一关键字的升序对若干记录进行排序。这些记录的性质并不重要,有可能是雇员记录、客户数据库、实时航空控制系统的地图坐标、或者随便什么。

  编写这一排序例程(或者从一个可复用构件库中选择例程)的程序员决定使用“快速排序”来解决这一问题。最终产品的观察者能否将这一软件与一个除了使用(比如说)“冒泡排序”之外与前者完全相同的产品区别开来呢?也许可以,但是可能会需要更多信息,甚至精密的工具来区分两个系统的不同。

  差异控制是质量控制的核心。制造商希望尽可能减小生产的产品之间的差异,即使进行复制软盘这样相对简单的工作也不例外。我们希望尽可能缩小任何一对所谓完全相同的磁盘之间的差异。当然这并不成问题——软盘复制仅仅是一项微不足道的制造操作,我们可以保证总是能够创建完全相同的软件副本。

  但是,我们真的能够做到吗?我们需要保证软盘上的磁道具有某一特定的耐久性,以保证绝大多数的软驱能够正确读出这些软盘。而且必须保证区分0和1的磁通量足够大,使得读写头能够正确探测0与1。软盘复制机可能的确会磨损和超出忍耐范围。因此,象软盘复制这样“简单”的过程也会遇到样本差异问题。

  那么软件开发组织控制差异的需要可能是怎样的呢?对于每个不同的项目,我们希望尽可能减小完成项目预计需要的资源和实际使用的资源之间的差异,包括人员、设备和时间。一般来说,我们希望测试程序能够覆盖软件的不同发布版本之间的某个已知百分比。我们不仅希望尽可能缩小发布产品中的缺陷数量,而且要保证不同版本之间的错误数量差异也保持最小。(如果产品的第三个发布版本中错误数量十倍于此前的版本,我们的客户将会感到失望。)我们希望自己的热线技术支持在解决不同客户的问题时,速度和准确程度差异尽可能减小。这样的举列可以无穷无尽。

8.1.1质量

  American Heritage Dictionary(《美国传统字典》)中对质量的定义是:“某一事物的特征或属性”。作为一个事物的属性,质量指的是可以度量的特征——那些可以与已知标准进行比较的东西,如长度、颜色、电的性质、可延展性等等。但是软件,很大程度上是一种知识实体,其特征的定义远比物理对象要困难得多。

  然而,程序特征的度量的确存在。这样的属性包括循环复杂度、内聚力、功能点、代码行数和其他许多在第18章和第23章中讨论的属性。在根据对象的可度量特征考察一个对象时,可以有以下两种不同的质量:设计质量和符合质量。

  设计质量:是指设计者为一件产品规定的特征。材料等级、耐久性、及性能的规约都属于设计质量。当规定使用更高级别的材料、要求达到更强的耐久性和更高层次的性能时,如果产品能够依照规约进行制造,则产品的设计质量便会提高。

  符合质量:是指在制造过程中符合设计规格的程度。同样,符合程度越高,符合质量也就越高。

  在软件开发时,设计质量包括系统的需求、规约和设计。符合质量则主要关注实现问题。如果实现了符合设计、得到的系统满足系统需求和性能目标,则符合质量较高。

8.1.2质量控制

  差异控制可以等同于质量控制。但我们如何实现质量控制呢?“质量控制”是为了保证每一件工作产品都满足对它的需求而应用于整个开发周期中的一系列审查、复审和测试。质量控制在创建工作产品的过程中包括一个反馈循环。度量和反馈相结合,使得我们能够在得到的工作产品不能满足其规约时调整开发过程。这种方法将质量控制视为整个制造过程的一部分。

  质量控制活动可以是全自动的、全人工的,也可以是自动工具与人员交互的结合。质量控制中的关键概念之一是所有工作产品都具有定义好的和可度量的规约,我们可以将每个过程的产品与这一规约进行比较。反馈循环的引入对于最小化产生的缺陷至关重要。

8.1.3质量保证

  “质量保证”由管理层的审计和报告功能构成。质量保证的目标是为管理层提供为获知产品质量信息所需的数据,从而获得产品质量是否符合预定目标的认识和信心。当然如果质量保证所提供的数据发现了问题,则管理层负责解决这一问题,并为解决质量问题分配所需的资源。

8.1.4质量的成本

  质量成本包括所有由质量工作或者进行与质量有关的活动所导致的成本。质量成本研究的开展能够为当前质量成本设定基线,标识降低质量成本的机会,并提供一种规范化的比较基础。规范化的基础几乎全都以“元”(钱)计算。一旦我们将质量成本以“元”为单位进行了规范化,我们就拥有了必要的数据来评估能够在何处改进现有过程。而且,还可以进一步评估那些基于“元”的项在改变时所产生的影响。

  质量成本可以被划分为与预防、鉴定及失败相关的成本。“预防成本”包括:

  ·质量计划。

  ·正式技术复审。

  ·测试设备。

  ·培训。

  “鉴定成本”包括为深入了解“首次通过”各个过程时产品的状态而开展的那些活动。鉴定成本的例子如下:

  ·过程内和过程间审查。

  ·设备校准和维护。

  ·测试。

  “失败成本”是指如果在将产品交付给客户之前已经消除了缺陷时就不会存在的成本。失败成本可以进一步划分为内部失败成本和外部失败成本。“内部失败成本”是指在产品交付之前发现错误而引发的成本。内部失败成本包括:

  ·返工。

  ·修复。

  ·失败模式分析。

  “外部失败成本”是指与产品交付给客户之后所发现的缺陷相关的成本。外部失败成本的例子如下:

  ·解决客户的抱怨。

  ·退换产品。

  ·求助电话支持。

  ·保修工作。

  正如我们所预料的,发现和修改一个缺陷的成本将随着我们从预防到检测、从内部失败到外部失败工作的开展而急剧增加。图8-1,根据Boehm[BOE81]所收集的数据,阐述了这一现较蟆*

  Kaplan及其同事[KAP95]报告了更多近期的数据,该报告以IBM的Rochester开发部门的工作为基础:

  审查200000行代码总共用了7053个小时,结果是预防了3112个潜在的缺陷。假定雇佣一名程序员的成本为每小时40美元,预防3112个缺陷的总成本为282120美元,约为每个缺陷91美元。

  下面将这些数字与产品交付给客户之后消除缺陷的成本加以比较。假定没有进行代码审查,但是程序员编码格外小心,而在交付的产品中每1000行代码中只有1个缺陷漏网[大大优于产业界的平均水平]。这意味着在客户的操作环境中仍然有200个缺陷需要改正。估算改正每个缺陷的成本为25000美元,则总成本将高达5百万美元,大约比进行缺陷预防的产品的总成本高出18倍。

  当然,IBM生产的软件被数以万计的客户所使用,因此,有可能交付后改正软件缺陷的成本要高于平均水平,但这并不能否定上面所说的结果。即使普通软件组织的缺陷改正成本仅仅为IBM的25%(大多数组织并不知道这项成本究竟是多少!),但用于质量控制和保证活动而节约的成本仍然令人叹服。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 软件工程:实践者的研究方法第8章软件质量保证

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情