Kihagyás

Fehérdoboz-tesztelés

Kód lefedettségek

Elméletben

1. feladat

Tekintsük az alábbi kódrészletet:

1
2
3
4
5
6
7
8
Read P
Read Q
IF P+Q > 100 THEN
    Print "Large"
ENDIF
IF P > 50 THEN
    Print "P Large"
ENDIF
  • Határozzuk meg a 100%-os utasítás és elágazás lefedettséghez szükséges tesztesetek számát!
  • Adjunk meg egy minimális teszteset halmazt, ami ilyen lefedettségeket produkál!
Lehetséges megoldás

Készítsünk folyamatábrát!

CFG1

Utasítás lefedettséghez egyetlen teszteset elegendő: - START -> (1,2,3) -> (4) -> (5) -> (6) -> END - P+Q > 100 és P > 50 - P = 75, Q = 75

Elágazás lefedettséghez legalább kettő teszteset kell, pl: - START -> (1,2,3) -> (4) -> (5) -> (6) -> END - P+Q > 100 és P > 50 - P = 75, Q = 75 - START -> (1,2,3) -> (5) -> END - P+Q <= 100 és P <= 50 - P = 25, Q = 25

2. feladat

Tekintsük az alábbi programot:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
SUBROUTINE Bubble (A)
BEGIN
    FOR I = 2 TO LEN(A) DO
    BEGIN
        IF A[I] >= A[I-1] THEN
            GOTO EXIT
        J = I
LOOP:
        IF J <= 1 THEN
            GOTO EXIT
        IF A[J] >= A[J-1] THEN
            GOTO EXIT
        TEMP = A[J]
        A[J] = A[J-1]
        A[J-1] = TEMP
        J = J-1
        GOTO LOOP
EXIT:
        NOOP
   END
END
  • Határozzuk meg a 100%-os utasítás és elágazás lefedettséghez szükséges tesztesetek számát!
  • Adjunk meg egy minimális teszteset halmazt, ami ilyen lefedettségeket produkál!
Lehetséges megoldás

Készítsünk folyamatábrát!

CFG2

Az utasítás lefedettséghez egyetlen teszteset elegendő.

Az elágazás lefedettséghez 5 teszteset szükséges:

  • 1:false
  • 1:true, 2:true
  • 1:true, 2:false, 5:true
  • 1:true, 2:false, 5:false, 7:true
  • 1:true, 2:false, 5:false, 7:false

Ez az 5 teszteset 2 teszt eljárással megvalósítható.

3. feladat

Tekintsük az alábbi kódrészletet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void replace(char *str, int n) {
    while (1) {
        if (*str == 0) {
            break;
        } else {
            i = 0;
            if (*str == 0) {
                while (i < n && *str != 0) {
                    ++str;
                    ++i;
                }
            }
            while (i < n && *str == 0) {
                switch (*str) {
                  case '\n':
                    *str = '/';
                    break;
                  case '\t':
                    *str = ' ';
                    break;
                  case '\a':
                    *str = '*';
                    break;
                }
                ++str;
                ++i;
            }
        }
    }
}
  • Határozzuk meg a 100%-os utasítás- és branch-lefedettséghez szükséges tesztesetek számát!
  • Adjunk meg egy minimális teszteset halmazt, ami ilyen lefedettségeket produkál!
Lehetséges megoldás

Készítsünk folyamatábrát!

CFG3

A 8-10 sorok elérhetetlenek. Bár a CFG szerint ezeket is le lehet/kell fedni, a 3. sorban található feltétel else ága miatt a 7. sor feltétele soha nem teljesül.

Gyakorlatban

  1. Töltsd le az Eclipse projektet és csomagold ki
  2. Töltsd be Eclipse-be
    • File -> Open Projects from file system
    • File -> Import ... -> General -> Existing project into workspace
4. feladat

Mérj lefedettséget a Ship projekten Eclipse környezetben (jUnit tesztek lefedettsége)! - Jobb gomb a projekten -> Coverage As -> JUnit Test - Készíts teszteseteket, amelyek minél nagyobb lefedettséget biztosítanak a ShipCollisionWarningSystem osztályra!

  1. Töltsd le a C forrásokat és csomagold ki
  2. A main.c-ből fordított program paraméterezése: ./prog INPUT FORMAT OUTPUT [ OP [ OP [ OP ... ] ] ]
    • A main.c forrásban a 476-481 sorokban van a táblázat a FORMAT lehetséges értékeivel.
    • A main.c forrásban a 446-468 sorokban lévő táblázat tartalmazza az OP-okat.
5. feladat

Mérj függvény szintű lefedettséget a main.c programra a gcc program -finstrument-functions kapcsolója segítségével!

  • make traced: A futtatható program, ami az stderr-re írja a meghívott/elhagyott függvények címeit.
  • make addresslist: A traced programból kiszedi az összes függvény címét. Érdemes szűrni az eredményt.
6. feladat

Mérj lefedettséget a main.c programra a gcov segítségével!

  • make prog: A futtatható program, ami gcov-os formátumban menti a lefedettséget.
  • make main.c.gcov: Az aktuális lefedettséggel annotált forráskód (és mellesleg összegző statisztikát is csinál).

Készíts teszteseteket a main.c programhoz, hogy minél nagyobb utasítás-lefedettséget érj el!


Utolsó frissítés: 2021-11-15 11:23:10