本文描述软件质量工程在组织层面上的好处。
质量的定义
业界还没有,也可能永远不会对质量一词做出统一的定义。例如,ISO/IEC/IEEE系统和软件工程-词汇表(ISO/IEC/IEEE 2010)对质量有以下一组定义。
- 系统、部件或过程满足指定要求的程度
- 产品、服务、系统、部件或过程满足客户或用户需求、期望或要求的能力。
- 实体的全部特征,关系到其满足既定和隐含需求的能力
- 符合用户期望、符合用户要求、客户满意度、可靠性和存在缺陷的程度
- 固有特性满足要求的程度
基于他对各个领域(例如,哲学、经济学、市场营销、运营管理)如何看待质量的研究,Garvin(1984)得出结论:"质量是一个复杂而多面的概念"。他从五个不同的角度来描述质量。
- 制造角度
这个角度与Crosby(1984)对质量的定义相吻合,即符合规范(ISO/IEC/IEEE定义1)。Crosby的观点是,一个组织不希望在产品的整个开发过程中,有各种各样的人对利益相关者的需要或需求做出自己的判断。一个写得很好的规范是创造一个高质量产品的基石。即使在敏捷开发中,需求规格没有被正式记录下来,如果没有好的用户故事和随后与利益相关者的对话来确定他们的需求,就很难写出高质量的软件。然而,对于软件来说,这种质量观点是必要的,但可能还不够,因为根据Wiegers(2013),在需求阶段出现的错误占到了软件项目中发现的所有缺陷的40%到50%。从另一个角度来看,这个观点指的是在公认的公差范围内,按照该规格反复制造(复制)产品的能力。在一个组织能够调整/改进其流程之前,该组织必须让它们运行足够长的时间,以了解真正正在生产的东西。然后,该组织可以设计其规范,以反映真实的过程能力,并通过消除这些过程中的差异,努力提高这些能力。虽然软件质量的主要重点是设计和开发活动,但这种制造和 "消除差异 "的质量观点提醒软件组织,复制过程或下载过程不能完全被忽视,也必须进行验证。
- 用户观点。
Juran (1999)将 "适合使用 "作为衡量质量的适当标准(ISO/IEC/IEEE定义2)。软件从业人员可能都能讲述一些软件产品的故事,这些产品符合他们的规范,但在部署到操作中时却没有充分的功能。这种质量观点既考虑了个人用户的观点,也考虑了他们的使用环境。例如,一个新手可能认为是 "高质量 "的用户界面,可能会让一个有能力的用户因为弹出的帮助和需要回应的警告信息而分心。另外,对于一个在家里用来储存个人信息的软件数据库来说,一个足够安全的界面在商业环境中可能是非常不合适的。
- 产品角度
质量是与产品的固有特性联系在一起的(ISO/IEC/IEEE定义3和5)。这些特性是质量属性,也被称为软件产品的 "能力"。例如,可靠性、易用性、可及性、可用性、灵活性、可维护性、可移植性、可安装性、适应性。当然,它们并不都以 "效用 "结尾。正确性、容错性、完整性、效率、安全性也是质量属性的例子。软件在这些特性方面的水平越高,其质量就越高。ISO/IEC 25000软件工程--软件产品质量要求和评估(SQuaRE)标准系列(由之前的ISO/IEC 9126和14598系列标准过渡而来)为外部和内部质量属性以及使用中质量属性提供了一个参考模型和定义。该系列标准还为指定要求、规划和管理、测量和评估质量属性提供指导。
- 超越性的观点。
质量是可以被识别但不能被定义的东西(ISO/IEC/IEEE定义4)。正如Kan(2003)所说,"对许多人来说,质量类似于一位联邦法官曾经对淫秽的说法:'我看到它就知道'"。这种对质量的看法将个人的观点考虑在内。对一个人来说是 "淫秽 "的东西对另一个人来说可能是 "艺术"。一个利益相关者认为好的软件质量,对另一个利益相关者来说可能不是足够高的质量。汤姆-彼得斯将客户(利益相关者)的反应作为衡量产品质量的唯一合适标准。这就要求产品开发人员与他们的利益相关者保持联系,以确保规范准确地反映这些利益相关者的真实(可能是变化的)需求,并确保为这些利益相关者在软件中建立价值。
- 基于价值的观点。质量取决于客户愿意为其支付的金额。这种观点导致了对 "足够好 "的软件质量的考虑。如果家用电脑的文字处理器有两倍的可靠性,人们会愿意为它支付两倍的费用吗?如果这意味着更安全(不太可能被黑客攻击)的自动避免事故或自动停车系统,人们愿意为汽车多付一千美元吗?人们愿意为医疗设备中的高质量软件或飞机导航系统中的高质量软件额外支付多少钱?这种增值的观点可以扩展到除了客户以外的其他利益相关者。高质量的软件对一个或多个利益相关者来说,具有积极的收益和成本比率。
软件质量工程的好处
软件质量工程是对科学、技术、经济、社会和实践知识以及经验证明的方法的研究和系统应用,以分析和持续改进软件生命周期的所有阶段,最大限度地提高软件过程和实践的质量,以及它们产生的产品。
最基本的是,提高软件质量通常意味着减少该软件和用于开发/维护该软件的过程中的缺陷数量。软件中的缺陷可能来自于软件开发(无论是内部开发还是由第三方开发)、发布和维护过程中发生的错误,或者来自于这些过程本身的缺陷。这些错误将缺陷引入软件工作产品中。错误还可能导致缺失、模糊或不正确的需求缺陷,从而导致开发的软件不符合利益相关者的需求。处理缺陷的最经济的方法是防止它。在这种情况下,软件质量是通过持续的过程改进,增加员工的知识和技能,以及通过其他的缺陷预防技术,使缺陷远离软件来完成的。每一个被预防的缺陷都会消除纠正该缺陷的返工,也会消除与该返工相关的努力。
如果一个缺陷确实进入了软件,缺陷被识别和纠正的速度越快,纠正它所需的返工就越少。消除过度返工的浪费,使企业可以利用节省下来的精力来生产更多的增值软件。在这种情况下,软件质量是通过改善缺陷检测和提前发现缺陷的技术来完成的。
修复一个缺陷的成本通常会随着它在生命周期中越来越晚被发现而呈指数级增长。事实上,研究表明,如果一个需求缺陷在软件发布后才被发现,那么修复它的成本会比在需求阶段发现它的成本高100多倍(Kan 2003; Pressman 2015)。这里的主要观点是,软件开发涉及一系列的依赖关系,每一个后续活动都有可能建立在先前活动的产品之上并加以扩展。例如,当使用传统的软件开发方法时,一个需求可能导致四个设计元素,并扩展为七个源代码模块。所有这些都有支持文件和/或测试。因此,如果该需求的缺陷直到设计阶段才被发现,成本就会增加,因为该需求必须被修复,而四个设计元素也必须被调查并可能被修复。如果缺陷在编码阶段才被发现,需求就必须被修复,四个设计元素和七个源代码模块就必须被调查并可能被修复。到了编码阶段,测试用例(系统、集成和单元)和用户文档也可能是根据有缺陷的需求编写的,这些都需要调查和可能的纠正。如果缺陷直到测试阶段才被发现,所有基于该需求的工作产品都必须被调查并可能被纠正,重新测试,以及回归测试。
敏捷方法通过使用缩短的迭代/增量开发周期,并通过其他技术缩短缺陷插入和修正的周期,来解决这些成本。在每个迭代结束时,目标是拥有可以向利益相关者展示的工作软件,利益相关者会对软件的正确性和质量提供反馈。
研究和经验证据都表明,提高软件质量对开发组织有以下好处。
- 降低开发和维护成本
- 减少流程周期时间,从而缩短进度,改善上市时间
- 提高软件从业人员的生产力/速度
- 提高成本和进度的可预测性
缺陷预防和缺陷检测都有助于防止软件缺陷被送入运营。如果交付的软件缺陷较少,那么无故障运行的概率就会更高。与硬件不同,软件不会随着时间的流逝而磨损。如果在操作过程中没有遇到缺陷,软件就会可靠地执行。可靠的软件可以提高使用该软件进行的工作的有效性和效率。可靠的软件可以减少软件的利益相关者的操作、故障和维护成本,从而减少客户/用户对软件产品的总体拥有成本。可靠的软件也减少了开发该软件的组织的软件纠正性维护成本。
从更广泛的角度来看,高质量的软件是指被正确指定并符合其规格的软件。如果软件满足了利益相关者的需求和期望,并且是增值的,那么它就更有可能被使用,而不是最终成为 "货架上的东西"。如果客户和用户收到的软件缺陷更少,更可靠,性能符合他们的需求和期望,那么这些客户和用户就会对该软件更加满意。
卡诺谈到了三种类型的质量,包括:
- 基本质量
客户期望产品有一个基本的质量水平。这个基本质量来自于满足利益相关者认为是产品的一部分的要求,在需求征询活动中通常没有明确说明或要求。例如,购买新车的人希望该车有四个轮胎、一个挡风玻璃、挡风玻璃雨刷和一个方向盘。在购买新车时,他们不会要求这些东西;他们只是希望它们能在那里。这对汽车来说似乎很明显--制造汽车的人知道这些基本要求是什么,并把它们植入他们的汽车中。但在软件中却不一定是这样。一个软件开发人员可能在这一年写电信软件,而在下一年写航空软件。开发者了解软件,但如果没有对客户/用户的业务领域的全面了解,很容易错过那些被认为是产品的一部分的需求。大多数有经验的软件开发者都能讲出这样的故事:交付的产品满足了它的要求,但却没有达到它的预期用途,因为这些假定的要求之一被遗漏了。我们的利益相关者就会听到 "你从来没有告诉过我这是一个需求 "的反驳,而我们则争辩说这是一个改进,他们应该支付,同时他们认为我们刚刚交付了一辆没有挡风玻璃的汽车。这样的质量水平并不能满足利益相关者。(注意,整个 "基本质量 "线是在不满意的区域。)然而,在这个水平上没有质量将迅速增加利益相关者的不满意。
- 预期质量
客户明确考虑和要求的那些要求。例如,一个买家在购买汽车时,会说明对品牌、型号和选项的偏好。如果这个质量水平没有得到满足,利益相关者将感到不满意。当越来越多的声明要求被软件满足时,利益相关者会随着这个质量水平的提高而越来越满意。
- 超越质量。
这个质量水平代表了未被要求但创新的需求。这些需求是利益相关者不知道他们想要的,但当他们看到这些需求时,会很喜欢。例如,当杯架第一次被引入汽车时,他们受到了积极的欢迎。请注意,整个 "激动人心的质量 "系列是在满意的区域。然而,应该记住,今天的创新就是明天的期望。现在,事实上,大多数新车购买者认为杯架是对汽车基本要求的一部分。然而,必须始终注意评估任何创新的质量项目,以确保它们对利益相关者是真正增值的。这种分析应该确保这些创新不会导致 "镀金",以及过度的功能,从而导致软件成本过高;上市时间过长;影响软件性能、安全、保障或其他需要的软件属性等等。
提高消费者的满意度可以为软件开发组织带来以下好处。
- 增加市场份额,并有能力在不影响市场份额的情况下收取更高的价格
- 提高利润率和/或投资回报率
- 提高组织在行业中的声誉
- 提高客户的信任度、忠诚度和重复业务
- 即使在经济不景气的时候,也能增加繁荣(或至少是生存)的能力
- 减少了客户服务要求和审计的数量
软件质量的提高也可以提高软件从业人员的满意度。对于大多数软件工程师来说,他们最喜欢的活动不是熬夜调试运营中报告的关键问题。生产高质量的产品可以使软件从业者的工作更容易,更少的挫折感。从业人员也可以为他们所做的事情感到自豪,从而提高他们的成就感和自我价值。员工满意度的提高会使组织受益,因为它提高了生产力/速度,减少了员工的流失。