一、流程图
根据需求画出流程图
1、两个判定
MMM
NNN
2、两个条件
M=(x>3)&&(z<10))M={(x>3) \&\& (z<10))}M=(x>3)&&(z<10))
N=(x==4)∣∣(y>5)N={(x==4)||(y>5)}N=(x==4)∣∣(y>5)
3、四条路径
P1(1−2−4−5−7−8−9−10):M&&NP1(1-2-4-5-7-8-9-10):M \&\& NP1(1−2−4−5−7−8−9−10):M&&N
P2(1−2−4−5−7−9−10):M&&¬NP2(1-2-4-5-7-9-10):M \&\& \lnot NP2(1−2−4−5−7−9−10):M&&¬N
P3(1−2−7−8−9−10):¬M&&NP3(1-2-7-8-9-10):\lnot M \&\& NP3(1−2−7−8−9−10):¬M&&N
P4(1−2−7−9−10):¬M&&¬NP4(1-2-7-9-10):\lnot M \&\& \lnot NP4(1−2−7−9−10):¬M&&¬N
4、五条语句
O:k=0,j=0O:k=0,j=0O:k=0,j=0
P:k=x∗y−1,j=sqrt(k)P:k=x*y-1, j=sqrt(k)P:k=x∗y−1,j=sqrt(k)
Q:j=x∗y+10Q:j=x*y+10Q:j=x∗y+10
R:j=j%3R:j=j\%3R:j=j%3
S:returnjS:return \;jS:returnj
二、设计测试用例
1、语句覆盖
2、判定覆盖
3、条件覆盖
对于MMM:
x>3取真时T1,取假时F1x>3取真时T1,取假时F1x>3取真时T1,取假时F1
z<10取真时T2,取假时F2z<10取真时T2,取假时F2z<10取真时T2,取假时F2
对于NNN:
x==4取真时T3,取假时F3x==4取真时T3,取假时F3x==4取真时T3,取假时F3
y>5取真时T4,取假时F4y>5取真时T4,取假时F4y>5取真时T4,取假时F4
4、路径覆盖
三、编写Java类,调用该方法,并用Junit测试工具编写测试代码
public class Work {public int DoWork(int x, int y, int z){int k = 0, j = 0;if ( (x>3) && (z<10) ){k = x * y - 1;j = (int) Math.sqrt(k);}if ( (x == 4) || (y>5))j = x * y + 10;j = j%3;return j;}}
测试类的编写
import org.junit.*;import static org.junit.Assert.*;public class WorkTest {@BeforeClasspublic static void before(){System.out.println("Global测试开始");}@AfterClasspublic static void after(){System.out.println("Global测试结束");}@Beforepublic void setUp() throws Exception{System.out.println("-------------");System.out.println("一个测试开始了");}@Afterpublic void tearDown() throws Exception{System.out.println("一个测试结束了");}//语句覆盖@Testpublic void testStatement(){System.out.println("正在进行语句覆盖测试");assertEquals(2,new Work().DoWork(4,4,2));}//判定覆盖@Testpublic void testDecision1(){System.out.println("正在进行判定覆盖测试1");assertEquals(2,new Work().DoWork(4,4,2));}@Testpublic void testDecision2(){System.out.println("正在进行判定覆盖测试2");assertEquals(0,new Work().DoWork(2,2,5));}//条件覆盖@Testpublic void testCondition1(){System.out.println("正在进行条件覆盖测试1");assertEquals(2,new Work().DoWork(4,4,2));}@Testpublic void testCondition2(){System.out.println("正在进行条件覆盖测试2");assertEquals(0,new Work().DoWork(2,2,11));}//路径覆盖@Testpublic void testPath1(){System.out.println("正在进行路径覆盖测试1");assertEquals(2,new Work().DoWork(4,4,2));}@Testpublic void testPath2(){System.out.println("正在进行路径覆盖测试2");// assertEquals(1,new Work().DoWork(5,10,8));错误的用例设计assertEquals(1,new Work().DoWork(10,5,7));}@Testpublic void testPath3(){System.out.println("正在进行路径覆盖测试3");assertEquals(1,new Work().DoWork(2,6,12));}@Testpublic void testPath4(){System.out.println("正在进行路径覆盖测试4");assertEquals(0,new Work().DoWork(2,2,11));}}