软件测试技术(第三版) 课件全套 (范勇) 第1-7章 软件测试基础 - 系统测试_第1页
软件测试技术(第三版) 课件全套 (范勇) 第1-7章 软件测试基础 - 系统测试_第2页
软件测试技术(第三版) 课件全套 (范勇) 第1-7章 软件测试基础 - 系统测试_第3页
软件测试技术(第三版) 课件全套 (范勇) 第1-7章 软件测试基础 - 系统测试_第4页
软件测试技术(第三版) 课件全套 (范勇) 第1-7章 软件测试基础 - 系统测试_第5页
已阅读5页,还剩273页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.1软件质量第1章

软件测试基础无形性,通过运行体现其存在性可复制需求不确定性、多变性难以度量无老化问题维护复杂软件特点软件质量定义ANSI/IEEE729-1983:软件产品满足规定的和隐含的与需求能力有关的全部特征和特性:

(1)软件产品质量满足用户要求的程度;

(2)软件各种属性的组合程度;

(3)用户对软件产品的综合反映程度;

(4)软件在使用过程中满足用户要求的程度。软件质量ISO14598-1999定义:软件特性的总和,软件满足规定或潜在用户需求的能力ISO9126-2001定义:软件满足用户规定或潜在用户需求的能力,要从软件在内部,外部和使用过程中的表现来衡量,包含内部质量、外部质量、和使用质量。SEI的WattsHumphrey:软件质量是“在实用性、需求、可靠性和可维护性一致上,达到优秀的水准”QAI的BillPerry:用户满意度的高水准,忠实于用户需求贝尔实验室的JohnMusa:低缺陷率、软件功能忠实于用户需求、高可靠性的组合软件质量软件质量内容软件产品质量:满足使用要求的程度。产品的属性和行为,是可以认识、科学地描述的。并且可以通过一些方法和人类活动,来改进质量。功能性、可靠性、易使用性、效率等软件过程质量:能否满足开发所带来的成本、时间和风险等要求。软件能力成熟度模型CMM、国际标准过程模型ISO9000、软件过程改进和能力决断SPICE可维护性、兼容性、效率、可移植性、可扩展性等软件商业环境质量培训、成品制作、宣传、发布日起、客户、风险、成本、业务等可维护性、可移植性、可扩展性、安全性等软件质量广义的软件质量观软件质量模型ISO-IEC25010软件质量模型软件质量模型ISO-IEC25010内部质量和外部质量软件质量模型软件质量模型ISO-IEC25010使用质量软件质量模型软件质量属性功能性:特定条件下,构件提供的功能满足规定或隐含需求功能的程度可靠性:在规定的条件下,在规定的时间内完成规定功能/性能的能力易用性:指定使用条件下,被理解、学习、使用和吸引用户的能力效率性:在规定的条件下,相对于所用资源的数量,软件产品可提供适当性能的能力可维护性:在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力可移植性:从一种环境迁移到另一种环境的能力安全性:在规定条件下,在规定权限下访问数据、保护数据的能力兼容性:在共享软硬件资源的环境下,与其它构件交换信息或执行其特定功能的能力程度软件质量模型任正非2019年1月《全面提升软件工程能力与实践,打造可信的高质量产品》可信安全性(Security)。产品有良好的抗攻击能力,保护业务和数据的机密性、完整性和可用性。韧性(Resilience)。系统受攻击时保持有定义的运行状态,包括降级,以及遭遇攻击时快速恢复的能力。隐私性(Privacy)。遵从隐私保护既是法律法规的要求,也是价值观的体现。用户应该能够适当地控制他们的数据的使用方式。信息的使用政策应该是对用户透明的。用户应该根据自己的需要来控制何时接收以及是否接收信息。用户的隐私数据要有完善的保护能力和机制。可靠性和可用性(Reliability&Availability)。产品能在生命周期内长期保障业务无故障运行,具备快速恢复和自我管理的能力,提供可预期的、一致的服务。/cn/index.php?app=forum&mod=Detail&act=index&id=4134815软件质量重要性2021年11月30日,工业和信息化部印发了《“十四五”软件和信息技术服务业发展规划》,明确了软件作为信息技术关键载体和产业融合关键纽带,。。。并在七大方向上支持软件高质量发展,并促进软件测试领域的大发展。软件质量重要性质量保障未来软件测试是软件质量保证的重要手段1.2软件缺陷第1章

软件测试基础软件正在定义世界,软件需求量将越来越大Intel奔腾处理芯片缺陷(1994年)经典案例Ariane5型运载火箭昂贵的简单复制(1996年)1999年9月23日,美国航天局的火星气候探测者号在即将进入火星轨道时在解体1999年12月3日,美国航天局的火星基地登陆飞船在试图登陆火星表面时失踪火星勘测者事故

(1999年)经典案例爱国者导弹防御系统缺陷(1991年)经典案例北京奥运订票网站瘫痪(2007年)经典案例经典案例火车票订票网站:12306GraceHopper格蕾斯.哈珀:计算机科学家、美国海军将军编译器的发明者、COBOL语言的开发负责人创造了最大的bug——Y2K第一个Bug的故事IEEE(1983)729软件缺陷一个标准的定义:从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。软件缺陷的定义(1)软件未达到产品说明书中已经标明的功能;(2)软件出现了产品说明书中指明不会出现的错误;(3)软件未达到产品说明书中虽未指出但应当达到的目标;(4)软件功能超出了产品说明书中指明的范围;(5)软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不良。软件缺陷的定义软件缺陷来源修复缺陷的开销软件行业中修复错误的开销设计与编码编译或连接售前集成发布之后开发阶段修复错误的开销$139$455$977$7136$14102缺陷描述缺陷标识缺陷类型缺陷严重程度缺陷产生可能性缺陷优先级缺陷状态缺陷起源缺陷来源缺陷原因软件缺陷的属性缺陷优先级级别描述

立即解决(Immediately)缺陷必须被立即解决。正常排队(NormalQueue)缺陷需要正常排队等待修复或列入软件发布清单。不紧急(NotUrgent)缺陷可以在方便时被纠正。缺陷严重级别缺陷严重等级描述严重缺陷(Critical)不能执行正常工作功能或重要功能。或者危及人身安全。较严重缺陷(Major)严重地影响系统要求或基本功能的实现,且没有办法更正。一般缺陷(AverageServerity)严重地影响系统要求或基本功能的实现,但存在合理的更正办法。次要缺陷(Minor)使操作者不方便或遇到麻烦,但它不影响执行工作功能或重要功能。改进型缺陷(Enhancement)其它错误缺陷起源起源描述需求(Requirement)在需求阶段发现的缺陷架构(Architecture)在架构阶段发现的缺陷设计(Design)在设计阶段发现的缺陷代码(Code)在编码阶段发现的缺陷测试(Test)在测试阶段发现的缺陷缺陷的生命周期测试人员发现缺陷,提交新缺陷入库,缺陷状态为New;测试经理审阅。确为缺陷,分配给相应的开发人员,并设置为Open状态;若不是缺陷,则拒绝,设置为Declined状态。开发人员对标记为Open状态的缺陷进行确认,若不是缺陷,状态修改为Declined;如果是缺陷则修复,并置状态为Fixed。不能解决的缺陷,留下文字说明并保持Open状态。缺陷修复后由测试人员验证后,确认已修复,可关闭,状态改为Closed。如果仍有问题,状态改为Reopen。缺陷状态新缺陷(New):测试中新发现的缺陷;打开(Open):被确认并分配给开发人员处理;修正(Fixed):开发人员已经完成,等待测试人员验证;拒绝(Declined):拒绝修改缺陷;延期(Deferred):不在当前版本修复,在下一版本修复;关闭(Closed):缺陷已被修复;重新打开(Reopen):缺陷重新出现,需开发人员重新处理;思考问题、故障、bug、缺陷、错误。。。等术语的差异?缺陷检测、缺陷修复、缺陷预防,对软件质量的影响分别是怎样的?第1章

软件测试基础1.3软件测试基本术语传统:测试是一种旨在评估一个程序或系统的属性或能力,确定它是否符合其所需结果的活动。1983年IEEE:测试是使用人工和自动手段来运行或检测某个系统的过程,其目的在于检验系统是否满足规定的需求或弄清预期结果与实际结果之间的差别。Myers:测试是为了发现错误而执行一个程序或系统的过程。明确地提出软件测试以检验是否满足需求为目标。明确提出了“寻找错误”是测试目的。软件测试定义从软件质量保证的角度看软件测试是一种重要的软件质量保证活动测试过程中的活动包括“分析”软件和“运行”软件。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试定义测试的目的测试是为了证明程序有错,而不是证明程序无错误;一个好的测试用例在于能够发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误的测试。测试的“成功”与“失败”就在于:

能否发现错误!软件测试目的测试用例(testcase)测试用例是为某个特定测试目标而设计的,它是测试操作过程序列、条件、期望结果及相关数据的一个特定的集合软件测试用例测试目标(testobjective):为什么测试?测试对象(testtarget):回答测什么?测试环境:测试用例运行时所处的环境,包括系统的软硬件配置和设定等要求;软件测试用例测试前提:测试在满足什么条件下开始测试?输入数据:运行测试时需要运行哪些测试数据?操作步骤:运行测试用例的操作步骤序列预期结果(testoracle):按操作步骤序列运行测试用例时,被测件的预期运行结果。软件测试用例按测试方法/技术(method/technology)软件测试分类测试层次(级别)单元测试(UnitTesting)集成测试(IntegrationTesting)确认测试(ValidationTesting)系统测试(SystemTesting)验收测试(VerificationTesting)软件测试分类按测试实施组织划分开发方测试用户测试(β测试)第三方测试软件测试分类按是否使用工具划分手工测试自动化测试软件测试分类按照企业中实际工作需要,测试主要包含下面的类型:功能测试接口测试健壮性测试强度测试压力测试性能测试用户界面测试安全测试可靠性测试安装/反安装测试文档测试恢复测试兼容性测试回归测试α测试β测试软件测试分类软件测试的一般流程思考:为什么需要测试用例?软件测试和软件质量保证的区别与联系?第1章

软件测试基础1.4软件测试基本原则1.可追溯性所有的测试都应追溯到用户的需求。系统中最严重的错误是那些导致程序无法满足用户需求的错误。

软件测试的原则2.尽早开展预防性测试在软件生命周期各阶段都可能产生错误;缺陷具有放大的特点;缺陷的修改成本随着阶段的推移将急剧上升;软件测试的原则问题发现越早,解决问题的代价就越小。3.不可能完全的测试输入量太大执行路径太多M1D1D2D3D4M2M3M4M5M6M7D5<=20次循环次数 01 2………20独立路径数 51+52+53+……+521≈1014每个测试用例 5分钟共需测试时间 10亿年若X、Y为所有可能的整数,在字长32位机上测试:

X1、Y1Z1

. . .

Xn、YnZn

测试次数:n=232232=2641.841019程序PXYZ输入输出软件测试的原则4.80-20原则测试发现的错误中80%很可能起源于20%的模块中。应孤立这些疑点模块重点测试。在所测程序段中,若发现错误数目多,则残存错误数目也比较多。软件测试的原则5.设立独立的测试机构或委托第三方测试避免测试自己的程序程序员轻易不会承认自己写的程序有错误;程序员的测试思路有局限性,做测试时很容易受到编程思路的影响;程序员测试不具有典型性。软件测试的原则6.回归测试程序修改后必须进行回归测试,避免引入新的错误。软件测试的原则7.投入/产出原则不充分的测试是不负责任的;过分的测试是一种资源的浪费;在满足软件预期的质量标准时,确定质量的投入/产出比。软件测试的原则8.缺陷集群性

测试工作的分配比例应该与预期的和后期观察到的缺陷分布模块相适应。少数模块通常包含大部分在测试版本中发现的缺陷或失效。

软件测试的原则9.杀虫剂悖论

采用同样的测试用例多次重复进行测试,最后将不再能够发现新的缺陷。为了克服这种“杀虫剂悖论”,测试用例需要进行定期评审和修改,同时需要不断增加新的不同的测试用例来测试软件或系统的不同部分,从而发现潜在的更多的缺陷。

软件测试的原则10.测试活动依赖于测试背景

针对不同的测试背景,进行不同的的测试活动。比如,对安全关键的软件进行测试,与对一般的电子商务软件的测试是不一样的。软件测试的原则关于测试原则应当把“尽早地和不断地测试”作为软件开发者的座右铭程序员应避免检查自己的程序设计测试用例时,应包括合理的输入和不合理的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态充分注意测试中的群集现象对测试错误结果一定要有一个确认过程制定严格的测试计划,排除测试的随意性注意回归测试的关联性,往往修改一个错误会引起更多错误妥善保存一切测试过程文档,测试重现往往要靠测试文档软件测试的原则1.5软件测试过程与管理第1章

软件测试基础测试层次的传统观点瀑布模型瀑布模型在20世纪80年代后期PaulRook提出了著名的软件测试的V模型V模型V模型Evolutif公司提出了W模型的概念,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型X模型测试准备测试执行测试流程其他流程测试就绪点H模型敏捷模型敏捷模型敏捷实践的主要特征聚焦价值:始终做最有价值的事,用最少的投入获取最大的回报;持续改进:消除浪费,持续提高效率和质量;以人为本:沟通无障碍,充分激发和赋能团队中的人;全面质量:全过程、全员、全范围,预防缺陷。敏捷模型TDD(Test-DrivenDevelopment)敏捷模型DevOps(Development(开发)和Operations(运维)的组合词)敏捷模型第3章黑盒测试方法3.1黑盒测试方法概述概述黑盒测试被称为功能测试或数据驱动测试。在测试时,把被测程序视为一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下进行。输入输出黒盒内部实现不可见测试用例YX概述黑盒测试主要用于发现以下情况:①是否有不正确或遗漏了的功能②在接口上,能否正确地接受输入数据,能否产生正确地输出信息③访问外部信息是否有错④性能上是否满足要求⑤界面是否错误,是否不美观⑥初始化或终止错误概述黑盒测试主要优势:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关;从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。概述边界值分析(Boundary-ValueAnalysis)组合测试(CombinatorialTesting)因果图(

Cause-EffectGraphing)等价类划分(EquivalencePartitioning)判定表(DecisionTables)状态转换测试(StateTransformTesting)场景测试(Scenario-BasedTesting)随机测试(RandomTesting)概述3.2边界值分析第3章黑盒测试方法无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。边界条件边界在哪里?边界点就是可能到达被测系统内部处理机制发生变化的点需求中有利于识别边界点的文字:位置、尺寸、数量、长度、速度、宽度、高度、距离、质量、时间。。。边界条件任何值得测试的范围的临界点,可分为:边界值:在规格说明书中明确定义;次边界:隐含在软件中必须经过分析才能获得;

数值的边界值边界条件术语范围或值bit(位)0或1byte(字节)0~255word(字)0~65,535(单字)或0~4,294,967,295(双字)K(千)1,024M(兆)1,048,576G(千兆)1,073,741,824Tera1099511627776字符的边界值边界条件字符ASCII码值字符ASCII码值Null(空)0A65Space(空格)32a97/(斜杠)47Z900(零)48z122:(冒号)58‘(单引号)96@64{(大括号)123特殊边界值DefaultBlank

ZeroEmptyNullNone边界条件如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试数据。如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试数据。分析规格说明,找出其他可能的边界条件。边界条件确定方法边界值分析法利用输入变量的最小值(min)、略大于最小值(min+)、输入值域内的任意值(nom)、略小于最大值(max-)和最大值(max)来设计测试用例。边界值分析确定边界情况,根据边界值集合完成迪卡尔积(基于“单缺陷”假设)x2dacx1b●●●●●●●●●{<x1nom,x2min>,<x1nom,x2min+>,<x1nom,x2max->,<x1nom,x2max>,<x1min,x2nom>,<x1min+,x2nom>,<x1max-,x2nom>,<x1max,x2nom>,<x1nom,x2nom>}边界值分析对于一个n变量的函数,边界值分析会产生4n+1个测试用例。x1minx1maxx2minx2maxX1取值:x1min,x1min+,x1nom,x1max-,x1maxX2取值:x2min,x2min+,x2nom,x2max-,x2max除了变量的5个边界分析取值还要考虑略超过最大值(max+)和略小于最小值(min-)时的情况dacx1b●●●●●●●●●●●●●6n+1个测试用例健壮性测试{<x1nom,x2min->,<x1nom,x2min>,<x1nom,x2min+>,<x1nom,x2max->,<x1nom,x2max>,<x1nom,x2max+>,<x1min-,x2nom>,<x1min,x2nom>,<x1min+,x2nom>,<x1max-,x2nom>,<x1max,x2nom>,<x1max+,x2nom>,<x1nom,x2nom>}X2最坏情况假设拒绝了“单缺陷”假设,它对每一个输入变量首先进行包含最小值、略高于最小值、正常值、略低于最大值、最大值五个元素集合的测试,然后对这些集合进行笛卡尔积计算,以此来看系统的反应。dacx1b●●●●●●●●●●●●●●●●●●●●●●●●●n变量函数的最坏情况测试会产生5n个测试用例两种变量最坏情况测试用例最坏情况测试X2健壮最坏情况测试是最坏情况测试的扩展,这种测试使用健壮性测试的七个元素集合的笛卡儿积,将会产生7n个测试用例。cdabX1X2健壮最坏情况测试边界值覆盖率=(执行的边界值的数量/总的边界值的数量)*100%边界值分析的局限性测试用例不充分不能发现测试变量之间的依赖关系不考虑含义和性质,没有利用理解和想象小结

有一个小程序,能够求出三个在0到9999间整数中的最大者,请分别用边界值分析和健壮性测试方法设计测试用例。练习3.3等价类划分第3章黑盒测试方法划分(PartitioningDomains)等价类(EquivalenceClass)指定义在集合A上的关系,满足自反的、对称的和传递的等性质。设R是定义在集合A上的等价关系,与A中一个元素a有关系的所有元素的集合叫做a的等价类。等价类的划分bi

bj=,

ij,bi,bjBqb1b2b3

b=DbBq每个等价类所揭示的程序错误都是等价的。有效等价类是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。利用它可以检验程序是否实现了预期的功能和性能(确认过程)。无效等价类是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。利用它可以检验程序对于无效数据的处理能力(验证过程)。等价类的划分如果输入条件规定了取值范围,或者值的个数,则可以确立一个有效等价类和两个无效等价类,例如:数据范围是1~50有效等价类为“>=1&&<=50”两个无效等价类为“<1”和“>50”如果规定了输入数据的一组值,而且程序要对每一个输入值分别进行处理,这时要对每一个规定的输入值确立一个有效等价类,而对于这组值之外的所有值确立一个无效等价类例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序中对这4个数值分别进行了处理,则有效等价类为x=1、x=3、x=7、x=15,无效等价类为x≠1,3,7,15的值的集合。划分等价类的方法如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(即遵守规则的数据)和若干无效等价类(从不同角度违反规则的数据),例如:

测试密码域,要求密码必须是数字或字母

有效等价类为“密码是数字和字母的组合”(还可以细分)

无效等价类为“密码包括中文”、“密码包括其它符号”等如果输入条件是一个布尔量,则可以确立一个有效等价类和一个无效等价类如果确知已划分的等价类中的各元素在程序中的处理方式不同(例如字母还要区分大小写等),则应进一步划分成更小的等价类

划分等价类的方法如图,假设:

a≦x1≦d,区间为[a,b),[b,c),[c,d]e≦x2≦g,区间为[e,f),[f,g]●x2gfedcba●●●●●x1●●●●●●●●●●●●●●等价类测试类型有效等价类无效等价类X1a<=x1<=dx1<a和d<x1X2e<=x2<=gx2<e和g<x2弱一般弱健壮强一般强健壮x2gfex1dcba●●●弱一般等价类测试用例●x2gfedcba●●●●●弱健壮等价类测试用例x1●x2gfedcba●●●●●强一般等价类测试用例●●x2gfedcba●●●●●强健壮等价类测试用例x1●●●●●●●●●●●●●●等价类测试类型步骤a)分析输入输出b)划分出有效等价类和无效等价类,建立等价类表,每一个等价类分别规定一个唯一的编号c)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。d)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。等价类设计测试用例1. 等价类测试的弱形式不如对应的强形式的测试全面。2. 如果实现语言是强类型,则没有必要使用健壮形式的测试。3. 如果错误条件非常重要,则进行健壮形式的测试是合适的。4.如果输入数据以离散值区间和集合定义,则等价类测试是合适的。当然也适用于如果变量值越界系统就会出现故障的系统。等价类测试指导方针和观察5. 通过结合边界值测试,等价类测试可得到加强。6. 强等价类测试假设变量是独立的,相应的测试用例相乘会引起冗余问题。如果存在依赖关系,则常常会生成错误测试用例。7. 在发现合适的等价关系之前,可能需要进行多次尝试。等价类测试指导方针和观察以下界面可以设计哪些等价类?练习3.4基于决策表的测试第3章黑盒测试方法简单组合问题根据组合知道结果的问题,就采用判定表方法/决策表方法(Decisiontable)。“阅读指南”决策表12345678问题觉得疲倦?YYYYNNNN感兴趣吗?YYNNYYNN糊涂吗?YNYNYNYN建议重读√继续√跳下一章√√休息√√√√决策表的组成决策表通常由以下4部分组成:条件桩—列出问题的所有条件条件项—针对条件桩给出的条件列出所有可能的取值动作桩—列出问题规定的可能采取的操作动作项—指出在条件项的各组取值情况下应采取的动作

条件桩动作桩条件项动作项规则将任何一个条件组合的特定取值及相应要执行的动作称为一条规则。在决策表中贯穿条件项和动作项的一列就是一条规则。决策表的组成判定表图示条目部分中的一列就是一条规则。规则指示在规则的条件部分中指示的条件环境下要采取什么行动。“—”叫“不关心”:条件无关或条件不适用。条目部分条件部分桩行动部分决策表的组成若表中有两条以上规则具有相同的动作,并且在条件项之间存在极为相似的关系,便可以合并。合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。决策表的合并于约简构造决策表的5个步骤:(1)确定规则的个数。有n个条件的决策表有2n个规则(每个条件取真、假值)。(2)列出所有的条件桩和动作桩。(3)填入条件项。(4)填入动作项,得到初始决策表。(5)简化决策表,合并相似规则。决策表的构造决策表测试法适用于具有以下特征的应用程序:if-then-else逻辑突出;输入变量之间存在逻辑关系;涉及输入变量子集的计算;输入与输出之间存在因果关系。适用于使用决策表设计测试用例的条件:规格说明以决策表形式给出,或较容易转换为决策表。条件的排列顺序不会也不应影响执行的操作。规则的排列顺序不会也不应影响执行的操作。当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。如果某一规则的条件要执行多个操作,这些操作的执行顺序无关紧要。小结3.5其他黑盒测试方法第3章黑盒测试方法场景的定义场景从用户的角度描述系统的运行行为。场景:是由一系列相关的活动组成的,而且场景中的活动还可以由一系列的场景构成。现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。场景测试场景的构成基本流备用流场景测试场景1:基本流场景2:基本流备选流1场景3:基本流备选流1备选流2场景4:基本流备选流3场景5:基本流备选流3备选流1场景6:基本流备选流3备选流1备选流2场景7:基本流备选流4场景8:基本流备选流3备选流4场景测试场景测试步骤(1)根据程序说明,找出程序的基本流及备选流;(2)根据基本流和各项备选流生成不同的场景;(3)对每一个场景生成相应的测试用例(4)对每一个测试用例确定测试数据值。场景测试思考练习:ATM自动取款机分析ATM自动取款机的场景流程,并设计测试用例、选择测试数据。场景测试多个参数多个取值怎么办?正交试验法正交试验法正交试验设计法(Orthogonalexperimentaldesign)正交试验法正交试验法

应用正交表设计测试用例的步骤识别测试对象的参数确定每个参数的取值个数选择正交表参数取值映射到正交表构建测试用例正交试验法正交试验法129664正交试验法功能性测试的优点功能性测试与软件如何实现无关,如果实现发生变化,功能性测试用例仍然可用(可重用性,面向回归测试)测试用例开发可以与软件开发同时进行,可节省软件开发时间,通过软件的用例(usecase)就可以设计出大部分功能性测试用例功能性测试的缺点测试用例数量较大测试用例可能产生很多冗余功能性测试的覆盖范围不可能达到100%功能测试总结4.1白盒测试方法概述第4章白盒测试方法白盒测试(white-box,oropen-box,clear-boxtesting):Usethestructureoftheprogramtotest.——Structuraltesting此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试方法测试用例被测程序源程序分析覆盖情况分析执行路径白盒测试方法图的定义一组结点N,N非空一组初始结点N0

,N0

非空一组终止结点Nf,Nf非空一组边E,每条边从一个结点到了一个结点,(ni,nj),i

是前驱,j

为后继1N0={1}Nf={1}E={}程序结构分析publicvoidfunction(inta,intb,intc){if((a>1)&&(b==0){c=c/a;}if((a==5)||(c>1){c=c+1;}c=a+b+c;}源代码程序控制流程图程序结构分析控制流图是退化的程序流程图,图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。控制流图中的基本元素:节点边在控制流图中用圆“○”表示节点,一个圆代表一条或多条语句。控制流图中的箭头线称为边,代表控制流。程序结构分析基本控制流图顺序结构IF选择结构While循环结构Until循环结构Case多分支结构程序结构分析程序结构分析(a)程序流程图i=0i<100i++n=n+il=l+ii%2==0开始结束FalseFalseTrueTrue6354217e1e2e3e4e5e6e8e7R1R2R3(b)控制流图复合逻辑下的控制流图改复合条件的判定为一系列单个条件的嵌套的判定程序结构分析aorbx++x--(a)(b)(c)ax++x++x--b定义:有m个节点的控制流图矩阵,是一个m×m矩阵:A=(a(i,j)),其中a(i,j)是1,当且仅当从节点i到节点j有一条弧,否则该元素为0。程序结构分析逻辑覆盖方法基路径测试循环测试数据流测试(定义-使用覆盖)域测试。。。白盒测试方法4.2逻辑覆盖测试第4章白盒测试方法逻辑覆盖测试(Logicalcoverage)逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。通常希望选择最少的测试用例来满足所需的覆盖标准。主要的覆盖标准语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖路径覆盖逻辑覆盖测试例子程序if((A>1)&&(B==0))X=X/A;if((A==2)||(X>1))X=X+1;(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc逻辑覆盖测试⑴语句覆盖(Statementcoverage):选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次。语句覆盖Case1:A=2,B=0,X=3(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdcCase2:A=2,B=1,X=3(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc此语句未覆盖语句覆盖Case1:A=2,B=0,X=3(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc错写成OR错写成AND语句覆盖是最弱的覆盖语句覆盖⑵判定覆盖(Branchcoverage):(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次)。判定覆盖Case1:A=2,B=0,X=3(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdcCase3:A=1,B=0,X=1(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc判定覆盖

只作到判定覆盖将无法确定判定内部条件的错误。(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc错写成X<1

因此判定覆盖仍是弱的覆盖标准。判定覆盖⑶条件覆盖(Conditioncoverage):选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次。条件覆盖上例中设条件满足条件覆盖的一组测试用例ABX路径覆盖分支覆盖条件Case6211abebeT1F2T3F4Case7103abebeF1T2F3T4条件覆盖(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc⑷判定/条件覆盖:选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次。判定-条件覆盖满足判定-条件覆盖的一组测试用例ABX路径覆盖分支覆盖条件Case1203aceceT1T2T3T4Case8111abdbdF1F2F3F4(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdcCase1:A=2,B=0,X=3判定-条件覆盖Case8:A=1,B=1,X=1(A>1)AND

(B==0)(A==2)OR(X>1)aX=X/AX=X+1eFFTTbdc(5)条件组合覆盖:指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次。条件组合测试上例中需考虑4个条件的8种组合①A>1,B=0T1T2判定一为真②A>1,B≠0T1F2③A≤1,B=0F1T2判定一为假④A≤1,B≠0F1F2

⑤A=2,X>1T3T4⑥A=2,X≤1T3F4

判定二为真⑦A≠2,X>1F3T4⑧A≠2,X≤1F3

F4判定二为假ABX路径覆盖组号覆盖条件Case1203ace①⑤T1T2T3T4Case8211abe②⑥T1F2T3F4Case9103abe③⑦F1T2F3T4Case10111abd④⑧F1F2F3F4满足条件组合覆盖的一组测试用例条件组合测试

⑹路径覆盖(Pathcoverage):选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次)。路径覆盖用例ABX执行路径Case1203aceCase7101abdCase8211abeCase11301acd语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖小结4.3基本路径测试第4章白盒测试方法基本路径测试基本路径测试是TomMcCabe提出的一种白盒测试技术,这种方法首先根据程序或设计图画出控制流图,并计算其区域数,然后确定一组独立的程序执行路径(称为基本路径),最后为每一条基本路径设计一个测试用例。概述程序的环路复杂性即McCabe复杂性度量,简单的定义为控制流图的区域数。程序环路复杂性又叫圈复杂度。圈复杂度:是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目。程序环路复杂性圈复杂度程序图的圈复杂度计算方法(三种):V(G)=e–n+2p;e:边数,n:节点数,p:连接区域数当p=1时,V(G)=e–n+2;V(G)=P+1;P是图G中判定节点的数量程序图中区域的数量对应于环路的复杂性程序环路复杂性程序环路复杂性方法一:E=8,N=7,V(G)=E-N+2=8-7+2=3,程序的环路复杂性为3方法二:V(G)=P+1=2+1=3方法三:图中有3个区域:R1,R2,R3,其环路复杂性为3独立路径:包括一组以前没有处理的语句或条件的一条路径。选择独立路径时必须包含一条在定义之前不曾用到的边。(每一条新的路径至少包含一条新的边)控制流图中所有独立路径的集合就构成了基本路径集。独立路径独立路径一组独立路径path1:1-2-7;path2:1-2-3-4-6-2-7;path3:1-2-3-5-6-2-7;通过分析程序控制流图的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。基本路径测试步骤:1.导出程序的控制流图;2.计算控制流图的环路复杂度V(G);3.确定只包含独立路径的基本路径集;4.设计测试用例;基路径测试方法示例publicvoidf(intRecordNum,intType){intx=0;inty=8;while(RecordNum>0){ if(Type==0) x=y+2;else{ if(Type==1) x=y+5;elsex=y+10;}RecordNum--}}基路径测试方法第一步:画出控制流图第二步:计算圈复杂度V(G)=E–N+2=11–9+2=4V(G)=P+1

=3+1=4R1、R2、R3、R4基路径测试方法R2R1R3R451764389112105176438911210第三步:找出独立路径路径1:1-2-3-4-5-9-10-3-11路径2:1-2-3-4-6-7-9-10-3-11;路径3:1-2-3-4-6-8-9-10-3-11;路径4:1-2-3-11。5176438911210基路径测试方法第四步:导出测试用例publicvoidf(intiRecordNum,intiType){intx=0;inty=8;while(iRecordNum>0){ if(iType==0) x=y+2;else{ if(iType==1) x=y+5;elsex=y+10;}iRecordNum--}}5176438911210基路径测试方法用例编号路径输入数据预期输出2路径2:1-2-3-4-6-7-9-10-3-11iRecordNum=1,iType=1x=5用例编号路径输入数据预期输出1路径1:1-2-3-4-5-9-10-3-11iRecordNum=1,iType=0x=2用例编号路径输入数据预期输出3路径3:1-2-3-4-6-8-9-10-3-11;iRecordNum=1,iType=3x=10用例编号路径输入数据预期输出4路径4:1-2-3-11iRecordNum=0x=04.4其他白盒测试方法第4章白盒测试方法循环分为4种不同类型:简单循环、串接循环、嵌套循环和非结构循环。循环测试(1)简单循环按照下列规则设计测试用例:①零次循环:从循环入口到出口②一次循环:检查循环初始值③二次循环:检查多次循环④m次循环:检查多次循环⑤最大次数循环⑥比最大次数多一次的循环⑦比最大次数少一次的循环循环测试(2)嵌套循环按照下列规则设计测试用例:①先测试最内层循环:所有外层的循环变量置为最小值,该层按简单循环测试;②由里向外,测试上一层循环:测试时此层以外的所有外层循环的循环变量取最小值,此层以内的所有嵌套内层循环的循环变量取“典型”值,该层按简单循环测试;③反复进行,直到所有各层循环测试完毕;④对全部各层循环同时取最小循环次数,或者同时取最大循环次数循环测试(3)串接循环

如果各个循环互相独立,则可以分别用简单循环的方法进行测试;但如果第一个循环的循环计数是第二个循环的初值,则两个循环不独立,此时,可用测试嵌套循环的办法来处理。(4)非结构循环

这一类循环应该先将其结构化,然后再测试。循环测试数据流测试按照程序中的变量定义和使用的位置来选择程序的测试路径;数据流测试关注变量接收值的点和使用这些值的点;一种简单的数据流测试策略是要求覆盖每个定义-使用路径一次;数据流测试用做路径测试的“真实性检查”。数据流测试数据流分析常常集中于定义/引用异常的缺陷:变量被定义,但从来没有使用;所使用的变量没有被定义;变量在使用之前被定义两次;

数据流测试白盒测试的优点是帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。白盒测试存在以下缺点:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。小结第5章

单元测试单元测试的定义单元测试目标单元测试的意义单元测试的内容5.1单元测试概述

5.1.1单元测试定义1.概念单元(Unit)指一个可独立运行的代码段,独立运行是指的是这个工作不受前一次或接下来的程序运行的结果影响。单元测试(unittesting)对软件设计的最小单元进行功能、性能、接口和设计约束等正确性进行检验,主要测试其在语法、格式和逻辑上的错误,并验证程序是否符合规范所要求功能的最具有实践意义的方法。5.1.1单元测试定义单元测试是对软件基本组成单元进行的测试。单元测试从程序的内部结构出发来进行测试的,多采用白盒测试(结构性测试)技术。单元测试是软件开发过程中进行的最低级别的测试活动。测试进行得越早越好。测试工作主要是由程序开发人员进行自测和互测,同时还需要单独的测试角色,来进行测试和评审。5.1.1单元测试定义1.测试对象:“单元”结构化编程语言单元测试对象是函数或者子过程。面向对象语言单元测试对象是类或者类的方法。如一个菜单、屏幕显示界面或对话框等5.1.1单元测试定义2.单元测试方法静态测试动态测试5.1.2单元测试目标3.目标(1)单元测试能更准更全面地找到错误,显著提高软件质量检查代码实现是否符合设计测试依据是详细设计描述(2)单元测试能够大量削减开发时间和成本尽早发现错误5.1.3单元测试的意义1.单元测试对软件的设计实现的意义加强代码的可测试性,促进代码的重构;更加清晰的揭示出开发中的设计流程;对架构的反思:更清楚怎样使用该被测试单元。软件的代码更容易维护。保证软件项目组人员的良好沟通;

有效的单元测试是推行全局质量文化的一部分,而这种质量文化将会为软件开发者带来无限的商机。5.1.3单元测试的意义2.单元测试对软件开发者的意义更清晰的认识设计规格书中所要求的功能;锻炼程序开发人员逻辑思维能力,代码静态分析技能;促进代码编写标准的一致性;

接触部分以外的其他领域;

提供一个学习的机会。单元测试的内容很多,我们需要通过各种测试方法来找到错误,通过不断的总结,形成了许多检查列表(CheckList)。通过它帮助开发人员形成良好的编程风格,提高源程序的可读性和可维护性,降低出错的机会。同时也可以使得测试更加全面,避免遗漏。

5.1.4单元测试的内容单元测试主要对模块的五个基本特性进行评价错误处理模块接口局部数据结构

重要的执行路径边界条件模块1)模块接口测试对通过被测模块的数据流进行测试,检查进出模块的数据是否正确。Checklist:模块的实际输入与定义的输入是否一致个数、类型、顺序模块中对于非内部/局部变量是否合理使用使用其他模块时,是否检查可用性和处理结果使用外部资源时,是否检查可用性并及时释放资源内存、文件、硬盘、端口等其他1)模块接口测试(续)在做内外存交换时要考虑:文件属性是否正确;OPEN与CLOSE语句是否正确;缓冲区容量与记录长度是否匹配;在进行读写操作之前是否打开了文件;在结束文件处理时是否关闭了文件;正文书写/输入错误;I/O错误是否检查并做了处理。2)模块局部数据结构测试检查局部数据结构能否保持完整性Checklist:变量从来没有被使用可能别的地方使用了错误的变量名变量没有初始化错误的类型转换数组越界非法指针变量或函数名称拼写错误使用了外部变量或函数其他3)模块边界条件测试检查临界数据是否正确处理Checklist:普通合法数据是否正确处理普通非法数据是否正确处理边界内最接近边界的(合法)数据是否正确处理边界外最接近边界的(非法)数据是否正确处理其他4)模块独立执行路径测试对模块中重要的执行路径进行测试。检查由于计算错误、判定错误、控制流错误导致的程序错误。Checklist:死代码错误的计算优先级精度错误比较运算错误赋值错误表达式的不正确符号:>、>=;=、==、!=循环变量的使用错误错误赋值其他5)模块内部错误处理测试检查内部错误处理设施是否有效Checklist:是否检查错误出现资源使用前后其他模块使用前后出现错误,是否进行错误处理抛出错误通知用户进行记录错误处理是否有效在系统干预前处理报告和记录的错误真实详细其他静态测试动态测试5.2单元测试的策略和方法

不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。也称为静态代码分析技术。它有助于提高产品质量、安全性,甚至缩短上市时间。代码走读(Codewalkthrough)代码审查(CodeInspection)代码评审(codeReview)5.2.1静态测试定义:开发组内部进行的,采用讲解、讨论和模拟运行的方式进行的查找错误的活动。经验:限时避免跑题参加人员经验丰富的开发人员和本模块相关的开发人员本项目组的新人由本模块的开发者进行讲解、回答问题并记录检查要点逻辑错误代码标准/规范/风格代码走读自动化+人工定义:开发组内部进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。经验:以会议的形式,制定会议目标、流程和规则,结束后要编写报告参加人员经验丰富的开发人员和本模块相关的开发人员本项目组的新人由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录检查要点设计需求代码标准/规范/风格代码审查定义:

开发组、测试组和相关人员(QA、产品经理等)联合进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。经验:以会议的形式,制定会议目标、流程和规则,结束后要编写报告。相关资料要在会议前下发并阅读。参加人员经验丰富的开发人员和本模块相关的开发人员测试组和相关人员由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录检查要点设计需求代码标准/规范/风格文档的完整性和一致性代码评审检查是否符合编程规范快速理解源代码,找出流程设计中的问题对原有代码的重构2.静态代码测试的主要任务动态测试(dynamictesting),指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。

所以判断一个测试属于动态测试还是静态的,唯一的标准就是看是否运行程序。5.2动态测试单元测试环境基本单元本身不是一个独立的程序,自己不能运行,要靠其它部分来调用和驱动。驱动模块(driver)桩模块(stub)──存根模块单元测试环境驱动模块(Driver)被测基本单元的主程序,它接收测试数据,并把数据传送给被测单元,最后输出实测结果。桩模块(Stub)用来代替被测基本单元调用的其他基本单元。在面向过程和面向对象的程序设计中,驱动程序和桩在实现的过程中存在一定的差异。具体的差异如下:面向过程和面向对象测试插桩差异

面向对象的程序设计面向过程的程序设计驱动模块带有main函数的类,且创建被测试类的对象,并调用被测试类的方法。main函数,且调用被测试函数。桩模块桩为对象。模拟被调用方法的对象(mock

object),如图所示桩为方法。模拟被调用方法。如图所示。

怎么构造驱动模块通过单元测试框架构建怎样构造桩模块通过Mock工具构造桩模块单元环境构造JUnitXUnitGTestJest

继承是面向对象设计中另一个重要特性,继承性表达了类与类之间的关系,一个类可以定义为另一个类的扩充或者受限。

继承对测试的影响当一个类被子类继承后,继承的方法需要在子类中重新测试?继承层次结构中类测试的测试用例可以采用如下增补原则:(1)

如果子类新增了一个或者多个新的操作,就需要增加相应的测试用例。(2)

如果子类定义的同名方法覆盖了父类的方法,需要增加相应的测试用例。是否需要产生新的子类测试用例?Class_A+operation1(

)+operation2(

)Class_B+operation3(

)Class_C+operation2(

)+operation3(

)类之间的继承关系类继承类类方法是否改变是否增加测试用例Class_Aoperation1()operation2()Class_BClass_Aoperation1()FALSEFALSEoperation2()FALSEFALSEoperation3()TRUETRUEClass_CClass_Boperation1()FALSEFALSEoperation2()TRUETRUEoperation3()TRUETRUE接口不存在任何构造方法,因此无法被实现;由于接口一定会在某个类中实现,因此就使用一个实现接口的类来做测试。遵循以下原则:如果接口没有被任何类实现就无需进行测试。如果已被别的类实现,那么就针对实现该接口的类进行逐一测试。

接口类测试抽象类不能创建对象(不能被实例化)。测试时,首先需要继承被测试抽象类,实现里面的抽象方法(函数)。抽象类测试重载和覆盖测试覆盖是在子类中重新定义了从父类中继承的同名方法;重载是类对自身已有的同名方法的重新定义。在测试过程中,可以参考如下两个原则:①要对类实例方法的所有重载形式分别进行测试;②要对覆盖了父类的同名方法进行测试;静态代码分析工具,有针对不同开发语言的,也有集合多语言检测的检测平台。选择静态代码分析测试工具的基本要求:与IDE工具的结合使用规则的自定义可生成报告与持续集成平台和质量保障平台的结合使用5.3测试工具

1.静态代码分析工具常用静态代码分析工具工具名支持语言网址checkStylestopBugsPMDalibabaP3Cjavahttps://checkstyle.sourceforge.io/https://spotbugs.github.io/index.htmlhttps://pmd.github.io//5445/p3cCppCheckCppLintC/C++http://cppli//ESLintjavascript/HTMLHintHTML/StyleLintCSS/SCSS/stylelint/stylelintStyleCopC#/PyCheckerPylintpython//通过静态测试后,规范的代码可以通过文档生成工具,为我们生成美观,方便查阅的文档。工具语言说明及官方网站javaDocjava文档生成工具,jdk内置该工具SandcastleC#微软官方的文档生成工具/EWSoftware/SHFB/releasessphinxpython文档生成工具

pydocpythonpython内置文档生成工具DoxygenC、C++、Java、Objective-C和IDL语言,部分支持PHP、C#文档生成工具,可以结合graphviz工具绘制代码相关设计图形,如类图,调用关系图等。https://www.doxygen.nl/jsdocJavaScriptAPI文档生成器/jsdoc/jsdoc文档生成工具选择动态测试工具的具有的特性:1.测试覆盖率工具与单元测试框架相兼容。2.Mock工具和测试覆盖率工具、单元测试框架相兼容。3.单元测试框架输出测试报告。4.覆盖率工具输出覆盖率测试报告。5.单元测试框架提供持续集成工具调用接口。6.覆盖率测试工具架提供持续集成工具调用接口。5.3测试工具

2.动态测试工具动态单元测试工具工具名支持语言简介JUnitTestNGJava单元测试工具ParasoftJTestMockitoPowerMockjMock、EasyMockJavaMock工具JaCoco覆盖率工具GTestboost.Testcatch2docTestctestCppUnit

VisualUnitC++、C单元测试工具gmockC++

Mock框架gcovlcov覆盖工具XUnit.NetNUnitC#单元测试工具vsinstrOpenCover覆盖率工具NMockMock测试工具unittestpytestPython单元测试工具coverage.py覆盖率工具mockMock测试工具JestMocha+chaikarmaJasmineAVATapejavascriptJavascript测试框架istanbulJsCover覆盖率工具通过覆盖率统计工具怎样评估测试质量单元测试总结单元测试,是对软件设计的最小单元进行功能、性能、接口和设计约束等正确性检验工作,主要测试其在语法、格式和逻辑上的错误。单元测试是验证程序是否符合规范所要求功能的最具有实践意义的方法。单元测试包括静态测试和动态测试。。

单元测试成为了质量软件的控制方法的重要方法之一,无论对控制软件质量还是软件开发者都有着极其重要的现实意义。

第6章

集成测试6.1集成测试概述集成测试(Integrationtest)也叫组装测试或联合测试是在单元测试的基础上,将所有模块按照设计要求集成为系统或子系统,在单元组装过程中,进行测试,发现并清除在单元连接过程中出现的问题,确保集成到一起的各单元能共同完成预期的功能,并达到要求的性能。集成测试与单元测试的区别测试对象有所区别;集成测试关注的是模块间的接口,接口之间的数据传递关系,单元组合后是否实现预计的功能。集成测试组装的对象比单元测试的对象级别要高。集成测试与系统测试的区别测试对象系统测试对象是整个系统以及与系统交互的硬件和软件平台。对系统做功能性的和非功能性验证。集成测试的对象是模块间的接口,其目的是要找出在模块接口上面的问题。测试依据系统测试的依据来自用户的需求规格说明书和行业的已成文的或事实上的标准。集成测试的依据来自系统的高层设计(架构设计或概要设计)。集成测试目的集成测试的目标就是检测系统是否达到需求;对业务流程及数据流的处理是否符合标准;检测系统对业务流处理是否存在逻辑不严谨或者错误;检测需求是否存在不合理的标准及要求。具体检测包括功能正确性验证、接口测试、全局数据结构的测试以及计算精度检测等在集成测试时可能出现的错误。基于功能分解的集成非渐增式集成渐增式集成:自顶向下、自底向上、三明治集成基于调用图的集成基于UML的集成6.2集成测试的方法非渐增式集成-大棒集成定义又叫大棒集成(Big-bangIntegration)。所有通过了单元测试的模块按设计要求,一次全部组装起来,然后进行整体测试。目的尽可能缩短测试时间,使用最少的测试用例验证系统。优点需要的测试用例少;测试方法简单易行;缺点难以保证对各个模块之间的接口进行充分测试;对全局数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论