软件测试基本概念及白盒测试方法课件_第1页
软件测试基本概念及白盒测试方法课件_第2页
软件测试基本概念及白盒测试方法课件_第3页
软件测试基本概念及白盒测试方法课件_第4页
软件测试基本概念及白盒测试方法课件_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

1、软件测试基本概念及白盒测试方法软件测试定义 使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。-在IEEE软件工程标准术语软件测试的目的测试是程序的执行过程,目的在于发现错误测试是为了证明程序有错,而不是证明程序无错误一个好的测试用例在于能发现至今未发现的错误一个成功的测试是发现了至今未发现的错误的测试-Grenford J. Myers测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量-Bill Hetzelt软件测试的目的以最少的人力、物力、时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷提

2、高软件质量,回避潜在的软件错误和缺陷给软件造成商业风险。通过分析测试过程中发现的问题可以帮助发现当前开发工作所采用的软件工程的缺陷,以便进行软件过程改进,同时通过测试结果的分析整理,可修正软件开发规则,并为软件可靠性分析提供依据。软件测试的目的评价程序或系统的属性,对软件质量进行度量和评估,以验证软件的质量满足用户的需求,为用户选择接受软件提供有力的依据。软件测试的原则软件测试是证伪而非证真软件测试完成并不能说明软件已经不存在问题了。尽早地和不断地进行软件测试软件开发的每个环节都可能产生错误软件开发每前进一步,发现和修复软件缺陷的代价平均要增长10倍。重视无效数据和非预期使用习惯的测试软件产品

3、中突然暴露出来的许多问题常常是当程序以某种非预期的方式运行导致的。软件测试的原则程序员应避免检查自己的程序人们具有一种不愿意否定自己的自然性心理充分注意测试中的群集现象经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比用例要定期评审,适时补充修改用例测试用例多次重复使用后,其发现缺陷的能力会逐渐降低。软件测试的原则应当对每一个测试结果做全面检查这是一条最明显的原则,但常常被忽略。遗漏缺陷测试现场保护和资料归档出现问题时要保护好现场,并记录足够的测试信息,以备缺陷能够复现。妥善保存测试计划,测试用例,出错统计和最终分析报告,为以后产品升级测试提供足够的价值信息。软件测试的原则软

4、件测试的经济性原则软件测试是保证软件质量的重要环节穷尽测试是不可能的根据程序的重要性及故障发生的损害程度来确定测试有限级做好测试策略,使用尽可能少的测试用例发现尽可能多的软件缺陷软件测试的对象软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。为把握软件开发各个环节的正确性,需要进行各种确认和验证工作。验证与确认确认(Validation),是在产品交付用户之前进行的深入细致的评定,它的目的是确定整个产品是否满足规格说明。 需求规

5、格说明的确认 程序的确认 (静态确认、动态确认) 验证(Verification),确定某阶段是否正确完成的过程,在每阶段结束时进行 -IEEE 610.12,1990:软件工程术语表验证与确认验证(Verification)在生命周期的每个阶段,通过测试和分析,确定所考查阶段的需求是否满足前一阶段的输出以及本阶段的输出是否实现了本阶段的需求的活动。确认(Validation)通过测试和分析,表明产品在各个方面符合规定需求的一种证明行为 。-EN50129.2003 软件的验证和确认与软件质量保证的关系验证和确认不同于软件质量保证,验证和确认是一个系统工程过程,采用严格的方法学来评估软件生命周

6、期全过程中的软件产品的正确性和质量,强调产品的完整性和正确性。软件质量保证是一个系统过程,评价过程和产品,通过强调对过程的监视来保证发布产品的质量,强调对标准和程序的依从性。验证和确认关注的是安全和任务关键的工程软件; 软件质量保证关注的是整个工程软件。验证和确认不能代替软件质量保证,它应该是软件质量保证的补充,它们的工作可能有一些重迭。测试信息流测试信息流软件配置:软件需求规格说明、软件设计规格说明、源代码等;测试配置:测试计划、测试用例、测试程序等;测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。测试信息流测试结果分析:比较实测结

7、果与预期结果,评价错误是否发生。排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档再测试:直到通过测试为止。测试信息流通过收集和分析测试结果数据,对软件建立可靠性模型利用可靠性分析,评价软件质量: 软件的质量和可靠性达到可以接受的程度; 所做的测试不足以发现严重的错误;如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。软件测试的分类分类依据测试类型软件开发阶段单元测试(模块测试)集成测试(组装测试,部件测试)系统测试(确认测试,配置项测试)验收测试软件测试的分类分类依据测试类型测试方法与技术是否执行软件静态

8、测试动态测试是否了解内部结构黑盒测试白盒测试灰盒测试软件测试的分类分类依据测试类型测试实施组织开发方测试用户测试第三方测试软件测试的分类分类依据测试类型测试内容功能测试安全性测试接口测试容量测试完整性测试结构测试用户界面测试软件测试的分类分类依据测试类型测试内容负载测试压力测试疲劳强度测试恢复性测试配置测试兼容性测试安装测试测试类型描述单元测试单元测试又称为模块测试,是对软件中最小可测单元进行检查和验证。单元测试需要掌握内部设计和编码的细节知识,往往需要开发测试驱动模块和桩模块来辅助完成,一般由开发人员来执行测试。集成测试单元测试的下一个阶段就是集成测试,又称为组装测试,是在单元测试的基础上,

9、将单元模块组装成系统或子系统过程中所进行的测试,重点检查软件不同单元或部件之间的接口是否正确。系统测试系统测试是对整个基于计算机系统的测试,软件作为该系统的一个元素,与计算机硬件,外设,网络,支持软件,数据和人员等其他系统元素结合在一起,在真实或模拟运行环境下进行一系列的组装测试和确认测试,检查软件是否能与硬件、外设、网络、支持软件等正确配置连接,并满足用户需求。验收测试验收测试是按照项目任务书或合同,供需双方约定的验收依据文档,在用户指定的或真实的环境中,对整个系统进行的测试与评审,作为用户接受或拒绝系统的依据,是软件在投入使用之前的最后测试。静态测试不运行被测软件本身,仅通过人工分析或检查

10、软件的需求说明书,设计说明书,以及源程序的文法,结构、过程、接口等来验证软件正确性的测试过程动态测试通过人工或工具运行软件,比较软件运行的外部表现与预期结果的差异,来验证软件的正确性,并分析软件运行效率和健壮性等性能。白盒测试白盒测试是一种按照程序内部逻辑结构和编码结构设计测试数据的测试方法。测试时可以看到被测程序的内部结构,并根据其内部结构设计测试数据,使程序中的每个语句、每个条件分支、每个控制路径都在程序测试中受到检验。白盒测试又称为结构测试或逻辑驱动测试。黑盒测试黑盒测试(BLACK-BOXTESTING)是一种按照需求规格说明设计测试数据的方法。它把程序看作内部不可见的黑盒子,完全不需

11、考虑程序内部结构和编码结构,也不需考虑程序中的语句及路径,测试者只需了解程序输入和输出之间的关系,或是程序的功能,完全依靠能够反映这一关系和程序功能的需求规格说明确定测试数据,判定测试结果的正确性。黑盒测试也称功能测试、 数据驱动测试。灰盒测试介于白盒测试与黑盒测试之间的测试;关注输出对于输入的正确性,同时也关注内部表现。开发方测试在软件开发环境下,由开发方检测与证实软件的实现是否满足设计说明或需求说明要求的过程。用户测试在用户的应用环境下,用户通过运行和使用软件,检测和核实软件是否符合自己预期要求的过程。第三方测试又称独立测试,通常是在模拟用户真实应用的环境下,由在技术、管理、财务上与开发、

12、用户相当独立的组织进行的软件测试功能测试侧重于验证测试目标预期功能,在规定的一段时间内运行软件系统的所有功能,以验证这个软件系统有无严重错误。安全性测试侧重于确保测试目标数据(或系统)只供预定好的那些参与者访问。接口测试测试验证测试目标的数据接口的正确性和对其设计的遵循性容量测试侧重于验证测试目标处理大量数据的能力。完整性测试侧重于评估测试目标的健壮性(防止故障)和语言、语法和资源用途的技术一致性。结构测试侧重于评估测试目标对其设计和形式的遵循性。用户界面测试侧重于验证用户与软件的交互。负载测试一种性能测试,侧重于验证和评估在满足性能指标的情况下,系统所能承受的最大负载量。压力测试一种性能测试

13、,侧重于通过确定一个系统的瓶颈或不能接受的性能点,来获得系统能提供的最大服务级别。疲劳强度测试侧重于验证测试目标在异常或极端条件下其性能行为的可接受程度。恢复性测试侧重于应用程序或整个系统可以从各种硬件、软件或网络故障中成功地进行故障转移或恢复。配置测试侧重于在不同的硬件和软件配置上实现预期的测试目标功能。兼容性测试侧重于确保受测试系统与其他软件可以共存运行安装测试侧重于确保在不同硬件和软件配置上以及不同条件下按计划安装测试目标。性能测试性能测试是要检查系统是否满足在需求说明书中规定的性能。特别是对于实时系统或嵌入式系统。性能测试常常需要与强度测试结合起来进行,并常常要求同时进行硬件和软件检测

14、。通常对软件性能的检测表现在以下几个方面:响应时间、吞吐量、辅助存储区,例如缓冲区,工作区的大小等、处理精度等等。软件测试基本方法黑盒测试常用的方法等价类边界值错误推测法因果图法判定表法场景法功能图法软件测试基本方法白盒测试常用的方法静态测试代码走查,代码走查控制流分析,数据流分析,接口分析,表达式分析动态测试逻辑覆盖,基本路径覆盖,域测试,符合测试,程序插桩,程序变异测试方法分类与关系分析等价类划分边界值分析错误推测法因果图法判定表法正交实验法场景法功能图法黑盒测试白盒测试静态测试代码走查代码审查静态分析数据流分析控制流分析接口分析表达式分析动态测试逻辑覆盖基本路径测试域测试符号测试程序插桩

15、软件测试过程模型-V模型系统需求分析软件需求分析概要设计详细设计编码单元测试集成(部件)测试软件确认(配置项)测试(系统)确认测试系统任务说明书软件任务书软件需求说明软件概要设计文档软件详细设计文档验证验证验证验证验证验证确认确认编译后的单元测试后的单元测试后的软件部件测试后的软件配置项交付软件测试与软件开发各阶段的关系测试方法分类与关系分析单元测试适合各种测试方法集成测试适合各种测试方法,主要是动态测试方法(白盒、黑盒)确认测试、系统测试适合各种测试方法,主要是黑盒测试方法软件测试生命周期测试需求划分测试需求明确测试意图,分解测试需求;确定测试需求输入与输出;检查测试需求与软件需求的一致性。

16、白盒测试用例设计方法逻辑覆盖法基本路径法数据流测试程序插桩域测试程序变异符合测试逻辑覆盖法测试数据执行程序的逻辑覆盖程度语句覆盖(SC)判定覆盖(DC)条件覆盖(CC)判定-条件覆盖(CDC)修正条件判定覆盖(MC/DC)多条件覆盖(MCC)例语句覆盖(statement coverage)语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句。 L1:a-c-eL1测试用例的设计格式如下【输入的(A, B, X),输出的(A, B, X)】为图例设计满足语句覆盖的测

17、试用例是:【(2, 0, 4),(2, 0, 3)】 覆盖 ace【L1】 (A=2)and(B=0)or (A1)and(B=0)and (X/A1) 判定覆盖(decision coverage)判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。对于图例,如果选择路径L1和L2,就可得满足要求的测试用例L1: a-c-eL2: a-b-dL1L2100%语句覆盖不一定100%判定覆盖。【(2, 0, 4),(2, 0, 3)】覆盖 ace【L1】【(1, 1, 1),(1, 1, 1)】覆盖 abd【L2】(A=2)a

18、nd(B=0)or (A1)and(B=0)and (X/A1)(A=1)and(X=1)or (B!=0)and(A!=2)and(X=1) 判定覆盖如果选择路径L3和L4,还可得另一组可用的测试用例:【(2, 1, 1),(2, 1, 2)】覆盖 abe【L3】【(3, 0, 3),(3, 1, 1)】覆盖 acd【L4】 判定覆盖L4L3条件覆盖(condition coverage)条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。在图例中,我们事先可对所有条件的取值加以标记。例如,对于第一个判断: 条件 A1 取真为 ,取假为 条件 B

19、0 取真为 ,取假为对于第二个判断: 条件A2 取真为 ,取假为 条件X1 取真为 ,取假为测试用例 覆盖分支 条件取值【(2, 0, 4),(2, 0, 3)】L1(c, e) 【(1, 0, 1),(1, 0, 1)】L2(b, d) 【(2, 1, 1),(2, 1, 2)】L3(b, e)或条件覆盖 测 试 用 例 覆盖分支 条件取值【(1, 0, 3),(1, 0, 4)】L3(b, e)【(2, 1, 1),(2, 1, 2)】L3(b, e)判定条件覆盖(condition/ decision coverage)判定条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值

20、至少执行一次,同时每个判断中的每个条件的可能取值至少执行一次。 测 试 用 例 覆盖分支 条件取值【(2, 0, 4),(2, 0, 3)】L1(c, e)【(1, 1, 1),(1, 1, 1)】L2(b, d)判定条件覆盖条件组合覆盖(Multiple condition coverage)条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。 记 A1, B0 作 A1, B0 作 A1, B0 作 A1, B0 作 A2, X1 作 A2, X1 作 A2, X1 作 A2, X1 作 测 试 用 例 覆盖条件 覆盖组合【(2, 0, 4)

21、, (2, 0, 3)】(L1) , 【(2, 1, 1), (2, 1, 2)】(L3) , 【(1, 0, 3), (1, 0, 4)】(L3) , 【(1, 1, 1), (1, 1, 1)】(L2) , 修正条件判定覆盖(MC/DC)运行被测程序,使得条件判断表达式中所有条件操作数逻辑值独立对条件判定表达式结果影响。(每个条件对判定的结果都至少转化一次) A1, B0 作 结果 1 A1, B0 作 结果 0 A1, B0 作 结果 0 修正条件判定覆盖(MC/DC)路径覆盖路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。测 试 用 例 通过路径 覆盖条件【(2, 0, 4)

22、, (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd (L4) 条件测试路径选择当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例;对于连锁型分支结构, 若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径。当n较大时将无法测试。条件测试路径选择循环测试路径选择循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。 (

23、1) 简单循环 零次循环:从循环入口到出口 一次循环:检查循环初始值 二次循环:检查多次循环 m次循环: 检查在多次循环 最大次数循环、比最大次数多一次、少一次的循环。循环测试路径选择例:求最小值k = i; for ( j = i+1; j = n; j+ ) if ( Aj 0) 错写成:if( e=0) 使用白盒测试方法则不能发现该错误。因此必须将结构测试与功能测试方法结合起来。白盒测试方法-说明2说明2:采用其中任何一种方法都不能完全覆盖所有的测试用例,因此,在实际的测试用例设计过程中,可以将不同的测试方法组合起来,交叉使用。黑盒测试方法等价类划分等价类划分是一种典型的黑盒测试方法,使

24、用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。划分等价类等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。等价类划分等价类的划分有两种不同的情况: 有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。 无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的

25、输入数据构成的集合。在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。等价类划分划分等价类的原则。(1) 如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。等价类划分例如,在程序的规格说明中,对输入条件有一句话: “ 项数可以从1到999 ” 则有效等价类是“1项数999”两个无效等价类是“项数1”或“项数999”。在数轴上表示成: 等价类划分(2) 如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。例如,在Pascal语言中对变量标识符规定为“以字母打头的串”。那么所有以字母打头的构成有效等价类,

26、而不在此集合内(不以字母打头)的归于无效等价类。等价类划分(3) 如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。(4) 如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为 每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。等价类划分例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定4个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。(5) 如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干

27、个无效等价类(从不同角度违反规则)。等价类划分例如,Pascal语言规定 “一个语句必须以分号;结束”。这时,可以确定一个有效等价类 “以;结束”,若干个无效等价类 “以:结束”、“以,结束”、“以 结束”、“以LF结束”等。确立测试用例在确立了等价类之后,建立等价类表,列出所有划分出的等价类。等价类划分再从划分出的等价类中按以下原则选择测试用例:(1) 为每一个等价类规定一个唯一编号;(2) 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;(3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效

28、等价类都被覆盖为止。等价类划分用等价类划分法设计测试用例的实例在某一PASCAL语言版本中规定:“标识符是由字母开头,后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。” “在同一说明语句中,标识符至少必须有一个。”等价类划分用等价类划分的方法,建立输入等价类表:等价类划分下面选取了9个测试用例,它们覆盖了所有的等价类。 VAR x,T1234567:REAL; BEGIN x := 3.414; T1234567 := 2.732; . (1), (2), (4), (8), (9), (12), (14) VAR :REAL; (3

29、) VAR x,:REAL; (5)等价类划分 VAR T12345678:REAL; (6) VAR T12345.:REAL; (7) 多于80个字符 VAR T$:CHAR; (10) VAR GOTO:INTEGER; (11) VAR 2T:REAL; (13) VAR PAR:REAL; (15) BEGIN . PAP := SIN (3.14 * 0.8) / 6; 等价类划分边界值分析边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查

30、出更多的错误。比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。 我们应注意到这三个数值应当满足 A0、B0、C0、 ABC、ACB、BCA,才能构成三角形。但如果把六个不等式中的任何一个大于号“”错写成大于等于号“”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。边界值分析这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。 边界值分析错误推测法人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。因果图

温馨提示

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

评论

0/150

提交评论