《现代软件工程》第七部分现代软件工程的质量保证《现代软件工程》本部分主要参考书《软件验证与确认的最佳管理方法》(美)StevenR.Rakitin著于秀山等译(电子工业出版社)2002《测试流程管理》(美)RexBlack著(北京大学出版社)2001《软件工程与软件测试自动化教程》张克东、庄燕滨(电子工业出版社)《软件工程规范》(美)Watts.S.Humphrey著,傅为、苏俊、许青松译(清华大学出版社)2004《软件配置管理策略与RationalClearCase》(美)BrianA.White著尤克滨等译(人民邮电出版社)2003现代软件工程的质量保证过程-1软件测试的组织与管理-2软件系统的可靠性工程-3配置管理方法与实践-4第七部分现代软件工程的质量保证第一章现代软件工程的质量保证过程软件的质量要素与度量-1.1软件工程的质量保证过程-1.2软件工程的质量保证活动-1.3软件质量保证体系建设-1.4第七部分现代软件工程的质量保证如何描述质量用人的健康做类比如何判断人是否健康?体检因素:身高、体重、心跳、血压、血液、体温等如何描述软件的质量软件系统功能齐全是不是就是质量好?用户界面友好是不是就是软件的质量好?没有BUG是不是就是软件的质量好?用户满意?运行正确的软件就是高质量的软件吗?不贪污的官就是好官吗?软件测试是不是软件质量的全部?回答全部是:NO!那么,什么是软件的质量?什么是软件的质量?现代软件工程的质量保证与软件测试有什么不同?技术经理、项目经理与质量经理有什么不同?什么是现代软件工程的质量管理?开发团队在质量保证方面,要做什么工作?我们就来回答这些问题!什么是软件项目的质量管理?软件质量软件质量的定义:ANSI/IEEEStd729-1983定义软件质量为“与软件产品满足规定的和隐含的需求的能力有关的特征或特性的全体”。M.J.Fisher定义软件质量为“所有描述计算机软件优秀程度的特性的组合”。质量特性及其组合,是软件开发与维护中的重要考虑因素为满足软件的各项精确定义的功能、性能需求,符合文档化的开发标准,需要相应地给出或设计一些质量特性及其组合。如果这些质量特性及其组合都能在产品中得到满足,则这个软件产品质量就是高的。软件质量软件质量的因素与度量有关直接度量的因素如单位时间内千行代码中所产生的错误数。间接度量的因素如可用性或可维护性软件质量软件质量的度量模型1976年,Boehm第一次提出了软件质量度量的层次模型。1978年,Walters和McCall等人提出了从软件质量要素、准则到度量的三个层次式的模型。1985年,ISO建议软件质量模型由三层组成:高层:软件质量需求评价准则(SQRC)中层:软件质量设计评价准则(SQDC)低层:软件质量度量评价准则(SQMC)现代软件工程的标准体系ISO/IEC12207应用成果基础产品实用产品需求软件工程项目管理软件配置管理风险管理软件质量保证设计实现测试维护1.1软件质量的要素与度量1.1.1软件的质量要素1.1.2软件质量评价的准则1.1.3软件质量的度量1.1.4软件质量度量的实施1.1.1软件的质量要素什么是软件的质量?•ISO9000的质量定义:•质量的定义:反映实体满足明确和隐含需要能力的特性综合•定义的说明:–明确需要:指合同中用户明确提出的要求与需要–隐含需要:指由生产企业通过市场调研进行识别与探明的要求或需要质量与等级的关系等级的含义是:对功能用途相同、但技术特性不同的存在事务的一种分类或排序例如:高质量——无错误、可读性强的用户手册低等级——有限的功能低质量——错误百出、编排混乱的用户手册高等级——大量功能确定质量和等级标准水平,是项目经理的责任质量的要素讨论软件的质量定义,一般地从4个角度来看,即用户的角度、开发商的角度、产品的角度和价值的角度。1976年美国的B.W.Boehm和R.Brown先后提出了三层次的评价度量模型:软件质量要素、准则、度量。随后G.Mruine提出了自己的软件质量度量SQM技术,波音公司在软件开发过程中采用了SQM技术,日本的NEC公司也提出了自己的SQM工具,即SQMAT,并且在成本控制和进度安排方面取得了良好的效果。IEEE标准1061-1998以表格的形式,定义了有关确认和收集与软件质量需求有关一个模型,或称为一个框架。可度量的软件的质量要素IEEE定义的软件质量度量框架软件产品质量特性直接度量特性直接度量特性直接度量子特性度量子特性子特性度量度量度量框架一种用来组织、选择、沟通、评价软件系统要求的质量属性的辅助决策法。它逐层分解为特性、子特性和度量质量特性一个与质量有关的面向管理的软件属性质量子特性质量特性分解出来的技术组件直接度量一种不依赖与任何其他属性测量的度量预计度量一种试用于开发阶段的度量,它用来预计软件质量特性的值质量度量一个函数、它的输入是软件数据,输出是一个单一数值。它可解释为给定的软件属性对其质量的影响程度过程质量一种用来测量在软件系统开发、实现和维护过程中使用的方法、技术和工具特性的度量产品度量一种用来测量软件开发过程中任何中间或最终产品特性的度量IEEE定义的软件质量度量框架第一层次:质量需求在四层模型的第一层,软件产品质量层,是产品必须满足的质量需求。它是用用户术语描述的,主要有四点:(1)产品将在用户所在组织当前使用的平台和操作系统上运行。(2)产品将是可靠的并能防止数据丢失的机制。(3)产品将提供完成某些任务所必需的功能。(4)产品将易于使用。第二层次:质量特性在模型的第二层,表示与整个质量需求有关的特殊质量特性,它代表了用户的质量需求。它采用从用户角度考虑的立场,把软件质量分解成四类质量特性,这四个质量特性是软件的基本特征。IEEE的四个质量特性是:可移植性、可靠性、功能性、可使用性。IEEE定义的软件质量度量框架四层模型质量需求质量特性质量子特性直接度量度量描述(例子)产品将在多平台和当前用户正在使用的操作系统上运行可移植性硬件独立性硬件依赖性计算硬件的依赖性软件独立性软件依赖性计算软件的依赖性易安装性安装时间测量安装时间可重用性能够用于其他软件中计算能够或已经应用于其他软件系统的模块数量产品将是可靠的并能提供防止数据丢失的机制可靠性无缺陷性测试覆盖测量测试覆盖度审查覆盖计算已做过的代码审查模块容错性数据完整性统计用户数据被破坏情况数据恢复测量恢复被破坏的数据的能力可用性软件可用的百分比软件可用时间除以总的软件使用时间产品将提供完成某些任务所必需的功能功能性完备性测试覆盖计算调用或分支测量覆盖正确性缺陷密度计算每一版本发布前的缺陷安全性数据安全性统计用户数据被破坏的情况用户安全性没有被阻止的非法用户入侵数兼容性环境变化软件安装后必须修改的环境变量数量互操作性混合应用环境下软件的可操作性混合应用环境下可正确运行的数量产品将易于使用可使用性易理解性学习所用时间新用户学习软件特性所花费的时间易学性学习所用时间新用户学会操作软件提供的基本功能所花费的时间易操作性人的因素新用户基于人类工程学对软件消极方面的评价数量沟通性人的因素新用户基于人类工程学对软件消极方面的评价数量质量需求质量特性质量子特性直接度量度量描述(例子)1978年,Walters和McCall等人提出了从软件质量要素、准则到度量的三个层次式的模型。McCall选择的软件质量要素评价准则共21种,它们是:(1)可审查性(auditability)。检查软件需求、规格说明、标准、过程、指令、代码与合同是否一致的难易程度。(2)准确性(accuracy)。计算和控制的精度,是对无误差程序的一种定量估计。最好表示成相对误差的函数。值越大表示精度越高。(3)通信通用性(communicationcommonality)。使用标准接口、协议、规范的程序。(4)完全性(completeness)。所需功能完全实现的程度。(5)简明性(conciseness)。程序源代码的紧凑与简洁性。(6)一致性(consistency)。设计文档与系统实现的一致性。(7)数据通用性(datacommonality)。在程序中使用标准的数据结构和类型。(8)容错性(error-tolerance)。系统在各种异常条件下提供继续操作的能力。(9)执行效率(executionEfficiency)。程序运行效率。(10)可扩充性(expandability)。能够对结构设计、数据设计和过程设计进行扩充的程度。1.1.2软件质量评价的准则(11)通用性(generality)。程序部件潜在的应用范围的广泛性,即部件可重用。(12)硬件独立性(hardwareindependence)。软件同支持他运行的硬件系统不相关的程度。(13)检测性(instrumentation)。监视程序的运行,一旦发生错误时,能明确地标识错误的程度。(14)模块化(modularity)。程序部件的功能独立性。(15)可操作性(operability)。操作一个软件的难易程度。(16)安全性(security)。控制或保护程序和数据不受破坏的机制,以防止程序和数据受到意外的或蓄意的存取、使用、修改、毁坏或泄密。(17)自文档化(sdlf-documentation)。源代码提供有意义文档的程度。(18)简单性(simplicity)。理解程序的难易程度。(19)软件系统独立性(softwaresystemindependence)。程序与非标准的程序设计语言特征、操作系统特征以及其他环境约束无关的程度。(20)可追踪性(reacebility)。从设计表示或实际程序构件,追踪到需求的能力。(21)易培训性(training)。软件支持新用户使用该系统的能力。McCall的软件质量评价准则软件质量评价准则1、正确性正确性是指软件按照需求正确执行任务的能力。“正确性”的语义涵盖了“精确性”。正确性无疑是第一重要的软件质量属性。技术评审和测试的第一关都是检查工作成果的正确性。机器不会主动欺骗人,软件运行出错通常都是人造成的,所以不要找借口埋怨机器有毛病。2、健壮性健壮性是指在异常情况下,软件能够正常运行的能力。正确性描述软件在需求范围之内的行为,而健壮性描述软件在需求范围之外的行为。开发者往往把异常情况当成正常情况而不作处理,结果降低了健壮性。用户才不管正确性与健壮性的区别,反正软件出了差错都是开发方的错。所以提高软件的健壮性也是开发者的义务。健壮性有两层含义:一是容错能力,二是恢复能力。3、可靠性可靠性是指在一定的环境下,在给定的时间内,系统不发生故障的概率。可靠性本来是硬件领域的术语。比如某个电子设备在刚开始工作时挺好的,但由于器件在工作中其物理性质会发生变化(如发热),慢慢地系统的功能或性能就会失常。所以一个从设计到生产完全正确的硬件系统,在工作中未必就是可靠的。软件在运行时不会发生物理性质的变化,人们常以为如果软件的某个功能是正确的,那么它一辈子都是正确的。可是我们无法对软件进行彻底地测试,无法根除软件中潜在的错误。平时软件运行得好好的,说不准哪一天就不正常了,如有千年等一回的“千年虫”问题,司空见惯的“内存泄露”问题、“误差累积”问题等等。时隐时现的错误一般都属于可靠性问题,纠错的代价很高。软件质量评价准则4、性能性能通常是指软件的“时间-空间”效率,而不仅是指软件的运行速度。人们总希望软件的运行速度高些,并且占用资源少些。性能优化的关键工作是找出限制性能的“瓶颈”可以通过优化数据结构、算法和代码来提高软件的性能。5、易用性易用性是指用户使用软件的容易程度。现代人的生活节奏快,图方便。所以把易用性作为重要的质量属性对待无可非议。导致软件易用性差的根本原因:教育缺陷:没有开设人机工程学、美学、心理学这些必修课,大部分开发人员不知道如何设计易用的软件产品。开发人员犯了“错位”的毛病:他以为只要自己