Samouczek dotyczący pokrycia kodu: testowanie oddziałów, instrukcji i decyzji
Co to jest pokrycie kodu?
Pokrycie kodu to miara opisująca stopień, w jakim kod źródłowy programu został przetestowany. Jest to jedna z form testowania white box, która znajduje obszary programu nieprzetestowane przez zestaw przypadków testowych. Tworzy również pewne przypadki testowe w celu zwiększenia pokrycia i określenia ilościowej miary pokrycia kodu.
W większości przypadków system pokrycia kodu zbiera informacje o działającym programie. Łączy to również z informacjami o kodzie źródłowym, aby wygenerować raport na temat pokrycia kodu zestawu testów.
Dlaczego warto korzystać z testów pokrycia kodu?
Oto kilka głównych powodów stosowania pokrycia kodu:
- Pomaga zmierzyć efektywność wdrożenia testów
- Oferuje pomiar ilościowy.
- Określa stopień, w jakim kod źródłowy został przetestowany.
Metody pokrycia kodu
Poniżej przedstawiono główne metody pokrycia kodu
- Zasięg oświadczenia
- Zakres decyzji
- Zasięg oddziałów
- Toggle Pokrycie
- Pokrycie FSM
Zasięg oświadczenia
Zasięg oświadczenia jest techniką testowania typu white box, w której wszystkie wykonywalne polecenia w kodzie źródłowym są wykonywane przynajmniej raz. Jest ona używana do obliczania liczby poleceń w kodzie źródłowym, które zostały wykonane. Głównym celem Statement Coverage jest pokrycie wszystkich możliwych ścieżek, linii i poleceń w kodzie źródłowym.
Pokrycie instrukcji służy do wyprowadzenia scenariusza na podstawie struktury testowanego kodu.
In Biały Box Testy, tester koncentruje się na działaniu oprogramowania. Innymi słowy, tester będzie koncentrował się na wewnętrznej pracy kodu źródłowego w zakresie wykresów przepływu sterowania lub schematów przepływu.
Generalnie w każdym oprogramowaniu, jeśli spojrzymy na kod źródłowy, znajdziemy szeroką gamę elementów, takich jak operatory, funkcje, pętle, wyjątkowe procedury obsługi itd. Na podstawie danych wejściowych do programu, niektóre polecenia kodu mogą nie zostać wykonane. Celem pokrycia polecenia jest pokrycie wszystkich możliwych ścieżek, wierszy i poleceń w kodzie.
Rozumiemy to na przykładzie, jak obliczyć pokrycie zestawienia.
Scenariusz obliczenia Pokrycia Zestawienia dla danego kodu źródłowego. W tym przypadku bierzemy dwa różne scenariusze, aby sprawdzić procent pokrycia instrukcji dla każdego scenariusza.
Kod źródłowy:
Prints (int a, int b) { ------------ Printsum is a function
int result = a+ b;
If (result> 0)
Print ("Positive", result)
Else
Print ("Negative", result)
} ----------- End of the source code
Scenariusz 1:
Jeśli A = 3, B = 9Instrukcje zaznaczone kolorem żółtym to te, które są realizowane zgodnie ze scenariuszem
Liczba wykonanych instrukcji = 5, Całkowita liczba instrukcji = 7
Pokrycie zestawienia: 5/7 = 71%
Podobnie zobaczymy scenariusz 2,
Scenariusz 2:
Jeśli A = -3, B = -9
Instrukcje zaznaczone kolorem żółtym to te, które są realizowane zgodnie ze scenariuszem.
Liczba wykonanych instrukcji = 6
Całkowita liczba stwierdzeń = 7
Pokrycie zestawienia: 6/7 = 85%
Ale ogólnie rzecz biorąc, wszystkie stwierdzenia są objęte obydwoma scenariuszami. Możemy zatem stwierdzić, że ogólne pokrycie stwierdzeń wynosi 100%.
Co obejmuje ubezpieczenie oświadczenia?
- Niewykorzystane wyciągi
- Martwy kod
- Nieużywane gałęzie
- Brakujące oświadczenia
Testowanie pokrycia decyzji
Zakres decyzji jest techniką testowania typu white box, która raportuje prawdziwe lub fałszywe wyniki każdego wyrażenia boolowskiego kodu źródłowego. Celem testowania pokrycia decyzji jest pokrycie i walidacja całego dostępnego kodu źródłowego poprzez sprawdzenie i zapewnienie, że każda gałąź każdego możliwego punktu decyzyjnego zostanie wykonana przynajmniej raz.
W tym typie pokrycia wyrażenia mogą stać się złożone, co utrudnia osiągnięcie 100% pokrycia. Dlatego do raportowania tej metryki stosuje się różne metody. Te metody nadają priorytet najbardziej krytycznym kombinacjom. Chociaż jest to podobne do pokrycia decyzji, zapewnia większą wrażliwość na przepływ sterowania.
Przykład pokrycia decyzji
Rozważ następujący kod-
Demo(int a) {
If (a> 5)
a=a*3
Print (a)
}
Scenariusz 1:
Wartość a wynosi 2
Kod zaznaczony na żółto zostanie wykonany. Tutaj sprawdzany jest wynik „Nie” decyzji Jeśli (a>5).
Pokrycie decyzji = 50%
Scenariusz 2:
Wartość a wynosi 6
Kod zaznaczony na żółto zostanie wykonany. Tutaj sprawdzany jest wynik „Tak” decyzji Jeśli (a>5).
Pokrycie decyzji = 50%
| Przypadek testowy | Wartość A | Wydajność | Zakres decyzji |
|---|---|---|---|
| 1 | 2 | 2 | 50% |
| 2 | 6 | 18 | 50% |
Testowanie zasięgu oddziałów
Zasięg oddziałów jest metodą testowania typu white box, w której testowany jest każdy wynik modułu kodu (instrukcji lub pętli). Celem pokrycia gałęzi jest zapewnienie, że każdy warunek decyzyjny z każdej gałęzi zostanie wykonany przynajmniej raz. Pomaga mierzyć ułamki niezależnych segmentów kodu i znajdować sekcje bez gałęzi.
Na przykład, jeśli wyniki są binarne, należy przetestować zarówno wyniki Prawda, jak i Fałsz.
Wzór na obliczenie zasięgu oddziału:
Przykład zasięgu oddziału
Aby poznać zasięg oddziałów, rozważmy ten sam przykład, który wykorzystaliśmy wcześniej
Rozważ następujący kod-
Demo(int a) {
If (a> 5)
a=a*3
Print (a)
}
Ubezpieczenie oddziałów uwzględnia również oddział bezwarunkowy
| Przypadek testowy | Wartość A | Wydajność | Zakres decyzji | Zasięg oddziałów |
|---|---|---|---|---|
| 1 | 2 | 2 | 50% | 33% |
| 2 | 6 | 18 | 50% | 67% |
Zalety zasięgu oddziału:
Testowanie pokrycia gałęzi zapewnia następujące korzyści:
- Umożliwia sprawdzenie poprawności wszystkich gałęzi w kodzie
- Pomaga upewnić się, że żadne rozgałęzienie nie doprowadzi do żadnych nieprawidłowości w działaniu programu
- Metoda pokrycia rozgałęzień eliminuje problemy, które powstają w wyniku testowania pokrycia wyciągów
- Pozwala znaleźć te obszary, które nie są badane innymi metodami testowymi
- Pozwala znaleźć ilościową miarę pokrycia kodu
- Pokrycie gałęzi ignoruje gałęzie wewnątrz wyrażeń logicznych
Testowanie pokrycia stanu
Pokrycie stanu lub pokrycie wyrażenia jest metodą testowania używaną do testowania i oceniania zmiennych lub podwyrażeń w instrukcji warunkowej. Celem pokrycia warunku jest sprawdzenie indywidualnych wyników dla każdego warunku logicznego. Pokrycie warunku oferuje lepszą wrażliwość na przepływ sterowania niż pokrycie decyzji. W tym pokryciu rozważane są tylko wyrażenia z logicznymi operandami.
Na przykład, jeśli wyrażenie zawiera operacje boolowskie takie jak AND, OR, XOR, co oznacza całkowitą liczbę możliwości.
Pokrycie warunków nie gwarantuje pełnego pokrycia decyzji.
Wzór do obliczenia pokrycia stanu:
Przykład:
Dla powyższego wyrażenia mamy 4 możliwe kombinacje
- TT
- FF
- TF
- FT
Rozważ następujące dane wejściowe
| X = 3
Y=4 |
(X | TRUE | Pokrycie stanu wynosi ¼ = 25% |
| A = 3
B = 4 |
(a>b) | FAŁSZYWY |
Skończony zasięg maszyny stanowej
Pokrycie skończonej maszyny stanowej jest z pewnością najbardziej złożonym typem metody pokrycia kodu. Dzieje się tak, ponieważ działa ona na zachowaniu projektu. W tej metodzie pokrycia należy sprawdzić, ile stanów specyficznych dla czasu jest odwiedzanych, tranzytowanych. Sprawdza również, ile sekwencji jest zawartych w skończonej maszynie stanowej.
Jaki rodzaj pokrycia kodu wybrać
To z pewnością najtrudniejsza odpowiedź. Aby wybrać metodę pokrycia, tester musi sprawdzić, czy
- testowany kod zawiera jedną lub wiele niewykrytych defektów
- koszt potencjalnej kary
- koszt utraconej reputacji
- koszty utraconej sprzedaży itp.
Im większe prawdopodobieństwo, że wady spowodują kosztowne awarie produkcyjne, tym poważniejszy poziom ochrony należy wybrać.
Pokrycie kodu a pokrycie funkcjonalności
| Pokrycie kodu | Pokrycie funkcjonalne |
|---|---|
| Pokrycie kodu informuje, jak dobrze kod źródłowy został przetestowany na stanowisku testowym. | Pokrycie funkcjonalne mierzy, jak dobrze funkcjonalność projektu została uwzględniona na Twoim stanowisku testowym. |
| Nigdy nie używaj specyfikacji projektu | Użyj specyfikacji projektu |
| Wykonane przez programistów | Wykonane przez testerów |
Narzędzia pokrycia kodu
Oto lista ważnych narzędzi do obsługi kodu:
| Nazwa narzędzia | OPIS |
|---|---|
| Cobertura | Jest to narzędzie do obsługi kodu open source. Mierzy pokrycie testów poprzez oprzyrządowanie bazy kodu i analizuje, które wiersze kodu są wykonywane, a które nie, podczas działania zestawu testów. |
| Koniczyna | Clover skraca także czas testowania, uruchamiając wyłącznie testy obejmujące kod aplikacji, który został zmodyfikowany od czasu poprzedniej kompilacji. |
| Partner deweloperski | DevPartner umożliwia programistom analizę Java kod dla jakości i złożoności kodu. |
| Emma | EMMA obsługuje pokrycie klas, metod, linii i bloków podstawowych, zagregowany plik źródłowy, poziomy klas i metod. |
| Kalistick | Kalistick to aplikacja strony trzeciej, która analizuje kody z różnych perspektyw. |
| CoView i CoAnt | Oprogramowanie do kodowania to narzędzie do pokrycia kodu w zakresie metryk, tworzenia próbnych obiektów, testowalności kodu, pokrycia ścieżek i gałęzi itp. |
| Celny strzał w dziesiątkę C++ | BulseyeCoverage to narzędzie do pokrycia kodu C++ i C. |
| Echosonda | Sonar to narzędzie do pokrycia otwartego kodu, które pomaga zarządzać jakością kodu. |
Zalety i wady korzystania z pokrycia kodu
| Zalety pokrycia kodu | Wady pokrycia kodu |
|---|---|
| Pomocne w ocenie ilościowej miary pokrycia kodu | Nawet jeśli w projekcie nie zaimplementowano żadnej konkretnej funkcji, pokrycie kodu nadal wynosi 100%. |
| Umożliwia tworzenie dodatkowych przypadków testowych w celu zwiększenia zasięgu | Nie da się stwierdzić, czy za pomocą pokrycia kodu przetestowaliśmy wszystkie możliwe wartości cechy |
| Pozwala znaleźć obszary programu, które nie są objęte zestawem przypadków testowych | Pokrycie kodu również nie mówi, ile i jak dobrze uwzględniłeś swoją logikę |
| W przypadku, gdy określona funkcja nie została zaimplementowana lub nie jest uwzględniona w specyfikacji, wówczas techniki oparte na strukturach nie mogą znaleźć tego problemu. |
Podsumowanie
- Pokrycie kodu to miara opisująca stopień przetestowania kodu źródłowego programu
- Pomaga zmierzyć efektywność wdrożenia testów
- Pięć metod pokrycia kodu to 1.) Pokrycie instrukcji 2.) Pokrycie stanu 3) Pokrycie oddziału 4) Toggle Ubezpieczenie 5) Ubezpieczenie FSM
- Pokrycie instrukcji polega na co najmniej jednokrotnym wykonaniu wszystkich wykonywalnych instrukcji w kodzie źródłowym
- Pokrycie decyzji raportuje prawdziwe lub fałszywe wyniki każdego wyrażenia logicznego
- W zasięgu gałęzi testowany jest każdy wynik modułu kodu
- Warunek pokaże, w jaki sposób oceniane są zmienne lub podwyrażenia w instrukcji warunkowej
- Pokrycie skończonej maszyny stanowej jest z pewnością najbardziej złożonym typem metody pokrycia kodu
- Aby wybrać metodę pokrycia, tester musi sprawdzić koszt potencjalnej kary, utratę reputacji, utratę sprzedaży itp.
- Pokrycie kodu informuje, jak dobrze kod źródłowy został wykorzystany na stanowisku testowym, natomiast pokrycie funkcjonalne mierzy, jak dobrze uwzględniono funkcjonalność projektu
- Cobertura, JTest, Clover, Emma, Kalistick to kilka ważnych narzędzi do pokrywania kodu
- Pokrycie kodu umożliwia tworzenie dodatkowych przypadków testowych w celu zwiększenia pokrycia
- Pokrycie kodu nie pomaga określić, czy przetestowaliśmy wszystkie możliwe wartości funkcji













