第五章软件缺陷管理5.1软件缺陷5.1.1软件缺陷的定义•软件错误或软件缺陷是软件产品的固有成分,是软件“生来具有”的特征•软件缺陷包括检测缺陷和残留缺陷错误软件失效软件错误软件故障AddYourTextinhereAddYourTextinhere一般符合下列5个规则之一,就是软件缺陷软件未实现产品说明书要求的功能软件出现了产品说明书指明不应该出现的错误软件实现了产品说明书未提到的功能软件未实现产品说明书虽未明确提及但应该实现的目标软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户会认为不好5.1.1软件缺陷的定义软件缺陷带来的风险5.1.1软件缺陷的定义•代码错误•数据未被验证•操作流程不符合预期•安全性无法保证•使用过程复杂•系统无法正常启停•系统文件被破坏•系统性能下降•系统不可恢复•系统无法稳定运行•系统维护复杂•需求的不完善定义•客户——开发者通信失败•对软件需求的故意偏离•逻辑设计错误•编码错误•不符合文档编制与编码规定•测试过程不足•规程错误•文档编制错误导致软件产生缺陷的九类原因5.1.1软件缺陷的定义软件缺陷产生的原因调查研究表明:大多数软件缺陷并不是由于编码造成的,导致大多数软件缺陷产生的最大的原因是需求分析阶段,其次是在软件设计阶段。5.1.1软件缺陷的定义需求分析是造成软件缺陷出现的最大来源•软件需求规格说明书描述了系统应该具有的功能和性能。它是开发流程与测试流程的输入•在软件开发之初,由于客户——开发者之间的沟通问题,造成需求规格说明的不完善或者是对软件需求的偏离•在开发过程中因需求规格说明的不全面或经常变更,再加上整个开发小组不能很好的沟通造成设计和编码与需求规格说明之间的不一致等等5.1.1软件缺陷的定义设计是缺陷产生的一个主要来源•设计是软件开发人员规划软件的过程,在这个过程中可能会存在一些逻辑错误•设计的变化、修改,加上整个开发小组沟通问题,这些就造成了软件缺陷的产生软件缺陷在编码阶段出现是另一个主要来源•通常是因代码错误而造成,由于软件复杂、文档不足、进度压力、普通的低级错误或者是因程序员的思维定势而引起5.1.1软件缺陷的定义很难找出缺陷的原因•软件错误/缺陷很难看到•软件错误/缺陷看到了但很难抓到•软件错误/缺陷抓到了但无法修改或很难修改•人们无时无刻都可能犯错误,使得软件中存在错误/缺陷5.1.1软件缺陷的定义典型的缺陷类型–需求解释有错误、用户定义错了需求、需求记录错误;–设计说明有误;–编码说明有误、程序代码有误、数据输入有误;–测试错误、问题修改不正确;–正确的结果是由于其它的缺陷产生的。5.1.1软件缺陷的定义1)可追踪信息——缺陷ID(唯一的缺陷ID,可以根据该ID追踪缺陷)2)缺陷基本信息编号编号1缺陷标题8缺陷的类型2标识9严重性3报告人10优先级4报告日期11关键词5程序的名称12缺陷描述6版本号13重现步骤7配置14结果对比5.1.2软件缺陷描述缺陷的属性5.1.3软件缺陷分类•缺陷标识(Identifier)−缺陷标识是标记某个缺陷的一组符号。每个缺陷必须有一个唯一的标识•缺陷类型(Type)−缺陷类型是根据缺陷的自然属性划分的缺陷种类。•缺陷严重程(Severity)−缺陷严重程度是指因缺陷引起的失效对软件产品的影响程度。•缺陷优先级(Priority)−缺陷的优先级指缺陷必须被修复的紧急程度。•缺陷状态(Status)−缺陷状态指缺陷通过一个跟踪修复过程的进展情况。•缺陷起源(Origin)−缺陷起源指缺陷引起的失效或事件第一次被检测到的阶段。•缺陷来源(Source)−缺陷来源指引起缺陷的起因。•缺陷根源(RootCause)−缺陷根源指发生错误的根本因素。1)软件缺陷的分类--缺陷的类型–10F-Function(功能)–20A-Assignment(赋值)–30I-InterfaceandTiming/Serialization(接口/时序)–40C-Checking(检查)–50B-Build/package/merge(联编打包)–60D-Documentation(文档)–70G-Algorithm(语法)–80U-UserInterface(用户接口)–90P-Performance(性能)–10100N-Norms(标准)5.1.3软件缺陷分类2)缺陷的分类--严重程度–软件测试错误的严重程度5.1.3软件缺陷分类UrgentVeryHighHighMediumLow3)缺陷的分类—解决优先级5.1.3软件缺陷分类HighMiddleLow确定缺陷解决或修复的优先顺序缺陷管理基本流程:5.1.3软件缺陷分类初始化测试人员提交New项目经理分配Open开发人员修正Fixed测试人员验证Closed缺陷管理基本流程:5.1.3软件缺陷分类初始化测试人员提交New项目经理分配Open开发人员修正Reject评审委员会评审通过Closed缺陷管理流程中的各种角色角色描述测试人员进行测试的人员,缺陷的发现者项目经理对整个项目负责,对产品质量负责的人员开发人员执行开发任务的人员,完成实际的设计和编码工作评审委员会对缺陷进行最终确认,在项目成员对缺陷达不成一致意见时,行使仲裁权力5.1.4软件缺陷管理角色测试人员项目经理开发人员评审委员会缺陷管理的一般流程:5.1.4软件缺陷管理5.2软件缺陷度量、分析与统计•软件缺陷度量•缺陷度量是对项目过程中产生的缺陷数据进行采集和量化,将分散的缺陷数据统一管理,使其有序而清晰•缺陷度量是软件质量度量的重要组成部分,它和软件测试密切相关•软件缺陷度量方法较多,从简单的缺陷计数到严格的统计建模5.2.1软件缺陷度量5.2.1软件缺陷度量软件缺陷度量的主要方法有:•缺陷密度(缺陷在规模上的分布)缺陷密度=已知缺陷的数量/产品规模•缺陷率(缺陷在时间上的分布)缺陷率=一定时间范围内的缺陷数/错误几率•缺陷清除率整体缺陷清除率=开发过程中发现的所有缺陷数/发现的总缺陷数阶段性缺陷清除率=开发阶段清除的缺陷数/产品潜伏的缺陷总数软件缺陷分析•将软件开发各个阶段产生的缺陷信息进行分类和汇总统计,计算分析指标,编写分析报告的活动•用来评估当前软件的可靠性,并且预测软件产品可靠性变化,缺陷分析在软件可靠性评估中占有相当大的作用5.2.2软件缺陷分析5.2.2软件缺陷分析缺陷分析步骤记录缺陷缺陷分类缺陷预防分析编写缺陷分析报告软件缺陷统计是软件分析报告中的重要内容之一•从统计的角度出发,可以对软件过程的缺陷进行度量软件功能模块缺陷分布、缺陷严重程度分布、缺陷类型分布、缺陷率分布、缺陷密度分析、缺陷趋势分布、缺陷注入率/消除率等•统计的方式表格、散点图、趋势图、因果图、直方图、条形图、排列图等5.2.3软件缺陷统计软件功能模块的缺陷统计5.2.3软件缺陷统计缺陷严重程度统计5.2.3软件缺陷统计缺陷类型统计缺陷类型分布图5.2.3软件缺陷统计软件系统测试缺陷类型分布图5.2.3软件缺陷统计基于版本的缺陷率趋势图5.2.3软件缺陷统计1.软件缺陷定义2.软件缺陷描述3.软件缺陷分类4.软件缺陷管理5.软件缺陷度量6.软件缺陷分析7.软件缺陷统计小结1.什么是软件缺陷?我们一般是如何描述和分类软件缺陷的?2.简述缺陷来源与影响,分析缺陷都是软件开发生命周期哪个阶段产生的?3.简述软件缺陷描述中的缺陷基本信息和软件缺陷分类中的缺陷属性4.什么是软件缺陷管理,缺陷管理报告单包括哪些内容?具有什么特点?5.根据自己理解,画出软件缺陷管理流程图,并解释软件缺陷管理流程图的关键要素。6.我们如何度量软件缺陷?如何分析软件缺陷?如何对软件缺陷进行统计?作业