第六讲软件项目质量管理6.1软件项目质量管理概述6.1.1软件项目质量管理基本概念6.1.2质量管理主要流派与质量管理组织6.1.3软件项目质量管理原理6.1.4PMBOK2004定义的项目质量管理6.1.1软件项目质量管理基本概念软件项目质量:是“软件项目能够满足已确定的全部需求的特征集合”,是能够满足软件项目在项目开始阶段确定的功能、性能等特征的集合。软件项目质量依赖于项目开始阶段通过需求分析、可行性分析等过程确定的项目需求,包括软件的功能、运行速度、并发能力、容错能力、兼容性等各种要求。软件项目质量管理:对确定和达到软件项目质量所必须进行的全部职能和活动的管理。它的管理职能主要是负责质量方针政策的制订和实施。软件项目质量控制:为了保证和提高软件项目质量所进行的质量调查、研究、组织、协调、控制、信息反馈、改进等各种工作的总称。为了保证软件项目质量,必须采取一系列的作业、技术、组织、管理等有关活动,这些都属于软件项目质量控制的范畴。软件项目质量职能:是指企业为了使软件项目能够满足规定的要求或者满足用户的需要而进行的全部活动的总称。在整个质量工作中,企业各部门应该发挥什么作用,承担什么职能,开展哪些活动,都是质量职能所要研究的内容。软件项目质量检验:为了确保软件项目质量,防止把软件的差错传播到下一个过程,需要对软件项目的质量进行检验。软件工程师通过采用可靠的技术方法和措施,进行正式的技术评审,执行计划周密的软件测试来对软件项目的质量进行评估和检查。软件项目质量的相关文档:为了描述和记录软件项目每个阶段的工作,需要在软件项目的开发、验证与确认以及使用与维护等阶段中需要编制相关文档,并对文档进行评审与检查。表6-1与软件项目质量有关的相关文档6.1.2质量管理主要流派与质量管理组织石川(KoaruIshikawa)克劳士比(PhilipB.Crosby)朱兰(JosephH.Juran)戴明美国质量学会(ASQ)欧洲质量组织(EOQ)日本科学技术连盟(JUSE)6.1.3软件项目质量管理原理质量是“一个实体的性能总和,它可以凭借自己的能力去满足对它的明示或暗示的需求”。在项目管理中,质量管理的既定方向就是通过项目范围界定管理体制,必须将暗示的需求变为明示需求的必要性。项目质量管理包含一些程序,它要求保证该项目能够兑现它的关于满足各种需求的承诺。它包括“在质量体系中,与决定质量工作的策略、目标和责任的全部管理功能有关的各种活动,并通过诸如质量计划、质量保证和质量提高等手段来完成这些活动”。这些工作程序互有影响,并且与其它知识领域中的程序之间也存在相互影响。依据项目的需要,每道程序都可能包含一个或更多的个人或由团队的努力。在每个项目阶段中,每道程序通常都会至少经历一次。项目管理与质量管理原则共同点满足客户-理解、管理和引导需求,从而达到或超过客户的期望。这就要求项目产品与说明书配合一致(项目必须生产它所承诺生产的产品),并且适于实用(项目提供的产品或服务必须能满足实际需要)。通过检验防止错误-避免错误的成本通常比纠正它们低得多。管理责任-成功需要团队全体成员的合作,但提供成功所需要的资源则是管理工作的职责。各阶段的程序-戴明(Deming)和其他人所描述的那种重复的“计划-执行-检验-行动”工作循环同“不同阶段和程序之间的配合”是高度一致的。此外,由执行组织主动采取的质量提高措施(例如,整体质量管理,可持续发展,等等)既能够提高项目管理的质量,也能提高项目的生产质量。6.1.4PMBOK2004定义的项目质量管理美国项目管理学院(PMBOK2004)定义的项目质量管理过程包括以下几个过程:质量规划——判断哪些质量标准与本项目相关,并决定应如何达到这些质量标准。实施质量保证——开展规划确定的系统的质量活动,确保项目实施满足要求所需的所有过程。实施质量控制——监控项目的具体结果,判断它们是否符合相关质量标准,并找出消除不合绩效的方法。6.2软件项目质量计划编制⑴软件质量政策软件质量政策是项目组织的最高层制定的软件质量总的原则。它是指导软件项目质量管理活动的总方针、政策,是制定其它软件质量中的规章制度和技术标准的基础。通常情况每个公司会有每个项目和部门通用的软件质量政策。如果没有这个政策或者软件项目需要涉及到多个执行机构,则需要由项目负责人来进行协商制定。⑵质量标准国际标准。国家标准。企业标准。表6-3与软件项目质量有关的国际标准表6-4与软件项目质量有关的国家标准⑶质量度量软件项目质量度量是指把软件项目的属性按照一定的规则进行处理得到的数值或类别。⑷质量方针软件项目质量方针是由企业最高管理层制定的质量宗旨和方向,是实施软件项目质量体系的依据和推动力。表6-5软件项目质量方针制定过程中需要考虑的问题⑸质量目标软件项目质量目标是为一个软件项目确立的量化数值或类别,表6-6是3个常用软件项目质量模型中提到的质量目标。⑹质量管理软件项目的质量是软件项目各个阶段质量的综合反映。软件项目根据进度可以分为计划制定、需求分析、项目开发和测试、系统维护4个阶段。质量管理的目标是保证在软件项目的各个阶段能够在规定时间内高质量的完成计划规定的工作。6.3软件质量保证软件质量保证(SoftwareQualityAssurance,SQA)是一个系统性的活动,它为软件产品的可用性提供了保证。软件质量保证的目的是向管理者提供适当的对软件项目正在进行的过程和正在构造的产品的可视性,包括评估和审计软件产品和开发活动以验证它们符合适用的规程和标准。SQA并不直接生产高质量的产品,而是负责审计产品的质量活动并消除偏差。SQA的主要任务包括:软件产品、工具和设施的SQA;软件过程审计;技术和管理评审;SQA报告;SQA度量等。软件验证和确认软件验证和确认(SoftwareVerificationandValidation)是在软件生命周期中对其进行评估的规范化方法。验证是用于保证前面的活动是满足特定需求的,强调的是过程的正确性,即正确地构造产品。确认是在各阶段结束时检查系统是否满足客户需要,强调的是结果的正确性,即构造了正确的产品。软件验证和确认的主要活动包括:关键性分析、可跟踪性分析、评估、接口分析和测试。⑴需求阶段的质量保证准确获取需求精确分析需求建立合适的模型严格评审需求控制需求变更⑵设计阶段的质量保证软件设计阶段提高质量的方法和建议:进行设计评审:使用检查表对设计进行正式的评审,是保证设计质量的有效方法。复用设计模式:设计模式使得人们可以更加简单和方便地去复用成功的软件设计和体系结构,从而能够帮助设计者更快更好地完成系统设计。⑶实现阶段的质量保证统一风格。严格遵守编程规范。进行代码静态分析和代码审查。进行完善的单元测试。⑷测试阶段的质量保证软件测试是质量保证和控制的组成部分,软件测试本身的质量保证也很重要。软件测试过程的质量保证内容包括:测试计划的质量;测试用例设计的质量及测试用例评审;测试执行过程的质量及缺陷跟踪测试结果的评估;测试组织和管理的质量。⑸发布及维护的质量保证软件产品的发布、部署、技术支持和维护过程是与客户紧密相关的,这个阶段的质量直接影响客户对项目整体质量的体验和感知。发布和维护阶段的质量保证内容要点有:建立以客户为中心的质量文化和方针。制定有效的软件发布策略和流程。包括主版本发布、服务包发布、紧急补丁包发布等。建立完善的配置管理数据库。制定有效的客户需求变更流程。建立合理的技术支撑体系。与客户进行有效的沟通交流。及时更新软件文档。6.4软件质量控制⑴软件质量控制模型经过多年的软件工程和全面质量管理(TQM)的实践,戴明提出的PDCA过程已经成为ISO和工程界普遍接受并证明是行之有效的质量管理方法。PDCA包括4个过程,分别是计划(Plan)、执行(Do)、检查(Check)和行动(Action)。图6-2全面软件质量控制模型计划:分析现状、发现问题、找出原因,然后制定相应的质量方针、目标、计划和原则。执行:根据计划去实施,执行计划中所规定的各项活动。检查:对执行的结果进行检查、审核和评估,收集数据并进行分析,度量工作的质量,发现存在的问题。行动:针对检查中发现的问题,采取相应的改进措施纠正偏差。总结成功的经验、吸取失败的教训,并形成标准和规范指导以后的工作,通过行动加以提高和升华。PDCA质量控制方法是循环的、闭合的,同时也是螺旋式上升的,经过PDCA的多次循环和升华,使得项目的质量始终处于受控的状态。PDCA过程必须紧紧结合软件项目质量控制的3大要素,不断进行调整和检查。⑵软件配置管理软件配置管理(SoftwareConfigurationManagement,SCM)作为CMM的一个关键域,在整个软件开发活动中占有很重要的位置,是软件质量控制的重要一环。软件配置管理是软件项目生命周期中对系统中的配置项进行标识和定义的过程,通过控制配置项及其后续变更,记录并报告配置项的状态和变更请求,使得所有配置项都处于受控的状态。软件配置管理的目的是建立和维护软件项目产品的完整性和可追溯性,它贯穿于项目生命周期的全过程。⑶软件测试软件测试既是软件项目生命周期中的一个过程,也是软件质量控制的重要手段和关键活动。业界的统计数据表明,测试的成本大约占软件开发总成本的40%甚至更高。图6-3软件测试过程V模型图6-4常见软件测试类型间的关系表6-7软件测试过程各阶段活动要点⑷缺陷跟踪管理软件缺陷(softwaredefect)是程序中存在的破坏正常运行能力的问题或错误,通常会导致软件产品在某种程度上不能满足用户的需要。软件错误(softwareerror)属于缺陷的一种,往往是程序本身的问题,如算法错误、语法错误、计算不准确等。软件故障(softwarefault)是指软件运行过程中出现的一种不希望或不可接受的内部状态。软件失效(softwarefailure)是指软件所提供给用户的功能或服务不能达到用户的要求,它描述软件行为对用户要求的偏离,是一种面向用户的概念。软件错误往往导致系统某项功能失效,引起软件故障。6.5CMM介绍6.5.1CMM基本概念6.5.2CMM的基本框架6.5.3客观对待CMM软件能力成熟度模型(CapabilityMarurityModel,CMM)是1984年于美国国会与美国主要的公司和研究中心合作创立的一个由联邦资助的非盈利组织—软件工程研究所(SoftwareEngineeringInstitute,SEI)的一个早期研究成果。该模型提供了软件工程成果和管理方法的框架,自90年代提出以来,已在北美、欧洲和日本成功地应用。现在该模型已成为事实上的软件过程改进的工业标准。6.5.1CMM基本概念过程(Process)软件过程(SoftwareProcess,SP)软件过程能力(SoftwareProcessCapability,SPC)软件过程性能(SoftwareProcessPerformance,SPP)软件过程成熟度(SoftwareProcessMaturity,SPM)软件过程能力成熟度模型(CapacityMaturityModel,CMM)能力成熟度模型集成(CapabilityMaturityModelIntegration,CMMI)6.5.1CMM基本概念关键过程(区)域(KeyProcessArea,KPA)关键实践(KeyPractices,KP)软件过程评估(SoftwareProcessAssessment,SPA)软件能力评价(SoftwareCapabilityAppraisal,SCA)软件工程组(SoftwareEngineeringGroup,SEG)软件相关组(SoftwareRelatedGroups,SRG软件工程过程组(SoftwareEngineeringProcessGroup,SEPG)系统工程组(SystemEngineeringGroup,SEG)系统测试组(SystemTestGroup,STG)软件质量保证组(SoftwareQualityAssuranceGro