海哥计算器白盒黑盒软件测试报告
- 格式:doc
- 大小:226.42 KB
- 文档页数:16
.《软件工程导论》实验报告学生姓名:学号:班级:指导老师:专业:实验日期:.白盒测试一、实验目的通过简单程序白盒测试,熟悉测试过程,对软件测试形成初步了解,并养成良好的测试习惯。
熟练掌握如何运用基路径测试方法进行测试用例设计,初步熟悉如何利用程序插装技术进行逻辑覆盖率分析。
二、实验内容:1、被测试程序功能:求解系数为整数的方程ax2+bx+c=02、程序定义:键盘输入 3 个数字 a,b ,c,求解方程 ax2 +bx+c=03、测试环境: Windows8.1 、Eclipse4、说明:本次测试采用插桩测试法,由于程序比较简单,手动输入测试用例。
四、实验步骤1、程序流程图开始输入 a, b, ca=0 Y Y Y无穷多解b=0 C=0NN NX= 无解N无解b2-4ac>=0.YX1=x2=结束2、代码:import java.util.Scanner;public class test {public static void main(String[]args ) {Scanner sc= new Scanner(System.in );System. out .println( "请输入 3个整数 a,b,c:" );String as;String bs ;String cs;int a=0;int b =0;int c=0;double x, x1 , x2 ;as= sc.nextLine();bs = sc.nextLine();cs= sc.nextLine();try {a=Integer.parseInt (as );b =Integer.parseInt (bs );c=Integer.parseInt (cs);}catch (Exception e){System. out .println( " 输入错误 ");System. exit (0);}if (a == 0){if (b == 0){if ( c == 0)System. out .println(" 无穷多解 " );elseSystem. out .println(" 无解 " );}else{x = -( c / b );System. out .println( "x=" + x);}}else{double h = b * b - 4 * a*c;if (h<0)System. out .println(" 无解 " );else{x1 = (- b + Math. sqrt (h )) / (2 * a);x2 = (- b - Math. sqrt (h )) / (2 * a); System. out .println( "x1=" + x1 + "\tx2="+ x2 );}}}}3、流图:.4、程序基本路径:(1) 1 2 3 4 5 11 预期输出:无穷多解(2) 1 2 3 4 6 11 预期输出:无解(3) 1 2 3 7 11 预期输出: x=(4) 1 2 8 9 11 预期输出: x1= x2=(5) 1 2 3 10 11 预期输出:无解5、测试实验用例:路径覆盖编号测试用例覆盖路径对应输出1a=0 ,b=0 , 1 2 3 4 5 11无穷多解c=02 a=0 ,b=0 ,c=1 1 234 6 11 无解3 a=0 ,b=1 ,c=1 1 2 3 7 11 x=-14 a=1 ,b=2 ,c=1 1 2 8 9 11 x1=-1x2=-15 a=1 ,b=1 ,c=1 1 2 3 10 11 无解黑盒测试一、实验目的黑盒测试是常用的软件测试的方法,用这种方法测试时,把被测试程序当作一个黑盒,在不考虑程序内部结构和内部特性,测试者只知道该程序的输入和输出之间的关系或程序的功能的情况下,依靠能反应这一关系和程序功能需求规格的说明书,来确定测试用例和推断测试结构的正确性。
黑盒测试实验报告一实验内容1、系统地学习和理解黑盒测试的基本概念、原理,掌握黑盒测试的基本技术和方法;2、对一个已知的程序进行测试。
3、通过试验和应用,要逐步提高和运用黑盒测试技术解决实际测试问题的能力;4、完成实验并认真书写实验报告(要求给出完整的测试信息,如测试程序、测试用例,测试报告等)二实验原理黑盒测试原理:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
软件的黑盒测试意味着测试要在软件的接口处进行。
这种方法是把测试对象看作一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
因此黑盒测试又叫功能测试。
从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都作为测试情况考虑,才能查出程序中所有的错误。
实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。
这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。
黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。
具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。
等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。
每一类的代表性数据在测试中的作用等价于这一类中的其他值。
该方法是一种重要的,常用的黑盒测试用例设计方法。
1 划分等价类划分等价类:等价类是指某个输入域的子集合。
在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。
因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。
天津农学院软件测试课程实验报告——黑盒测试院系:计算机科学与信息工程学院专业:软件工程班级:12级软件4班______小组成员:王震 1208054413__许勇 1208054401___许帅杰 1208054408___吴世兵 1208054417__王艺 1208054418___一:实验内容:1. 系统地学习和理解黑盒测试的基本概念、原理,照我黑盒测试的基本技术和方法;2. 对一个已知的程序进行测试,这里用的网上小说阅读查询的系统。
3. 通过实验和应用,要逐步提高和运用黑盒测试技术解决世界测试问题的能力;这采用的是等价类划分法和边界值法两种黑盒测试常用的方法。
4. 完成试验并认真书写报告二,实验原理:黑盒测试是常用的软件测试的方法,用这种方法测试时,把被测试程序当做一个黑盒,在不考虑内部结构和内部特征性,测试者只知道该程序的输入和输出之间个关系或程序的功能的情况下,依靠能反应这一关系和程序功能需求规格的说明书,来确定测试永烈和推断测试结构的正确性。
软件的黑盒测试被用来证实软件功能的正确性和可操作性。
1. 划分等价类:等价类划分法是把程序的输入值划分成若干等价类,然后从每个类中选取少数代表性数据作为测试用例,使每一个类中的任何一个测试用例都能代表这个等价类中的其他数据。
也就是说,如果从某等价类中选出任意一个测试用例都能发现错误,就可以认为该类中其他测试用例也能发现错误,这样就不需要漫无边际地寻找测试用例,而是针对性地使用测试用例。
该方法是一种重要的、常用的黑盒测试用例设计方法。
2. 边界值分析法:就是对输入或输出的边界值进行测试的一种黑盒测试方法。
通常边界值分析法是作为等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
3. 功能图法:一个程序的功能说明通常动态说明和静态说明组成。
动态说明描述了输入数据的次序和转移的次序。
静态说明描述了输入条件和输出条件之间的对应关系。
对于复杂的程序,由于存在大量的组合情况,因此仅用静态说明组成的规格说明对于测试来说往往是不够的,必须用动态说明来补充功能说明。
实验二1.引言
编写目的
练习使用黑盒测试。
项目背景
来自windows7的计算器。
定义
参考资料
计算器帮助主题;
2.测试计划执行情况?
测试项目
功能一:%
功能二:()
Test1标准型
Test2科学型
Test3程序员
功能三:+ - * /
1.二进制
3.软件测试结论
a.软件实力:界面精美,类型和功能齐全,错误较少。
b.功能一:无错误,预期输出均正确。
功能二:在标准型,科学型,程序员型下括号个数上限均为25个。
功能三:在边界值输入时,预期结果超出边界值时会产生错误结果。
功能四:在输入范围允许内进制转换均有效,边界值输入转换无误。
功能五:除数不能为0,利用Inv计算方根较为方便,使界面更加简单。
功能六:正弦余弦计算均无误,容错功能较完善。
4.评价
测试结论
可以通过,错误较少,范围内操作数以及操作结果均正确,边界值大都无误。
软件质量保证与测试实验指导计算机工程学院测试环境配置1.settingJunit(1)startEclipseSelectwindows-preferences-java-buildpath–classpathvariables(2)clicknew,thefigureofnewvariableentryisshown.(3)name JUNIT_LIBselectfile-选择JUnit插件所对应的JAR文件所在地,在Eclipse的安装目录的plugins目录中2.JUNIT的组成框架其中,junit.framework和junit.runner是两个核心包。
junit.framework负责整个测试对象的框架junit.runner负责测试驱动Junit的框架又可分为:A、被测试的对象。
B、对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。
C、测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。
D、测试结果的描述与记录。
(TestResult)。
E、每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure)F、JUnitFramework中的出错异常(AssertionFailedError)。
JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test 的对象;当调用TestSuite对象的run()方法是,会遍历自己容纳的对象,逐个调用它们的run()方法。
3.JUnit中常用的接口和类Test接口——运行测试和收集测试结果Test接口使用了Composite设计模式,是单独测试用例(TestCase),聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。
它的publicintcountTestCases()方法,它来统计这次测试有多少个TestCase,另外一个方法就是publicvoid run(TestResult),TestResult是实例接受测试结果,run方法执行本次测试。
白盒测试技术实验报告白盒测试技术实验报告引言:在软件开发过程中,测试是至关重要的一环。
而白盒测试作为一种常见的测试方法,对于确保软件质量和稳定性起着重要的作用。
本文将对白盒测试技术进行实验,并对实验结果进行分析和总结。
一、实验目的本次实验的目的是通过使用白盒测试技术,对一个简单的软件模块进行测试,验证其功能的正确性,并评估测试的覆盖率。
二、实验环境本次实验使用的软件模块是一个简单的登录功能,开发语言为Java。
实验环境包括Java开发工具包(JDK)、集成开发环境(IDE)和测试框架JUnit。
三、实验步骤1. 首先,我们对登录功能进行功能性测试。
通过输入正确的用户名和密码,验证系统能够成功登录,并显示欢迎页面。
然后,我们输入错误的用户名和密码,验证系统能够给出相应的错误提示。
2. 接下来,我们使用白盒测试技术进行代码覆盖率测试。
通过编写测试用例,覆盖代码中的不同分支和路径,以确保代码的各种情况都能被正确测试到。
同时,我们还使用代码覆盖率工具,如JaCoCo,来评估测试的覆盖率。
3. 在测试用例编写完成后,我们使用JUnit框架来执行测试。
JUnit是一个常用的Java单元测试框架,它提供了一系列的断言方法和测试运行器,方便我们编写和执行测试用例。
4. 运行测试后,我们可以得到测试结果和覆盖率报告。
通过分析报告,我们可以了解到哪些代码分支被覆盖,哪些分支未被覆盖,从而可以进一步完善测试用例,提高测试的覆盖率。
四、实验结果经过测试,我们发现登录功能在输入正确的用户名和密码时能够成功登录,并显示欢迎页面。
而在输入错误的用户名和密码时,系统能够给出相应的错误提示,确保了功能的正确性。
在代码覆盖率测试方面,我们使用JaCoCo工具进行了测试。
结果显示,我们的测试用例覆盖了代码中的90%分支和路径,达到了较高的覆盖率。
然而,仍有一小部分分支未被覆盖到,可能需要进一步优化测试用例。
五、实验总结通过本次实验,我们了解了白盒测试技术的基本原理和应用方法。
白盒测试用例实验报告《白盒测试用例实验报告》一、实验目的本实验旨在通过白盒测试用例的实验报告,了解白盒测试的原理和方法,掌握白盒测试用例的编写和执行过程。
二、实验环境1. 软件环境:Windows 10操作系统、Eclipse集成开发环境2. 硬件环境:个人电脑三、实验内容1. 理解白盒测试的原理和方法2. 编写白盒测试用例3. 执行白盒测试用例4. 分析测试结果并撰写实验报告四、实验步骤1. 阅读相关文献,了解白盒测试的原理和方法2. 选择一个简单的软件模块,编写白盒测试用例3. 在Eclipse中创建测试类,并将编写的测试用例添加到测试类中4. 执行测试用例,观察测试结果5. 分析测试结果,撰写实验报告五、实验结果1. 经过测试,所有编写的白盒测试用例均能正确执行,并且符合预期结果2. 通过对测试结果的分析,发现了一些潜在的代码逻辑错误,并及时进行了修复3. 实验报告中详细记录了测试用例的编写过程、执行结果和分析结论六、实验总结通过本次实验,我对白盒测试有了更深入的了解,掌握了白盒测试用例的编写和执行方法。
同时,通过对测试结果的分析,我也发现了一些代码逻辑上的问题,并及时进行了修复。
这次实验不仅提高了我的软件测试能力,也增强了我对软件质量控制的认识。
七、实验感想白盒测试是软件测试中非常重要的一部分,通过本次实验,我深刻体会到了白盒测试对软件质量的重要性。
在今后的学习和工作中,我将继续深入学习白盒测试的理论知识,提高自己的测试能力,为软件质量的提升贡献自己的力量。
八、参考文献1. 《软件测试与质量保障》,王晓敏,清华大学出版社2. 《软件测试方法与技术》,李彦,人民邮电出版社以上就是本次实验的白盒测试用例实验报告,希望对大家有所帮助。
软件测试与质量课程实验报告
实验3:白盒测试
掌握静态白盒测试方法及一般要求
掌握白盒测试用例的设计方法
掌握白盒测试基本测试方法:逻辑覆盖、路径测试。
语句覆盖输入数据路径预期输出1A=2,B=5,C=3,1239不能构成三角形2A=15,B=15,C=1512459等边三角形3A=15,B=15,C=13124679等腰三角形4A=23,B=24,C=25124689一般三角形
判定覆盖输入数据路径预期输出1A=2,B=3,C=5,1239不能构成三角形
语句覆
盖
编号输入数据覆盖语句
1array[8,9,10,11] key 101,2,3,8
2array[8,9,10,11] key 251,2,3,9
3array[8,9,10,11] key 81,2,3,6,7
4array[8,9,10,11] key 91,2,3,4,5
判定覆
盖
编号输入数据路径
1array[8,9,10,11] key 101-2-3-4-5-6-8-
2array[8,9,10,11] key 251-2-3-4-5-6-8--10-11-4-12
果
果
果
缺席:扣10分实验报告雷同:扣10分实验结果填写不完整:扣1 – 10分
其他情况:扣分<=5分总扣分不能大于10分。
白盒测试实验报告1. 引言白盒测试是软件开发过程中非常重要的一环,它能够深入了解软件内部的实现细节,发现潜在的错误和漏洞。
本次实验旨在对一款电商网站的后台管理系统进行白盒测试,并报告测试过程中发现的问题和提出的改进建议。
2. 测试环境和工具为了开展白盒测试,我们构建了一套适用于该电商网站的测试环境。
测试环境包括服务器、数据库和部署在服务器上的后台管理系统。
在测试过程中,我们使用了一系列白盒测试工具,包括静态代码分析工具、代码覆盖率工具以及调试器。
3. 功能测试在功能测试中,我们对后台管理系统的各个功能模块进行了测试。
我们模拟了管理员登录、商品管理、订单管理、用户管理等多种场景进行测试,并详细记录了测试用例、测试数据以及测试结果。
在功能测试过程中,我们发现了一些问题。
例如,某个功能模块在处理大量订单数据时出现了性能问题,导致系统响应变慢。
此外,某个功能模块在处理特定边界条件时出现了异常情况,导致系统崩溃。
4. 安全性测试在安全性测试中,我们对后台管理系统的安全性进行了评估。
我们模拟了黑客攻击、SQL注入、XSS跨站脚本等多种攻击方式进行测试,并评估系统对这些攻击的防御能力。
安全性测试中,我们发现了系统对于某些攻击方式的防御能力较弱,容易受到黑客攻击。
例如,系统在处理用户提交的数据时没有进行严格的输入验证,容易受到SQL注入攻击。
5. 性能测试在性能测试中,我们对后台管理系统的响应时间、并发性能、负载能力等进行了评估。
我们使用负载测试工具模拟了大量用户同时访问后台管理系统,以评估系统在高负载下的性能表现。
性能测试中,我们发现了系统在处理高并发请求时响应时间较长,用户体验较差。
此外,系统在处理大规模数据时处理速度较慢,需要进行性能优化。
6. 代码分析和覆盖率分析为了深入了解后台管理系统的内部实现,我们使用了静态代码分析工具对系统的源代码进行了分析。
通过分析,我们发现了一些潜在的代码问题,如代码冗余、死代码等。
白盒测试的测试报告编写如何清晰地记录测试结果在软件开发过程中,白盒测试是一种测试方法,通过了解和分析被测试软件的内部结构和工作原理,来评估和验证软件的功能和质量。
白盒测试的测试报告是对测试过程和结果的记录与总结,它的编写需要清晰地记录测试结果以便于开发人员理解和处理问题。
本文将介绍如何编写清晰的白盒测试报告。
一、报告概述在报告的开头,概述部分应该包括以下内容:1. 测试项目的基本信息:包括被测试软件的名称、版本号、测试开始和结束时间等。
2. 报告的编写人员和团队成员:列出参与撰写报告的成员名单,以及对应的职责和角色。
3. 测试环境的配置说明:详细描述测试所使用的硬件、操作系统和网络环境等,以便开发人员复现问题。
4. 报告的审核和批准:说明报告的审核和批准人员及其相关信息。
二、测试目标和策略在这一部分中,需要明确白盒测试的目标和策略,包括:1. 测试的目标:说明测试的目的和测试的重点,例如验证特定功能、检查代码覆盖率等。
2. 测试的策略:描述采用的具体测试方法和测试技术,例如代码走查、路径覆盖等。
三、测试用例设计测试用例是对被测试软件的功能需求进行验证的具体测试案例,测试用例设计要针对性地覆盖软件的各个功能点和各种异常情况。
在测试报告中,可以按照以下结构编写测试用例:1. 测试编号:每个测试用例都应有唯一的编号,方便对测试结果进行追踪和管理。
2. 测试项描述:对要测试的功能或情境进行清晰的描述,包括输入数据、操作步骤等。
3. 预期结果:明确描述每个测试用例的预期结果,以便与实际测试结果进行对比。
四、测试执行和结果记录这一部分是对测试执行的过程和结果进行详细描述的关键部分。
在编写测试报告时,应该按照以下步骤进行:1. 执行环境和条件:详细记录测试执行时的环境设置、测试数据和测试前提条件等。
2. 测试步骤和操作:按照预定义的测试用例,逐步记录测试执行过程中的步骤和操作。
3. 实际结果:将实际的测试结果记录在报告中,包括程序输出、错误信息、日志等。
软件测试报告学号:0806550103姓名:刘志指导老师:刘冬梅一、问题描述:用Java实现求两整数的加、减、乘、除运算结果,要求两整数的范围都是[0,100]。
从键盘输入数m,数n,判断他们的范围,若不在[0,100]范围内,则输出提示语,要求重新输入,并且在做除法运算时,当除数为0时,输出提示语,说明除数不能为0。
将两数的范围定在[0,100],以更好的进行边界值分析,等价类测试等黑盒测试方法;为充分体现白盒测试的特点,有些地方故意用了if-else语句,while循环;另外,加、减、乘、除运算分别用了四个函数来计算,这样既可以在主函数中调用,又可以在Junit框架中分别对这四种运算进行测试。
二、程序源代码:1. import java.util.Scanner;2. public class Computer {3. private int a;4. private int b;5. public Computer (int x,int y) //构造函数,初始化6. {7. a=x; //注意:Juint中需要输入测试值在0~100范围内8. b=y;9. }10. public double add() //加法11. {12. return a+b;13. }14. public double minus() //减法15. {16. return a-b;17. }18. public double multiply() //乘法19. {20. return a*b;21. }22. public double divide() //除法,要求除数不能为0,否则输出提示语23. {24. if(b!=0)25. return a/b;26. else27. System.out.println("除数不能为0!");28. return 0;29. }30. public static void main(String[] args)31. {32. Scanner scanner = null;33. scanner = new Scanner(System.in);34. System.out.println("请输入0~100的两个m,n整数:");35. System.out.println("请输入第一个数:");36. while(true){ //若输入值不在要求范围内,则有循环直到输入正确为止37. int m = scanner.nextInt();38. if(m>=0&&m<=100)39. {40. System.out.println("请输入第二个数:");41. while(true){42. int n = scanner.nextInt();43. if(n>=0&&n<=100)44. {45. Computer cpt=new Computer(m,n);46. System.out.println("运算结果是:");47. System.out.println("加法:"+m+"+"+n+"="+cpt.add());48. System.out.println("减法:"+m+"-"+n+"="+cpt.minus());49. System.out.println("乘法:"+m+"*"+n+"="+cpt.multiply();50. System.out.println("除法:"+m+"/"+n+"="+cpt.divide());51. }52. else53. System.out.print("输入n值不在要求区间,请重新输入n:\n");54. }55. }56. else57. System.out.print("输入m值不在要求区间,请重新输入m:\n");58. }59. }60. }三、黑盒测试:1、边界值测试:1.1、边界值分析:输入要求是0~100之间的整数,因此产生了0和100两个边界,边界值分析可产生4*2+1=9个测试用例。
可构造(50,0)、(50,1)、(50,50)、(50,99)、(50,100)、(0,50)、(1,50)、(99,50)、(100,50) 这9组测试用例。
表1 边界值分析测试用例用例m n 预期输出(+、-、*、/) 实际输出(+、-、*、/)1 50 0 50.0、50.0、0.0、除数不为0!50.0、50.0、0.0、0.02 50 1 51.0、49.0、50.0、50.0 51.0、49.0、50.0、50.03 50 50 100.0、0.0、2500.0、1.0 100.0、0.0、2500.0、1.04 50 99 149.0、-49.0、4950.0、0.505 109.0、-9.0、2950.0、0.50505050505050515 50 100 150.0、-50.0、5000.0、0.5 150.0、-50.0、5000.0、0.56 0 50 50.0、-50.0、0.0、0.0 50.0、-50.0、0.0、0.07 1 50 51.0、-49.0、50.0、0.02 51.0、-49.0、50.0、0.028 99 50 149.0、49.0、4950.0、1.98 149.0、49.0、4950.0、1.989 100 50 150.0、50.0、500.0、2.0 150.0、50.0、500.0、2.0在该测试时,发现(50,0)这个测试的除法的预期输出和实际输出不一致,是因为代码中return 0;当除数n=0时,实际返回的是0.0。
public double divide(){if(b!=0)return a/b;elseSystem.out.println("除数不能为0!");return 0; //出现Bug}1.2健壮性测试:健壮性测试可产生6*2+1=13个测试用例,在上面边界值分析测试用例的基础上再添加(50,-1)、(50,101)、(-1,50)、(101,50)这4个测试用例即可。
表2 健壮性测试用例用例m n 预期输出(+、—、*、/)实际输出10 50 -1 49.0、51.0、-50.0、-50.0 输入n值不在要求区间11 50 101 151.0、-51.0、5050.0、0.495 输入n值不在要求区间12 -1 50 49.0、-51.0、-50.0、-0.02 输入m值不在要求区间13 101 50 151.0、51.0、5050.0、2.02 输入m值不在要求区间2、等价类测试:规定了输入值m,n的范围[0,100],则变量的有效等价类:M1={m:0≤m≤100}N1={n:0≤n≤100}变量的无效等价类:M2={m:m≤0}M3={m:m≥100}N2={n:n≤0}N3={n:n≥0}2.1、弱一般等价类测试:该测试可用每个等价类的一个变量实现,可生成1个测试用例。
2.2、强一般等价类测试:该测试基于多缺陷假设,需要1*1=1个测试用例。
表3 强、弱一般等价类测试用例用例m n 预期输出(+、—、*、/)实际输出WN1,SN150 50 100.0、0.0、2500.0、1.0100.0、0.0、2500.0、1.0 2.3、弱健壮等价类测试:该测试基于单缺陷假设,不仅对有效值测试,还考虑了无效值,可生成1+2+2=5个测试用例。
表 4 弱健壮等价类测试用例用例m n 预期输出(+、—、*、/)实际输出WR150 50 100.0、0.0、2500.0、1.0100.0、0.0、2500.0、1.0 WR250 -1 49.0、51.0、-50.0、-50.0输入n不在要求区间WR3 50 101 151.0、-51.0、5050.0、0.495 输入n不在要求区间WR4 -1 50 49.0、-51.0、-50.0、-0.02 输入m不在要求区间WR5 101 50 151.0、51.0、5050.0、2.02 输入m不在要求区间2.4、强健壮等价类测试:该测试基于多缺陷假设,从所有等价类笛卡尔积的每个元素中获得测试用例,可生成(1+2)*(1+2)=9个测试用例。
表5 弱健壮等价类测试用例用例m n 预期输出(+、—、*、/)实际输出SR1-1 -1 -2.0、0.0、1.0、1.0输入m值不在要求区间SR2-1 50 49.0、-51.0、-50.0、-0.02 输入m值不在要求区间SR3 -1 101 100.0、-102.0、-101.0、0099输入m值不在要求区间SR4 50 -1 49.0、51.0、-50.0、-50.0输入n值不在要求区间SR5 50 50 100.0、0.0、2500.0、1.0 100.0、0.0、2500.0、1.0 SR6 50 101 106.0、-51.0、5050.0、0.495输入m值不在要求区间SR7 101 -1 100.0、102.0、-101.0、-101.0输入m值不在要求区间SR8 101 50 151.0、51.0、5050.0、20.2输入m值不在要求区间SR9 101 101 202.0、0.0、10201.0、1.0输入m值不在要求区间3、因果图:C1:输入m值在[0,100]内 C2:输入n值在[0,100]内e1:输出结果 e2:输入m值不在区间 e3:输入n值不在区间e1mC1e2C2e33.基于决策表的测试:变量的有效等价类:M1={m:0≤m≤100}N1={n:0≤n≤100}变量的无效等价类:M2={m:m≤0}M3={m:m≥100}N2={n:n≤0}N3={n:n≥0}表6 基于决策表的测试用例桩 1 2 3 4C1:第一个数在:C2:第二个数在:M1N1M1N2,N3M2,M3N1M2,M3N2,N3A1:正常输出结果:A2:输入m值不在要求区间,重新输入A3:输入n值不在要求区间,重新输入XXX XX二、白盒测试:1.测试覆盖指标:流程图:afF Tb dFF Tc1.1、语句覆盖:每个可执行的语句必须至少执行一次,则测试用例:表 7 语句覆盖测试用例 测试用例通过路径 条件取值 m1=-1,m2=1;n1=101,n2=99 a,f,b,d,cF1,T1,F2,T21.2、(判定)分支覆盖:每个判定必须至少获得一次“真”值和“假”值,则测试用例:表 8(判定)分支覆盖 测试用例 通过路径 条件取值 m=1,n=99a,b,c T;T m1=-1,m2=1,n=99 a,f,b,c F1,T1;T2 m=1,n1=-1,n2=99a,b,d,c T;F1,T1 m1=-1,m2=1;n1=101,n2=99a,f,b,d,cF1,T1;F2,T2入口m>=0&&m<=100执行语句块1 n>=0&&n<=100执行语句块2 出口 执行语句块4 执行语句块5执行语句块31.3、条件判定覆盖:每个判定中的每个条件的所有可能值(真/假)至少出现一次并且每个判定本身的结果(真/假)也至少出现一次,则测试用例:表 9 条件判定覆盖测试用例通过路径条件取值m=1,n=99 a,b,c T,T1.4、路径覆盖:测试用例要求覆盖所有可能的路径:表10 路径覆盖测试用例通过路径条件取值m1=-1,m2=1;n1=101,n2=99 a,f,b,d,c F1,T1,F2,T22.基路径测试:(为简便画图,开始点从主要代码第36行开始,其他无分支节点用省略号表示)(从节点1到节点36) ...(从节点43到51) ...所以:圈复杂度V (G )= 5 4个独立路径为:P1:1,...,36,37,38...42,43...54,55,58,59,60 P2:1,...,36,37,56,57,58,59,60P3:1,...,36,37,38...42,52,53,54,55,58,59,60P4:1,...,36,37,38...42,43...54,42,52,53,54,55,58,59,60 P5:1,...,36,37,56,57,58,36,37,56,57,58,59,605153 58 59 6036 54 43 52 42 41 57 4039 38 5637 55 1三、Junit动态测试:import junit.framework.TestCase; //引入Junit框架中所有类public class ComputerTest extends TestCase {private Computer a; //定义变量private Computer b;private Computer c;private Computer d;public ComputerTest (String name) {super(name); //构造函数,使用super关键字直接引用父类TestCase的构造函数}protected void setUp() throws Exception {super.setUp(); //建立环境,可以进行一些测试数据的初始化,还可以把数据库联接写在此处,以减少重复性工作,提高效率a = new Computer(1,99);b = new Computer(101,5);c = new Computer(1,2);d = new Computer(1,0);}protected void tearDown() throws Exception {super.tearDown();}public void testComputer() {int x=1;int y=1;assertSame(x,y); //assertSame() }public void testAdd() { //加法测试assertEquals(100.0, a.add());}public void testAdd1() {assertEquals(106.0, b.add()); //输入值超出要求范围 ,测试失败,因为要求0~100范围,所以,在构造Computer()函数时,要规定变量x,y的范围}public void testMinus() { //减法测试assertEquals(-89,a.minus()); //预期值和结果不相等,测试失败}public void testMinus1() {assertEquals(-89.0,a.minus());}public void testMultiply() {assertEquals(2.0,c.multiply());}public void testMultiply1() {Object tx = null;try{assertEquals(2.0,c.multiply());//c.multiply()的正常结果是2.0,所以在此不应抛出异常fail("should have thrown an exception"); //上面不抛出异常,不执行fail()}catch (Exception e) {tx = e;}assertNotNull(tx); //断言tx不为空,则一定有异常}public void testDivide() {assertEquals(0.0,d.divide()); //因divide()函数中,当d=0时,返回0.0,所以这里测试应该成功,虽然希望得到“被除数不能为0!”的情况}public void testDivide1() {assertEquals(0.5, c.divide());}public void testEmpty(){try{c.divide();fail("should have thrown an exception ");}catch(RuntimeException Ex){assertTrue(true); //assertTrue(true);}}}截图:(1)、测试testAdd1()时,由于b=newComputer(101,5);assertEquals(106.0, b.add());输入值范围超出定义范围,测试异常;(2)、测试testMinus()时,assertEquals(-89,a.minus());预期值和实际值不相同,测试异常;(3)、测试testMultiply()时,断言不为空,抛出异常Junit集成测试:在Junit中,Test Case总是对所有方法进行测试,而Test Suite中可对其中的一部分方法测试,而且一个测试类中还可以包含其他测试类。