一、研究软件项目质量管理的背景
提起如今的IT项目,软件工程倍受关注。而软件的质量更是众人关注的焦点,因为目前还没有一套完善的评估标准。甚至有人提出,现在的软件开发根本提不上是"工程",因为它太稚嫩了,还没有一套成熟的标准来比照;因而软件项目极易出现失败或失误。大量实践证明,软件工程项目的成败,通常是因为管理问题(协同工作的能力),而不是技术上的问题。要想做一盘"完美"的软件大餐,质量管理的作用是不言而喻的。(《长松组织系统》工具包--数千家企业成功发展壮大的选择,值得您的信赖!)
二、软件质量管理的主要内容
质量管理主要包括三个过程:质量计划制定、质量保证和质量控制。
质量计划:是质量管理的第一过程域,它主要指依据公司的质量方针、产品描述以及质量标准和规则等制定出来实施方略,其内容全面反应用户的要求,为质量小组成员有效工作提供了指南,为项目小组成员以及项目相关人员了解在项目进行中如何实施质量保证和控制提供依据,为确保项目质量得到保障提供坚实的基础。
质量保证:是贯穿整个项目全生命周期的有计划和有系统的活动,经常性地针对整个项目质量计划的执行情况进行评估、检查与改进等工作,向管理者、顾客或其他方提供信任,确保项目质量与计划保持一致。
质量控制:是对阶段性的成果进行测试、验证,为质量保证提供参考依据。
在软件实施项目中,质量保证对应于技术评审与过程检查,质量控制对应于软件测试等工作。
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.2SQA的工作内容和工作方法
2.3.2.1计划
针对具体项目制定SQA计划,确保项目组正确执行过程。制定SQA计划应当注意如下几点:
有重点:依据企业目标以及项目情况确定审计的重点。
明确审计内容:明确审计哪些活动,那些产品。
明确审计方式:确定怎样进行审计。
明确审计结果报告的规则:审计的结果报告给谁。
2.3.2.2审计/证实
依据SQA计划进行SQA审计工作,按照规则发布审计结果报告。注意审计一定要有项目组人员陪同,不能搞突然袭击。双方要开诚布公,坦诚相对。审计的内容:是否按照过程要求执行了相应活动,是否按照过程要求产生了相应产品。
2.3.2.3问题跟踪
对审计中发现的问题,要求项目组改进,并跟进直到解决。
2.3.2.4 SQA的素质
过程为中心:应当站在过程的角度来考虑问题,保证了过程,QA就尽到了责任。
服务精神:为项目组服务,帮助项目组确保正确执行过程。
了解过程:深刻了解企业的工程,并具有一定的过程管理理论知识。
了解开发:对开发工作的基本情况了解,能够理解项目的活动。
沟通技巧:善于沟通,能够营造良好的气氛,避免审计活动成为一种找茬活动。
三、项目中质量管理的原则
在软件项目实施中,由于进度和成本两大因素的影响,它的质量管理与产品开发有着很大的差别。因此,在项目实施中做好质量管理工作应该坚持自己的原则。
通过网上各种资料的整合和整理,以下几个原则我认为是比较合理的:
- 不但要主观认识到质量的重要性,同时还要落实到行动中。
软件质量管理的重要性已经逐渐被国内的IT企业认可,但是要落实到具体的项目实施工作中,并通过它提高软件质量,还有一段很长的路要走。因为几乎所有的软件公司都灌输着"进度高于一切"的思想,只要是为了赶进度和发布产品,所有影响进度的工作都可以忽略。
因此,把想法落实到实际工作中是做好软件质量管理的第一原则。
可以说,目前很多公司都有"愚弄客户"的嫌疑,不管是有心的还是无意的。很多公司实施项目时只要能拿到"钱"就达到目的了,因此也就不在乎是否掩盖缺陷和敷衍客户。至于后果,那是以后的事情了。
在软件产业发达的今天,已经是客户的买方市场,客户永远会选择质量和服务都表现良好的产品来满足自己的需求。因此,我们应该尊重客户,把客户放在"上帝"的位置上,认证做好质量。
- 建立规范的质量保证体系,逐步使软件开发进入良性循环状态。
在没有开发规范的前提下,软件团队是不能开发出高质量软件的。因此软件团队一定要建立规范的质量保证体系,同时把规范体系逐步落实到工作中。如果急功近利,不但会做很多浪费人力和物力的无效工作,还会给客户留下不好的印象。
技术评审可以把一些软件缺陷消灭在代码开发之前,尤其是一些架构方面的缺陷。在项目实施中,为了节省时间应该优先对一些重要环节进行技术评审,这些环节主要有:项目计划、软件架构设计、数据库逻辑设计、系统概要设计等。如果时间和资源允许,可以考虑适当增加评审内容。
项目实施中技术评审如表1所示:
表1项目实施中技术评审
很多软件项目由于性能等诸多原因最后导致失败,实际上都是由于设计阶段技术评审做的不够。一味地节省时间、关键工作仅由某几个人执行、整个项目的成败依赖于某些"个人英雄"等做法是十分错误的,重要的技术评审工作是不可以忽略的。
项目实施中的过程检查
项目经常延期是中国软件企业实施很多项目时候的特点,因此项目实施中的过程检查重点是"进度检查"。在实际工作中,很多项目都是启动一段时间后就开始不停地加班,使整个团队处于疲惫状态,导致工作效率低下,最后把项目计划丢在一边。对于这种情况,比较好的做法是不断地检查项目计划与实际进度是否存在偏差,如果存在偏差则找出问题的根源,然后消除引起问题的因素,例如可以调整进度安排或者增加人力投入,这样就避免了问题不断放大。
版本检查在项目实施中也需要特别注意,因为版本混乱会带来很大麻烦,尤其进行测试的时候。此外,项目实施时候也应该注意文档检查,尤其是一些关键文档的质量,例如接口文档、用户手册等。
项目实施相关的全部质量管理工作中,软件测试的工作量最大。由于很多项目在实施中非常不规范,因此软件测试一定要把好关。软件测试应该重点做好测试用例设计、功能测试、性能测试、缺陷管理等工作。
测试用例设计:虽然项目实施中没有太多时间来设计测试用例,但是这个环节是必不可少的。项目实施中设计测试用例应该根据进度安排,优先设计核心应用模块或核心业务相关的测试用例。设计测试用例的时候可以不设计的特别完善,基本目标是列出测试重点,对测试执行起良好地指导作用,这个时候的测试用例更像是"测试大纲"。
功能测试:软件首先应该从功能上满足用户需求,因此功能测试是质量管理工作中的重中之重。功能测试在产品试运行前一定要开展好,否则将会发生"让用户来执行测试"的情况,后果非常严重。
性能测试:性能测试是经常容易被忽略的测试。在实施项目过程中,应该充分考虑软件地性能,运行较慢的软件仍然不会为用户所接受。性能测试可以根据用户对软件的性能需求来开展,通常系统软件和银行、电信等特殊行业应用软件对性能要求较高,应该尽早进行,这样更易于早解决问题。
缺陷管理:缺陷跟踪与管理工作也经常被忽略,很多问题会被遗忘,直到客户再次发现。建议测试人员在项目实施中仍然采用一些工具进行缺陷管理与跟踪,保证任何缺陷都得到妥善的处理。
此外,对于一些项目,如果实在没有测试人员,可以考虑让开发人员互相进行测试,这样也可以发现很多缺陷。
项目实施中的质量管理工作是非常复杂的,存在很多不可以控制的因素,例如没有质量人员、测试环境不具备等。因此,项目实施中的质量管理原则应该是"最大限度地去提高质量"。只有这样,才能更好地利用现有资源尽可能地提高质量。
四、总结项目管理培训
清晰、明确的软件质量方针和计划是质量控制和管理的基础,而过程质量的提高时保证产品质量的根本。本文主要分为两部分,一是软件项目质量管理的主要内容,以及相关介绍分析,二是项目中质量管理的原则,通过对软件项目质量管理的内容分析和所需坚持的八大原则,读者将会对软件项目质量管理的相关认识有更深层次的了解,从而更好的进行软件质量管理,提高软件产品质量,提高企业效益。 |