基於三角形問題通過邊界值分析和等價類划分進行黑盒測試


等價類划分

 

 

 

 

 

 

 

 

 

 

 

輸入三個整數

 有效等價類

 無效等價類

1、 整數

2、 3個整數

3、 非0整數

4、 正數

 

 

 

 

13、一邊為非整數

14、兩邊為非整數

15、三遍為非整數

16、數字個數小於3

17、數字個數大於3

18、一邊為0

19、兩邊為0

20、三遍為0

21、一邊小0

22、兩邊小於0

23、三邊小於0

24、一邊大於100

25、兩邊大於100

26、三邊大於100

 

構成不等邊三角形

5、 a+b>c

6、 a+c>b

7、 b+c>a

27、a+b<=c

28、b+c<=a

29、c+a<=b

 構成等腰三角形

8、 a=b且滿足5

9、 b=c且滿足7

10、    c=a且滿足6

 

構成等邊三角形

 11、a=b=c

 

不構成三角形

 12、不滿足5,6,7中的一個

 

 

等價類划分測試用例

 

等價類划分測試用例

測試用例編號

等價類條件

測試用例

預期結果

a

b

c

d

1

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

2

3

4

 

普通三角形

2

1,2,3,4,5,6,7,8

2

2

3

 

等腰三角形

3

1,2,3,4,5,6,7,9

2

3

2

 

等腰三角形

4

1,2,3,4,5,6,7,10

3

2

2

 

等腰三角形

5

1,2,3,4,5,6,7,11

2

2

2

 

等邊三角形

6

1,2,3,4,12

1

2

3

 

不構成三角形

7

1,2,3,4,5,6,7,13

2.1

3

4

 

不構成三角形(未測試)

8

1,2,3,4,5,6,8,14

2.1

2.1

3

 

不構成三角形(未測試)

9

1,2,3,4,5,6,9,15

2.1

2.1

2.1

 

不構成三角形(未測試)

10

1,3,4,,16

2

3

null

 

不構成三角形(未測試)

11

1,2,3,17

2

3

4

3

不構成三角形(未測試)

12

1,2,18

0

2

3

 

拋出異常

13

1,2,19

0

0

2

 

拋出異常

14

1,2,20

0

0

0

 

拋出異常

15

1,2,3,21

-1

2

2

 

拋出異常

16

1,2,3,22

-1

-2

2

 

拋出異常

17

1,2,3,23

-2

-2

-2

 

拋出異常

18

1,2,3,4,24

111

99

99

 

拋出異常

19

1,2,3,4,25

111

111

99

 

拋出異常

20

1,2,3,4,26

111

111

111

 

拋出異常

21

1,2,3,4,27

2

3

5

 

不構成三角形

22

1,2,3,4,28

5

2

3

 

不構成三角形

23

1,2,3,4,29

2

5

3

 

不構成三角形

 

 

 

 

 

 

一般邊界值4n+1

僅考慮有效區間單個變量邊界值(一般邊界值):用最小值、略高於最小值、正常值、略低於最大值和最大值。

 

 

一般邊界分析值測試用例

 
 

測試用例編號

數據列表

預期輸出

 

a

b

c

 

1

1

50

50

等腰三角形

 

2

2

50

50

等腰三角形

 

3

50

50

50

等邊三角形

 

4

99

50

50

等腰三角形

 

5

100

50

50

不構成三角形

 

6

50

1

50

等腰三角形

 

7

50

2

50

等腰三角形

 

8

50

99

50

等腰三角形

 

9

50

100

50

不構成三角形

 

10

50

50

1

等腰三角形

 

11

50

50

2

等腰三角形

 

12

50

50

99

等腰三角形

 

13

50

50

100

不構成三角形

 

 

 

 

 

 

 

健壯邊界值6n+1

同時考慮有效區間和無效區間單個變量邊界值(健壯邊界值):除了最小值、略高於最小值、正常值、略低於最大值、最大值,還要有略超過最大值和略小於最小值的值。

 

健壯邊界分析值測試用例

 
 

測試用例編號

數據列表

預期輸出

 

a

b

c

 

1

0

50

50

拋出異常

 

2

1

50

50

等腰三角形

 

3

2

50

50

等腰三角形

 

4

50

50

50

等邊三角形

 

5

99

50

50

等腰三角形

 

6

100

50

50

不構成三角形

 

7

101

50

50

拋出異常

 

8

50

0

50

拋出異常

 

9

50

1

50

等腰三角形

 

10

50

2

50

等腰三角形

 

11

50

99

50

等腰三角形

 

12

50

100

50

不構成三角形

 

13

50

101

50

拋出異常

 

14

50

50

0

拋出異常

 

15

50

50

1

等腰三角形

 

16

50

50

2

等腰三角形

 

17

50

50

99

等腰三角形

 

18

50

50

100

不構成三角形

 

19

50

50

101

拋出異常

 

被測試代碼

被測試類TriangleProblem.class

@Component
public class TriangleProblem {


    public void determine(int a,int b,int c){

        if(a<=0||b<=0||c<=0) {
            throw new IllegalArgumentException("請輸入大於0的邊長");
        }
        else if (a>100||b>100||c>100) {
            throw new IllegalArgumentException("請輸入小於101的邊長");
        }
        else
            if (a + b >c && a + c >b && b + c >a) {// 判斷是否三角形
            // 判斷三角形類型
            if (a == b && b == c && c == a) {
                System.out.println("等邊三角形");
            } else if (a == b || a == c || b == c) {
                System.out.println("等腰三角形");
            }else{System.out.println("普通三角形");}
        } else {
            System.out.println("非三角形");
        }
    }
}

 

測試代碼

測試類
public class TriangleProblemTest {
    static class TestCase{
        int a, b, c;
        String t;
        Class<? extends Exception> e;

        public TestCase(int a,int b,int c,String t) {
            this.a = a;
            this.b = b;
            this.c = c;
            this.t = t;
        }

        TestCase(int a,int b,int c,Class<? extends Exception> e){
            this.a = a;
            this.b = b;
            this.c = c;
            this.e = e;
        }
    }

    @ParameterizedTest
    @MethodSource("valid_equivalence_class")
    public void valid_equivalence_class(TestCase tc){
        TriangleProblem problem = new TriangleProblem();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        System.setOut(new PrintStream(stream));
        problem.determine(tc.a,tc.b,tc.c);
        assertEquals(tc.t , stream.toString().trim());
    }

    static Stream<TestCase> valid_equivalence_class(){
        return Stream.of(
                new TestCase(2,3,4,"普通三角形"),
                new TestCase(2,2,3,"等腰三角形"),
                new TestCase(2,3,2,"等腰三角形"),
                new TestCase(3,2,2,"等腰三角形"),
                new TestCase(2,2,2,"等邊三角形"),
                new TestCase(1,2,3,"非三角形"),
                new TestCase(2,3,5,"非三角形"),
                new TestCase(5,2,3,"非三角形"),
                new TestCase(2,5,3,"非三角形")
        );
    }

  @ParameterizedTest
  @MethodSource("invalid_equivalence_class")
    public void test_valid_equivalence_class(TestCase tc){
      TriangleProblem problem = new TriangleProblem();
      assertThrows(tc.e,()->problem.determine(tc.a,tc.b,tc.c));
  }

  static Stream<TestCase> invalid_equivalence_class(){
        return Stream.of(
                new TestCase(0,2,3,IllegalArgumentException.class),
                new TestCase(0,0,2,IllegalArgumentException.class),
                new TestCase(0,0,0,IllegalArgumentException.class),
                new TestCase(-1,2,2,IllegalArgumentException.class),
                new TestCase(-1,-2,2,IllegalArgumentException.class),
                new TestCase(-2,-2,2,IllegalArgumentException.class),
                new TestCase(111,99,99,IllegalArgumentException.class),
                new TestCase(111,111,99,IllegalArgumentException.class),
                new TestCase(111,111,111,IllegalArgumentException.class)
        );
  }
}

 


免責聲明!

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



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