· 软件质量控制是一组由开发组织和使用的程序和方法,使用他们可在规定的资金投入和实践限制的条件下,提供满足客户质量要求的软件产品并持续不断地改善开发过程和开发组织本身,以提高将来生产高质量软件产品的能力。
根据这个定义,我们可以看到:
软件质量控制是开发组织执行的一系列过程。
软件质量控制的目标是以最低的代价获得客户满意的软件产品。
对于开发组织本身来说,软件质量控制的另一个目标是每一次开发过程中学习以便使软件质量控制一次比一次好。
软件质量因素
Functionality
Reliability
Usability
Portability
Efficiency
Maintainbility
软件质量体系
质量保证
软件质量控制和质量管理
软件质量控制是软件质量管理的指向器和原动力。而软件质量管理,则是软件质量控制的执行机构。
目标问题度量法
· 对一个项目的各个方面(产品、过程和资源)规定具体的目标,这些目标的表达应非常明确。
· 对每一个目标,要引出一系列能反映出这个目标是否达到要求的问题,并要求对这些问题进行回答。这些问题的答案将有助于使目标定量化。
· 将回答这些问题的答案映射到对软件质量等级的度量上,根据这种度量得出软件目标是否达到的结论,或确认哪些做好了,哪些仍需改善。
· 收集数据。要为收集和分析数据做出计划。
目标问题度量法示例图
· 目标:改善现场使用中的软件产品的质量。
可维护性
· 问题:可维护性开发过程在预防和组织缺陷发生方面有效吗?正在发生哪些缺陷?产生缺陷的原因是什么?
· 度量:产品的缺陷密度;按缺陷类别划分的产品缺陷的发生频率;缺陷产生的频率分布以及缺陷发生所在阶段的频率分布。
准备开发–>进行开发–>运行维护–><–进行可维护性开发
风险管理法
根据经验识别相关目要素的有关风险;
评估风险发生的概率和发生的代价;
按发生概率和代价划分风险等级并排序;
在项目限定条件下选择控制风险的技术并制定计划;
执行计划并监视进程;
持续评估风险状态并采取正确的措施。
SEI风险管理模型
风险识别、风险分析、风险计划、风险控制和风险跟踪。
软件项目各阶段的风险
阶段 | 可能面临的风险问题 | |
---|---|---|
计划 | 目标不清 范围不清 缺少沟通 | 业务不清 缺乏可行性分析 |
设计 | 缺乏经验 没有变更控制计划 | 项目计划仓促(进度风险) 设计疏漏 |
实施 | 缺乏环境 设计错误 开发能力 项目范围变更 进度变更 | 人员变更 内部沟通不畅 备选方案无效 测试计划不充分或缺少经验 |
发布 | 质量差 客户不满意 | 设备未按时到货 资金不能及时回收 |
风险严重程度等级
影响程度 | 标准 | 等级 |
---|---|---|
危险 | 严重影响项目,可能导致项目取消或者直接失败 | 10-9 |
高 | 影响进度,导致延期,客户抱怨严重 | 8-7 |
中 | 影响预算或软件性能差,客户不满意 | 6-5 |
低 | 影响进程但很快解决,客户有些不满 | 4-3 |
小 | 影响较小,客户未察觉或认可 | 2-0 |
风险控制方法
在控制阶段主要用到的风险控制方法有风险避免、风险弱化、风险承担和风险转移等,分别叙述如下:
· 风险避免,通过变更计划消除风险的触发条件,如采用成熟技术、增加资源、减少软件范围等。
· 风险弱化,降低风险发生的概率,如简化流程、更多测试、开发原型系统等。
· 风险承担,制定应急方案,随机应变。
· 风险转移,将风险发生的结果连同应对
前基于PDCA的全面统计质量控制(TSQC)模型,是我国实际采用的模型之一。
产品
过程
资源
预开发阶段
开发阶段
维护阶段
软件质量控制技术的特征
质量控制技术 | 预防性特性 | 检测性特征 |
---|---|---|
因果分析 | 分析原因,提出改进建议,预防出错 | |
配置管理 | 控制软件配置,防止引入新的错误 | |
独立的确认与验证 | 及时发现和纠正需求、设计、编码的错误 | |
检查 | 在测试之前检查并纠正设计和编码的缺陷 | 检查和纠正设计、编码缺陷 |
管理度量 | 检查早期问题并调整质量控制参数 | |
性能工程 | 提供某种方法避免潜在的性能问题 | 度量实际性能、确认是否满足需求 |
初样 | 对早期需求和问题的确认,用户界面设计确认 | |
可靠性建模 | 度量软件的可靠性、并预测附加测试 | |
软件审计 | 识别关键风险并提出规避方法 | 检测超时、超支和质量缺陷 |
SEI软件能力评估 | 评估组织的开发过程、确定成熟度等级 |
部分软件质量控制技术对质量参数的影响
软件质量控制问题与质量控制技术
最终产品的质量需求是什么?
选择什么样的开发组织?
为预防软件质量缺陷应该做点儿什么?
怎样检查软件质量?
在检查点应该获得哪些信息?
选择控制技术需要考虑的因素
~有些技术是任何时候都要考虑的,尽管它们的使用等级可以变化。
~要考虑所选技术的效益并使需求、风险和限制得到平衡。
~有些技术是冗余的或是矛盾的,只需或只能选择其一。
~有些技术是互补的,同时使用可能提高效益。
~控制技术的选用不能与约定相矛盾。
~有些技术只能用于特定的开发阶段或特定的开发活动中。
~检测性技术宜尽早使用,以防早期缺陷的产生和传播。
~对于高风险的设计和程序,质量控制活动和检查点的安排时间上不要隔太久。
软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。
· 它通过对软件产品和活动进行评审和审计来检验软件是合乎标准的。
· 软件质量保证组在项目开始时就一起参与建立计划、标准和过程。
· 这些将使软件项目满足机构方针的需求。
SQA(软件质量保证)是CMM(软件能力成熟度)2级中的一个重要关键过程区域,它是贯穿于整个软件过程的第三方独立审查活动,在CMM的过程中充当重要角色
SQA的目的是向管理者提供对软件过程进行全面监控的手段,包括评审和审计软件产品和活动,验证它们是否符合相应的规程和标准,同时给项目管理者提供这些评审和审计的结果。
因此,满足SQA是达到CMM2级要求的重要步骤之一。
能力成熟度模型
能力成熟度模型的产生和发展:
1987年,美国卡内基·梅隆大学软件研究所(Software Engineering Institute,SEI)受美国国防部的委托,率先在软件行业从软件过程能力的角度提出了软件过程成熟度模型(Capability Maturity Model,CMM),随后在全世界推广实施的一种软件评估标准,用于评价软件承包能力并帮助其改善软件质量的方法。
~主要用于软件开发过程和软件开发能力的评价和改进。
~侧重于软件开发过程的管理以及工程能力的提高于评估。
CMM自1987年开始实施认证,现已成为软件业最权威的评估认证体系。
CMM包括5个等级,共计18个过程域,52个目标,300多个关键实践。
**软件质量保证(SQA)**是建立一套有计划、有系统的方法,来向管理层保证拟定出的标准、步骤、实践、方法能够正确地被所有项目所采用。
能力成熟度模型(CCM)
是对于软件组织在定义、实施、度量、控制和改善其软件过程的时间中各个发展阶段的描述。
在美国国防部的指导下。由软件开发团体和软件工程学院及Carneigie Mellon大学共同开发的
CMM的核心:是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
CMM的基本思想
CMM的基本思想是基于已有60多年历史的产品质量原理。休哈特(Walter Shewart)在30年代发表了统计质量控制原理,戴明(W. Edwards)和朱兰(Joseph Juran)的关于质量的著作又进一步发展和论证了该原理。
实际上,将质量原理变为成熟度框架的思想是克劳斯比(Philip Crosby),他在著作《质量免费》(Quality is Free)中首先提出,他的质量管理成熟度网络描绘了采用质量实践时的5个进化阶段,而该框架后来又由IBM的拉迪斯(Rom Radice)和他的同事们在汉弗莱(Watts Humphrey)指导下进一步改进以适应软件过程的需要。
1986年,汉弗莱将此成熟框架带到了SEI并增加了成熟度等级的概念,将这些原理应用于软件开发,发展成为软件过程成熟度框架,形成了当前软件产业界正在使用的框架。
实施CMM的必要性
实施CMM是改进软件质量的有效方法:控制软件生产过程、提高软件生产者组织性和软件生产者个人能力的有效合理的方法软件工程和很多研究领域及实际问题有关,主要相关领域和因素有:
需求工程(Requirements Engineering)。
理论上,需求工程是应用已被证明的原理、技术和工具,帮助系统分析人员理解问题或描述产品的外在行为。
软件复用(Software Reuse),定义为利用工程知识或方法,由一已存在的系统,来建造一新系统。这种技术,可改进软件产品质量和生产率。
还有软件检查、软件计量、软件可靠性、软件可维修性、软件工具评估和选择等
SQA背景
SQA目标
SQA任务
SQA在软件开发不同阶段的目标
SQA活动
SQA的实施
软件质量控制是一组由开发组织使用的程序和方法,使用它可在规定的资金投入和时间限制的条件下,提供满足客户质量要求的软件产品并持续不断地改善开发过程和开发组织本身,以提高将来生产高质量软件产品的能力。
用于软件控制的一般性方法:目标问题度量法;风险管理法;PCDA质量控制法。其中在我国最常用的是模型是基于PDCA的全面服务质量管理(TSQC)模型。
软件质量保证(SQA)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
在提高软件质量方面卓有成效。
注:经验不足,请在评论区指正。会定期修改博客,谢谢大家。