实验三 白盒测试
1.实验目的
掌握白盒测试方法及会使用Junit进行测试。
2.实验内容
一、使用 java 实现如下功能的程序: 输入三条边 a,b,c,满足 0<=a<=200,0<=b<=200,0<=c<=200,判断是否能构成三角形, 分别输出不能构成三角形、等边三角形、等腰三角形、直角三角形、一般三角形。
(1) 判断三条边是否合法
(2) 判断两条边之和是否大于第三边
(3) 判断三条边是否能够组成三角形
(4) 判断两条边是否相等
(5) 求三角形有几条边相等,返回值:相等边的数量
(6) 判断是否满足两边平方之和是否等于第三边的平方
(7) 判断是否是直角三角形
(8) 判断三角形的类型,返回值: 不能组成三角形 等边三角形 等腰三角形 直角三角形 一般三角形
二、设计该程序的基路径测试用例。
三、使用 Junit 对上述操作进行测试,并得出测试结果。
3.实验步骤
第一步:根据实验内容编写程序。
第二步:根据实验内容设计测试用例,要求是用白盒测试生成测试用例。
第三步:执行测试用例,并记录测试结果。
第四步:编写实验报告,实验报告的内容包括测试用例的测试结果、程序中存在的 bug、以及这种测试用例生成方法对于揭露程序的错误有什么异同点。
4.测试结果
(1)流程图如下:
(2)控制流图如下:
圈复杂度为:6
P1: 1 2 11
P2: 1 3 4 11
P3: 1 3 5 6 11
P4: 1 3 5 7 11
P5: 1 3 5 8 9 11
P6: 1 3 5 8 10 11
(3)测试结果如下:
5.实验结果分析
经过JUnit测试,所有的测试结果都符合预期要求,即初步判断代码无误。
6.实验总结
(1)这次实验是根据白盒测试中的基于控制流的测试方法,首先先画出编写程序的流程图,再根据流程图改写成控制流图,然后计算圈复杂度,算出覆盖的基本路径,最后设计测试用例,编写代码,进行测试。
(2)体会到Junit对于测试的便利,可以批量测试多个测试用例,以及可以通过断言assert能够清晰看到预期值和实际值是否相符,如果不一样,会清晰看到错误的地方。
(3)这次实验掌握了白盒测试的基于控制流的测试方法和Junit的使用方法,对于以后写代码,改代码有很好的帮助。
7.附录代码
package triangle;
import java.util.Scanner;
public class Tri {
public static Boolean legal (int a, int b,int c)
{
if(a<0||a>200||b<0||b>200||c<0||c>200)
{
return false;
}
return true;
}
public static Boolean trian (int a, int b,int c)
{
if(a+b>c &&a+c>b && b+c>a)
{
return true;
}
return false;
}
public static int bianshu (int a, int b,int c)
{
int cnt;
cnt=0;
if(a==b) cnt++;
if(a==c) cnt++;
if(b==c) cnt++;
return cnt;
}
public static Boolean zhijiao (int a, int b,int c)
{
if(a * a + b * b == c * c ||
a * a + c * c == b * b ||
b * b + c * c == a * a)
{
return true;
}
return false;
}
public static void print(int a,int b,int c) {
if(legal(a,b,c))
{
if (trian(a,b,c))
{
if(bianshu(a,b,c)==1)
{
System.out.print("等腰三角形\n");
}
else if(bianshu(a,b,c)==3)
{
System.out.print("等边三角形\n");
}
else
{
if (zhijiao(a,b,c))
{
System.out.print("直角三角形\n");
}
else
{
System.out.print("一般三角形\n");
}
}
}
else
{
System.out.print("不能组成三角形\n");
}
}
else
{
System.out.print("不能组成三角形\n");
}
}
public static void main(String[] args)
{
System.out.print("请输入三边的长度\n");
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
print(a,b,c);
}
}
测试代码:
import static org.junit.Assert.*;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import triangle.Tri;
/**
*
*/
/**
- @author 小仙女
*/
@SuppressWarnings(“deprecation”)
public class TriTest {
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test
public void test1()
{
Assert.assertEquals(false,Tri.legal(-1,1,0));
Tri.print(-1, 1, 0);
}
@Test
public void test2()
{
Assert.assertEquals(false,Tri.trian(1,2,3));
Tri.print(1, 2, 3);
}
@Test
public void test3()
{
Assert.assertEquals(1,Tri.bianshu(1,2,2));
Tri.print(1, 2, 2);
}
@Test
public void test4()
{
Assert.assertEquals(3,Tri.bianshu(6,6,6));
Tri.print(6, 6, 6);
}
@Test
public void test5()
{
Assert.assertEquals(0,Tri.bianshu(3,4,5));
Assert.assertEquals(true,Tri.zhijiao(3,4,5));
Tri.print(3, 4, 5);
}
@Test
public void test6()
{
Assert.assertEquals(0,Tri.bianshu(6,7,8));
Assert.assertEquals(false,Tri.zhijiao(6,7,8));
Tri.print(6, 7, 8);
}
}