1、软件测试评估本章教学要点n教学目标:n通过本章学习,能针一个系统的测试情况,进行基本的质量评估。n教学重点与难点:n基于测试覆盖的评估:怎样根据测试数据从各个方面对覆盖情况作一个评价n基于缺陷的评估:怎么利用已有的缺陷数据从统计和预测二方面入手,对系统质量作一个判断 难点:如何估计缺陷遗留情况测试结束需要回答的问题?n产品质量如何?n产品是否可以发布、上线?n上线后可能存在哪些风险?n测试是否充分、完备?一个产品的测试结束后,最终需要回答的问题:产品质量+测试质量目录 基于缺陷的评估1基于测试覆盖的评估测试覆盖的评估软件测试评估主要有两个的目的n量化测试过程,判断测试进行的状态和进度,测试什么
2、时候可以结束n为测试或质量分析报告生成所需的量化数据,如缺陷清除率、测试覆盖率等测试覆盖项测试覆盖率指标测试描述测试结果界面覆盖多少界面经过测试符合界面规范要求程度功能覆盖多少功能经过测试满足需求程度代码覆盖多少代码经过测试覆盖程度如何需求覆盖多少需求经过测试符合度如何故障覆盖多少故障模式经过测试满足程度如何测试覆盖的内容n测试覆盖率是衡量测试完成多少的一个量化标准n测试用例覆盖率An需求测试覆盖率Bn代码测试覆盖率C需求需求代码代码用例用例开发测试测试需求的覆盖往往转化为测试用例的覆盖基于需求的测试覆盖评估n已执行的测试覆盖 方式1:需求所对应的执行用例数/需求所对应的用例总数 方式2:执行
3、用例数所对应的需求数/用例总数所对应需求数n成功的测试覆盖 方式1:需求所对应的执行成功用例数/需求所对应的用例总数 方式2:执行成功用例数所对应的需求数/用例总数所对应需求数目标:确保测试用例100%执行全部通过需求需求用例用例需求ID基于代码的测试覆盖n基于代码的测试覆盖即是对被测试的程序语句、路径或条件的代码覆盖率分析n代码覆盖率分析一般由工具自动生成。对于一个大的系统来说,一般只需要达到语句覆盖即可。n已执行代码覆盖=测试用例运行时所经过语句/测试对象总语句数n对于多次运行的结果归并n对于增量开发的测试对象总语句不总是代码全集用例用例代码代码?目标:代码语句100%全部执行目录 基于缺
4、陷的评估1基于测试覆盖的评估缺陷分析n缺陷趋势:按各种状态将缺陷计数作为时间的函数显示。趋势报告可以是累计的,也可以是非累计的;(时间-缺陷数)n缺陷分布:将缺陷计数作为一个或多个缺陷参数的函数来显示,生成缺陷数量与缺陷属性的函数。如测试需求和缺陷状态、严重性的分布情况等。(缺陷数-缺陷属性)n缺陷指标:与基线数据(baseline)相比,评估产品缺陷数据是否达标。n缺陷密度:单位代码量/需求里的缺陷数量。衡量指标:缺陷数/KLOC或缺陷数/功能点n缺陷去除率:事先发现缺陷数/ 事先发现缺陷数+ 事后发现/估计的缺陷数。对于发布前的统计,建议值为95%n遗留缺陷数:根据已知缺陷数来估计程序中潜
5、在的、未知缺陷数量。简单计数 + 统计建模缺陷趋势缺陷分布:ODC分析nODC (Orthogonal Defect Classification):由IBM提出,区别于传统的仅从严重等级、重要性等分类,它定义了八个正交的缺陷属性用于对缺陷的分类 。正交性即指缺陷属之间不存在关联性和重叠,各自独立。nActivity:缺陷被发现时实际的测试阶段。比如单元测试,功能测试,系统测试等等。 nTrigger:暴露缺陷时存在的环境或者条件。nImpact:是指缺陷可能对用户造成的影响。 nTarget:将要在哪里改正错误,例如:design、code 等等。 nType:表示所进行的实际修正的种类,比
6、如算法,接口,初始化等等。nQualifier:所进行的修复应归于缺失,错误或者还是外来代码/信息。 nSource:发现的缺陷来源,是出现在内部代码编写中,重用程序库中,从一个平台转移到另一个平台,或者是外包软件销售商。 nAge:确定这个缺陷是新代码还是旧代码,或者是重写的代码。 如果Interaction的BUG很多,增强接口评审缺陷清除率的估算nD1:软件开发过程中发现的所有缺陷数;nD2:软件发布后发现的缺陷数;nD为发现的总缺陷数。因此,D=D1+D2。整体缺陷清除率=D1/D;缺陷源已发生缺陷(1)交付后的缺陷(D2)缺陷清除率(%)需求报告772377设计1061985编码16
7、6995文档481280错误修改241270合计5007585经典的种子公式n假设:(所有缺陷被发现的概率是相同的)已测试出的种子Bug(s) 已测试出的非种子Bug(n)所有的种子Bug(S) 全部的非种子Bug(N)=则可以推出程序的总Bug数为:N = S * n /s如果 n=N, 说明所有的Bug已找出来,说明测试充分。n存在问题:人为植入缺陷的代表性;缺陷本身的相互影响与关系;【示例】 两个独立测试同一个程序,第一组发现25个错误,第二组发现30个错误,在两个小组小组发现的错误有15个是共同的,那么可以估计程序中错误的个数为:A25 B 30 C50 D 60 【解答】缺陷注入法。
8、)第一组测试出25个缺陷,有15个缺陷与第二组是相同的。假设将第1组25个看作是注入缺陷给第二组去测试,意味着注入的25个总缺陷数有15个被发现。)第二组测试出30个缺陷;由于系统中的缺陷被测试出的概率相同的;可以用公子公式来估算总缺陷数,15/25=30/X 统计建模:CompertZ分析n假设:测试对象同一性:只进行BUG修正、不合入新需求,测试对象不发生质的变化;测试执行轮数=2n输入:每天发现问题数,运用公式Y=a*b(cT)nY表示随时间T发现的软件缺陷总数na是当T时可能发现软件缺陷总数,即软件中所含的潜在缺陷总数。a*b是当T0时发现的软件缺陷数nc表示发现缺陷的增长速度n采用“
9、非线性回归最小二乘法”拟合曲线函数,确定a,b,c值。 统计建模:CompertZ分析示例该软件产品的总缺陷数估计共有448.685个(极限缺陷数=449)若要想将发现缺陷率达到95%,需要发现缺陷数至少达到419.93个。则有:419.93= 448.685*0.078(0.874T),解得T=28n拟合曲线图为Y=a*b(cT)=448.685*0.078(0.874T)其它:测试过程度量n基础数据:n代码规模、需求数n用例规模:设计用例数、执行用例数n测试周期、工作量n测试执行数据、缺陷原始数据度量维度 度量指标基线参考值结果值测试设计效率设计用例数/人天50测试执行效率执行用例数/人天
10、20用例密度用例数/KLOC80缺陷密度缺陷数/KLOC7用例命中率缺陷数/百用例数11缺陷成本人时/缺陷数7从效率从效率/ /质量质量/ /成本成本 对对 测试过程质量测试过程质量 进行分析进行分析基线值来源于若干历史版本经验数据测试报告及其模板国家标准GB/T 175441998对测试报告有了具体要求,对测试纪录、测试结果如实汇总分析,报告出来。测试报告参考结构:n 产品标识;n 用于测试的计算机系统 (测试环境)n 使用的文档及其标识 (测试依据)n 产品描述、用户文档、程序和数据的测试结果;(测试结果)n 与要求不符的清单;n 针对建议的要求不符的清单,产品未作符合性测试的说明;n 测试结束日期。对于一个发布版本,最主要的是:给出Pass or Not的结论本章小结n基于测试覆盖的评估n测试用例覆盖率/需求覆盖率/代码覆盖率n各种覆盖率的计算及之间关系。n基于缺陷的评估n基于已有缺陷的简单统计:缺陷趋势/缺陷分布、缺陷密度、缺陷去除率n基于已有缺陷的统计建模:缺陷去除率、遗留缺陷率n经典种子公式、缺陷注入