摘要:本文详细阐述了作者对软件项目质量管理的认识,是作者实际经验的总结。主要内容包括对软件项目质量管理理论的认识、软件项目质量管理在实践中的具体做法。文章详细介绍了有关质量计划编制、质量控制、质量保证的有关理论;文章也描述了进行质量管理责任分配、质量管理实施的具体方法。
关键词:质量计划,质量控制,质量保证,质量管理,过程管理,软件度量
第一章 引言
许多IT项目开发的系统应用在生死攸关的场合。例如,1981年,由计算机程序改变而导致的1/67的时间偏差,使航天飞机上的5台计算机不能同步运行,这个错误导致了航天飞机发射失败。1986年,1台Therac25机器泄露致命剂量的辐射,致使两名医院病人死亡。造成惨剧的原因是一个软件出现了问题,导致这台机器忽略了数据校验。这些惨痛的教训说明,在软件开发项目中认真抓好质量管理,并加强有关软件项目质量管理的研究是摆在我们面前的重要课题。
软件项目质量管理包括:质量计划编制、质量保证和质量控制三个过程域。质量计划是质量管理的第一过程域,它主要结合各个公司的质量方针,产品描述以及质量标准和规则通过收益、成本分析和流程设计等工具制定出来实施方略,其内容全面反应用户的要求,为质量小组成员有效工作提供了指南,为项目小组成员以及项目相关人员了解在项目进行中如何实施质量保证和控制提供依据,为确保项目质量得到保障提供坚实的基础。质量保证则是贯穿整个项目全生命周期的有计划和有系统的活动,经常性地针对整个项目质量计划的执行情况进行评估、检查与改进等工作,向管理者、顾客或其他方提供信任,确保项目质量与计划保持一致。质量控制是对阶段性的成果进行检测、验证,为质量保证提供参考依据,它是一个PDCA循环过程。
第二章 对软件项目质量管理理论的认识
软件项目的质量管理指的是保证项目满足其目标要求所需要的过程,它包括编制质量计划、质量控制、质量保证等过程。
2.1 质量计划编制
现代质量管理的基本宗旨是:“质量出自计划,而非出自检查”。只有做出的质量计划,才能指导项目的实施、做好质量控制。
编制项目的质量计划,首先必须确定项目的范围、中间产品和终产品,然后明确关于中间产品和终产品的有关规定、标准,确定可能影响产品质量的技术要点,并找出能够确保高效满足相关规定、标准的过程方法。编制质量计划通常采用流程图、因果分析图等方法对项目进行分析,确定需要监控的关键元素,设置合理的见证点(W点)、停工待检点(H点),并制定质量标准:
1) 流程图:
显示系统的各种成分是如何相互关系的,帮助我们预测在何处可能发生何种质量问题,并由此帮助开发处理他们的办法。
2) 因果分析图(也称鱼刺图):
对于复杂的项目,编制质量计划时可以采用因果分析图,描述相关的各种原因和子原因如何产生潜在问题或影响,将影响质量问题的“人员、设备、参考资料、方法、环境”等各方面的原因进行细致的分解,方便地在质量计划中制定相应的预防措施。其次,质量计划中还必须确定有效的质量管理体系,明确质量监理人员对项目质量负责和各级质量管理人员的权限。戴明环(又名PDCA循环法)作为有效的管理工具在质量管理中得到广泛的应用,它采用计划??执行??检查??措施的质量环,质量计划中必须将质量环上各环节明确落实到各责任单位,才能保证质量计划的有效实施。
2.2 按照质量计划实施有效的质量控制
质量计划确定后,按照其建立的质量管理体系,各责任单位必须按照PDCA质量环的要求,实施有效的质量控制。质量控制应贯穿于项目的整个过程,它可分为监测和控制两个阶段:监测的目的是收集、记录和汇报有关项目质量的数据信息;控制是使用质量监测提供的数据,进行控制,确保项目质量与计划保持一致。
在质量监测过程中,对于质量计划中设置的见证点、停工待检点,质量监测人员要按照作业程序及时进行测量检查(其中对于停工待检点必须由监理人员签字认可后才能进入下一道工序),以确定项目成果(或阶段成果)是否符合相关的质量标准。对于见证点或停工待检点要防止跳过检查,因为避免错误的成本总是大大低于补救错误的成本。 对质量监测的结果应采用相应的统计方法进行分析,如帕累托图法(按发生频率排序的直方图,它显示了可识别原因的种类和所造成的结果的数量)等。通过统计分析对人员、设备、参考资料、方法、环境等影响项目质量的因素进行监控,确定项目实施过程是否在控制之中,同时进行趋势分析,对一些偏向于不合格的趋势及早进行控制。 质量控制阶段应根据验收数据做出验收决定,确定是否进入下一步工序。对于质量监测中发现的不合格,应及时利用“因果分析图”等方法分析原因,并进行适宜的处置,保证不合格得到识别和有效的控制。不合格处置包括返工、返修、降级、让步放行、报废等形式。
质量监测分析时,对于已发现的不合格或潜在不合格,应制定相应的纠正措施或预防措施,以消除不合格或潜在不合格的原因,防止不合格的发生。纠正措施或预防措施制定后,应对质量计划进行相应的调整,保证项目的顺利实施。
项目收尾包括项目评估和项目终止两个阶段。项目收尾阶段的质量控制是一个非常重要而又容易忽视的内容。
项目质量评估不仅仅是在项目完成后进行,还包括对项目实施过程中的各个关键点的质量评估。项目质量评估看起来属于事后控制,但它的目的不是为了改变那些已经发生的事情,而是试图抓住项目质量合格或不合格的精髓,以使将来的项目质量管理能从中获益。
项目终止阶段,是在决策项目终止后,检查项目文件资料完备,包括项目施工质量验评表、竣工报告等,同时进行项目总结。项目总结是一个把实际运行情况与项目计划不断比较以提炼经验教训的过程。通过项目质量计划和总结,项目过程中的经验和教训将得到完整的记录和升华,成为“组织财富”。
项目质量管理的难点
每个项目的实施总是拥有同样的总体目标:质量、时间和成本。三者是一个相互制约、相互影响的统一体,其中任一项目标变化,都会引起另两个目标变化,并受其制约。如何合理的保证项目质量,正确处理质量与时间、成本之间的矛盾是项目质量管理的一个难点,这需要整合项目所有方面的内容,保证按时、低成本地实现预定的质量目标。
根据侧重点不同,项目可分为质量倾斜型、工期倾斜型及成本倾斜型体系。我们在编制项目计划时,一般而言是时间、成本、质量标准均已确定,在项目实施过程中需在从客观因素、具体情况出发,根据将要采取的行动和可能导致的后果进行综合分析研究;按切合实际的原则,使项目进展平衡有节奏地进行,以求达到预期目标。避免出现工期紧张或成本减少,导致质量降低的现象,而质量下降又往往造成返工等后果而导致延长工期和增加成本。
2.3 对软件质量保证的认识
2.3.1 有关SQA的理论
我们都知道一个项目的主要内容是:成本、进度、质量;良好的项目管理是综合三方面的因素,平衡三方面的目标,终依照目标完成任务。项目的这三个方面是相互制约和影响的,有时对这三方面的平衡策略甚至成为一个企业级的要求,决定了企业的行为,我们知道 IBM的软件是以质量为重要目标的,而微软的“足够好的软件”策略更是耳熟能详,这些质量目标其实立足于企业的战略目标。所以用于进行质量保证的SQA工作也应当立足于企业的战略目标,从这个角度思考SQA,形成对SQA的理论认识。
软件界已经达成共识的:影响软件项目进度、成本、质量的因素主要是 “人、过程、技术”。首先要明确的是这三个因素中,人是第一位的。
现在许多实施 CMM的人员沉溺于CMM的理论过于强调“过程”,这是很危险的倾向。这个思想倾向在国外受到了猛烈抨击,从某种意义上各种敏捷过程方法的提出是对强调过程的一种反思。 “XP”中的一个思想“人比过程更重要” 是值得我们思考的。我个人的意见在进行过程改进中坚持“以人为本”,强调过程和人的和谐。
根据现代软件工程对众多失败项目的调查,发现管理是项目失败的主要原因。这个事实的重要性在于说明了 “要保证项目不失败,我们应当更加关注管理”,注意这个事实没有说明另外一个问题“良好的管理可以保证项目的成功”。现在很多人基于一种粗糙的逻辑,从一个事实反推到的这个结论,在逻辑上是错误的,这种错误形成了更加错误的做法,这点在SQA的理解上是体现较深。
如果我们考证一下历史的沿革,应当更加容易理解 CMM的本质。CMM首先是作为一个“评估标准”出现的,主要评估的是美国国防部供应商保证质量的能力。CMM关注的软件生产有如下特点:
(1)质量重要
(2)规模较大
这是 CMM产生的原因。它引入了“全面质量管理”的思想,尤其侧重了“全面质量管理”中的“过程方法”,并且引入了“统计过程控制”的方法。可以说这两个思想是CMM背后的基础。上面这些内容形成了我们对软件过程地位、价值的基本理解;在这个基础上我们可以引申讨论 SQA。
2.3.2 生产线的隐喻
如果将一个软件生产类比于一个工厂的生产。那么生产线是过程,产品按照生产线的规定过程进行生产。 SQA的职责是保证过程的执行,也是保证生产线的正常执行。
抽象出管理体系模型的如下,这个模型说明了一个过程体系至少应当包含 “决策、执行、反馈”三个重要方面。
QA的职责是确保过程的有效执行,监督项目按照过程进行项目活动;它不负责监管产品的质量,不负责向管理层提供项目的情况,不负责代表管理层进行管理,只是代表管理层来保证过程的执行。
2.3.3 SQA和其他工作的组合
在很多企业中,将 SQA的工作和QC、SEPG、组织级的项目管理者的工作混合在一起了,有时甚至更加注重其他方面的工作而没有做好SQA的本职工作。
国内现在基本有三种QA(按照工作重点不同来分):一是过程改进型,一是配置管理型,一是测试型。个人认为是因为SQA工作和其他不同工作组合在一起形成的。
下面根据经验对它们之间的关系进行一个说明。
QA和QC ,两者基本职责; QC:检验产品的质量,保证产品符合客户的需求;是产品质量检查者; QA:审计过程的质量,保证过程被正确执行;是过程质量审计者; 注意区别检查和审计的不同,检查:是我们常说的找茬,是挑毛病的; 审计:来确认项目按照要求进行的证据;仔细看看CMM中各个KPA中SQA的检查采用的术语大量用到了“证实”,审计的内容主要是过程的;对照CMM看一下项目经理和高级管理者的审查内容,他们更加关注具体内容。