1、软件测试报告Junit白盒测试测试用例pairwise等价类覆盖率EMMA软件测试报告目 录一、简介 31.1、编写目的 31.2、测试范围 3二、测试资源 32.1、人力资源 32.2、测试环境 32.3、测试工具 4三、测试 43.1、greatCircleDistance ()函数 43.2、compareBytes()函数 73.3、getHue ()函数 93.4、arraycopy ()函数 113.5、computeIntersection ()函数 15四、遇到的困难及解决方法 18一、简介1.1、编写目的使用等价类划分方法对于所选的五个功能模块进行测试,并使用pair-wis
2、e方法减少测试用例,并且比较两种测试方法的代码覆盖率。1.2、测试范围本次测试主要测试五个模块的功能,使用等价类划分的方法生成JUnit测试用例,并使用pair-wise方法减少测试用例,比较两种方法的覆盖率。二、测试资源2.1、人力资源姓名角色具体职责和注释*方案设计人、测试技术设计人策划总体规模,测试内容,规划测试方案;测试并记录测试情况。*测试人、记录人、文档整理人制定测试方案,确定测试深度,测试技术设计;测试并记录测试情况,编写软件测试报告。2.2、测试环境下表列出了测试的系统环境机器环境工作计算机软件环境(相关软件、操作系统等)Windows XP SP3jdk1.6.0_06Ecl
3、ipse Platform Version: 3.3.3硬件环境(设备、网络等)笔记本电脑2.3、测试工具用途工具名称生产厂商版本单元测试JUNITJUnit.org4.8.2覆盖率测试EMMAEclEmma.org1.4.3三、测试3.1、greatCircleDistance ()函数greatCircleDistance ()方法计算球面距离,输入的分别为两个点的经度和纬度以及球的半径,以下为其源码: public static double greatCircleDistance(double latitudeS, double longitudeS, double latitudeF
4、, double longitudeF, double r) if (latitudeS = 90 | latitudeF = 90 | longitudeS = 180 | longitudeF = 180 | r 0) throw new IllegalArgumentException(); latitudeS = Math.toRadians(latitudeS); latitudeF = Math.toRadians(latitudeF); longitudeS = Math.toRadians(longitudeS); longitudeF = Math.toRadians(lon
5、gitudeF); double deltaLongitude = longitudeF - longitudeS; double a = Math.cos(latitudeF) * Math.sin(deltaLongitude); double b = Math.cos(latitudeS) * Math.sin(latitudeF); b -= Math.sin(latitudeS) * Math.cos(latitudeF) * Math.cos(deltaLongitude); double c = Math.sin(latitudeS) * Math.sin(latitudeF);
6、 c += Math.cos(latitudeS) * Math.cos(latitudeF) * Math.cos(deltaLongitude); if (c 0) c = -c; return Math.atan(Math.sqrt(a * a + b * b) / c) * r; 一、 针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出25个用例,等价类分别是: 对latitudeS划分:-90到0,0到90以及不合法输入; 对longitudeS划分:-180到0,0到180以及不合法输入; 对latitudeF划分:-90到0,0到90以及不合法输入; 对long
7、itudeF划分:-180到0,0到180以及不合法输入; 对半径r的划分:大于0以及不合法的输入;以下为具体的测试用例:latitudeSlongitudeSlatitudeFlongitudeFr预期结果实际测试结果303030301000通过303030-120100115.98通过3030-6030100157.08通过3030-60-12010063.003通过30-603030100131.812通过30-6030-12010089.566通过30-60-6030100112.296通过30-60-60-120100135.256通过-60303030100157.08通过-603
8、030-12010063.003通过-6030-60301000通过-6030-60-120100100.807通过-60-603030100112.296通过-60-6030-120100135.256通过-60-60-603010072.273通过-60-60-60-12010050.536通过1203060120100抛出异常通过-1203060120100抛出异常通过6030120120100抛出异常通过6030-120120100抛出异常通过30-21060120100抛出异常通过3021060120100抛出异常通过303060-210100抛出异常通过303060210100抛出
9、异常通过303060120-100抛出异常通过使用EMMA来测量这些测试的代码覆盖率结果如下:二、 使用pair-wise减少测试用例,此次测试总共有13个用例,比原来减少12个用例,此时的代码覆盖率为:三、 对greatCircleDistance()方法测试的结论:综合一和二可以看出,直接使用等价类划分的方法对此模块进行测试需要25个用例,而使用pair-wise后用例数减少一半,但是测试时其代码的覆盖率仍然保持100%,从此可以看出使用pair-wise方法的有效性。3.2、compareBytes()函数 compareBytes()方法实现了数组的比较,将数组a的内容与数组b的内容比
10、较,比较时将数组中数据视为无符号数。当a小于b时返回-1,a大于b时返回1,相等时返回0。以下为源代码:public static int compareBytes(byte a, int aOff, byte b, int bOff,int len) if (a = null | b = null) throw new IllegalArgumentException(Illegal array); if (aOff 0 | bOff 0) throw new IllegalArgumentException(Illegal offset); if (len a.length - aOff
11、| len b.length - bOff) throw new IllegalArgumentException(Not enough bytes left to compare!); for (int i = 0; i bb) return 1; else if (ab bb) return -1; return 0;一、 针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出22个用例,分别是: 数组a:可划分为合法输入与不合法输入(具体为null); aOff:可以划分为=a.length; 数组b:可划分为合法输入与不合法输入(具体为null); bOff:可以划分为=
12、b.length; len:可以划分为合法与不合法(具体包括len a.length - aOff | len b.length bOff; 此外,数组a,b还需考虑符号扩展问题。对于数组中元素,需分别考虑其大于0、小于0的情况(此时,其对应的无符号数大于或等于0x80)。以下为具体的测试用例:数组aaOff数组bbOfflen预期结果实际测试结果null15,6,2,322抛出异常通过1,2,3-15,6,2,322抛出异常通过1,2,335,6,2,322抛出异常通过1,2,31null22抛出异常通过1,2,315,6,2,3-22抛出异常通过1,2,315,6,2,342抛出异常通过1
13、,2,315,6,2,32-1抛出异常通过1,2,3,415,6,2,323抛出异常通过1,2,315,6,3,322-1通过1,2,315,6,0xf0,322-1通过1,0xf0,315,6, 0xf1,322-1通过1,3,315,6,2,3221通过1,0xff,315,6,2,3221通过1,0xf1,315,6,0xf0,3221通过1,3,215,6,3,322-1通过1,3,0xf015,6,3,0xf122-1通过1,3,315,6,3,2221通过1,3,0xf115,6,3,3221通过1,3,0xf115,6,3,0xf0221通过1,3,0xf015,6,3,0xf0
14、220通过使用EMMA来测量这些测试的代码覆盖率结果如下:二、 使用pair-wise减少测试用例,此次测试总共用例数为13个,而未使用之前测试用例数为22个,此时代码的覆盖率为:三、 对compareBytes()方法测试的结论综合一和二可以看出,直接使用等价类划分的方法对此模块进行测试需要22个用例,而使用pair-wise后用例数减少一半,但是测试时其代码的覆盖率仍然保持100%,从此可以看出使用pair-wise方法的有效性。3.3、getHue ()函数getHue()方法是计算HSL颜色模型中的Hue参数,以下为其源码:public static float getHue(floa
15、t red, float green, float blue, float max, float min) float hue = max - min; if (hue 0.0f) if (max = red) hue = (green - blue) / hue; if (hue 0.0f) hue += 6.0f; else if (max = green) hue = 2.0f + (blue - red) / hue; else if (max = blue) hue = 4.0f + (red - green) / hue; else throw new IllegalArgumen
16、tException(invalid max); hue *= 60f; else if (hue 0.0f) throw new IllegalArgumentException(max min); return hue; 一、 针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出6个用例,分别是: 对max参数进行划分:max=blue,max=red, max=red,max=green,max不等于以上三种参数中的任何一种,maxblue,green=blue以下为具体的测试用例:redgreenbluemaxmin预期结果实际测试结果0.20.60.80.80.220
17、0通过0.80.60.20.80.240通过0.80.20.60.80.2320通过0.60.80.20.80.280通过0.60.80.20.50.2抛出异常通过0.60.80.20.20.8抛出异常通过使用EMMA来测量这些测试的代码覆盖率结果如下:二、 使用pair-wise减少测试用例,此次测试用例数为4个,未使用之前的测试用例数为6个,此次测试的代码覆盖率为:三、 对getHue()方法测试的结论:综合一和二可以看出,直接使用等价类划分的方法对此模块进行测试需要6个用例,而使用pair-wise后用例数减少三分之一,但是测试时其代码的覆盖率仍然保持100%,从此可以看出使用pair-
18、wise方法的有效性。3.4、arraycopy ()函数Arraycopy()方法实现了数组的复制,将源数组src的内容复制到数组dst中,以下为源代码:public static void arraycopy(byte src, int src_position, byte dst, int dst_position, int length) if (src = null) throw new IllegalArgumentException(src was null); if (dst = null) throw new IllegalArgumentException(dst was
19、null); if (length 0) throw new IllegalArgumentException(length was less than 0); if (src_position src.length) throw new IllegalArgumentException(src_position + length would overrun the src array. Expected end at + (src_position + length) + actual end at + src.length); if (dst_position dst.length) th
20、row new IllegalArgumentException(dst_position + length would overrun the dst array. Expected end at + (dst_position + length) + actual end at + dst.length); System.arraycopy( src, src_position, dst, dst_position, length); 一、 针对此函数我们运用了等价类划分的方法生成JUnit测试用例总共划分出15个用例,分别是: 数组Src:可划分为合法输入与不合法输入(具体为null);
21、 src_position:可分为合法输入以及不合法输入,其中不合法输入包括:小于0,src_position+length=src.length,其中合法输入又可分为等于0和大于0; 数组dst:可划分为合法输入与不合法输入(具体为null),其中合法输入可分为和src是同一数组以及不是同一数组的情况; dst_position: 可分为合法输入以及不合法输入,其中不合法输入包括:小于0,dst_position+length=dst.length,其中合法输入又可分为等于0和大于0; length:可划分为合法输入以及不合法输入(具体指length0);以下为具体的测试用例:数组srcsr
22、c_position数组dstdst_positionlength预期结果实际测试结果null01,202抛出异常通过1,20null02抛出异常通过1,2-13, 402抛出异常通过1,203, 4-12抛出异常通过1,203, 40-1抛出异常通过1,2,313,4,5,613抛出异常通过1,2,3,413,4,513抛出异常通过0,1,2,3, 4,5,6,7,8,9,10,11,12, 13,14,15,160与src为同一数组05数组dst最终结果0,1,2,3, 4,5,6,7,8,9,10,11,12, 13,14,15,16通过同上0同上25数组dst最终结果0,1,0,1,2
23、,3,4,7,8,9,10,11,12,13,14,15,16通过同上2同上05数组dst的最终结果2,3,4,5,6,5,6,7,8,9,10,11,12, 13,14,15,16通过同上10同上35数组dst的最终结果0,1,2, 10,11,12, 13,14,8,9,10,11,12, 13,14,15,16通过同上00,1,2,3, 4,5,6,7,8,9,10,11,12, 13,14,15,1605数组dst不变通过同上0同上25数组dst的最终结果0,1,0,1,2,3,4,7,8,9,10,11,12,13,14,15,16通过同上2同上05数组dst的最终结果2,3,4,5
24、,6,5,6,7,8,9,10,11,12, 13,14,15,16通过同上10同上35数组dst的最终结果0,1,2, 10,11,12, 13,14,8,9,10,11,12, 13,14,15,16通过使用EMMA来测量这些测试的代码覆盖率结果如下:二、 使用pair-wise减少测试用例,此次测试用例数为11个,而未使用之前的测试用例总数为15个,此次测试的覆盖率:三、 对arraycopy()方法测试的结论:综合一和二可以看出,直接使用等价类划分的方法对此模块进行测试需要15个用例,而使用pair-wise后用例数减少到11个,但是测试时其代码的覆盖率仍然保持100%,从此可以看出使用pair-wise方法的有效性。3.5、computeIntersection ()函数computeIntersection()方法计算两个矩形相交部分所形成的矩形的坐标,以下为其源码:public static Rectangle computeIntersection(int x,int y,int width,int height,Rectangle dest) if (dest = null) return null; if (x 0 | y 0 | width 0 | height dest.x) ? x
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1