【IT168 技术文章】
早在20世纪60年代中期,人们就发现软件的生产出现了“问题”,主要表现在生产过程不规范,缺乏管理。后来,人们在软件工程方法学中引入了工程的概念、原理、技术和方法,这种思想在一定程度上解决了软件生产过程中遇到的问题。但是直至80年代还是没有提出一套管理软件开发的通用原则,软件管理不善的问题依旧在大范围内存在。随着软件开发的深入、各种技术的不断创新以及软件产业的形成,人们越来越意识到软件过程管理的重要性,因此管理学的思想逐渐融入软件开发过程中,由美国软件工程研究所(SEI)提出的软件能力成熟度模型(简称SW-CMM)便是软件过程管理思想不断发展的集中体现。
CMM的管理思想背景
SW-CMM不仅是一个模型,一个工具,它更代表了一种管理哲学在软件工业中的应用。SW-CMM的管理思想来源于已有60多年历史的产品质量管理。1930年,Walter Sheward 率先提出了一整套基于统计学原理的质量控制方法,这些方法后来经过W. Ewards Deming和Joseph Juran的发展和实践得到了广泛的应用。Philip Crosby在《质量是免费的》一书中率先提出将质量管理形成成熟度框架的概念,描述了进行质管实践的5个阶段,表达了质量管理的全部运作。
Deming、Juran以及Crosby等人的做法后来被称为全面质量管理(TQM)理论。在IBM公司,Watts Humphrey和Ron Radice将这种全面质量管理的思想应用于软件工程过程,收到了很大的成效。SEI的软件能力成熟度模型就是在以Humphrey为主的软件专家实践经验的基础上发展而来的。软件能力成熟度模型中融合了全面质量管理的思想,以5个不断进化的层次反映了软件过程定量控制中项目管理和项目工程的基本原则。SW-CMM所依据的想法是只要不断地对软件企业的软件工程过程的基础结构和实践进行管理和改进,就可以克服软件生产中的困难,增强开发制造能力,从而能按时地、不超预算地制造出高质量的软件。
全面质量管理的含义和特点
含义 全面质量管理(Total Quality Management,简称TQM)是一个组织以质量为中心,以全员参与为基础,目的在于通过让顾客满意和本组织所有成员及社会受益而达到长期成功的管理途径。
早期的质量管理仅限于质量检验,仅能对产品的质量实行事后把关,但质量并不是检验出来的,所以,质量检验并不能提高产品质量,只能剔除次品和废品。1924年提出休哈特理论,质量控制从检验阶段发展到统计过程控制阶段。休哈特认为,产品质量不是检验出来的,而是生产制造出来的,质量控制的重点应放在制造阶段,从而将质量控制从事后把关提前到制造阶段。1961年费根堡姆提出全面质量管理理论(TQM),将质量控制扩展到产品寿命循环的全过程,强调全体员工都参与质量控制。70年代,田口玄一博士提出田口质量理论,他认为,产品质量首先是设计出来的,其次才是制造出来的。因此,质量控制的重点应放在设计阶段,从而将质量控制从制造阶段进一步提前到设计阶段。
特点 全面质量管理即为全员、全过程、全方位的质量管理,力求全面提高经济效益。包括以下基本特点:
(1) 全员参加:意味着质量控制由少数质量管理人员扩展到企业的所有人员。
(2) 全过程:将质量控制从质量检验和统计质量控制扩展到整个产品寿命周期。
(3) 全面运用一切有效方法:是指应用一切可以运用的方法,而不仅仅是数理统计法。
(4) 全面控制质量因素:意味着把影响质量的人、机器设备、材料、工艺、检测手段、环境等全部予以控制,以确保质量。
大多数经营管理者认为,全面质量管理的核心是强调一致性,克服随意性,消除差错,使顾客得到全面的满足,它强调为了取得真正的经济效益,管理必须始于识别顾客的质量要求,终于顾客对他手中的产品感到满意。全面质量管理就是为了实现这一目标而指导人、机器、信息的协调活动。因此,全面质量管理可以归纳为两大基本原则.
全面质量管理两大基本原则
首先是以满足顾客需求为导向,不断改善,最终达到顾客的全面满足;其次是以全员参与为基础,进行全过程的质量控制。
CMM对全面质量管理的体现
在软件业,软件质量得不到提高主要原因在于质量观念的缺乏,而将全面质量管理的思想运用于软件业,是提高软件产品质量、获取竞争优势的有效手段。CMM不但对于指导过程改进是一项很好的工具,而且把全面质量管理概念应用到软件上,实现从需求管理到项目计划、项目控制、软件获取、质量保证、配置管理的软件过程全面质量管理。CMM的思想是一切从顾客需求出发,从全组织层面上实施过程质量管理,正符合了TQM的基本原则。因此,它的意义不仅仅是对软件开发的过程进程控制,最关键的它还是一种高效的管理方法,有助于企业最大程度的降低成本,提高质量和用户满意度。
CMM2
软件需求管理体现TQM的核心思想 CMM的一个显著的特征是将软件需求作为一个活跃的实体贯穿于整个开发过程之中,实施有效的需求管理事实上渗透在CMM的不同层次(Level)和众多关键过程域之中。软件需求是软件项目成功的关键,软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的“祸根”。美国质量管理协会(ASQC)将“质量”解释为“产品或服务内在特性和外部特性的总和,以此构成其满足给定需求的能力”,Crosby对于质量的定义也是“同需求保持统一”,从这个意义上说,只有满足用户需求的软件产品才谈得上有好的质量,反之,需求管理也正是从质量出发以确定需求。CMM四级的“软件质量管理”过程域中也明确要求,组织、顾客和最终用户的软件质量需求及其优先级可以追踪到分配给软件的系统需求及软件质量目标。因此,CMM的需求管理正是从全面质量管理的主导思想—“以满足顾客需求为导向”出发的,软件开发则应以需求工程作为核心过程(需求过程与其他过程的关系见图1)。
图1 需求过程与其他过程的关系
需求工程无疑是当前软件工程中的关键问题,但又是软件工程中最复杂的过程之一。完整的软件需求工程过程包括需求开发和需求管理两个部分,需求开发的一般过程分为需求获取、需求分析、编写需求规格说明书(SRS)、需求验证四个阶段,需求管理则主要包括需求基线的建立、需求变更控制以及需求跟踪等活动。需求获取是通过与用户的交流,对现有系统的观察及对任务进行分析,从而开发、捕获和修订用户的需求 ;需求分析是为最终用户所看到的系统建立一个概念模型,作为对需求的抽象描述;由需求模型构件生成精确的形式化的描述,即需求规格说明书,它将作为用户和开发者之间的一致协议;需求分析的结果应该通过评审、测试等手段验证它的正确性、完整性和一致性,这就是需求验证。贯穿于整个过程中,需求管理中最基本的任务则是明确需求,并使所有相关人员达成共识 ;建立需求跟踪能力联系链,确保所有用户需求被正确地应用,并且在需求发生变更时,能够完全地控制其影响范围,始终保持产品与需求的一致性。
需求工程需要各类人员的参与,如领域专家、最终用户、系统投资人、需求分析员、系统开发人员等等,以不同的着眼点和不同的知识背景,获得对软件需求的全面理解。需求工程最大的难度就体现在全方位需求的获取以及非功能性需求与功能性需求的错综复杂的联系上,当前对非功能性需求分析建模技术的缺乏大大增加了需求工程的复杂性,而非功能性需求往往又决定了对软件产品的质量要求。因此,非功能性需求和质量特性的分析模型有待深层次的研究。
CMM3
软件产品工程体现TQM的过程控制 从CMM三级开始,软件生命周期的各个阶段被严格地划分出来,其目的是保持软件工程活动和软件工作产品的一致性。目前还有很多软件企业的软件开发工作仅限于编码,软件工程方法学中的各种方法和技术得不到真正的应用,因此单纯的软件工程技术并不能有效的解决“软件危机”,改善软件产品的质量;而单纯的测试也只是一种事后检测的方法。只有通过软件过程管理,将需求、设计过程从编码中分离出来,才能对软件质量进行产品生命周期全过程、全方位的控制。
TQM的核心就在于防患于未然,做到事先控制,确信“下一道工序就是用户”,层层把好质量关,决不让不合格的半成品流入下道工序,一切为下道工序着想。软件开发生命周期一般分为需求分析、概要设计、详细设计、编码、单元测试、集成测试、确认测试、系统测试几个阶段,常用的生命周期模型有瀑布模型、V模型、增量模型、演化模型和螺旋模型,实际的软件过程往往是几种模型的结合。其中,V模型的运用越来越广泛,它强调了各个测试阶段与开发前期各阶段的对应,更明确表示了个各种工作产品间的关系,也易于用户在软件开发中的参与和评价(见图2)。
图2 V模型
在软件的整个生命周期中,软件产品的质量首先取决于它的设计,因为质量、成本、效益的80%是在设计阶段就确定了的。设计质量控制在TQM中也是非常重要的一个环节,事实证明:产品投产后设计指标修改得越少,产品的质量水平也将越好。要保证顾客对质量满意,就必须从产品开发研制阶段开始做起,需将用户对软件产品的质量要求转化成设计质量标准和开发过程中各个环节的技术要求。
因此,CMM要求每个阶段的软件工作产品必须文档化,并分别由上下游角色对其进行同行评审,置于严格的配置管理之下,以保证各角色在一致的基础上工作。同行评审的目的则是在过程中及早地消除缺陷,减少后续阶段的返工,避免上一个阶段引入的缺陷遗留到下一个阶段,造成质量成本的成倍增加。
图3 软件生命周期中的缺陷分布
从图3可以看出,缺陷是在开发过程的前期引入,但越到后期缺陷修复的成本越高,随着CMM级别的提高,缺陷的消除将从后期逐步转移到前期,遗留到用户手中的缺陷也相应减少,这必将大大缩短开发周期,降低不必要的成本。
因此,CMM的思想就是以过程为基础进行质量控制,把质量控制从事后检测转变为事前预防,能够尽量减少大的设计更改。需求管理、全面质量管理以及TQM中常用的质量功能展开技术(QFD)也都是这种思想的反映。
CMM4
软件质量管理体现TQM的运行机制 软件质量管理是CMM四级中一个独立的KPA,其目的是使项目的软件质量管理活动是有计划的、软件产品的质量目标是量化的和受到管理的。它遵循了全面质量管理活动的科学程序—PDCA(Plan、Do、Check、Action),即四个阶段:
(1) 计划:即确定质量目标以及实现这个目标需要采取的措施。制定质量计划是整个质量管理活动的基础。国家标准对质量下的定义为: 质量是产品或服务满足明确或隐含需要能力的特征和特性的总和。
对于软件来说,软件质量则体现在质量特性上,ISO/IEC9126中规定了6个质量特性,即功能性、可靠性、易用性、效率、可维护性和可一致性,每个特性包含若干子特性。设定质量目标就是要找到用户的质量需求与这些质量特性的相关性,并将其转化为开发过程中可度量的技术指标或能力指标,作为质量控制的依据。
上述的六大特性属于软件的外部属性,与用户满意度直接相关,可以根据组织的目标和项目的特点建立质量模型,并采用一定的方法,如QFD(Quality Function Deployment)、GQM(Goal Question Metrics)等确定量化的质量目标,但这在实际工作中往往是相当复杂和难以获得的。因此,更常用的做法是以过程能力目标反映产品质量目标,一个典型的能力指标就是缺陷密度(即每单位规模工作产品中存在的缺陷数)和相应的阶段缺陷排错率,可以根据历史数据估计产品的规模和目标缺陷密度,从而对每个阶段发现的缺陷数量进行控制。
(2) 实施 :即按预定计划、目标措施及其分工实际执行。为了在过程中控制软件的质量,需采取相应的手段在预定的阶段点或里程碑上进行软件工作产品质量的测量,常用的方法有 同行评审、原型评价、测试等。这些方法主要从两方面对软件的质量进行度量,一是内部属性,即过程和活动自身可以度量的属性,例如工作产品的缺陷密度 ;二是外部属性,即与用户环境相关的属性,这些属性在过程中往往难以度量,只有通过在项目的早期引入用户测试来予以评价,而让用户参与开发过程,大大有利于产品质量的提高。
(3) 检查 :即把实施的结果和计划的要求对比,检查计划的执行情况和实施的效果,是否达到预期的目标,并找出原因。在对质量度量的结果进行分析时,往往会用到一些统计工具和方法,如检查表、直方图、控制图、Pareto图、散布图、因果图、运行图等。这些工具可以帮助确定问题、评估现状、发现原因甚至形成下一步措施。
(4) 处理 :即总结经验教训,将未解决的问题作为下一阶段制定计划的依据。CMM要求对软件质量测量的结果分析后,应“采取合适的与软件质量计划相一致的措施,以便使得产品的质量测量结果与软件质量目标相符合”。