软件质量管理体系建设方案详细
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于软件质量管理体系建设的
方案
参考资料:
《cmmi3级软件过程改进方法与规》
《 ISO9001:2000标准》
修改记录:
作者简介:
软件企业质量经理、高级项目经理,联系方式__qq:317974257
方案说明:
参考了《cmmi3级软件过程改进方法与规》、《 ISO9001:2000标准》。
同时参考了业界同行
写的相关方案或文章,吸收了他们的优秀见解。
1.引言 (3)
1.1软件质量概述 (3)
1.2公司软件质量现状分析 (4)
1.3软件质量管理的特点 (4)
1.4软件质量责任分配 (7)
2.软件质量管理体系建设总体方案 (7)
2.1进一步推动软件质量管理体系建设的原则 (8)
2.2软件质量管理体系完善需要解决的主要问题 (9)
2.3配置管理—实施软件质量管理的重要步骤 (10)
2.4进一步完善我们的测试管理体系 (12)
2.4.1.软件测试的组织与管理规划 (13)
2.4.2.测试管理体系过程控制 (15)
2.4.2.1测试流程模型 (16)
2.4.2.2测试流程控制 (16)
2.4.2.3测试小结 (18)
2.5软件质量保证(SQA)的实施 (19)
2.5.1.SQA概述 (19)
2.5.1.SQA实施 (20)
2.5.2.SQA与SQC区别与协作 (22)
2.6全面软件质量管理 (23)
2.6.1.全面软件质量管理 (23)
2.6.2.全面软件质量管理的方法---制定质量管理计划 (23)
2.6.3.全面软件质量管理的方法---技术评审 (24)
3.结束语 (24)
1.引言
1.1软件质量概述
随着信息技术的飞速发展,使软件产品应用到社会的各个领域,也造就了软件行业激烈竞争的生存环境,随着软件规模及复杂性急剧加大,软件质量已经成为人们共同关注的焦点。
技术是软件企业的生命,而质量则是它的灵魂,软件企业要在竞争中占有一席之地,软件质量保证是第一要素。
由此,软件质量的重要性是不言而喻的。
软件质量是指与软件产品满足规定的和隐含的需求的能力有关的特征和特性的总和。
通常来说,软件质量应该包含六方面的特性: 功能性、可靠性、易使用性、效率、可维护性、可移植性。
软件质量管理包括:软件质量计划编制、软件质量保证和软件质量控制三个过程域。
质量计划就是为了实现质量目标的计划,它主要结合各个公司的质量方针,产品描述以及质量标准和规则通过收益、成本分析和流程设计等工具制定出来实施方略,其容全面反应用户的要求,为质量小组成员有效工作提供了指南,为项目小组成员以及项目相关人员了解在项目进行中如何实施质量保证和控制提供依据,为确保项目质量得到保障提供坚实的基础。
质量保证(Quality Assurance ,QA)的目的是提供一种有效的人员组织形式和管理方法,通过客观地检查和监控“过程质量”与“产品质量”,从而实现持续地改进质量。
质量保证是一种有计划的、贯穿于整个产品生命周期的质量管理方法。
质量控制是对阶
段性的成果进行检测、验证,为质量保证提供参考依据,它是一个PDCA循环过程。
1.2公司软件质量现状分析
公司的软件开发历经多个生产个环节,产生大量的中间产品,每个环节都有可能带来产品质量问题;同时由于软件产品是逻辑体,不具备实体的可见性,因而难以度量,质量也难以把控,因此如何有效地管理软件产品的质量一直是我们面临的挑战。
虽然我公司在研发电力行业信息化相关软件方面取得很大成绩,但是其软件能力成熟度与国同行业知名企业相比,还有一定的差距。
我公司研发的软件产品,除了产业规模偏小、自主创新能力不足之外,在易用性、可靠性、可移植性、可维护性、可扩展性及系统集成等方面也存在着一定的质量问题,导致“用户抱怨较多、产品投产后缺陷纠正过多、公司售后服务投入过大”的不利局面,制约了我公司在电力软件行业的持续快速健康发展。
究其原因,可能是以下几种原因造成的:(1)对软件工程标准化重视不够。
(2)软件质量管理体系不健全,实施效果不佳。
(3)企业对测试工作投入不足,测试管理和测试环境有待完善,测试技术有待提升。
1.3软件质量管理的特点
要解决软件的质量问题,同时保证开发的成本和项目的进度控制、解决研发中的诸多不规问题,关键是要建立起完善的软件质量管理体系,把软件开发过程
合理地监控起来,管理起来,进而达到提高产品的质量,控制产品开发的进度和成本的目的。
分析软件质量管理的特点,主要有以下几点:
1、软件质量管理是贯穿软件研发的全过程,而不能仅局限于软件本身
软件质量不仅仅是一些测试数据、统计数据、客户满意度调查反馈表等等,衡量一个软件质量的好坏,应该首先考虑完成该软件生产的整个过程是否达到了一定的质量要求。
在软件开发实践中,软件质量控制可以依靠流程管理(如需求管理、缺陷管理、配置管理、软件发布等),严格按照软件工程执行,确保软件的功能性、可靠性、易使用性、效率、可维护性、可移植性。
2、对技术文档的评审是控制软件质量的有效方式
研发过程中的很多技术文档作为产品的组成部分,也需要像对产品一样进行检验,而对技术文档的评审就构成了产品检验的重要方式。
技术评审主要有以下好处:通过消除工作成果的缺陷而提高产品的质量;技术评审可以在任何开发阶段执行,不必等到软件可以运行之际,越早消除缺陷就越能降低开发成本;开发人员能够及时地得到同行专家的帮助和指导,无疑会加深对工作成果的理解,更好地预防缺陷,一定程度上提高了开发效率。
3、运用技术手段保证质量
利用多种工具软件进行质量保证的各种工作,如用Svn软件进行配置管理、文档管理和软件变更控制。
采用先进的系统分析方法和软件设计方法(OOA、OOD、软件复用等)来促进软件质量的提高。
4、应用质量管理思想满足顾客需求
缺陷预防
分析已经产生的缺陷并采用相应的措施以避免这类缺陷重复出现, 找出并确定引起缺陷的通常原因。
不公如此,还要规划缺陷预防活动, 对引起缺陷的通常原因划分优先级并系统地予以消除。
紧紧抓住用户需求
充分地满足客户的需求,不管是付钱的顾客,还是软件的使用者,都要尽可能地满足。
采用快速原型法,尽快演示(Demo)给用户并及时获取用户的反馈,根据用户的反馈不断修改软件,而不是全部完工后再最后交给用户。
否则,要改的地方可能很多。
甚至推翻重来。
充分设计之后再编码,防止因考虑不周而造成返工。
●牢牢控制对缺陷的修改
通过诸如TD之类的强大的软件缺陷管理平台,记录、跟踪和控制软件缺陷的修复。
●对软件进行充分的系统测试
在软件通过集成测试后,还需要进行充分的、完整的系统测试和回归测试,直至所有的缺陷关闭为止。
●把握软件放行的尺度
商业目标决定质量目标。
提高软件质量的最终目的是为了赢利,而不是创造完美无缺的产品。
因此对于普通商业软件而言,并不是“质量越高越好”,而是恰好让广大用户满意,并且将提高质量所付出的代价控制在预算之。
软件零缺
陷几乎是不可能的,对遗留的缺陷要进行充分分析,只要能满足用户需求,软件遗留的缺陷可以在今后升级版本中解决。
1.4软件质量责任分配
我们公司已经建立了初步的研发管理体系,项目开发具备一定的规化,在研发流程上采用ISO9001:2000的标准进行。
我们公司目前每个项目除配备了项目开发所需角色外,还专门配备了配置管理组、测试组和质量保证组(目前此角色由项目管理部的监理来履行此项职责,但尚未真正开展活动)确保软件质量管理的实施,下面针对这三种角色进行说明:
2.软件质量管理体系建设总体方案
软件的质量的重要性日益凸现,国大型软件企业不断在CMMI上投入大量资源提高软件能力成熟度,而中小软件企业也纷纷积极行动起来,不断改进软件质量。
目前我公司实施软件质量管理在过去一段时间效果不是太好,分析其原因,可能有以下几点:
1、公司过去面对的是项目多,项目杂的复杂情况。
因此无暇在软件质量的方面投入过多的资源。
2、公司是项目型软件企业,主要以承接客户的委托开发项目为主,它主要的关注焦点是在项目的合同期,在项目成本许可的条件下,交付出客户满意的开发项目。
而软件质量并没有成为大家关注的焦点,暂时也不会影响公司的生存。
3、在实施的过程中,易发生质量控制人员和研发人员的矛盾,降低实施的有效性;
因此针对我公司质量管理实践的现状,我们不能操之过急,急于求成,应该
对质量管理体系的建设进行有计划有步骤的稳步规划和推进,特别需要根据客观情况,制定一定的实施原则,才可能有效地推动公司软件质量管理工作。
2.1进一步推动软件质量管理体系建设的原则
1、首先作检验型质量管理,再延伸至过程型质量管理
所谓的检验型质控,是指在产品在某个阶段结束的时候,通过有效的评审和测试验证其是否达到了预期的质量需求,主要的步骤有需求评审、概要设计评审、详细设计评审、代码走查或评审、测试、测试评审等过程。
而过程型质控是针对软件研发过程的不断改进,来提高软件的质量。
在中小软件企业中提倡首先作检验型质控,再作过程型质控是基于下面的几点考虑:
首先,检验型质控(评审、测试)是解决显性问题的最有效方法。
通过检验型质控,使软件质量得到较快提高,增强质量人员和公司领导对公司质量管理工作的信心,为过渡到过程型质量控制奠定坚实的基础。
其次,目前普遍存在的软件研发人员质量意识薄弱,须通过有效的检验型质控为研发人员进行初级的质量意识教育。
当我们的检验型质控发展到一定的阶段,真正起到了作用后,再开始进行过程型质控的工作,使质量的深层次问题不断得到解决。
2、过程型质量管理要循续渐进,尊重客观规律,避免拔苗助长
过程型质控是对研发工作流程的改动,这种改动对项目组成员来说改动了他过去多年形成的一些习惯,并且改动会增加项目组的工作量,这种改动或多或少地会遭受到项目组成员有意无意的抵制。
因此,在制定过程型质控方案的时候要判断好优先级,从最需要改动的过程着手,一步一步地做。
避免急于求成,使工
作得不到研发人员的理解和支持。
3、软件质量管理是一种服务,需要经验丰富的质量管理人才才能够胜任
质量管理实际上是对项目的一种质量服务,目的是对项目人员在质量上的一种帮助,帮助其发现问题、提供解决方法。
因此作为质量控制人员的能力需求上是比较高的。
同时,质量控制人员通过提供这种服务,能够拉近和研发人员的距离,研发人员能够更加接受过程型质控的改动,使质控工作的矛盾更小。
因此,建议从事质量管理的人员应该是从事较长时间项目研发、项目管理的人员,只有一个资历深的质量管理人员才能够真正地对项目研发提供一种高质量的服务。
4、加强相关人员的培训是工作中的重中之重
培训工作应该包括两个方面的容:一方面,在实施过程型质控过程中制定的过程、标准需要通过培训的方式来让所有的人员都理解并接受。
另一方面,需要通过培训的方式提高研发人员的质量意识。
只有质量意识提高了,才能大大减少质量管理人员的工作量。
2.2软件质量管理体系完善需要解决的主要问题
1、识别和建立软件研发的过程
通用的软件的研发过程一般归结为:项目立项-需求分析-概要设计-详细设计-编码-测试-运行维护。
我们公司在研发流程上采用ISO9000的标准进行,已经具备一定的规性。
我们可以应用ISO12207信息技术-软件生存周期过程,对照CMMI软件能力成熟度模型框架,结合软件企业的具体情况,进行过程建模优化,这是建立一个适宜的软件质量管理体系的前提。
2、明确管理职责、调整组织结构
第一步就是要进行软件质量管理情况诊断,根据企业的实际情况和依据ISO9001标准的要求,进行软件质理管理组织架构重构。
第二步就是有明确岗位分工与职责,特别要明确与软件质量管理有关的岗位和职责,为建立软件质量管理体系打下基础,以适应建立软件质量管理体系的需要。
由于公司在近几年一直再做软件质量管理的基础工作,因此这项工作具备一定的基础,例如:构建了较稳定的配置管理体系、测试管理体系也在不断的改进之中。
我们目前的最主要问题是在于缺乏一个有效的质量保证组织。
3、建立文件化工作程序。
再好的管理方法如果没有写成文件化的程序,也是空谈。
建立文件化程序就是为了将软件质量管理体系固化下来,相关的过程和操作都要做到有章可循。
建立文件化程序的过程实际上是对流程的一次全面整理的过程。
4、解决好软件配置管理和软件变更控制。
由于软件需求的不确定性,软件设计的变更是不可避免的。
建立基线是加强变更控制的前提。
在设计发生变更时软件的配置也必须随之改变,所以将软件配置管理作为一个关键过程纳入软件质量管理体系是一项重要的任务。
2.3配置管理—实施软件质量管理的重要步骤
软件配置管理简称SCM(Software Configuration Management的缩写),是在项目开发中,标识、控制和管理软件变更的一种管理。
配置管理的目标是记录软件产品的演化过程,确保项目组成员在软件生命周期中各个阶段都
能得到精确的产品配置。
其最终目标是实现软件产品在其生命周期全过程中的一致性、完整性和可追溯性,使产品极大程度地与用户需求吻合。
其主要工作和研究容和包括:标识配置项、定义基线、建立配置库和基线库、控制配置项和基线的变更、做好配置项和基线的定期备份和异地备份、定期进行配置审计、及时报告配置状态。
在软件质量体系的诸多支持活动中,配置管理处在支持活动的中心位置,它有机地把其它支持活动结合起来,形成一个有机整体,相互促进,相互影响,有力地保证了软件质量体系的实施。
从现在软件企业的发展战略来说,如何在技术日新月异、人员流动频繁的情况下建立本公司的知识库及经验库,把个人的知识及经验转变成公司的知识和经验,这对于提高工作效率,缩短产品周期,加强公司的竞争力具有至关重要的作用。
同时良好的配置管理有利于规管理,量化工作量考核,规测试,加强协调和沟通。
采用科学的配置管理思想,辅之以先进的配置管理工具,已经成为必不可少的手段。
配置管理工作是一个默默无闻,不受人关注,但是极为重要的工作。
这二年来,我们尽心尽责地配合所有项目组,为各个项目制定配置管理计划,建立配置管理系统,并且制定了配置管理制度和配置管理流程,构建了功能强大,安全有效,可操作性强的SVN(subversion)配置管理平台。
通过不断的实践摸索,积累了较为丰富的配置管理经验,随时可以为各项目组提供精确的良好的配置管理。
通过建立完整的代码对象库、业务经验库,将会给项目组以及软件测试的工作带来很大的便利,同时将会最大程度上降低了由于人员流失所造成的损失。
由于有了配置管理平台,目前研发部软件代码和文
档都得到了良好的管理,也使软件开发人员以及软件测试人员能够很好的协同合作开发产品,从整个公司层面来说也是一个不断地为公司积累业务经验和技术财富的过程。
通过努力,目前项目管理部已经建立了较为完整的软件配置管理体系,并且初步制定了配置管理制度和配置管理流程,构建配置管理信息化支撑平台,项目管理部将进一步加强配置管理工作,进一步完善软件配置管理体系。
2.4进一步完善我们的测试管理体系
我们公司采用的传统的软件测试流程一般是先在软件开发过程中进行少量的单元测试,然后在整个软件开发结束阶段,集中进行大量的测试,包括功能和性能的集成测试和系统测试。
在实际工作当中,随着开发的软件项目越来越复杂,传统的软件测试流程已经不能适应工作的需求。
针对传统软件测试模式的弊端,根据我们和研发部门相关人员的讨论,认为软件测试不能只发生在软件代码已经编写完毕之后,而应该在软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正。
这就是软件软件工程界的一种新的观点:“尽早测试”,所谓尽早测试是指在整个软件开发生命周期过各种软件工程技术尽量早的完成各种软件测试任务的一种思想。
软件的整个测试生命周期是与软件的开发生命周期基本平齐的过程,即当需求分析基本明确后我们就应该基于需求分析的结果和整个项目计划来进行软件的测试计划;伴随着分析设计过程同时应该完成测试用例的设计;当软件的第一个发布出来后,测试人员要马上基于它进行测试脚本的实现。
2.4.1.软件测试的组织与管理规划
1、测试的过程及组织
当设计工作完成以后,就应该着手测试的准备工作了,一般来讲,由一位对整个系统设计熟悉的设计人员编写测试大纲,明确测试的容和测试通过的准则,设计完整合理的测试用例,以便系统实现后进行全面测试。
在开发组将所开发的程序经验证后,提交测试组,由测试负责人组织测试,测试一般可按下列方式组织:
(1)首先,测试人员要仔细阅读有关资料,包括规格说明、设计文档、使用说明书及在设计过程中形成的测试大纲、测试容及测试的通过准则,全面熟悉系统,编写测试计划,设计测试用例,作好测试前的准备工作。
(2)为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。
(3)代码会审
代码会审是由一组人通过阅读、讨论和争议对程序进行静态分析的过程。
会审小组在充分阅读待审程序文本、控制流程图及有关要求、规等文件基础上,召开代码会审会,程序员逐句讲解程序的逻辑,并展开热烈的讨论甚至争议,以揭示错误的关键所在。
实践表明,程序员在讲解过程中能发现许多自己原来没有发现的错误,而讨论和争议则进一步促使了问题的暴露。
(4)单元测试
单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
(5)集成测试
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。
如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
(6)系统测试
软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。
包括恢复测试、安全测试、强度测试和性能测试等。
经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束,经验收后,将软件提交用户。
2、测试的人员组织
为了保证软件的开发质量,软件测试应贯穿于软件定义与开发的整个过程。
因此,对分析、设计和实现等各阶段所得到的结果,包括需求规格说明、设计规格说明及源程序都应进行软件测试。
基于此,测试人员的组织也应是分阶段的。
(1)软件的设计和实现都是基于需求分析规格说明进行的。
需求分析规格说明是否完整、正确、清晰是软件开发成败的关键。
为了保证需求定义的质量,应对其进行严格的审查。
(2)设计评审
软件设计是将软件需求转换成软件表示的过程。
主要描绘出系统结构、详细的处理过程和数据库模式。
按照需求的规格说明对系统结构的合理性、处理过程的正确性进行评价,同时利用关系数据库的规化理论对数据库模式进行审查。
(3)程序的测试
是指软件测试。
是整个软件开发过程付用户使用前的最后阶段,是软件质量保证的关键。
软件测试在软件生存周期中横跨两个阶段:通常在编写出每一个模块之后,就对它进行必要的测试(称为单元测试)。
编码与单元测试属于软件生存周期中的同一阶段。
该阶段的测试工作,由编程组部人员进行交叉测试(避免编程人员测试自己的程序)。
这一阶段结束后,进入软件生存周期的测试阶段,对软件系统进行各种综合的测试。
测试工作由专门的测试组完成,负责整个测试的计划、组织工作。
测试组的其他成员由具有一定的分析、设计和编程经验的专业人员组成,人数根据具体情况可多可少。
3、软件测试文件
软件测试文件描述要执行的软件测试及测试的结果。
由于软件测试是一个很复杂的过程,同时也是设计软件开发其他一些阶段的工作,对于保证软件的质量和它的运行有着重要意义,必须把对它们的要求、过程及测试结果以正式的文件形式定义清楚。
测试文件的编写是测试工作规化的一个组成部分。
测试文件不只在测试阶段才考虑,它在软件开发的需求分析阶段就开始着手,因为测试文件与用户有着密切的关系。
在设计阶段的一些设计方案也应在测试文件中得到反映,以利于设计的检验。
测试文件对于测试阶段工作的指导与评价作用更是非常明显的。
需要特别指出的是,在已开发的软件投入运行的维护阶段,常常还要进行再测试或回归测试,这时仍须用到测试文件。
2.4.2.测试管理体系过程控制
为了保证测试管理体系能够正确并且无误的实施与执行,我们设计了一套测试管理体系流程,用来控制测试管理体系执行。