1、软件测试概述软件测试概述nWhynWhatnHown基于模型的测试基于模型的测试l基于覆盖的测试基于覆盖的测试l一致性测试一致性测试n测试是保证软件质量和可信性的主要手段之一测试是保证软件质量和可信性的主要手段之一l是否符合用户功能、性能需求是否符合用户功能、性能需求l软件产品交付前尽可能发现错误软件产品交付前尽可能发现错误n测试的代价非常高测试的代价非常高l 占开发成本的占开发成本的30%-50%30%-50%或更高或更高n不测试代价更高不测试代价更高Whyn The top 10 IT disasters The top 10 IT disasters l 19831983年,前苏联导弹预
2、警软件故障差点导致年,前苏联导弹预警软件故障差点导致WW-IIIWW-IIIl 19901990年,年,AT&TAT&T网络瘫痪导致美国网络瘫痪导致美国75007500万用户受影响万用户受影响l 19961996年,阿丽亚娜年,阿丽亚娜5 5号火箭爆炸。号火箭爆炸。64-bit 64-bit 1 16-bit6-bitl 20062006年,空客年,空客A380A380因软件不兼容问题导致拖延交货。英制因软件不兼容问题导致拖延交货。英制公制公制l 19981998年,美国火星气候探测器因导航系统单位不同被毁年,美国火星气候探测器因导航系统单位不同被毁l 20042004年,年,EDS CS2E
3、DS CS2计算机给纳税人带来计算机给纳税人带来1010亿英镑损失。亿英镑损失。l 1999/20001999/2000年,千年虫问题年,千年虫问题l 20062006年,索尼电池引发的一系列笔记本爆炸事年,索尼电池引发的一系列笔记本爆炸事l 19991999年,西门子计算机故障引发年,西门子计算机故障引发5050万英居民新护照延迟万英居民新护照延迟l 20072007年,软件故障导致年,软件故障导致1.71.7万旅客滞留万旅客滞留LALA国际机场国际机场8 8小时小时。Why19961996年年6 6月月4 4日阿丽亚娜日阿丽亚娜5 5号火箭号火箭在发射在发射4040秒后爆炸秒后爆炸原因:惯
4、性参考系统软件的原因:惯性参考系统软件的数据数据转换异常转换异常20042004年年1212月月2020日,美空军的一架日,美空军的一架F-F-2222猛禽猛禽战斗机战斗机因因软件问题软件问题在起飞过在起飞过程中失控坠毁程中失控坠毁170万行代码Why2005年年11月月1日,东京证券日,东京证券交易所因为软件升级出现交易所因为软件升级出现系统故障,导致早间股市系统故障,导致早间股市“停摆停摆”2007年北京机场信息系统瘫痪。年北京机场信息系统瘫痪。短短短短50分钟内,至少分钟内,至少84个离港个离港航班发生延误航班发生延误海湾战争海湾战争美国美国F-18F-18战斗机战斗机飞行控制软件飞行控
5、制软件共发生共发生500500多次故障多次故障爱国者导弹因为爱国者导弹因为软件问题软件问题误伤了误伤了2828名美军士兵名美军士兵WhyWhatn测试的发展测试的发展n什么是软件测试什么是软件测试n软件缺陷软件缺陷测试的发展测试的发展参考:参考:GelperinGelperin D,D,HetzelHetzel B.The growth of software testing.Communications of the B.The growth of software testing.Communications of the Association of Computing Machiner
6、y,1988,31(6):687695Association of Computing Machinery,1988,31(6):687695测试的发展测试的发展n面向调试阶段面向调试阶段调试(调试(debuggingdebugging)、检查)、检查(checkout)(checkout)、测试、测试(testing)(testing)无明显差别无明显差别n面向求真(面向求真(DemonstrationDemonstration)阶段)阶段测试从调试中分离,成为生命周期中极为关键的环节测试从调试中分离,成为生命周期中极为关键的环节调试:调试:Make sure the program run
7、s Make sure the program runs测试:测试:Make sure the program solves the problem Make sure the program solves the problem测试的发展测试的发展n面向证伪(面向证伪(DestructionDestruction)阶段)阶段 MyersMyers定义测试是为发现错误而执行程序的过程定义测试是为发现错误而执行程序的过程n6060以上的软件错误并非程序错误,而以上的软件错误并非程序错误,而是需求和设计错误是需求和设计错误n错误理解用户需求会导致开发完美优良错误理解用户需求会导致开发完美优良的,但
8、却是不正确的产品的,但却是不正确的产品n需求和设计阶段的质量保证非常重要需求和设计阶段的质量保证非常重要 测试的发展测试的发展 软件缺陷分布其他其他10%软件产品说明软件产品说明书(需求)书(需求)56%编写代码编写代码7%设计设计27%测试的发展测试的发展n面向评估(Evaluation)阶段 集成分析(Analysis)、评审(review)和测试活动,软件生命周期的每个阶段对应相应的活动和产品集n面向预防(Prevention)阶段测试与开发并行,包括:l 测试计划l 测试分析(建立测试需求或目标)l 测试设计(指明测试集的结构、单个测试用例和过程)l 测试实现(开发测试数据、测试支持软
9、件)l 测试执行(运行测试、分析测试结果)l 测试维护(保存测试,在软件变化时更新测试)什么是软件测试什么是软件测试nMyers(1979)Myers(1979)执行程序的过程,其目的是发现错误nIEEEIEEE标准标准610.12(IEEE,1990)610.12(IEEE,1990)在特定的条件下运行系统或构件,观察或记录结果,对系统的某个方面做出评价 分析某个软件项以发现现存的和要求的条件之差别(即错误)并评价此软件项的特性软件缺陷软件缺陷l未达到产品说明书中标明的功能未达到产品说明书中标明的功能l未达到产品说明书未指出但应当达到的目标未达到产品说明书未指出但应当达到的目标 l出现了产品
10、说明书中指明不应出现的功能出现了产品说明书中指明不应出现的功能l难以理解、不易使用难以理解、不易使用软件缺陷软件缺陷软件缺陷的特征软件缺陷的特征n看不到看不到 软件的特殊性决定了缺陷不易看到n看到但抓不到看到但抓不到 发现了缺陷,但不易找到问题发生的原因软件缺陷软件缺陷n相关术语l软件故障(Fault)软件中的一个静态缺陷l软件错误(Error)不正确的内部状态,某个故障的体现l软件失效(Failure)外部的、不正确的行为Hown测试原理n测试过程n测试技术n几个关键问题几个关键问题l谁来测试谁来测试l何时测试何时测试l何时停止测试何时停止测试l怎样进行测试怎样进行测试测试原理测试原理测试原
11、理测试原理l测试应可追溯到需求测试应可追溯到需求l尽早、及时测试(尽早、及时测试(何时开始?何时开始?)l测试计划先于测试执行测试计划先于测试执行l80%的错误很可能由的错误很可能由20%的模块造成的模块造成l小规模小规模大规模大规模l一般来讲,完全测试不可能一般来讲,完全测试不可能l充分覆盖程序逻辑充分覆盖程序逻辑/图结构是可行的(图结构是可行的(何时停止?何时停止?)l由独立第三方测试由独立第三方测试(谁?谁?)l保存测试相关文档,以便维护和回归测试保存测试相关文档,以便维护和回归测试测试原理测试原理软件缺陷在不同阶段发现时修复的费用软件缺陷在不同阶段发现时修复的费用0 020204040
12、60608080100100编制说明书编制说明书设计阶段设计阶段编写代码编写代码测试测试发布发布测试过程模型测试过程模型nV V模型模型l把测试过程作为编码之后的一个阶段l需求分析阶段隐藏的问题一直到验收测试才被发现l不能体现“尽早地和不断地进行软件测试”的原则用户需求需求分析概要设计详细设计编码验收测试系统测试集成测试单元测试测试模型测试模型nW W模型模型软件测试技术软件测试技术n白盒测试和黑盒测试(另一种:灰盒测试)(另一种:灰盒测试)n静态测试和动态测试(验证测试和确认测试)n传统测试和面向对象测试n基于代码的测试和基于模型的测试软件测试技术软件测试技术n白盒测试白盒测试根据程序的结构
13、和内部逻辑设计用例l控制流覆盖:语句、判定、条件、判定控制流覆盖:语句、判定、条件、判定/条件、条件条件、条件组合、基本路径测试、条件测试等等组合、基本路径测试、条件测试等等l数据流覆盖:全定义、全使用、全定义使用等等数据流覆盖:全定义、全使用、全定义使用等等n黑盒测试根据系统的功能性规格说明设计测试用例l等价划分、边界值分析、因果图测试、错误推测、组等价划分、边界值分析、因果图测试、错误推测、组合测试等合测试等软件测试技术软件测试技术n静态测试l又称静态分析技术l人工或利用工具对程序和文档进行分析与检查l走查、审查、符号执行等n动态测试l运行程序,分析程序的执行状态和外部表现l白盒测试、黑盒
14、测试及灰盒测试等基于模型的测试基于模型的测试u依据(形式)模型依据(形式)模型/规约进行测试规约进行测试 UML,(E)FSM,LTS,CSP,Promela,.u更快、更便宜更快、更便宜自动生成算法自动生成算法形式的、非歧义形式的、非歧义测试的完全性测试的完全性2022年8月5日27测试测试用例用例测试选择测试选择准则准则被测被测系统系统环环境境测试测试脚本脚本测试测试模型模型基于模型的测试基于模型的测试28软件制品软件制品模型模型测试需求测试需求测试规约测试规约测试用例测试用例测试脚本测试脚本测试结果测试结果通过通过/失败失败实现抽象级实现抽象级设计抽象级设计抽象级基于模型的测试基于模型的
15、测试29建模准则精化测试生成脚本生成执行评估软件制品软件制品模型模型测试需求测试需求测试规约测试规约测试用例测试用例测试脚本测试脚本测试结果测试结果通过通过/失败失败实现抽象级实现抽象级设计抽象级设计抽象级基于模型的测试基于模型的测试30测试设计测试设计测试评估测试评估软件制品软件制品模型模型测试需求测试需求测试规约测试规约测试用例测试用例测试脚本测试脚本测试结果测试结果通过通过/失败失败实现抽象级实现抽象级设计抽象级设计抽象级基于覆盖的测试基于覆盖的测试u传统的方法从实现代码导出测试用例传统的方法从实现代码导出测试用例u基于模型的方法从模型导出测试用例基于模型的方法从模型导出测试用例u依赖于
16、测试准则依赖于测试准则32测试覆盖准则测试覆盖准则g测试需求测试需求说明测试期间必须满足什么或必须覆盖什么说明测试期间必须满足什么或必须覆盖什么g测试准则测试准则定义测试需求的规则或规则集定义测试需求的规则或规则集g测试准则的满足测试准则的满足给定特定测试准则给定特定测试准则C对应的测试需求集对应的测试需求集TR,测试包,测试包T满足满足C当且仅当当且仅当TR中的每个测试需求中的每个测试需求tr,T中存在一条中存在一条测试路径测试路径t覆盖覆盖tr 测试就是定义一个模型,然后设法覆盖它测试就是定义一个模型,然后设法覆盖它33图图(not X or not Y)and A and Bif(x y
17、)z=x-y;else z=2*x;A:0,1,1B:600,700,800C:swe,cs,isa,infs逻辑表达式逻辑表达式输入域特性输入域特性语法结构语法结构34图覆盖图覆盖图可以表示:语句和分支,组件和信号,状态和迁移图可以表示:语句和分支,组件和信号,状态和迁移 G=(N,N0,Nf,E)6021345l路径路径:,El路径长度路径长度:路径中的边数:路径中的边数l子路径子路径:路径中的节点子序列:路径中的节点子序列lReach(n):从节点:从节点n可到达的子图可到达的子图l测试路径测试路径:从开始节点到终止节点的路径:从开始节点到终止节点的路径35图覆盖图覆盖n图结构覆盖图结构
18、覆盖覆盖图的节点、边或子路径n数据流覆盖数据流覆盖用变量的引用标注图,覆盖变量的定义、使用或它们之间的关系36图覆盖图覆盖结构覆盖结构覆盖6021345节点覆盖节点覆盖测试路径测试路径 0,1,2,3,6 0,1,2,4,5,4,6 边覆盖边覆盖测试路径测试路径 0,1,2,3,6 0,2,4,5,4,6 37图覆盖图覆盖结构覆盖结构覆盖边对覆盖边对覆盖:测试覆盖每一个可达的长度不超过:测试覆盖每一个可达的长度不超过2的路径的路径6021345边对覆盖边对覆盖 边对集边对集 0,1,2,0,2,3,0,2,4,1,2,3,1,2,4,2,3,6,2,4,5,2,4,6,4,5,4,5,4,5,
19、5,4,6 测试路径测试路径 0,1,2,3,6,0,1,2,4,6,0,2,3,6,0,2,4,5,4,5,4,6 38图覆盖图覆盖结构覆盖结构覆盖:不幸的是,如果图包含循环,全路径覆盖可能不切实际不幸的是,如果图包含循环,全路径覆盖可能不切实际39图覆盖图覆盖结构覆盖结构覆盖n测试循环测试循环l1970s:1970s:执行执行1 1次循环次循环l1980s:1980s:执行每个循环执行每个循环1 1次次l1990s:1990s:执行循环执行循环0 0次、次、1 1次和多次次和多次l2000s:2000s:覆盖主路径覆盖主路径40图覆盖图覆盖结构覆盖结构覆盖n简单路径简单路径除开始和结束节点
20、可能相同外没有重复节点除开始和结束节点可能相同外没有重复节点l 无内部循环无内部循环l 简单路径的所有的子路径也是简单路径简单路径的所有的子路径也是简单路径l 一个循环是简单路径一个循环是简单路径n主路径主路径 不是其它简单路径的真子路径,即:最大子路径不是其它简单路径的真子路径,即:最大子路径41图覆盖图覆盖结构覆盖结构覆盖简单路径简单路径 0,1,2,3 0,1,0,2,1,3,2,3,3,0,0,1,3,0,2,3,1,3,0,2,3,0,3,0,1,3,0,2,0,1,3,0,0,2,3,0,1,3,0,1,2,3,0,2,3,0,1,3,3,0,2,3,1,3,0,2,2,3,0,1
21、,主路径主路径 0,1,3,0,0,2,3,0,1,3,0,1,2,3,0,2,3,0,1,3,3,0,2,3,1,3,0,2,2,3,0,1120342图覆盖图覆盖结构覆盖结构覆盖主路径覆盖:测试覆盖每个主路径主路径覆盖:测试覆盖每个主路径n遍历长度为遍历长度为 0,1,0,1,n的所有路径的所有路径(n为指定的主路径最大长度)为指定的主路径最大长度)n主路径覆盖包含节点、边和边对覆盖主路径覆盖包含节点、边和边对覆盖43图覆盖图覆盖结构覆盖结构覆盖Len 00123456!表示终止Len 10,10,21,22,32,43,6!4,6!4,55,4Len 20,1,20,2,30,2,41,
22、2,31,2,42,3,6!2,4,6!2,4,5!4,5,4*5,4,6!5,4,5*表示循环Len 30,1,2,30,1,2,40,2,3,6!0,2,4,6!0,2,4,5!1,2,3,6!1,2,4,5!1,2,4,6!Len 40,1,2,3,6!0,1,2,4,6!0,1,2,4,5!主路径主路径简单路径简单路径602134544图覆盖图覆盖结构覆盖结构覆盖l3838条简单路径条简单路径l9 9条主路径条主路径主路径主路径 0,1,2,3,6 0,1,2,4,5 0,1,2,4,6 0,2,3,6 0,2,4,5 0,2,4,6 5,4,6 4,5,4 5,4,5 1次循环次循环
23、多次循环多次循环0次循环次循环602134545图覆盖图覆盖结构覆盖结构覆盖问题问题n 测试用例的实例化(可执行的测试用例)测试用例的实例化(可执行的测试用例)语法可达语法可达:图中存在一条满足需求的子路径:图中存在一条满足需求的子路径语义可达语义可达:测试能真正执行到一条子路径:测试能真正执行到一条子路径n 不可行的测试需求不可行的测试需求不可达的节点不可达的节点不能严格按子路径执行不能严格按子路径执行46图覆盖图覆盖结构覆盖结构覆盖测试用例的实例化测试用例的实例化n 游历(游历(Touring)如果如果q是是p的子路径,路径的子路径,路径p游历游历路径路径q n 侧访(侧访(Sidetri
24、ps)路径路径p侧访侧访路径路径q当且仅当当且仅当q的每条边在的每条边在p中,且边次序相同中,且边次序相同n 绕道游历(绕道游历(Detours)路径路径p绕道绕道路径路径q,当且仅当,当且仅当q的每个节点在的每个节点在p中,且节点次序相同中,且节点次序相同47图覆盖图覆盖结构覆盖结构覆盖021534021534侧访侧访021534绕道绕道游历游历设设q:12448图覆盖图覆盖数据流数据流目标目标:检测变量值计算和使用:检测变量值计算和使用定义定义(def)(def):变量被赋值变量被赋值使用使用(use)(use):变量被用于计算或判定变量被用于计算或判定 def(n)=x节点节点n包含包含
25、x的定义的定义 def(e)=x 边边e包含包含x的定义的定义 use(n)=x节点节点n包含包含x的使用的使用 use(e)=x边边e包含包含x的使用的使用 49图覆盖图覆盖数据流数据流DU-对对 位置对位置对(li,lj),一个变量在,一个变量在li被定义,在被定义,在 lj被使用被使用du-路径路径 从变量的一个定义到它的一个使用的路径,且中间从变量的一个定义到它的一个使用的路径,且中间没有对该变量重新定义(没有对该变量重新定义(定义清纯,定义清纯,def-clear)du(ni,nj,v)从从ni 到到 nj的变量的变量v的的du-路径集合路径集合du(ni,v)从从ni 开始的变量开
26、始的变量v的的du-路径集合路径集合图覆盖图覆盖数据流数据流对每个对每个du-路径集合路径集合S=du(n,v),至少测试至少测试S中的一条路径中的一条路径对每个对每个du-路径集合路径集合S=du(),至少测试至少测试S中的一条中的一条路径路径对每个对每个du-路径集合路径集合S=du(),测试测试S中的所有路径中的所有路径2,全使用覆盖(,全使用覆盖(all-uses)3,全,全du-路径覆盖(路径覆盖(all-du-paths)1,全定义覆盖(,全定义覆盖(all-defs)51图覆盖图覆盖数据流数据流0216354x=42z=x-8z=x*2全定义(x)0,1,3,4 全使用全使用(x
27、)0,1,3,4 0,1,3,5 全定义全定义-使用(使用(x)0,1,3,4 0,2,3,4 0,1,3,5 0,2,3,5 52逻辑表达式逻辑表达式(a b)G)(x b)G)(x b)=True,FalseG=True,False(x b)G)(x bGx b)G)(x b)G (x b)or G)and(x b b c)c a(a b)=true,(b c)=true,(c a)=true不可行不可行不可行的测试需求必须被识别(不可决不可行的测试需求必须被识别(不可决定的),忽略定的),忽略66逻辑覆盖小结逻辑覆盖小结u实际中谓词常常很简单,少于实际中谓词常常很简单,少于3 3个从句个
28、从句l对从句谓词对从句谓词,谓词覆盖谓词覆盖l2-3个从句的谓词,个从句的谓词,多条件覆盖多条件覆盖l大于大于3个从句的谓词,活动从句覆盖个从句的谓词,活动从句覆盖u控制软件有许多复杂谓词,包含许多从控制软件有许多复杂谓词,包含许多从句句6768输入域特性输入域特性n输入域描述输入域描述l表示输入、参数表示输入、参数l输入域划分输入域划分l选择输入值组合选择输入值组合n系统级系统级l学生数学生数 0,1,1 l主修主修 swe,cs,isa,infs n单元级单元级l参数参数 F(int X,int Y)l可能值可能值 X:2,Y:10,20,30 69输入域特性输入域特性n域划分:将域域划分
29、:将域D划分为一个块集划分为一个块集Bqbi bj=,i j,bi,bj Bqb1b2b3 b=Dn参数取值参数取值n参数值组合参数值组合三角形问题三角形问题输入三个不大于100的整数a、b、c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为边值无效、等边三角形、等腰三角形、一般三角形、以及非三角形输入条件输入条件-1(1)边长在输入域范围条件条件有效类有效类无效类无效类边长在输入域范围边长在输入域范围1 a 100(1)a 100(5)1 b 100(2)b 100(7)1 c 100(3)c 100(9)等价类划分等价类划分-1三角形问题三角形问题测试用例测试用例-1-
30、1编号编号输入输入预期输出预期输出覆盖的等价类覆盖的等价类abcTC1567一般三角形一般三角形(1)(2)(3)TC2-256边值无效边值无效(4)TC35-25边值无效边值无效(6)TC455-2边值无效边值无效(8)TC51056550边值无效边值无效(5)TC66510550边值无效边值无效(7)TC75065105边值无效边值无效(9)三角形问题三角形问题输入条件输入条件-2-2(1)边长在输入域范围(2)两边之和大于第三边条件条件有效类有效类无效类无效类边长在输入域范围边长在输入域范围1 a 100(1)a 100(5)1 b 100(2)b 100(7)1 c 100(3)c 1
31、00(9)两边之和大于第三边两边之和大于第三边a b+c(13),a=b+c(14)b a+c(15),b=a+c(16)c a+b(17),c=a+b(18)等价类划分等价类划分-2-2三角形问题三角形问题测试用例测试用例-2编号编号输入输入预期输出预期输出覆盖的等价类覆盖的等价类abcTC1567一般三角形一般三角形(1)(2)(3)(10)(11)(12)TC2-256边值无效边值无效(4)TC75065105边值无效边值无效(9)TC81556非三角形非三角形 (13)TC95156非三角形非三角形(15)TC105615非三角形非三角形(17)TC111156非三角形非三角形(14)
32、TC125116非三角形非三角形(16)TC135611非三角形非三角形(18)三角形问题三角形问题输入条件输入条件-3(1)边长在输入域范围(2)两边之和大于第三边(3)两边是否相等三角形问题三角形问题条件条件有效类有效类无效类无效类边长在输入域范围边长在输入域范围1 a 100(1)a 100(5)1 b 100(2)b 100(7)1 c 100(3)c 100(9)两边之和大于第三边两边之和大于第三边a b+c(13),a=b+c(14)b a+c(15),b=a+c(16)c a+b(17),c=a+b(18)两边是否相等两边是否相等a=b(19),a c(20)a=c(21),a
33、b(22)b=c(23),a c(24)等价类划分等价类划分-3三角形问题三角形问题编号编号输入输入预期输出预期输出覆盖的等价类覆盖的等价类abcTC1567一般三角形一般三角形(1)(2)(3)(10)(11)(12)(20)(22)(24)TC2-256边值无效边值无效(4)TC65010565边值无效边值无效(7)TC75065105边值无效边值无效(9)TC81556非三角形非三角形 (13)TC135611非三角形非三角形(18)TC14555等边三角形等边三角形(19)(21)(23)测试用例测试用例-3-3三角形问题三角形问题输入条件输入条件-4-4(1)边长在输入域范围(2)两
34、边之和大于第三边(3)三边是否相等三角形问题三角形问题条件条件有效类有效类无效类无效类边长在输入域范围边长在输入域范围1 a 100(1)a 100(5)1 b 100(2)b 100(7)1 c 100(3)c 100(9)两边之和大于第三边两边之和大于第三边a b+c(13),a=b+c(14)b a+c(15),b=a+c(16)c a+b(17),c=a+b(18)三边是否相等三边是否相等a=b a c(19)a=c a b(20)b=c a b(21)a=b a=c(22)a b a c(23)等价类划分等价类划分-4三角形问题三角形问题编号编号输入输入预期输出预期输出覆盖的等价类覆
35、盖的等价类abcTC1567一般三角形一般三角形(1)(2)(3)(10)(11)(12)(20)(22)(24)TC2-256边值无效边值无效(4)TC65010565边值无效边值无效(7)TC75065105边值无效边值无效(9)TC81556非三角形非三角形 (13)TC135611非三角形非三角形(18)TC14556等腰三角形等腰三角形(19)TC15565等腰三角形等腰三角形(20)TC16655等腰三角形等腰三角形(21)TC17555等边三角形等边三角形(22)测试用例测试用例-4-4三角形问题三角形问题x1x2a bcd(1)(1)边界值分析测试用例边界值分析测试用例x1a
36、bx1x2a bcd(2)(2)健壮性测试用例健壮性测试用例x1a b示例:三角形问题示例:三角形问题(1)边长在输入域范围a的取值:的取值:0,1,2,45,99,100,101b的取值:的取值:0,1,2,45,99,100,101c的取值:的取值:0,1,2,45,99,100,101x x1x x2a bcdx x1a b(3)(3)最坏情况测试用例最坏情况测试用例(4)(4)健壮最坏情况测试用例健壮最坏情况测试用例86参数值组合参数值组合所有组合所有组合:所有特性的所有块的组合所有特性的所有块的组合测试数是每个变量的等价类数之积:测试数是每个变量的等价类数之积:Qi=1(Bi)三角形
37、:三角形:7*7*7=343 太多太多?每选择每选择:每个特性的每个块的一个值在至少一:每个特性的每个块的一个值在至少一个测试用例中被使用使用个测试用例中被使用使用MaxQi=1(Bi)测试数是所有特性的块数最大值:测试数是所有特性的块数最大值:太少太少?参数值组合参数值组合怎样测试输入的组合?l正交数组测试正交数组测试(Orthogonal array testing)程序错误都是由少数几个参数的相互作用导致的程序错误都是由少数几个参数的相互作用导致的lt覆盖正交数组覆盖正交数组任意任意t(一般是一般是2或或3)个参数的所有可能取值个参数的所有可能取值组合至少被一个测试用例覆盖组合至少被一个
38、测试用例覆盖编号编号abcTC1000TC2011TC3022TC404545TC509999TC60100100TC70101101TC8101TC9112TC101245TC1114599TC12199100TC131100101TC1411010TC15202TC162145TC172299TC18245100TC19299101TC2021000TC2121011编号编号abcTC2245045TC2345199TC24452100TC254545101TC2645990TC27451001TC28451012TC2999099TC30991100TC31992101TC3299450
39、TC3399991TC34991002TC359910145TC361000100TC371001101TC3810020TC39100451TC40100992TC4110010045TC4210010199编号编号abcTC431010101TC4410110TC4510121TC46101452TC471019945TC4810110099TC4910110110089语法结构语法结构u以语法为基础以语法为基础u变异测试变异测试(Mutation Testing)(Mutation Testing)1.在程序在程序/模型中引入小变化:变体(模型中引入小变化:变体(mutant)2.设计测
40、试使程序失败:杀死变体设计测试使程序失败:杀死变体3.失败:测试产生与原程序不同的输出失败:测试产生与原程序不同的输出if(x y)z=x-y;else z=2*x;if(x y)if(x=y)z=x-y;z=x+y;z=x m;else z=2*x;90语法结构语法结构-Stream :=action*action :=actG|actBactG :=“G”s nactB :=“B”t ns :=digit1-3t :=digit1-3n :=digit2 “.”digit2 “.”digit2digit :=“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”非终
41、止符非终止符终止符终止符产生规则产生规则开始符开始符91语法结构语法结构终止符覆盖:测试包含语法中的每个终止符。终止符覆盖:测试包含语法中的每个终止符。推导覆盖:测试包含每个可能从语法中推出的串。推导覆盖:测试包含每个可能从语法中推出的串。产生式覆盖:测试包含语法中的每个产生式。产生式覆盖:测试包含语法中的每个产生式。上述准则都是测试语法,怎样测试非语法方面?上述准则都是测试语法,怎样测试非语法方面?92变异测试变异测试基本串:基本串:语法中的串语法中的串变异操作:变异操作:指明串语法变化的规则指明串语法变化的规则变体:变体:应用一个变异操作的结果应用一个变异操作的结果93基于语法的覆盖准则基
42、于语法的覆盖准则变异覆盖变异覆盖对每个变体对每个变体m,测试集包含一个测试可以杀死,测试集包含一个测试可以杀死m被杀死的变体数称为变异得分(被杀死的变体数称为变异得分(mutation score)变异操作覆盖变异操作覆盖对每个变异操作,测试集包含一个测试用例对每个变异操作,测试集包含一个测试用例94基本串基本串G 18 08.01.90B 14 06.27.94变异操作变异操作actG 和和actB互换互换置换数字置换数字变异变异Stream :=action*action :=actG|actBactG :=“G”s nactB :=“B”t ns :=digit1-3t :=digit1-3n :=digit2 “.”digit2 “.”digit2digit :=“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”Grammar