软件缺陷与软件质量
一、软件缺陷
1.什么是缺陷?
不符合设计要求、不满足用户确定需求
2.产生缺陷的原因
人员之间的沟通交流不够,交流上有误解或者根本不进行交流
文档不完善
需求不断的变化
参与人员的过度自信
程序设计本身有错误
软件复杂性
工期短,任务重,时间压力大
软件开发工具或系统软硬件自身含有缺陷
3.判断发现的问题是否是缺陷的方法
通过参考文档来确认缺陷
通过了解软件产品的行业背景(或参考同类典型软件)来发现缺陷
通过沟通来确认和识别缺陷
4.怎样有效记录缺陷
保证重现缺陷
分析故障——使用最少步骤复现故障
包含所有重现缺陷的必要步骤
方便阅读
尽量简单——一个缺陷一个报告
注意自己的语气
报告不能重现的缺陷
不能夸大缺陷
小缺陷(甚至建议)也要报告
及时报告缺陷
引用别人的报告时,最好不要修改,可以添加批注之类的补充评论
5.缺陷报告的用途是什么?
记录缺陷、缺陷分类、缺陷跟踪
6.从哪些角度给缺陷分类?
按问题引出不同
按功能(模块)
按缺陷的严重程度:影响进度的问题、死机、功能问题、界面问题、建议
按修复缺陷的优先级:应立即修复的问题、在产品发布之前必须修复的问题、如果时间允许应该修复的问题、可以在发布版本中存在的问题
7.缺陷报告的分类
按缺陷所处状态分类:待确认的、新提交的、已分配的、问题未解决的、待返测的、已关闭的
按处理意见分类:已解决的、不是问题、无法修复、延迟解决、重复bug、无法复现
二、软件质量
1.经典的“软件质量”定义:软件质量特性的总和,软件满足规定或潜在用户需求的能力。简单的说,软件质量就是客户的满意度。
软件质量的组成部分:软件产品的质量,即满足使用要求的程度(软件质量特性)、软件开发过程的质量,即能否满足开发所带来的成本、时间和风险等要求(CMM、ISO9000)
2.软件质量与软件过程的关系
软件质量:软件产品的特性可以满足用户的功能、性能需求的能力。
软件过程:软件生命周期中的活动,一般包括软件需求分析、软件设计、软件编码、软件测试、交付、安装和软件维护。
过程决定质量,软件过程决定软件质量,软件质量是在软件开发过程中逐渐建立起来的。
软件过程的优劣决定了软件质量的高低,好的过程是高效高质量的前提。人员和过程是决定软件质量的关键因素,高质量的人员和好的过程应该得到好的产品。
3.软件测试与软件过程的关系
在软件过程中注意把握测试的对象
软件测试在软件生存周期中的位置
软件测试在软件生存周期中占有非常重要的位置,是对软件规格说明、设计和编码的最后终审。
4.软件测试与软件质量的关系
软件系统的开发包括一系列生产活动,其中由人带来的错误因素非常多。错误可能出现在程序的最初阶段 ,其次目标可能是错误的或描述不完整,也可能在后期的设计和开发阶段,因为人们不能完好无缺地工作和交流,软件开发过程中必须伴有质量保证活动。
软件测试是软件质量保证的重要手段,是规约、设计和编码的最终检查
5.软件质量特性
a.功能性:软件在指定条件下使用时,满足用户明确和隐含需求的功能的能力
•适合性:软件是否提供了相应的功能
•准确性:软件提供的功能是否正确(用户需要的)
•互操作性:产品与产品之间交互数据的能力,例如word对其他文档的支持能力
•安全性:允许经过授权的用户和系统能够正常的访问相应的数据和信息,禁止未授权的用户访问等
•功能性的依从性:软件遵循与功能性相关的标准、约定或法规以及类似规定的能力。这些标准要考虑国际标准、国家标准、行业标准、企业内部规范等
b.可靠性:软件在指定条件下使用时,维持规定的性能级别的能力。平均故障修复时间、平均无故障时间
•成熟性:软件产品为避免软件内部的错误扩散而导至系统失效的能力(主要是对内错误的隔离),异常等的处理
•容错性:软件防止外部接口错误扩散而导致系统失效的能力(主要是对外错误的隔离)
•易恢复性:系统失效后,重新恢复原有的功能和性能的能力。
•可靠性的依从性:软件遵循与可靠性相关的标准、约定或法规的能力
c.易用性:在指定使用条件下,产品被理解、 学习、使用和吸引用户的能力
• 易理解性:软件交互给用户的信息时,要清晰,准确,且要易懂,使用户能够快速理解软件。
• 易学性:软件使用户能学习其应用的能力。
• 易操作性:软件产品使用户能易于操作和控制它的能力。
• 吸引性:软件吸引用户的能力
• 易用性的依从性:软件遵循与易用性相关的标准、约定、风格指南或法规的能力
d.效率性:在规定条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
• 时间特性:在规定条件下,软件执行其功能时,提供适当的响应和处理时间以及吞吐率的能力,即完成用户的某个功能需要的响应时间
• 资源利用性:在规定条件下,软件执行其功能时,使用合适的资源数量和类别的能力。如:
CPU、内存、磁盘、IO、网络带宽等
• 效率依从性:软件遵循与效率相关的标准或约定的能力
e.可维护性:软件可被修改的能力。修改可能包括修正、改进或软件对环境、需求和功能规格说明变化的适应
• 易分析性:软件诊断软件中的缺陷、失效原因或识别待修改部分的能力
• 易改变性:软件产品使指定的修改可以被实现的能力
• 稳定性:软件避免由于软件修改而造成意外结果的能力
• 易测试性:使已修改软件能被确认的能力
• 维护性的依从性:软件遵循与维护性相关的标准或约定的能力
f.可移植性:软件从一种环境迁移到另一种环境的能力
• 适应性:适应不同平台
• 易安装性:在指定环境中被安装的能力
• 共存性:软件在公共环境中同与其分享公共资源的其他独立软件共存的能力
• 易替换性: 软件产品在同样的环境下,替代另一个相同用途的软件产品的能力
• 可移植性的依从性:软件遵循与可移植性相关的标准或约定的能力
6.质量管理体系
CMM的五个等级
• 初始级(等级1):软件过程的特点是无秩序的,偶尔甚至是混乱的。几乎没有什么过程是经过定义的,成功依赖于个人的努力。
• 可重复级(等级2):已建立基本的项目管理过程去跟踪成本、进度和功能性。必要的过程纪律已经就位,使具有类似应用的项目,能重复以前的成功。
• 已定义级(等级3):管理活动和工程活动两方面的软件过程均已文档化、标准化、并集成到组织的标准软件过程。全部项目均采用供开发和维护软件的组织标准软件过程中的一个经批准的剪裁本。
• 已管理级(等级4):已采集详细的有关软件过程和产品质量的度量。无论软件过程还是产品均得到定量了解和控制。
• 优化级(等级5):利用来自过程和来自新思想、新技术先导性试验的定量反馈信息、使持续过程改进成为可能。