软件测试点覆盖,边覆盖,主路径覆盖及其练习题

Posted 张梁昊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试点覆盖,边覆盖,主路径覆盖及其练习题相关的知识,希望对你有一定的参考价值。

点覆盖:即对程序的控制流图节点进行全面覆盖。

边覆盖:设计一条路径,使程序的控制流图中所有边被覆盖。

主路径覆盖:就是对程序设计测试用例,使测试用例尽可能多的经过控制流图中的边同时不形成环。

 

习题:

对以下代码进行分析:

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%

 

以上是关于软件测试点覆盖,边覆盖,主路径覆盖及其练习题的主要内容,如果未能解决你的问题,请参考以下文章

软件测试作业4

HDU - 6311 Cover(无向图的最少路径边覆盖 欧拉路径)

[转]最小路径覆盖和最小边覆盖及相关性质

P2764 最小路径覆盖问题 网络流输出方案

实现一个主路径覆盖的测试

软件测试第三次作业