项目管理系列之质量管理
提起软件质量管理,人们更多地会想起ISO9001、CMM、CMMI这些“质量管理圣经”。但国内企业做了这么多年的质量认证,却没有使软件质量有大幅度地提高。多数企业为了节省成本和赶进度,往往会忽略质量管理,导致软件质量很差——投产后的软件经常会被用户发现很多Bug。实际上,在项目实施中开展质量管理工作十分重要,因为产品上线后的质量问题往往意味着更大的投入。
软件质量管理包括以下活动:质量计划编制、质量保证、质量控制、同行评审、软件测试、软件缺陷跟踪等,优秀的软件质量管理能够在很大程度上减少软件开发过程的不确定性。
质量计划是质量管理的第一过程域,它主要指依据公司的质量方针、产品描述以及质量标准和规则等制定出来实施方略,其内容全面反应用户的要求,为质量小组成员有效工作提供了指南,为项目小组成员以及项目相关人员了解在项目进行中如何实施质量保证和控制提供依据,为确保项目质量得到保障提供坚实的基础。
质量保证是贯穿整个项目全生命周期的有计划和有系统的活动,经常性地针对整个项目质量计划的执行情况进行评估、检查与改进等工作,向管理者、顾客或其他方提供信任,确保项目质量与计划保持一致。软件质量保证人员以独立审查方式,从第三方的角度监控项目开发任务的执行,就软件项目是否遵循已制定的计划、标准和规程给开发人员和管理层提供反映产品和过程质量的信息和数据,提高项目透明度,确保项目实施中质量问题尽早发现并解决,协助软件开发组取得高质量的软件产品。
质量控制是对阶段性的成果进行测试、验证,为质量保证提供参考依据。
同行评审过程利用技术同行与行业专家的专业知识,及早发现软件问题。
软件测试是保证软件质量不可或缺的重要组成部分,经过测试计划、测试案例的设计与评审,引入专业的测试工具,对测试过程、案例、BUG进行管理,实现自动化回归测试、性能测试,软件系统的正确性、稳定性均会有大幅提升。
组织级知识库综合了项目经验教训,能够对缺陷的预防和跟踪提供有效的帮助。
软件质量管理应该贯穿软件开发的全过程,而不仅仅是软件本身,软件质量不仅仅是一些测试数据、统计数据、客户满意度调查回函等等,衡量一个软件质量的好坏,应该首先考虑完成该软件生产的整个过程是否达到了一定质量要求。
一、 选择主题的背景及原因/预期结果
随着计算机与因特网的普及和社会信息化进程的加快,计算机软件的地位已发生了巨大的变化,它已成为支撑社会正常运行和发展的重要基础设施。软件变得越来越复杂,人们对软件的要求也越来越高,特别是对软件的可靠性、易用性、应变性和兼容性等各方面都提出了很高的要求。
软件的生产方式也发生了巨大的变化。开始时是手工业生产方式,软件的质量依赖于软件编制者个人的技艺和才智。后来,演变为工业化的规模生产,软件成为软件公司一批开发人员共同协作的产品。这时,软件产品的质量在很大程度上取决于软件公司实施的开发过程的优化程度和具体的管理水平。现在,又进一步扩展为软件生产的社会化。一个软件系统常常要由不同软件专业公司生产的软件构件产品集成而成。于是为保证软件的质量,又要求有相关的统一标准和协议,以及按照标准进行的测试和认证。软件质量的控制和管理技术是一门实践的技术,它是根据软件开发的大量实践经验积累而来的。这其中有很多成功的经验,也不乏惨痛的失败教训,例如:
(1)在美国宇航局的"旅行者"计划中,天王星探测器就是因为深度太空网络软件发送信息迟缓和能力衰竭而处于危险之中。
(2)软/硬件干扰问题是使一些航天飞机经常推迟发射时间的主要原因。
(3)在美国国防部某项工程中,事先设计好的先进程序无一可用,从而导致AFTI/F-16的首航时间耽搁了一年。坦诚地讲,我们国家软件产业发展较晚,目前真正能称得上是有一定规模的,具有大型自主软件开发能力的软件公司还不多,还缺乏这种规模化开发软件的实践经验。因而,人们往往对软件质量管理的重要性和必要性认识不足,理解不深。
近年来,软件质量问题对整个软件产业的影响日益加深,软件质量控制工作已经成为其中不可或缺的部分。同时,进行软件质量控制也是软件项目中比较繁重的工作,涉及质量计划编制、质量保证、质量控制等多个方面。
在很多软件企业里,软件质量管理在内部开发产品时做的相对较好:因为产品开发通常在各个软件企业的研发中心进行,涉及的人员以内部为主,进度压力相对较小,可以投入时间和精力来开展软件质量管理。对于有客户进行参与的软件实施项目,多数企业为了节省成本和赶进度,往往会忽略质量管理,实际上,很多企业通过ISO9001、CMM、CMMI等质量认证的目的就不是为了提高质量:有的企业是为了跟风,有的企业则是为了向客户展示证书。
在软件开发实践中,软件质量管理可以依靠流程管理(如缺陷处理过程、开发文档控制管理、发布过程等),严格按软件工程执行,来保证质量。如:
·通过从"用户功能确认书"到"软件详细设计"过程的过程定义、控制和不断改善,确保软件的"功用性";
·通过测试部门的"系统测试"、"回归测试"过程的定义、执行和不断改善,确保软件的"可靠性"和"可用性";
·通过测试部门的"性能测试",确保软件的"效率";
·通过软件架构的设计过程及开发中代码、文档的实现过程,确保软件的"可维护性";
·通过引入适当的编程方法、编程工具和设计思路,确保软件的"可移植性"等等。
建立项目质量管理体系,能够较好地解决目前项目开发过程存在的主要问题,大幅提升组织的计划与监控能力,使目标管理得到落实,有利于发挥信息科技的价值,提高软件交付质量,提升客户服务水平。
1.规范项目立项
项目立项过程强调了项目前期的调研工作,要求项目立项必须进行业务可行性分析、技术可行性分析、投入产出分析和项目风险评估,同时要加强项目过程的财务管理和资源管理。项目结项后及时启动后评价机制,保证所有项目通过同样的立项过程,这样做能够有效地解决项目前期准备工作不够充分而浪费信息科技资源的问题。
2.规范需求管理
需求开发与管理过程为项目组分析、控制和跟踪需求提供依据,保证项目范围变化的可控性。在需求阶段建立以技术人员为主导、业务专家配合的需求开发分析过程,能够减少需求定义、非功能需求、运营需求、安全需求、需求可测试等各方面的缺陷。同时,通过同行评审过程、变更管理过程,需求跟踪矩阵等工具,建立需求准入的有效控制手段和标准,能够有效解决项目需求不明确以及在开发过程中需求频繁变更的问题。
3.提升项目整体管理能力
项目整体管理能力主要体现在集成项目计划、实施、控制的能力,项目整体管理包括如下几个方面:项目计划、跟踪与监控、风险管理、数据统计分析过程、软件质量保证等。这几个方面贯穿、交织于整个软件开发过程之中。其中,项目计划是项目管理的基础,主要包括工作量、进度以及成本的估计,并根据估计值制订项目开发计划,包括项目范围、进度计划、质量管理、配置管理、外包管理、跟踪与监控、测试管理、资源管理、沟通管理、培训等子计划;跟踪与监控过程、风险管理及数据统计分析过程主要根据项目计划度量项目进度、成本、质量、风险、用户满意度等方面的数据及时分析项目实施过程出现的偏差,有效防范和化解项目的风险;软件质量保证人员在项目计划阶段协助项目经理制订项目计划,提供关于项目估算、标准使用、过程裁剪、生命周期模型选择等方面的咨询和指导,在监督过程中一旦发现不一致的情况,及时向项目经理报告,提供解决建议并跟踪解决,使组织及项目经理对项目的情况及风险管理能力得到进一步提高。
除了规范过程活动,项目经理的个人管理能力、沟通能力以及统一引入适当的项目管理软件工具和过程知识库对于提高项目整体管理能力及管理效率也起到十分重要的作用。
4.降低外包管理风险
外包管理过程包括制订外包管理计划、外包商选择、签订外包合同、跟踪监控合同执行、验收测试、交付验收、外包商评价等关键活动,外包经理与质量保证人员定时组织评审外包商的开发计划、工作产品,跟踪外包项目计划执行情况、配置活动、质量保证活动,将有效减少项目过程中信息不对称,提高对外包公司的管理能力,外包项目成功率,降低和规避外包风险。
5.提高软件质量
一、 应用的目的
软件是信息技术的核心。软件产品的质量直接影响到国民经济信息系统和国际装备系统的可靠性与安全运行,在国内外软件市场激烈的竞争中,提高软件质量已经成为一个软件企业生存发展的关键问题,软件企业或从事软件工程项目的机构在实践工作中在软件质量问题上应认识到:
1、 软件本身的特点和目前软件开发模式使隐藏在软件内部的质量缺陷不可能完全避免,这包括:
1).软件需求模糊以及需求的变更,从根本上影响着软件产品的质量。
2).目前广为采用的手工开发方式难于避免出现差错。
3).软件开发过程中各个环节的接口处不易保证正确性。
4).软件测试技术具有局限性。
5).软件质量管理的实际困难。
A. 软件质量指标许多尚未量化。
B.目前许多软件机构的产品质量责任尚未落实到人
C.不规范的开发习惯难于纠正。
D.人员之间的沟通容易出现问题。
E.软件项目组中人员流动会影响产品质量。
2、 从技术上解决软件质量问题的效果十分有限
1).构件技术尚未普及
2).我们对软件质量本身的认识还很不成熟
3).我们尚未找到理想的软件测试技术
3、 技术人员和管理人员在软件开发工作中仍有一些不正确的认识需要纠正,这需要在企业建立和实施质量体系的过程中加以解决。
4、 目前多数软件企业的质量管理尚未得到应有的重视,他们需要认真总结教训,并将其渗入质量体系形式制度化的规定。
5、 软件开发必须靠加强管理来实现工程化,质量管理要体现在建立和实施开发规范中,保证软件工作的各个步骤和各个岗位的工作都符合要求,并且即使产品在使用中出现了问题,也能及时的发现,及时妥善解决。
科学的软件质量管理、控制、度量和保障的方法和手段是可以形成一种面向软件产业发展的服务能力的,一旦这种能力与软件产业结合并广为产业界所接受,它将对软件产业的发展起到巨大的推动作用。
质量监测分析时,对于已发现的不合格或潜在不合格,应制定相应的纠正措施或预防措施,以消除不合格或潜在不合格的原因,防止不合格的发生。纠正措施或预防措施制定后,应对质量计划进行相应的调整,保证项目的顺利实施。
项目收尾包括项目评估和项目终止两个阶段。项目收尾阶段的质量控制是一个非常重要而又容易忽视的内容。
项目质量评估不仅仅是在项目完成后进行,还包括对项目实施过程中的各个关键点的质量评估。项目质量评估看起来属于事后控制,但它的目的不是为了改变那些已经发生的事情,而是试图抓住项目质量合格或不合格的精髓,以使将来的项目质量管理能从中获益。
项目终止阶段,是在决策项目终止后,检查项目文件资料完备,包括项目施工质量验评表、竣工报告等,同时进行项目总结。项目总结是一个把实际运行情况与项目计划不断比较以提炼经验教训的过程。通过项目质量计划和总结,项目过程中的经验和教训将得到完整的记录和升华,成为“组织财富”。
3. 软件产品质量的保证是软件项目管理的一个重要内容。软件项目的目标不仅仅是进度目标和成本目标,更重要的就是质量目标,质量直接决定了软件产品能否生存。前提是我们在做项目计划的时候首先要根据需求确定质量目标和制定质量计划。
1) 过程
要提高质量需要强调我们对产品质量的保证不是依靠的团队中一两个重要成员,而是我们有相应的过程和方法论来保证质量,保证产品质量的过程是可以持续的。对于很多项目我们都不建议采用CMMI里面较为重量级的各种过程,但是对于产品质量提升有帮助的各种过程我们仍然需要去将其规范化和流程化。与此相关的主要有规范类的文件,比如需求编写模板和规范,设计规范和模板,代码编写规范和模板,数据库设计的规范和模板,界面设计规范和模板,测试用例模板。对于过程管理方面需要定义的主要有任务和工件的输入输出要求,配置管理和源代码管理,软件生命周期模型,缺陷跟踪和管理,问题和风险跟踪管理,变更管理。
2) 培训
最重要的质量意识就是预防胜于检查,强调一次要事情做对,强调上游工序为下游提供合格的中间产出物,尽量减少各种缺陷的泄露。很多时候质量问题并不复杂,更多是团队成员没有质量意识,没有负责任的工作态度。提升质量最关键有两个方面,首先是我们都有意愿和意识来提升产品质量,其次是我们要有相应的能力和技能来保证产出物的质量。
第一点我们依靠的团队绩效规则的建立,团队建设,质量文化的组建形成,员工态度和责任感的培养等内容。第二点我们强调的是培训,以师带徒,自我学习,个人知识管理方法,问题管理,学习型组织,读书会等各种方式来提升技能。
3) 评审
评审是软件开发过程中保证质量的一个重要活动,项目软件开发往往会跟踪选择的软件生命周期模型分为多个阶段,对于较大点的项目还有严格的岗位角色划分,每个阶段都是不同的成员在进行工作。因此如果各个阶段的产出物的质量不能够很好保证的话,将导致缺陷泄露和后续大量的返工,这些都是我们不希望看到的坏质量成本投入。
首先评审不是来检查产出物的各种低级错误的,每个人在思考问题上都有局限性和盲点。评审是涉及到需求,设计,开发,测试等各种角色的成员共同来从不同的角度来发现工件的各种问题。比如对于需求问题,测试人员在评审的时候重点关注的是该条需求描述和业务规则的可测试性,而设计和开发重点是可实现性。评审涉及到正式同行评审,多人复审,单人复审,代码走查等各种方式,需要根据项目的实际情况来选择使用。我们需要重点防止的就是需求和总体设计阶段的缺陷泄露,对于这种泄露往往都会造成大量的返工。
4) 测试
测试是保证软件质量的最后一道关口,是一种迫不得已的行为,根据我们的质量意识应该要尽量做到问题不是到测试阶段才发现和暴露出来。很多问题在测试阶段才发现返工成本都是很大的。测试有单元测试,集成测试和系统测试,验收测试等各个阶段。在某一个功能或模块在交付给测试人员进行测试的时候,开发人员应该根据需求和设计进行较为充分的自测。这样的话系统测试的重点才能够真正去关注全流程的贯通和各种可能的业务场景组合和编辑,而不是关注某一个具体的实现功能点。
敏捷开发里面强调测试驱动和单元测试,但敏捷里面的单元测试还有个重要的作用是通过单元测试的编写来细化需求和设计,这对团队每个成员都会有较高的技能要求。同时要注意单元测试的投入成本,很多时候我们来开发人员的自测和系统测试都做不好就去盲目的实施单元测试是得不偿失的。
总结
每个项目的实施总是拥有同样的总体目标:质量、时间和成本。三者是一个相互制约、相互影响的统一体,其中任一项目标变化,都会引起另两个目标变化,并受其制约。如何合理的保证项目质量,正确处理质量与时间、成本之间的矛盾是项目质量管理的一个难点,这需要整合项目所有方面的内容,保证按时、低成本地实现预定的质量目标。
根据侧重点不同,项目可分为质量倾斜型、工期倾斜型及成本倾斜型体系。我们在编制项目计划时,一般而言是时间、成本、质量标准均已确定,在项目实施过程中就需在从客观因素、具体情况出发,根据将要采取的行动和可能导致的后果进行综合分析研究;按切合实际的原则,使项目进展平衡有节奏地进行,以求达到预期目标。避免出现工期紧张或成本减少,导致质量降低的现象,而质量下降又往往造成返工等后果而导致延长工期和增加成本。
在IT业处于发展的初级阶段时,由于大多数软件比较简单,软件质量较容易控制,对其的测试工作也不复杂,往往是软件开发企业在开发完成后进行一下简单的检测就可以了。但在IT业发展到一个高级阶段后,系统越来越精密,而软件也越来越复杂,影响的范围也不断扩大。因此,这时期开发的软件就必须进行十分严格的测试。否则,不仅会引发企业销售收入下降和运营成本的增加,甚至给企业带来法律责任。而在金融、电信这种系统趋于全国集中,风险波及面大,业务影响广泛的行业,其产生的后果更是不堪设想。全面、严谨的测试和评估是降低企业IT系统风险的最佳实践,没有经过质量测试就上线运行的IT系统犹如一颗“定时炸弹”。
人是一切人类活动的基础,要提高软件开发质量,就必须以人为本,首先提高人的质量。通过标准化、规范化的建设和落实,通过创建良好的社会和企业质量环境,在企业内部不断改进开发过程质量、项目管理质量,改进质量措施。针对具体项目进行良好的分析设计规划,编写出质量优良的系统程序,确保数据(信息)及其管理的质量,为客户、为社会提供满意的产品和服务。
相信随着企业对软件质量重视程度的提高,质量管理在项目中的应用越来越规范,不久的将来,我国的软件行业的水平将会得到巨大的提升。