单元测试实践实验报告_第1页
单元测试实践实验报告_第2页
单元测试实践实验报告_第3页
单元测试实践实验报告_第4页
单元测试实践实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、BIT COM08036 Software Testing Techniques Spring 2013软件测试技术单元测试实践实验报告诚信声明本人郑重承诺:本实验报告是本人独立工作所获得的成果。尽我所知,实验报告中除特别标注的地方外,不包含其他人已经发表或撰写过的成果。实验报告中对报告工作的任何帮助者所做的贡献均做了明确的说明并表达了谢意。如有抄袭,本人愿意承担因此而造成的任何后果。特此声明。 签名: Eastmount 日期:2013-6-9任务:第 2 题实验内容与完成情况:一. 实验思想单元测试实践中我测试题目是第2题“输入年份year和月month,求该月有多少天”的任务。由于它是一

2、个C语言程序,而且没有子函数,能直接计算其结果,所以直接把该程序看做一个测试单元,并采用如下实验步骤进行测试:1.首先对源程序进行不执行的代码走读,静态分析源程序代码(静态白盒测试方法),分析检查源程序的语法、结构、算法等的正确性,并对错误进行修正;2.然后采用动态黑盒测试的等价划分、边界值分析、错误猜解法等方法,并结合动态白盒测试的逻辑覆盖,对每条语句及分支条件都进行覆盖测试,同时测试过程中跟踪执行每一条语句,对程序进行比较完整动态测试; 3.分析统计测试的结果,并完成实验报告。二. 静态测试我采用的是VS 2012进行单元测试,源程序如下所示:#include <stdio.h>

3、;main( ) int year, month, days;printf("Enter year and month:");scanf("%d%d", &year, &month);switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; /* 处理“大”月 */case 4: case 6: case 9: case 11: days=30; break; /* 处理“小”月 */ case 2: if(year%4

4、=0&&year%100!=0 && year%400=0) days=29; /* 处理闰年平月 */ else days=28;/* 处理不是闰年平月 */ break; default: printf("Input error!n"); /* 月份错误 */ days=0; if( days!=0 ) printf("%d, %d is %d daysn", year, month, days);经过代码走读,静态分析源程序,我发现该程序具有以下错误:1.语法错误(1).主函数mian()缺少类型说明,应该添加int

5、或void类型;(2).程序缺少返回值,如果定义的int型,添加“return 0;”返回值,如果是void型,添加“return;”返回空值;(3).注意“;”的使用,它应该是英文的“;”,而代码中都是使用的中文的分号,这是一个编码方式错误的语法错误;2.算法错误判断闰年时的计算公式:“year%4=0&&year%100!=0&&year%400=0”是错误的算法,它应该是该年“(year%4=0&&year%100!=0)|(year%400=0)”时为闰年,2月为29天(下面的测试用例及测试都是修改后的算法进行的);3.代码规范格式优化(

6、1).按照正规的、更有效、美观的编码方式,定义变量时应该每个变量单独定义一行,这样更加方便阅读和使用,如下:int year;int month;int days;(2).在使用switch语句时,如果分支结果case中有多个语句时,最好使用括号包括相应的语句代码,如下图所示:default: printf("Input error!n"); /* 月份错误 */days=0;(3).在使用if语句时,最好都用括号包含相应语句代码;同时括号要单独占一行,这样更加的方便别人与自己的阅读与使用。三.动态测试在动态测试过程中,我主要采用黑盒动态测试等价划分、边界值分析、错误猜解法

7、等方法,并结合白盒动态测试,逻辑覆盖所有语句及分支条件并跟踪每行代码进行测试。 1.输入数据特点由于该程序要求输入的是year和month两个数据,并且都是int类型,再结合生活实际中年份和月份的知识,我对输入数据的特点进行一下总结:(1).输入的数据类型应该为int型,并且输入的是两个数字;(2).输入的年份范围应该大于0,小于int型的最大可表达范围;(3).输入的月份实际生活中只有12个月,因此应该为1-12间的数字;(4).由于要判断每月多少天,所以月份还要划分为4、6、9、11月30天,1、3、5、7、8、10、12月31天,2月特殊判断;(5).同理,年数year也要划分为闰年和非

8、闰年;(6).同时注意测试月份1、12边界值。2.列出等价类和边界值表输入条件有效等价类无效等价类年、月类型及个数(1).输入2个int型数字(2).输入非数字字符(3).输入少于2个数字(4).输入大于2个数字年份范围(5).在0-int最大值之间闰年被400整除(6). 在0-int最大值之间闰年不被100整除且被4整除(7).在0-int最大值之间平年(8).年份小于0(9).年份大于int最大值(2147483647)月份范围(10).月份=4,6,9,11(11).月份=3,5,7,8,10(12).月份=1(13).月份=12(14).月份=2(15).月份>12(16).月

9、份<13.设计测试用例用例编号输入预期输出覆盖等价类是否通过CS0012002 112002,11 is 30 days(1)、(7)、(10)CS002aaa bbbInput error!(2)CS0032002Input error!(3)CS0042002 11 10Input error!(4)CS0052000 102000,10 is 31 days(1)、(5)、(11)CS0061996 11996,1 is 31 days(1)、(6)、(12)CS0071990 121990,12 is 31 days(1)、(7)、(13)CS0081800 21800,2 is

10、 28 days(1)、(7)、(14)CS0092008 22008, 2 is 29 days(1)、(6)、(14)CS0102000 22000,2 is 29 days(1)、(5)、(14)CS011-2000 7Input error!(8)CS01210000000000 8Input error!(9)CS0132013 0Input error!(15)CS0142013 14Input error!(16)三. 实验结果按照上面等价划分和边界值设置的测试用例,对源程序进行测试的结果如下图所示:用例编号CS001输入2002 11预期输出2002,11 is 30 days

11、覆盖等价类(1)、(7)、(10)实际输出是否通过通过用例编号CS002输入aaa bbb预期输出Input error!覆盖等价类(2)实际输出是否通过通过用例编号CS003输入2002预期输出Input error!覆盖等价类(3)实际输出一直等待再输入一个数字是否通过未通过用例编号CS004输入2002 11 10预期输出Input error!覆盖等价类(4)实际输出应该只能输入2个数字,输入3个它也按两个数处理,显然不能通过是否通过未通过用例编号CS005输入2000 10预期输出2000,10 is 31 days覆盖等价类(1)、(5)、(11)实际输出是否通过通过用例编号CS0

12、06输入1996 1预期输出1996,1 is 31 days覆盖等价类(1)、(6)、(12)实际输出是否通过通过用例编号CS007输入1990 12预期输出1990,12 is 31 days覆盖等价类(1)、(7)、(13)实际输出是否通过通过用例编号CS008输入1800 2预期输出1800,2 is 28 days覆盖等价类(1)、(7)、(14)实际输出是否通过通过用例编号CS009输入2008 2预期输出2008, 2 is 29 days覆盖等价类(1)、(6)、(14)实际输出是否通过通过用例编号CS010输入2000 2预期输出2000,2 is 29 days覆盖等价类(

13、1)、(5)、(14)实际输出是否通过通过用例编号CS010输入2000 2预期输出2000,2 is 29 days覆盖等价类(1)、(5)、(14)实际输出是否通过通过用例编号CS011输入-2000 7预期输出Input error!覆盖等价类(8)实际输出当输入年份<0时就应该是错误的年份是否通过未通过用例编号CS012输入10000000000 8预期输出Input error!覆盖等价类(9)实际输出从输出结果可以发现int数字已经溢出,但它输出了结果,应该输出错误提示是否通过未通过用例编号CS013输入2013 0预期输出Input error!覆盖等价类(15)实际输出是

14、否通过通过用例编号CS014输入2013 14预期输出Input error!覆盖等价类(16)实际输出是否通过通过四. 结果分析与体会经过上面的测试后,该测试用例的语句覆盖率和分支条件覆盖率为100%,基本考虑了所有该题目的输入情况。根据单老师课程所讲述的内容并结合课件,完美对题目2进行了单元测试,更好的掌握了静态测试、动态测试方法,其中包括黑盒测试的等价划分、边界值设定,白盒测试的覆盖所有路径、分支条件,都更深刻的进行了学习与理解。出现的问题:同时,在实验中也遇到了一些问题,其中主要的问题如下:1.在对年份进行等价划分时,它只要求输入的为int型数字,没有具体的输入年份要求,但根据生活中的

15、经验,是否该把小于0的年份和大于int型最大值的年份划分至无效等价类?这是一个很困扰我的问题。2.它给定的题目是想测试输入year和month判断月份的天数,但是在判断闰年的公式中,它给出的是“year%4=0&&year%100!=0&&year%400=0”,而正确的应该为“(year%4=0&&year%100!=0)|(year%400=0)”,是否应该把它修正在进行测试?因为在判断测试用例是否通过时,依据上面不同的式子,通过的结果是不同的。3.在静态测试代码,代码走读过程中,遇到的格式不是很规范的问题,是否应该把它编码规范化,并修改记录

16、至文档中?4.测试过程中,覆盖等价类会出现重复的现象,这是不是会导致测试的效率降低,而当前测试用例又是必不可少的,是不是应该测试覆盖的都是唯一的用例?解决方案(列出遇到的问题和解决办法,列出没有解决的问题):1.第一个问题,我的解决方法是:答:在测试过程中,应该结合生活中的实际来编写测试用例,如题目中的month就应该设置1-12为有效月份,虽然题目中没有提示,但这显然是生活常识,而且是衡成立的公理,同样设置year时就有小于0或大于int最大值为无效等价类。2.第二个问题,我的解决方法是:答:在静态测试中,通过代码走读,把代码中的错误都修正,同时计算闰年的公式也应该修改过来,再进行测试,因为它题目测试的要求是判断月份,所以它就应

温馨提示

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

评论

0/150

提交评论