软件测试与质量保证申明:本课件是在原书作者课件基础上编制,仅用于课堂教学,不得用于任何商业目的的活动。PaulAmmann&JeffOffuttSYNTAXBASEDTESTINGChapter5PaulAmmann&JeffOffutt基于句法的测试第5章OUTLINEOverview:Syntax-basedTestingProgram-basedGrammarsIntegrationandObject-OrientedTestingModel-BasedGrammarsInputSpaceGrammars大纲概览:基于语句的覆盖标准基于程序的语法集成与面向对象测试基于规范的语法输入空间语法CH.5:SYNTAX-BASEDTESINGFourStructuresforModelingSoftwareGraphsLogicInputSpaceSyntaxUsecasesSpecsDesignSourceAppliedtoDNFSpecsFSMsSourceAppliedtoInputModelsIntegSourceAppliedto第五章:基于语法的测试软件建模的四种结构图逻辑表达式输入域语法用例规格设计源程序应用于析取范式规格有限状态机源程序应用于输入模型集成源程序应用于USINGTHESYNTAXTOGENERATETESTS(5.1)•Lotsofsoftwareartifactsfollowstrictsyntaxrules•ThesyntaxisoftenexpressedassomesortofgrammarsuchasBNF•Syntacticdescriptionscancomefrommanysources•Programs•Integrationelements•Designdocuments•Inputdescriptions•Testsarecreatedwithtwogeneralgoals•Coverthesyntaxinsomeway•Violatethesyntax(invalidtests)使用句语生成测试(5.1)•很多软件工件遵循严格的语法规则•句语通常表示为某种语法如BNF•句法描述可以有多种来源•程序•集成元素•设计文档•输入描述•创建测试的两个总体目标•以某种方式覆盖句法•违反句法(无效的测试)GRAMMARCOVERAGECRITERIA•Softwareengineeringmakespracticaluseofautomatatheoryinseveralways•ProgramminglanguagesdefinedinBNF•Programbehaviordescribedasfinitestatemachines•Allowableinputsdefinedbygrammars•Asimpleregularexpression:(Gsn|Btn)*‘*’isclosureoperator,zeroormoreoccurrences‘|’ischoice,eitheronecanbeused•Anysequenceof“Gsn”and“Btn”•‘G’and‘B’couldbecommands,methods,orevents•‘s’,‘t’,and‘n’couldrepresentarguments,parameters,orvalues•‘s’,‘t’,and‘n’couldbeliteralsorasetofvalues句法覆盖标准•软件工程实际上在几个方面使用自动机理论•在的BNF中定义编程语言•程序行为描述为有限状态机•用句法定义允许的输入•一个简单的正则表达式:(Gsn|Btn)*‘*’是闭包算子,零个或多个事件“|”是选择,可以使用任何一个任何序列的“Gsn”和“Btn”“G”和“B”可以是命令、方法或事件“s”、“t”和“n”可以代表参数,参数,或值“s”、“t”和“n”可能是文字或一组值TESTCASESFROMGRAMMAR•Astringthatsatisfiesthederivationrulesissaidtobe“inthegrammar”•Atestcaseisasequenceofstringsthatsatisfytheregularexpression•Suppose‘s’,‘t’and‘n’arenumbersG21080190B17062794G16112194B08010903Couldbeonetestwithfourparts,fourseparatetests,...来自句法的测试用例•一个字符串,满足派生规则被说成是“在句法中”•一个测试用例是一个字符串序列,满足正则表达式•假设“s”、“t”和“n”是数字G21080190B17062794G16112194B08010903可能是一个测试与四个部分,四个单独的测试,...BNFGRAMMARSStream::=action*action::=actG|actBactG::=“G”snactB::=“B”tns::=digit1-3t::=digit1-3n::=digit2“.”digit2“.”digit2digit::=“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”Non-terminalsTerminalsProductionruleStartsymbolBNF语法Stream::=action*action::=actG|actBactG::=“G”snactB::=“B”tns::=digit1-3t::=digit1-3n::=digit2“.”digit2“.”digit2digit::=“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”非终结符终结符产生式(规则)开始符号USINGGRAMMARS•Recognizer:Givenastring(ortest),isthestringinthegrammar?•Thisiscalledparsing•Toolsexisttosupportparsing•Programscanusethemforinputvalidation•Generator:Givenagrammar,derivestringsinthegrammarStream::=actionaction*::=actGaction*::=Gsnaction*::=Gdigit1-3digit2.digit2.digit2action*::=Gdigitdigitdigitdigit.digitdigit.digitdigitaction*::=G2008.01.90action*…使用语法•识别器:给定一个字符串(或测试),是字符串的语法?•这被称为解析•工具的存在支持解析•程序可用其做输入验证•生成器:给定一个语法,派生该语法中的字符串Stream::=actionaction*::=actGaction*::=Gsnaction*::=Gdigit1-3digit2.digit2.digit2action*::=Gdigitdigitdigitdigit.digitdigit.digitdigitaction*::=G2008.01.90action*…MUTATIONASGRAMMAR-BASEDTESTINGGrammar-basedTestingUnMutatedDerivations(validstrings)MutatedDerivations(invalidstrings)GrammarMutation(invalidstrings)GroundStringMutationInvalidStringsValidStringsGenericcoveragecriteriacannowbedefined变异作为基于语法的测试基于语法的测试非变异派生(有效的字符串)变异派生(无效的字符串)语法变异(无效的字符串)基础字符串变异无效的字符串有效字符串通用的覆盖标准现在可以被定义SYNTAX-BASEDCOVERAGECRITERIA•ThemostcommonandstraightforwarduseeveryterminalandeveryproductionatleastonceTerminalSymbolCoverage(TSC):TRcontainseachterminalsymboltinthegrammarG.ProductionCoverage(PDC):TRcontainseachproductionpinthegrammarG.•PDCsubsumesTSC•Grammarsandgraphsareinterchangeable•Othergraph-basedcoveragecriteriacouldbedefinedongrammar–Buthavenot基于语法的覆盖标准•最常见的和直接使用每个终结符和每个产生式至少一次终结符覆盖(TSC):TR包含了语法G中的任何符号t.产生式覆盖(PDC):TR包含了语法G中的每个产生式p.•PDC贯穿了TSC•语法和图表是可以互换的•在语法中其他基于图的覆盖标准可能会被定义•但却没有SYNTAX-BASEDCOVERAGECRITERIA•ArelatedcriterionistheimpracticaloneofderivingallpossiblestringsDerivationCoverage(DC):TRcontainseverypossiblestringthatcanbederivedfromthegrammarG.•ThenumberofTSCtestsisboundbythenumberofterminalsymbols–13inthestreamgrammar•ThenumberofPDCtestsisboundbythenumberofproductions–18inthestreamgrammar•ThenumberofDCtestsdependsonthedetailsofthegrammar–2,000,000,000inthestreamgrammar!•AllTSC,PDCandDCtestsareinthegrammar…howaboutteststhatareNOTinthegrammar?基于语法的覆盖标准•一个相关的标准是在一个图中推导出所有可能的字符串是不切实际的.推导覆盖(DC):TR包含了任何可能的从语法G中能够推导出来的字符串.•TSC测试的数量是受终结符数量的限定•在Stream语法中的13个终结符•PDC测试的数量是受产生式的数量限定•在Stream语法中的18产生式•DC的数量取决于语法的详细信息•在Stream语法中的2000000000!•所有语法中的TSC,PDC和DC测试…如何测试,不在语法吗?MUTATIONTESTING•Grammarsdescribebothvalidandinvalidstrings•Bothtypescanbeproducedasmutants•Amutantisavariationofavalidstring•Mutantsmaybevalidorinvalidstrings•Mutationisbasedon“mutationoperators”and“groundstrings”变异测试•语法描述两个有效和无效的字符串•这两种类型可以产生出变异体•一个变异体是一个有效字符串的一个变化•变异体可能是有效或无效的字符串•变异是基于“变异操作符”和“基础字符串”WHATISMUTATION?GeneralViewWeareperformingmutationanalysiswheneverwe•usewelldefinedrules•definedonsyntacticdescriptions•tomak