海哥计算器白盒黑盒软件测试报告
- 格式: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. 实际结果:将实际的测试结果记录在报告中,包括程序输出、错误信息、日志等。
白盒测试总结从我参加白盒测试的工作开始,我负责的是一小部分测试代码编写的工作,通过这一段时间代码编写的工作,我学到了如何进行白盒测试测试代码的编写,了解到了白盒测试的方向,知道了白盒测试的步骤,明白了白盒测试的意义、白盒测试的必要性,白盒测试是通过对程序内部结构的分析、检测来寻找问题。
在白盒测试的过程中,我学到了一些白盒测试的知识,并发现了一些自己的不足。
1.白盒测试代码的编写让我了解到了Cunit工具,并学会了如何使用Cunit工具进行代码的编写与检测。
Cunit以静态库的形式提供给用户使用,用户编写程序的时候直接链接静态库。
它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。
2.通过这段时间的白盒测试工作,我了解到了白盒测试的步骤,首先要根据源程序代码编写测试用例,即编写实用的输入输出数据。
编写用例的过程中,要考虑用例在代码的允许范围内与过界情况下代码的运行情况。
其次根据测试用例进行测试代码的编写工作,在编写测试代码的过程中,要根据测试用例与被测代码分析如何进行测试代码的编写,对被测代码中影响测试代码运行但不影响测试结果的语句要注释掉,同时,要把注释掉的语句和在代码编写过程中如果发现被测代码的问题分别写入“源代码修改说明”和“白盒测试问题单”中。
3.在代码编写中,我发现了一些自己的不足,首先,我的C语言基础不牢,不能很好的解决在编写代码中遇到的一些基础知识问题。
其次,对白盒测试的不了解,使我在代码的编写过程中无法解决遇到许多白盒测试基础问题。
4.学会了一些Excel表格的一些高级使用方法,在测试代码编写结束后,需要对测试代码的运行情况在测试用例中说明一下,需要对问题单进行最后的整理,要把问题单中问题标注到所对应的用例表中,以方便研发人员检测。
根据这段时间的代码编写与学习,我一定程度的了解了自己的缺点与不足,在以后学习工作过程中,我会努力的弥补自己的不足,补习自己的基础知识,争取把自己的工作做到最好。
本科实验报告课程名称:软件测试方法与技术实验项目:白盒-黑盒测试与QTP自动化测试实验地点:实验中心21015 {x=4,y=9,z=9}路径覆盖P(1-3-5)16 {x=0,y=5,z=10} 基本路径覆盖P (ACE)17 {x=2,y=5,z=8} 基本路径覆盖P (ABCE)18 {x=4,y=6,z=9} 基本路径覆盖P (ABCDE)六.实验结果与分析用例结果1 2 3 4 5 6 7 8 9k=8;j=1 k=35;j=1 k=0;j=0 k=35;j=1 k=0;j=0 k=35;j=1 k=0;j=0 k=19;j=01 k=0;j=110 11 12 13 14 15 16 17 18k=0;j=1 k=0;j=0 k=0;j=0 k=9;j=0 k=0;j=0 k=35;j=1 k=0;j=0 k=9;j=0 k=23;j=1 七.讨论、心得通过此次实验,了解并掌握了白盒测试的基本测试方法。
熟悉并掌握了语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,条件组合覆盖,路径覆盖和基本路径覆盖的各项覆盖标准。
通过实验掌握了逻辑覆盖测试,和测试用例,掌握了流程图的绘制。
实验名称实验二黑盒测试方法一.实验目的和要求1.熟练掌握黑盒测试方法中的大家类测试方法和边界值测试方法;2.通过实验掌握如何运用黑盒测试方法设计测试用例。
3.运用所学理论,完成实验研究的基本训练过程。
二.实验内容和原理1.用你熟悉的语言编写一个判断三角形问题的程序;要求:读入代表三角形边长的三个整数,判断他们是否能组成三角形。
如果能够,则输出三}}}六.实验结果与分析七.实验结果与分析通过实验,熟练的掌握了黑盒测试方法中的等价类测试方法和边界值测试方法,掌握了如何应用黑盒测试方法设计测试用例。
一进步熟练了C语言的编程方法。
实验名称实验三 QTP自动化测试一.实验目的和要求1.了解QTP软件自动化测试原理和方法;2.掌握QTP检查点的插入,能够利用QTP软件进行功能测试和回归测试。
软件测试实习报告:黑盒与白盒测试技术的应用1. 引言在现代软件开发中,软件测试是确保软件质量和稳定性的关键环节。
针对软件测试的不同手段和方法,黑盒测试和白盒测试被广泛应用。
本报告将探讨黑盒和白盒测试技术在软件测试实习过程中的应用。
2. 黑盒测试黑盒测试是一种基于功能需求的测试方法,测试者不关心内部实现细节,而是主要关注软件的输入输出和功能是否符合预期。
在软件测试实习中,我参与了一个黑盒测试项目,以下是我在实习过程中所学到的黑盒测试技术和应用。
2.1 功能测试功能测试是黑盒测试的核心内容,它通过模拟真实用户的操作场景进行测试,验证软件的功能是否满足需求。
在实习项目中,我使用了一些测试用例来测试软件功能的各个方面,包括输入验证、边界条件、异常处理等。
通过功能测试,我能够发现软件中的功能缺陷并及时反馈给开发团队进行修复。
2.2 界面测试界面测试是黑盒测试的重要部分,它主要验证软件的用户界面是否易于使用、符合设计规范。
在实习中,我使用了一些测试用例来测试软件的界面布局、字体颜色、图标等方面,确保用户能够良好地操作软件界面,并且界面与需求文档一致。
通过界面测试,我能够为开发团队提供改进界面设计的建议。
2.3 性能测试性能测试是黑盒测试的另一个重要方面,它主要验证软件在不同负载下的性能表现。
在实习项目中,我使用了一些性能测试工具来模拟多种负载条件,并通过监控软件的响应时间、吞吐量等指标来评估软件的性能。
通过性能测试,我能够发现软件在高负载情况下的性能瓶颈,并提供性能优化的建议。
3. 白盒测试白盒测试是一种基于内部逻辑和代码结构的测试方法,测试者需要具备编程和代码理解能力。
在软件测试实习中,我也参与了一个白盒测试项目,以下是我在实习过程中所学到的白盒测试技术和应用。
3.1 代码覆盖率测试代码覆盖率测试是白盒测试的核心内容,通过运行测试用例,并根据代码结构和逻辑覆盖情况评估测试用例对代码的覆盖率。
在实习项目中,我使用了一些自动化测试工具来生成测试用例,并使用代码覆盖率工具来评估测试用例的覆盖率情况。
软件测试白盒测试实验报告软件测试白盒测试实验报告引言:软件测试是确保软件质量的重要环节之一。
在软件开发过程中,白盒测试是一种常用的测试方法,通过对软件内部结构进行检查,以验证其是否符合设计要求和预期功能。
本文将对进行的白盒测试实验进行详细报告和分析。
实验目的:本次实验的目的是通过对一个简单的软件系统进行白盒测试,验证其内部逻辑和代码的正确性,并发现可能存在的缺陷和错误。
通过实验,我们希望能够了解白盒测试的基本原理和方法,并掌握其实际应用技巧。
实验环境:本次实验使用的软件系统是一个简单的计算器应用,开发语言为Java。
实验环境包括Java开发工具集(JDK)和集成开发环境(IDE),以及相关的测试工具和框架。
实验过程:1. 理解需求:首先,我们仔细阅读了计算器应用的需求文档,了解了其基本功能和预期行为。
2. 设计测试用例:根据需求文档,我们设计了一系列测试用例,覆盖了计算器应用的各个功能模块和边界条件。
测试用例包括输入合法数字、输入非法字符、进行加减乘除运算等。
3. 编写测试代码:根据设计的测试用例,我们编写了相应的测试代码。
测试代码主要包括模拟用户输入、调用计算器应用的相关方法,并对返回结果进行断言和验证。
4. 执行测试:在完成测试代码编写后,我们使用测试工具和框架对计算器应用进行了测试。
测试过程中,我们记录了每个测试用例的执行结果和异常情况,并对其进行了分类和整理。
实验结果:经过测试,我们发现了一些计算器应用存在的问题和潜在的缺陷。
其中,一些常见的问题包括:1. 输入非法字符时,计算器应用没有进行有效的错误处理,导致程序崩溃或返回错误结果。
2. 在进行除法运算时,计算器应用没有对除数为零的情况进行判断和处理,导致程序异常。
此外,我们还发现了一些较为隐蔽的问题,例如:1. 在进行大数计算时,计算器应用没有进行溢出检查和处理,导致结果不准确。
2. 在进行浮点数计算时,计算器应用没有进行舍入误差的处理,导致结果不精确。
白盒测试实验报告白盒测试实验报告引言:白盒测试是软件测试中常用的一种测试方法,它通过分析程序的内部结构和逻辑,以验证软件的正确性和稳定性。
本实验旨在通过对一个简单的计算器程序进行白盒测试,探索白盒测试的原理和方法,并评估其在软件开发中的实际应用价值。
实验设计:本实验使用了一个基于Python的计算器程序作为被测试对象,该程序具有加、减、乘、除等基本运算功能。
实验设计包括了以下几个步骤:1. 程序结构分析:通过查看程序的源代码,了解程序的整体结构和模块之间的关系,为后续的测试设计提供依据。
2. 程序覆盖率分析:使用代码覆盖率工具对程序进行分析,确定测试用例需要覆盖的代码行数和分支情况,以提高测试的全面性和准确性。
3. 测试用例设计:根据程序的功能和结构特点,设计一系列测试用例,包括正常输入、边界值和异常情况等,以覆盖不同的测试场景。
4. 测试执行:按照设计的测试用例,逐个执行测试,并记录测试结果和执行过程中的问题和异常情况。
5. 结果分析:对测试结果进行分析,评估程序的稳定性和正确性,并提出改进建议。
实验过程:1. 程序结构分析:通过阅读源代码,了解到该计算器程序由界面层、逻辑层和数据层三个模块组成,各模块之间通过接口进行通信。
这样的结构设计使得程序的扩展和维护更加方便。
2. 程序覆盖率分析:使用代码覆盖率工具对程序进行分析,发现在逻辑层中有几个分支未被覆盖到,这可能导致在某些特定情况下程序出现错误。
因此,在测试用例设计中,需要特别关注这些分支情况。
3. 测试用例设计:根据程序的功能和结构特点,设计了一系列测试用例。
例如,对于加法功能,设计了正常输入的测试用例,包括两个正整数相加、两个负整数相加、一个正整数和一个负整数相加等;同时,还设计了边界值测试用例,例如对于两个最大整数相加、两个最小整数相加等。
4. 测试执行:按照设计的测试用例,逐个执行测试。
在测试过程中,发现了一些问题,例如在除法功能中,当除数为0时,程序没有正确处理异常情况,导致程序崩溃。
白盒测试实验报告软件测试实验报告----白盒测试一.实验内容使用黑盒测试技术设计一个自动售货机上的系统。
自定义自动售货机只卖三种饮料可口可乐,雪碧,百事可乐,单价分别为2.5元,2.5两元,2元。
假设输入饮料类别及需要的数量,如果输入的金额数足够,直接送出饮料,退回零钱,如果输入的金额不够,有提示可以继续输入钱币。
自动售货机运行界面如下二程序模块选择商品1可口可乐2雪碧3百事可乐选择投币金额1 2.5元3 5元2 3元4 1元谢谢惠顾三、控制流图1 1 3 2 4 4 3 1 3 2 4 4 2 1 3 2 4 4四、计算圈图复杂度V3*4113五、基本路径1-1-4 1-2-4 1-3-4 1-4-4 2-1-4 2-2-4 2-3-4 2-4-4 3-1-4 3-2-4 3-3-4 3-4-4 4-4六、设计测试用例编号输入数据覆盖路径1 1 1 4 1- 1-4 2 1 2 4 1-2-4 3 1 3 4 1-3-4 4 1 4 4 1-4-4 5 2 1 4 2-1-4 6 2 2 4 2-2-4 7 2 3 4 2-3-4 8 2 4 4 2-4-4 9 3 4 4 3-1-4 10 3 2 4 3-2-411 3 3 4 3-3-4 12 3 4 4 3-4-4 13 4 4 4-4七、执行测试用例因篇幅有限,仅列出部分测试用例八、存在问题以上程序存在以下问题1 设计上不合理,投币时不可能一下就投出2.5元 2 第二个过程时,应在设计一个推出界面,例如顾客选择1以后,又决定不买时,将会无法退出附录代码include void main{ int n,m,i; fori0;in; ifn1{ coutm; ifm1{ coutm; ifm1{ coutm; ifm1{ cout“找您0.5元\\n“; } else ifm2 { cout“找您1元\n“; } else ifm3{ cout“找您2元\n“;} else {cout”钱不够”;} } ifn4 cout“谢谢惠顾“endl; } }。
黑盒测试实验报告实验心得1. 实验概述本次实验是关于黑盒测试的实践,通过对一些功能的输入输出进行测试,验证程序的正确性和稳定性。
在实验中,我选择了一个简单的登录功能进行测试,并记录了测试用例、测试结果等信息。
2. 实验过程在开始实验之前,我首先对登录功能进行了需求分析,确定了输入和输出的要求。
根据需求分析,我编写了一些测试用例,覆盖了各种可能的情况,包括正常输入、错误输入、边界条件等。
然后,我对测试用例进行了分类,将它们分为一般测试用例和边界测试用例两类。
接着,我根据测试用例编写了测试脚本,并运行了测试脚本对登录功能进行测试。
在每次测试中,我记录了测试的输入和输出,以及测试结果。
对于通过的测试用例,我记录了通过的原因;对于未通过的测试用例,我记录了出错的原因和测试的结果。
同时,我还测试了一些异常情况,比如输入为空、输入过长等,以验证程序的健壮性。
在测试过程中,我发现了一些问题,比如登录功能对于密码输入过长的情况没有进行正确的处理,导致程序出错。
我将这些问题进行了记录,并提出了相应的修复建议。
3. 实验结果通过对登录功能的黑盒测试,我发现了一些问题,并得到了一些实验结果。
总体来说,大部分的测试用例都通过了测试,登录功能在正常情况下表现稳定可靠。
然而,也存在一些问题,比如对于输入过长的密码没有进行正确的处理。
这些问题可能会导致程序出错或者出现安全问题。
因此,在实验报告中,我详细地记录了这些问题,并提出了一些修复建议。
4. 实验心得通过本次实验,我对黑盒测试有了更深入的了解。
我了解了黑盒测试的基本原理和方法,学会了编写测试用例、设计测试脚本,并进行了实际的测试。
通过实验,我发现了一些问题,并得到了一些实验结果,这对于改进程序的质量和性能有一定的意义。
同时,我还学习到了如何分析需求、评估风险、规划测试等技巧,这对我今后的工作和学习都会有所帮助。
在实验过程中,我还遇到了一些挑战,比如如何编写全面的测试用例、如何设计恰当的测试脚本等。
一、测试目的设计测试用例、使用各种测试方法进行计算器的测试,并对测试结果进行分析二、测试内容1.软件说明:实现一个小的计算器程序,只需要完成加、减、乘、除运算,设计测试用例,并对测试结果进行分析,同时计算器运行稳定。
2、设计测试用例3、执行测试4、测试结果分析5、源代码三、测试步骤(一)、计算器界面2、设计测试用例(1)等价类测试:1、4个等价类测试用例的分析过程如下:测试用例加减乘除预期输出整型55+50 78-24 15*25 36/4 正常运算小数25.3+12.7 14.3-11.7 25.6*12.8 50.2/20.7 正常运算负数-20+-21 (-15)-(-14) -12*-12 -16/-5 正常运算无效输入E1+t2 G4-k5 I5*l6 Ff/se 非法操作无法输入2、对应测试的结果分析:整型:1.加(55+50)2.减(78-24)3.乘(15*25)4.除(36/4)小数1.加(25.3+12.7)2.减(14.3-11.7)3.乘(25.6*12.8)4.除(50.2/20.7)负数6.加-20+-217.减(-15)-(-14)8.乘-12*-129.除-16/-5(其中算式写法错误导致正常运算错误)无效输入1.加(E1+t2):程序中无效数字无法正常输入,程序无法进行。
2.减(G4-k5)程序中无效数字无法正常输入,程序无法进行。
(同上)3.乘(I5*l6)程序中无效数字无法正常输入,程序无法进行。
(同上)4.除(Ff/se)程序中无效数字无法正常输入,程序无法进行。
(同上)5.(2)边界值法设计测试:加法:1、计算器4个标准等价类测试用例的分析过程如下:测试用例被加数加数预期输出Test1 0 10 正常运算Test2 1 10 正常运算Test3 40 10 正常运算Test4 55.5 10 正常运算Test5 -70 10 正常运算Test6 10 10 正常运算Test7 101 10 正常运算Test8 10 0 不能运算Test9 10 1 正常运算Test10 10 40 正常运算Test11 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算Test14 10 101 正常运算2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Test1结果:Test2结果:Test3结果:Test4结果:Test5结果:Test6结果:减法:测试用例被减数减数预期输出Test1 0 10 正常运算Test2 1 10 正常运算Test3 40 10 正常运算Test4 55.5 10 正常运算Test5 -78 10 正常运算Test6 100 10 正常运算Test7 101 10 正常运算Test8 10 0 不能运算Test9 10 1 正常运算Test10 10 40 正常运算Test11 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算Test14 10 101 正常运算2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Test1结果:Test3结果:Test4结果:Test5结果:Test6结果:乘法1测试用例被乘数乘数预期输出Test1 0 50 正常运算Test2 1 5 正常运算Test3 24 10 正常运算Test4 55.5 10 正常运算Test5 -78 10 正常运算Test6 100 10 正常运算Test7 101 10 正常运算Test8 10 0 不能运算Test9 10 1 正常运算Test10 10 40 正常运算Test11 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算Test14 10 101 正常运算2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Test1结果:Test3结果:Test4结果:Test5结果:Test6结果:除法1测试用例被除数除数预期输出Test1 0 10 正常运算Test2 1 10 正常运算Test3 40 10 正常运算Test4 55.5 10 正常运算Test5 -78 10 正常运算Test6 100 10 正常运算Test7 101 10 正常运算Test8 10 0 正常运算Test9 10 1 正常运算Test10 10 40 正常运算Test11 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算Test14 10 101 正常运算2、对应测试与结果:对应的部分的示图如下:Test1结果:Test2结果:Test3结果:Test8结果:附录:源代码CCalculateDlg::CCalculateDlg(CWnd* pParent /*=NULL*/){//{{AFX_DA TA_INIT(CCalculateDlg)m_parameter = 0.0;//}}AFX_DA TA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;}void CCalculateDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CCalculateDlg)DDX_Text(pDX, IDC_EDIT, m_parameter);//}}AFX_DA TA_MAP}BEGIN_MESSAGE_MAP(CCalculateDlg, CDialog)//{{AFX_MSG_MAP(CCalculateDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_clear, Onclear)ON_BN_CLICKED(IDC_calculate, Oncalculate)ON_BN_CLICKED(IDC_para1, Onpara1)ON_BN_CLICKED(IDC_para2, Onpara2)ON_BN_CLICKED(IDC_para3, Onpara3)ON_BN_CLICKED(IDC_para4, Onpara4)ON_BN_CLICKED(IDC_para5, Onpara5)ON_BN_CLICKED(IDC_para6, Onpara6)ON_BN_CLICKED(IDC_para7, Onpara7)ON_BN_CLICKED(IDC_para8, Onpara8)ON_BN_CLICKED(IDC_para9, Onpara9)ON_BN_CLICKED(IDC_para0, Onpara0)ON_BN_CLICKED(IDC_point, Onpoint)ON_BN_CLICKED(IDC_minus, Onminus)ON_BN_CLICKED(IDC_plus, Onplus)ON_BN_CLICKED(IDC_subtrack, Onsubtrack)ON_BN_CLICKED(IDC_divide, Ondivide)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CCalculateDlg message handlersBOOL CCalculateDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARA TOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CCalculateDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CCalculateDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CCalculateDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CCalculateDlg::Onclear(){UpdateData(true);m_parameter = 0;CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Oncalculate(){UpdateData(true);CalculatePara = m_parameter;switch(CalculateExpre){case'+':CalculateResult += CalculatePara;m_parameter = CalculateResult;break;case'-':CalculateResult -= CalculatePara;m_parameter = CalculateResult;break;case'*':CalculateResult *= CalculatePara;m_parameter = CalculateResult;break;case'/':if (CalculatePara){CalculateResult /= CalculatePara;}else{m_parameter = 0;MessageBox("除数不能为零!");}break;}// TODO: Add your control notification handler code hereCalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);}void CCalculateDlg::Onpara1(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 1;}else{CalculatePara = m_parameter + 1/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara2()UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 2;}else{CalculatePara = m_parameter + 2/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara3(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 3;}else{CalculatePara = m_parameter + 3/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara4(){UpdateData(true);if (!Ispoint)CalculatePara = m_parameter*10 + 4;}else{CalculatePara = m_parameter + 4/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara5(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 5;}else{CalculatePara = m_parameter + 5/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara6(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 6;}elseCalculatePara = m_parameter + 6/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara7(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 7;}else{CalculatePara = m_parameter + 7/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara8(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 8;}else{CalculatePara = m_parameter + 8/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara9(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 9;}else{CalculatePara = m_parameter + 9/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara0(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 0;}else{Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpoint(){Ispoint = true;Sumpoint = 1;// TODO: Add your control notification handler code here}void CCalculateDlg::Onminus(){UpdateData(true);m_parameter = 0 - m_parameter;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onplus(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '+';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onsubtrack(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '-';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onmultiply(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '*';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Ondivide(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '/';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }。
实验报告书实验一白盒测试学生姓名:李庆忠专业:计算机科学与技术学号:1341901317白盒测试实验报告一实验内容1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技术和方法;2、举例进行白盒测试,使用语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖进行测试。
3、通过试验和应用,要逐步提高和运用白盒测试技术解决实际测试问题的能力;4、熟悉C++编程环境下编写、调试单元代码的基本操作技术和方法;5、完成实验并认真书写实验报告(要求给出完整的测试信息,如测试程序、测试用例,测试报告等)二实验原理白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。
这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。
其又称为结构测试。
流程图如下图所示实验代码#include"stdio.h"int main(){int x,y,z;scanf("%d%d",&x,&y);if((x>0)&&(y>0)){z=x+y+10;}else{z=x+y-10;}if(z<0){z=0;printf("%d\n",z);}else{printf("%d\n",z);}return 0;}语句覆盖是指选择足够的测试,使得程序中每个语句至少执行一次。
如选择测试x=1,y=1和x=1,y=-1可覆盖所有语句。
判定覆盖是指选择足够的测试,使得程序中每一个判定至少获得一次“真”值和“假”值,从而使得程序的每个分支都通过一次(不是所有的逻辑路径)。
选择测试x=1,y=1和x=1,y=-1可覆盖所有判定。
条件覆盖是指选择语句多数的测试,使得程序判定中的每个条件能获得各种不同的结果。
实验一:白盒软件测试一、实验目的通过简单程序白盒测试,熟悉测试过程,对软件测试行程初步了解,并养成良好的测试习惯。
熟练掌握如何运用基路径测试方法进行测试用例设计,初步熟悉如何利用程序插装技术进行逻辑覆盖率分析。
二、实验内容背景:被测测试程序功能:计算被输入日期是星期几;程序定义:已知公元1年1月1日是星期一,只要输入年月日,能自动回复当天是星期几;测试环境:Windows vista、Dev C++;说明:本次测试采用插桩测试法,由于程序简单,手动输入测试用例。
程序说明:A程序思路:计算输入日期与公元1年1月1日所相差的天数,具体如下:总天数=公元1年到输入日期上一年年底天数+输入年份的1月到上月月底天数+输入日期的天数B闰年满足条件(year%4==0)&&(year%100!=0)||(year%400==0)(1)分析各种输入情况,结合程序输出结果,并给出详细测试用例;(2)根据(1)所划分的等价类,进行边界值分析,并给出具体的测试用例;(3)决策表测试法;①列出输入变量month、 day、 year的有效等价类;(条件桩)②分析程序的规格说明,给出问题规定的可能采取操作;(动作桩)③画出决策表(简化);④根据决策表,给出详细测试用例。
代码:(被测部分为while循环内部语句)#include <iostream>using namespace std;int main(){int x=1,year, month, day;while(x){1.int i, num=0,total, total1, total2;2.cout<<"请输入年份: ";3.cin>>year;4.cout<<"请输入月份: ";5.cin>>month;6.cout<<"请输入日期: ";7.cin>>day;//求得输入年份之前一年末的总天数8.for(i=1; i<year; i++){9.if((i%4==0)&&(i%100!=0)||(i%400==0))10.num++;}11.total1 = 365*(year-num-1) + 366*num;//求得输入年份的总天数12.if((year%4==0)&&(year%100!=0)||(year%400==0)){//求得输入月份之前一月末的总天数13.switch(month){case 1:total2 = 0;break;case 2:total2 = 31;break;case 3:total2 = 60;break;case 4:total2 = 91;break;case 5:total2 = 121;break;case 6:total2 = 152;break;case 7:total2 = 182;break;case 8:total2 = 213;break;case 9:total2 = 244;break;case 10:total2 = 274;break;case 11:total2 = 305;break;case 12:total2 = 335;break;}}else{14.switch(month){case 1:total2 = 0;break;case 2:total2 = 31;break;case 3:total2 = 59;break;case 4:total2 = 90;break;case 5:total2 = 120;break;case 6:total2 = 151;break;case 7:total2 = 181;break;case 8:total2 = 212;break;case 9:total2 = 243;break;case 10:total2 = 273;break;case 11:total2 = 304;break;case 12:total2 = 334;break;}}//在加上输入的日,求其总和可得到从公元1年1月1日到输入日期当天的总天数15.total = total1 + total2 + day;16.int week;17. week = total % 7;18.cout<<"您输入的日期是";19.switch(week){case 0:cout<<"星期天"<<endl;break;case 1:cout<<"星期一"<<endl;break;case 2:cout<<"星期二"<<endl;break;case 3:cout<<"星期三"<<endl;break;case 4:cout<<"星期四"<<endl;break;case 5:cout<<"星期五"<<endl;break;case 6:cout<<"星期六"<<endl;break;}cout<<"**********退出程序请输入0,否则任一输入继续**********"<<endl;cin>>x;}}2、测试用例设计1)控制流图2)环路复杂度计算由图可知,图中的环路有六条,故环路复杂度为六。
软件测试报告学号: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中可对其中的一部分方法测试,而且一个测试类中还可以包含其他测试类。