软件质量管理体系概论杨根兴博士软件企业实施质量管理体系的一般过程从企业宣布开始建立质量管理体系的那天起,企业最高领导人的全员动员,是宣告企业进入状态的必不可少的步骤;咨询机构的加入是一种外部压力,对全员进行质量体系基础知识的培训和考试是增强员工质量意识的重要措施;对企业组织架构的调整是建立体系的基础;共同参与提出质量方针和目标、编写质量手册和过程文件,以及质量体系的试运行等步骤,实质上是企业内部进行沟通、取得共识、开始走向成熟的过程。质量认证咨询工作的三个阶段1.企业现状调查与诊断和ISO9000族标准与软件工程培训阶段。对企业的组织和管理现状进行调查,与企业管理层一起讨论,找出问题的症结,提出有关组织架构和管理流程调整的建议;为全体员工进行ISO9000族标准与软件工程方面的培训,培训的内容包括:ISO9000标准的基本知识和条款、软件质量管理的要点、软件过程模型(ISO12207信息技术-软件生存周期过程)、CMM软件能力成熟度模型、和软件过程度量等方面。确定企业的质量目标、质量方针,质量体系文件的策划。质量认证咨询工作的三个阶段2.质量体系文件的编写阶段对编写小组成员进行文件编写的培训,提出编写的方法和要求,给出文件编写样本,构建文件框架,然后分工编写。对第一稿的体系文件进行符合性检查,逐个文件进行深入细致地的讨论和修改,使编写的文件与标准的要求完全符合,对文件进行全面的修改,产生文件的第二稿。对体系文件进行一致性和可操作性检查与修改,产生了体系文件的第一个试运行版本。质量认证咨询工作的三个阶段3.质量管理体系的试运行阶段遵循“一要坚持、二要改进”的原则开始质量管理体系的试运行。“一要坚持”,就是所有的部门和人员都要按照已建立的文件体系执行,规范行为;“二要改进”,就是在试运行中发现的问题应按照纠正预防措施所规定的程序进行改进,如发现质量体系不合理的地方按规定的程序进行修改。质量管理主要涉及三方面的问题规范化、量化和固化:(1)规范化就是按照ISO9001标准建立一套适合软件企业的质量管理体制,同时引入CMM中的相关关键过程作为规范管理的手段;(2)量化就是要采用基于事实的决策方法,收集数据进行量化分析,实现质量管理的反馈控制;(3)固化就是要建立一套行之有效的文件化程序,使得企业无论在什么地方、由什么人管理,都要按照统一的模式去实施。2000版ISO9000族文件结构核心标准(4)名称说明ISO9000ISO9001ISO9004ISO19011质量管理体系-基本原则和术语质量管理体系-要求质量管理体系-业绩改进指南质量和环境审核指南ISO8402+ISO9000-1;替代了9002和9003;质量管理的八项管理原则指导内审和外审管理工作其它标准(1)ISO10012测量控制系统ISO10012-1~-2技术报告(6)ISO/TR10006ISO/TR10007ISO/TR10013ISO/TR10014ISO/TR10015ISO/TR10017项目管理指南技术状态管理指南质量管理体系文件指南质量经济性管理指南教育和培训指南统计技术指南ISO10006ISO10007ISO10013ISO10014ISO10015ISO10017小册子(2)12质量管理原理选择和使用指南小型企业的应用ISO9001:2000版目录Level1初始级不一致的管理Level2可重复级项目管理Level3已定义级过程管理Level4已管理级能力管理Level5优化级变更管理可重复实践通用工程过程定量理解和控制持续改进实践软件CMMCMMV1.1关键过程域等级关键过程域5优化缺陷预防技术变更管理过程变更管理4已管理定量过程管理软件质量管理3已定义组织过程焦点组织过程定义集成软件管理软件产品工程组间协调培训大纲同行评审2可重复软件需求管理软件项目策划软件计划跟踪软件分包管理软件质量保证软件配置管理国际标准ISO/IEC12207信息技术-软件生存周期过程文档编制配置管理质量保证验证过程确认过程联合评审审核过程问题解决管理过程基础设施改进过程培训过程获取过程供应过程开发过程运行过程维护过程基本过程(5)支持过程(8)组织过程(4)ISO9001与CMM的关系最大的相似点:(1)“言所行、行所言”(2)强调管理、过程、规范化和文档化不同点:(1)CMM把焦点严格对准软件(2)ISO9001的范围包括:硬件、软件、流程性材料和服务两者之间的联系:(1)CMM2级与ISO9001强相关(2)CMM的每个关键过程域至少按某种解释与ISO9001弱相关软件企业建立质量管理体系要解决的主要问题1.分清制造业与软件业的区别,理清软件企业的业务流程。过程不同:软件的研发过程一般归结为:计划-需求分析-概要设计-详细设计-编码-测试-运行维护:质量的关注点不同:软件开发质量的关注点主要放在研发阶段,而生产(软件复制)、仓库存储运输阶段则显得比较次要;产品的功能复杂度不同:软件产品的复杂度大大高于制造业的产品;产品的形态不同:软件产品是在磁介质载体上的信息产品,可视性差,更需要加强软件过程的管理与控制。制造业和软件业的对比制造业:软件业:设计生产运输仓储功能度设计生产运输仓储功能度2.明确管理职责、调整组织结构。第一步就是要进行企业情况诊断,根据企业的实际业务流程和依据ISO9001标准的要求,进行组织架构重构。第二步就是有明确岗位分工与职责,特别要明确与质量管理有关的岗位和职责,为建立质量管理体系打下基础,以适应建立质量管理体系的需要。软件企业建立质量管理体系要解决的主要问题3.识别和建立软件企业的过程。应用过程的方法是ISO9000的重要原则。虽然ISO9001-2000标准中规定了主过程和支持过程,但它是面向通用企业的。对软件企业,应该应用ISO12207信息技术-软件生存周期过程和ISO9000-3标准,对照CMM软件能力成熟度模型框架,结合软件企业的具体情况,进行过程建模,这是建立一个适宜的软件企业质量管理体系的前提软件企业建立质量管理体系要解决的主要问题过程复杂度1,000-5,000独立的程序员5,000-25,000小规模的团队25,000-100,000大规模内部细分的团队或部门100,000-1,000,000多个团队1,000,000-10,000,000多个公司10,000,000-100,000,000国家级企业代码行数实现者影响软件质量的因素与软件产品质量有关的四方面因素:产品质量过程质量开发技术人员因素成本时间、进度过程中的角色过程管理软件工程师严格的工作条例技术资产环境4.建立文件化程序。再好的管理方法如果没有写成文件化的程序,也是空谈。建立文件化程序就是为了将质量管理体系固化下来,企业的所有过程和操作都要做到有章可循。建立文件化程序的过程实际上是对管理流程的一次全面整理的过程。软件企业建立质量管理体系要解决的主要问题ISO9001的过程描述1.目的2.范围3.术语定义(必要时)4.职责5.程序(可以包含流程图)6.相关程序7.记录CMM与ISO9001的比较软件企业建立质量管理体系要解决的主要问题5.解决好软件配置管理和软件设计变更控制。由于软件需求的不确定性,软件设计的变更是不可避免的。建立控制基线是加强变更控制的前提。在设计发生变更时软件的配置也必须随之改变,所以将软件配置管理作为一个关键过程纳入质量管理体系是一项重要的任务。基线(baseline)是软件生存期各开发阶段末尾的特定点。它的作用是把各阶段的开发工作分得更加明确,便于检验与确认。基线与变更管理计划需求分析设计编码测试项目开发计划需求规格说明设计规格说明程序清单测试报告计划基线需求基线设计基线编码基线测试基线软件项目成功率调查:Cancelled29%51-100%Late9%101-200%Late16%Morethan200%Late6%On-Time26%21-50%Late8%Lessthan20%Late6%ProjectResolutions缺陷纠正得越晚成本越大PhaseThataDefectIsCreatedCosttoCorrectRequirementsArchitectureDetaileddesignConstructionRequirementsArchitectureDetaileddesignConstructionRelease50-200X1XPhaseThataDefectIsCorrected50-200X1XPhaseThataDefectIsCreatedCosttoCorrectRequirementsArchitectureDetaileddesignConstructionRequirementsArchitectureDetaileddesignConstructionRelease50-200X1XPhaseThataDefectIsCorrected50-200X1X及早纠正大部分的缺陷FixHereNotHere项目管理过程制定计划—执行计划—实现项目目标建立一个基准计划:清晰地定义项目目标;分解项目—子项目(或自任务);界定必须执行的具体活动;以网络图的形式图示描绘活动(次序与相互依赖性);时间预算、成本预算;估算项目进度计划及预算。项目成功的关键因素最重要的10大因素:1)清楚地界定目标及项目任务;2)高层管理者的支持;3)有能力的项目经理;4)有能力的项目团队;5)充足的资源;6)客户的参与协商;7)良好的沟通;8)对客户的积极反应;9)适当的监控和反馈;10)正确的技术;项目经理的12条要则1)弄清项目经理所面临的问题、机会和期望;2)明白冲突是团队发展中的自然之物;3)弄清谁是利益关系者;4)意识到组织的强烈政治色彩;5)必须精于领导,但应灵活机动;6)明白判断项目成功的四个标准:预算、进度计划、绩效标准、客户满意;项目经理的12条要则7)充当激励者、教练、活跃气氛者、维和人员和冲突裁决人;8)注意你的情绪——团队成员培养品质的基础;9)不能安于现状,经常做“如果—那么”的假设;10)不要因小事而迷失了项目的目标;11)有效地利用好时间;12)首要任务是:计划、计划、计划。项目组角色项目经理开发经理计划经理质量/生产经理技术支持经理项目经理职能1)负责制定项目/产品开发策略;决定开发模式与开发方法;2)负责制定开发计划并监督实施;3)负责实现全部产品;4)负责制定出集成和系统测试计划;5)负责制定测试大纲并且进行测试;6)负责制定产品的用户文档;7)充当开发工程师;开发经理职能1)领导项目组制定开发策略;2)领导项目组给要生产的产品(项目)制定最初的大小和时间估计;3)领导进行软件需求细节的开发;4)领导项目组制定出高水平设计;5)领导项目组制定出软件设计细节;6)领导项目组实现这个产品;7)领导项目组制定出建立、集成和系统测试计划;8)领导项目组制定测试材料并且进行测试;9)领导项目组制定产品的用户文档;10)参与制定开发周期报告;11)充当开发工程师。计划经理职能1)领导项目组产生下一开发周期的任务计划;2)领导项目组产生下一开发周期的日程表;3)领导项目组产生平衡的小组发展计划;4)对照计划跟踪小组的进展情况,获得项目组成员每周的数据;5)参与产生开发周期报告;6)充当开发工程师。质量/生产经理职能1)领导项目组制定和跟踪质量计划;2)将质量问题及时警示给项目组领导和开发部主管;3)领导项目组定义和文档化它的过程并且维持过程改进过程;4)建立和保持项目组开展标准和系统词汇表;5)在提交配置控制委员会之前符合和通过所有的产品;6)充当项目组检查调节员;7)充当项目组会议记录者;8)参与制定本开发周期报告;9)充当开发工程师。支持经理职能1)领导项目组安排必要的工具与设备;2)主持配置控制委员会,管理更新控制系统;3)管理配置管理系统;4)维护系统词汇表;5)处理项目组的问题和风险跟踪;6)