Różnica między testowaniem białoskrzynkowym a czarnoskrzynkowym
Testowanie czarnoskrzynkowe ocenia funkcjonalność oprogramowania bez znajomości jego wewnętrznego kodu, koncentrując się na danych wejściowych i wyjściowych. Testowanie białoskrzynkowe analizuje wewnętrzną strukturę i logikę kodu, wymagając dostępu do kodu źródłowego.
Testowanie czarnoskrzynkowe jest zazwyczaj przeprowadzane przez zespoły QA w celu sprawdzenia funkcjonalności widocznej dla użytkownika, z wykorzystaniem technik takich jak podział na klasy równoważności i analiza wartości brzegowych.
Natomiast testowanie białoskrzynkowe jest przeprowadzane przez programistów w celu zapewnienia poprawności kodu i pokrycia testami, z zastosowaniem metod takich jak pokrycie instrukcji i pokrycie gałęzi.
Połączenie obu podejść zwiększa pokrycie testami i jakość oprogramowania.
W tym artykule omówię oba rodzaje testowania, wyjaśniając, czym są, jakie są kluczowe różnice między nimi, jak się je wykorzystuje, a także jakie są ich zalety i wady.
Czym jest testowanie czarnoskrzynkowe?
Testowanie czarnoskrzynkowe, nazywane czasami testowaniem behawioralnym, to rodzaj testowania oprogramowania, w którym tester nie ma dostępu do kodu źródłowego testowanego systemu. Zwykle jest przeprowadzane przez zespół zapewnienia jakości i nie wymaga zaawansowanych umiejętności technicznych, takich jak programowanie.
W testowaniu czarnoskrzynkowym przypadki testowe są tworzone na podstawie danych wejściowych i wyjściowych AUT, zgodnie ze specyfikacją wymagań.
Najważniejsze techniki testowania czarnoskrzynkowego to:
- Podział na klasy równoważności: dane wejściowe są kategoryzowane w klasy (lub partycje) równoważności, co oznacza, że każda wartość należąca do danej klasy wygeneruje taki sam wynik. Aby uzyskać dobre pokrycie testami, wystarczy jeden przypadek testowy dla każdej klasy równoważności.
Przykład: Jeśli pole akceptuje wartości całkowite od 1 do 10, prawidłowa klasa zawiera wszystkie liczby od 1 do 10, a dwie nieprawidłowe klasy obejmują liczby mniejsze niż 1 i liczby większe niż 10. Oznacza to, że łącznie 3 przypadki testowe wystarczą do pokrycia wszystkich możliwych klas.
- Analiza wartości brzegowych: testowane są skrajne wartości wejściowe, które z większym prawdopodobieństwem mogą powodować defekty.
Przykład: Korzystając z tego samego pola co powyżej, prawidłowe wartości brzegowe to 1 i 10, a nieprawidłowe to 0 i 11.
- Testowanie za pomocą tabeli decyzyjnej: zależności między danymi wejściowymi i wyjściowymi są przedstawiane w formie tabeli. Tabela zazwyczaj zawiera kolumny dla warunków i wiersze dla różnych kombinacji. Każdy wiersz powinien mieć odpowiadający mu przypadek testowy.
Przykład: Ta technika sprawdza się w bardziej złożonych scenariuszach. Załóżmy, że mamy wniosek o kredyt bankowy z następującymi warunkami:
| Warunki | Wiek równy lub większy niż 25 lat | Dochód równy lub większy niż 50000 USD | Wynik |
|---|---|---|---|
| Warunki1 | Wiek równy lub większy niż 25 latPrawda | Dochód równy lub większy niż 50000 USDPrawda | WynikZatwierdź wniosek |
| Warunki2 | Wiek równy lub większy niż 25 latPrawda | Dochód równy lub większy niż 50000 USDFałsz | WynikOdrzuć wniosek |
| Warunki3 | Wiek równy lub większy niż 25 latFałsz | Dochód równy lub większy niż 50000 USDFałsz | WynikPrzekaż kierownikowi |
| Warunki4 | Wiek równy lub większy niż 25 latFałsz | Dochód równy lub większy niż 50000 USDFałsz | WynikOdrzuć wniosek |
Mamy cztery możliwe kombinacje, dlatego należy wykonać cztery przypadki testowe.
- Testowanie przejść między stanami: weryfikuje zachowanie systemu podczas przechodzenia między różnymi stanami.
Przykład: Załóżmy, że testujesz prosty system śledzenia błędów. Diagram statusów wygląda następująco:

Dostępne przejścia to:
- Z Nowy do W toku
- Z W toku do W testowaniu
- Z W testowaniu do Zamknięty
- Z W testowaniu z powrotem do W toku
Aby uzyskać pełne pokrycie, należy upewnić się, że każde przejście i każdy status zostały przetestowane co najmniej raz.
- Testowanie oparte na doświadczeniu, takie jak testowanie eksploracyjne. Ten rodzaj testowania polega na wykonywaniu testów na podstawie doświadczenia testera z danym systemem lub podobnymi systemami oraz znajomości zachowania aplikacji.
Przykład: Wyobraź sobie, że testujesz nową aplikację społecznościową. Twoim celem jest zbadanie aplikacji w celu znalezienia wszelkich defektów lub problemów, które wymagają rozwiązania.
Podczas testowania eksploracyjnego możesz wykonać następujące działania:
- Założyć nowe konto
- Przesłać zdjęcie profilowe
- Napisać post
- Wyświetlić własny profil
- Wyszukać znajomych
- Wysłać zaproszenie do znajomych
- Zaakceptować zaproszenie do znajomych
- Polubić post i skomentować go
Podczas testowania eksploracyjnego wykonywałbyś te działania w sposób nieustrukturyzowany, bez wcześniej ustalonego planu. Skupiałbyś się na znalezieniu defektów lub obszarów wymagających ulepszenia w aplikacji.
Jeśli chcesz dowiedzieć się więcej o testowaniu eksploracyjnym, bardzo przydatna okazała się dla mnie książka Elisabeth Hendrickson Explore It!.
Have an account? Log In
Zalety i wady testowania czarnoskrzynkowego
Oczywiście testowanie czarnoskrzynkowe ma zarówno zalety, jak i wady.
Zalety:
- Jest mniej czasochłonne
- Kontrola nad przypadkami testowymi jest ograniczona
- Testowanie niektórych określonych scenariuszy może być trudne
- Ograniczone informacje na temat głównej przyczyny niepowodzenia
- Może pomijać niektóre błędy
- Ograniczone możliwości testowania wydajności i skalowalności
Wady:
- Przygotowanie środowiska testowego i wykonanie testów może być bardziej czasochłonne
- Kontrola nad przypadkami testowymi jest ograniczona
- Testowanie niektórych określonych scenariuszy może być trudne
- Ograniczone informacje na temat głównej przyczyny niepowodzenia
- Może pomijać niektóre błędy
- Ograniczone możliwości testowania wydajności i skalowalności
Kiedy stosować testowanie czarnoskrzynkowe?
Narzędzia do testowania czarnoskrzynkowego mogą być używane na każdym poziomie testowania. Lepiej jednak stosować je na wyższym poziomie, a testowanie na niższym poziomie pozostawić testowaniu białoskrzynkowemu. Oznacza to, że chociaż można je stosować do testowania na poziomie jednostkowym, metodologia czarnoskrzynkowa jest bardziej odpowiednia do testowania systemowego i testów akceptacyjnych.
Techniki czarnoskrzynkowe można stosować do testów funkcjonalnych i niefunkcjonalnych, takich jak testowanie wydajności, użyteczności i dostępności.
Należy je również stosować do nowo zaimplementowanych funkcjonalności, a istniejące przypadki testowe zidentyfikowane za pomocą tych technik można wykonywać podczas testów regresji.
Czym jest testowanie białoskrzynkowe?
Testowanie białoskrzynkowe (czasami nazywane testowaniem w przezroczystej skrzynce, testowaniem w szklanej skrzynce, testowaniem opartym na kodzie lub testowaniem strukturalnym) to metoda testowania koncentrująca się na wewnętrznym działaniu UAT.
Podejścia do testowania białoskrzynkowego:
- Pokrycie instrukcji: wszystkie instrukcje kodu (wiersze kodu) są wykonywane co najmniej raz na poziomie kodu źródłowego. Wzór służący do obliczenia pokrycia to:
Pokrycie instrukcji = (Liczba wykonanych instrukcji / Całkowita liczba instrukcji w kodzie źródłowym) * 100
Przykład: Załóżmy, że mamy następujący kod:
if(condition1 or condition2)) {
print(“test 1 OK”)
}
else {
if(condition3) {
print(“test 2 OK”)
}
}
- Aby uzyskać pełne pokrycie instrukcji, musisz przejść przez każdy wiersz kodu co najmniej raz. Oznacza to, że konieczna jest pewna liczba testów:
- condition1=true condition2=false, co spowoduje wyświetlenie „test 1 OK”
- condition1=false, condition2=false i condition3=true, co spowoduje wyświetlenie „test 2 OK”.
- Pokrycie rozgałęzień: w tej technice scenariusze testowe obejmują wszystkie rozgałęzienia grafu przepływu sterowania. Każde możliwe wyjście warunku — prawdziwe i fałszywe — jest uwzględniane co najmniej raz. Wzór używany do obliczania pokrycia rozgałęzień to:
- Pokrycie gałęzi = (Liczba wykonanych gałęzi / Łączna liczba gałęzi w kodzie) * 100
- Przykład: W przypadku tego samego kodu, mimo że pokrycie instrukcji wynosi 100%, nie wszystkie możliwe gałęzie są pokryte. Potrzebny będzie dodatkowy test, w którym:
- condition1=false, condition2=false, condition3=false - w ten sposób pokrywamy również ścieżkę fałszu w drugim warunku if. W tym przypadku testowym nic nie powinno zostać wyświetlone,
- Pokrycie warunków: kompleksowa technika, w której testowane są wszystkie ścieżki. Zapewnia, że każda ścieżka aplikacji jest objęta co najmniej jednym testem. Jest szczególnie przydatna w przypadku złożonych aplikacji. Przykład: W przypadku powyższego kodu potrzebujemy jeszcze jednego testu, aby uzyskać pełne pokrycie warunków:
- condition1=false, condition1=true, co da taki sam rezultat jak pierwszy test, ale obejmie inny warunek prowadzący do wyniku.
Zalety i wady testowania białoskrzynkowego
Przyjrzyjmy się zaletom i wadom testowania białoskrzynkowego.
Zalety:
- Możliwość wczesnego wykrywania błędów w cyklu życia oprogramowania
- Testowanie wewnętrznej struktury kodu.
- Testowanie pokrycia kodu i logiki.
- Lepsza znajomość bazy kodu.
- Możliwość wykorzystania w testach wydajności i skalowalności.
Wady:
- Lepsze działanie na niższym poziomie testowania
- Wymaga dobrej znajomości języka programowania systemu
- Ograniczone testowanie z perspektywy użytkownika końcowego
- Może pomijać scenariusze z życia codziennego
Kiedy stosować testowanie białoskrzynkowe
Testy białoskrzynkowe najlepiej sprawdzają się na niższych poziomach, takich jak testy jednostkowe i integracyjne. Pomaga to wcześnie identyfikować błędy i defekty w procesie tworzenia oprogramowania. Dobrym pomysłem jest wykonywanie tych testów po każdym wdrożeniu, szczególnie podczas pracy w środowisku CI/CD.
Testowanie białoskrzynkowe może służyć do testowania funkcjonalności, ale można je również wykorzystać do wykrywania luk w systemie - czego trudno byłoby dokonać za pomocą technik testowania czarnoskrzynkowego.
More Articles
Testowanie czarnoskrzynkowe a białoskrzynkowe: podsumowanie
Przyjrzyjmy się najważniejszym różnicom między testowaniem czarnoskrzynkowym a białoskrzynkowym:
| Testowanie czarnoskrzynkowe | Testowanie białoskrzynkowe |
| Nie jest wymagana znajomość wewnętrznego działania systemu. | Opiera się na dobrej znajomości kodu systemu. |
| Najczęściej wykonywane przez zespół QA. | Zwykle wykonywane przez programistów. |
| Koncentruje się na zachowaniu systemu. | Koncentruje się na logice i implementacji oprogramowania. |
| Techniki obejmują: Podział na klasy równoważności Analizę wartości brzegowych Tabelę decyzyjną Przejścia stanów | Techniki obejmują: Pokrycie instrukcji Pokrycie gałęzi Pokrycie warunków |
| Scenariusze mogą być wykonywane ręcznie lub automatycznie. | Zwykle realizowane za pomocą automatyzacji testów. |
| Lepiej dostosowane do wyższych poziomów testowania. | Najlepiej sprawdza się na niższych poziomach testowania. |
| Testowanie z perspektywy użytkowników końcowych. | Testowanie z perspektywy technicznej. |
Nie zapominajmy jednak, że choć oba podejścia mają zalety i wady, powinniśmy stosować oba w procesie testowania, aby uzyskać dobre pokrycie testami i kodem oraz znaleźć najważniejsze defekty.
Wnioski
Testowanie czarnoskrzynkowe i białoskrzynkowe to dwa różne podejścia, które sprawdzają się przy różnych potrzebach w procesie tworzenia oprogramowania. Testowanie białoskrzynkowe jest najczęściej wykonywane przez programistów i stosowane na niższych poziomach testowania, natomiast testowanie czarnoskrzynkowe jest wykonywane przez zespół QA na wyższych poziomach. Najlepiej sprawdzają się jednak, gdy są stosowane razem.
Jeśli spodobał Ci się ten artykuł, zapisz się do newslettera, aby otrzymywać wszystkie nowo opublikowane artykuły dotyczące testowania i zapewniania jakości!


