軟件測試點覆蓋,邊覆蓋,主路徑覆蓋及其練習題


點覆蓋:即對程序的控制流圖節點進行全面覆蓋。

邊覆蓋:設計一條路徑,使程序的控制流圖中所有邊被覆蓋。

主路徑覆蓋:就是對程序設計測試用例,使測試用例盡可能多的經過控制流圖中的邊同時不形成環。

 

習題:

對以下代碼進行分析:

package com.prime;

public class Prime {
    public static Boolean isDivisable(int prime, int curPrime) {
        if (curPrime % prime == 0) {
            return true;
        } else
            return false;
    }

    public static void printPrimes(int n) {
        int curPrime; // Value currently considered for primeness
        int numPrimes; // Number of primes found so far.
        boolean isPrime; // Is curPrime prime?
        int[] primes = new int[100]; // The list of prime numbers.

        // Initialize 2 into the list of primes.
        primes[0] = 2;
        numPrimes = 1;
        curPrime = 2;
        while (numPrimes < n) {
            curPrime++; // next number to consider ...
            isPrime = true;
            for (int i = 0; i <= numPrimes - 1; i++) { // for each previous
                                                        // prime.
                if (isDivisable(primes[i], curPrime)) { // Found a divisor,
                                                        // curPrime is not
                                                        // prime.
                    isPrime = false;
                    break; // out of loop through primes.
                }
            }
            if (isPrime) { // save it!
                primes[numPrimes] = curPrime;
                numPrimes++;
            }
        } // End while

        // Print all the primes out.
        for (int i = 0; i <= numPrimes - 1; i++) {
            System.out.println("Prime: " + primes[i]);
        }
    } // end printPrimes
}

 

問題a:畫出程序的控制流圖

 

問題b:設計一個錯誤,使測試用例t2(n=5)比t1(n=3)更容易發現的錯誤。

將程序中n換成4,這樣測試用例n=3不能發現這個錯誤而n=5能發現。

 

問題c:測試用例 t(n=1)

 

問題d:

點覆蓋:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

邊覆蓋:[(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,5),(6,8),(8,9),(5,9),(9,10),(10,11),(11,2),(2,12),(12,13),(13,14),(14,15),(15,13),(13,16)]

主路徑覆蓋:

[1,2,3,4,5,6,7]

[1,2,3,4,5,9,10,11]

[1,2,3,4,5,9,11]

[1,2,3,4,5,6,8,9,10,11]

[1,2,3,4,5,6,8,9,11]

[1,2,12,13,14,15]

[1,2,12,13,16]

 

[2,3,4,5,6,8,9,10,11,2]

[2,3,4,5,6,8,9,11,2]

[2,3,4,5,9,10,11,2]

[2,3,4,5,9,11,2]

 

[3,4,5,6,8,9,10,11,2,12,13,14,15]

[3,4,5,6,8,9,10,11,2,12,13,16]

[3,4,5,6,8,9,11,2,12,13,14,15]

[3,4,5,6,8,9,11,2,12,13,16]

[3,4,5,9,10,11,2,12,13,14,15]

[3,4,5,9,11,2,12,13,14,15]

[3,4,5,9,10,11,2,12,13,16]

[3,4,5,9,11,2,12,13,16]

 

[5,6,7,5]

 

[6,7,5,9,10,11,2,12,13,14,15]

[6,7,5,9,11,2,12,13,14,15]

[6,7,5,9,10,11,2,12,13,16]

[6,7,5,9,11,2,12,13,16]

 

[13,14,15,13]

 

[14,15,13,16]

 

 

 

設計測試代碼如下:

package Primay;

import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
//import org.junit.internal.runners.TestClassRunner;
import org.junit.runner.RunWith;

import Primay.Primaies;

public class PrimaiesTest {
	public static Primaies primay = new Primaies();
	
	@Before
	public void Start() throws Exception{
		primay.Start();
	}
	
	@After
	public void End() throws Exception{
		
	}
	
	@Test
	public void TestNormal(){
		String str=new String("Prime: 2\r\nPrime: 3\r\nPrime: 5\r\nPrime: 7\r\nPrime: 11\r\n");
		primay.printPrimes(5);
		assertEquals(str,primay.Getstr());
	}
}

 設計時將源代碼輸出到控制台改變為輸出到Primaies類中一個私有成員變量,String類型,每次測試對此變量初始化。

然后測試比較成員變量中與預測結果是否一致。

 

具體代碼上傳至git中TestJunit項目中:https://github.com/klkjjhjkhjhg/junit

 

效果圖如下:

 

 程序代碼率:

由於本項目中含有其他文件,所以代碼率不是100%

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM