Testy strukturalne - czyli testy białej skrzynki

Tagi: 0

Co pierwsze przychodzi wam na myśl, gdy słyszycie o białej skrzynce? Większość z nas raczej nie kojarzy tego od razu z testowaniem oprogramowania. A zdecydowanie nie chodzi nam o ostatni hit domowych aranżacji 😉 . Dzięki naszemu dzisiejszemu postowi zapoznacie się z definicją testów strukturalnych, czyli tak zwanych testów biało-skrzynkowych. Dowiedziecie się, jakie są ich wady i zalety oraz w jaki sposób się je wykorzystuje.

Czym jest testowanie strukturalne?

Zacznijmy od podstaw. Testowanie można podzielić na dwa rodzaje:




Czarnej Skrzynki (Black Box; testy funkcjonalne) – osoba testująca nie posiada dostępu do kodu źródłowego ani informacji na temat budowy programu, który testuje. Dzięki temu skupia się na testowaniu założonych funkcjonalności oraz czy program spełnia je zgodnie z dokumentacją. Testy czarnej skrzynki posiadają znacznie większą szansę wykrycia błędów, jednak nie dają możliwości zweryfikowania ich źródła. Reasumując – testujemy oprogramowanie z punktu widzenia użytkownika.

Białej Skrzynki (White Box; testy strukturalne) – czyli te, o których będziemy mówić dzisiaj. Polegają na testowaniu oprogramowania z uwzględnieniem jego wewnętrznej struktury. Ta technika jest używana zarówno przez testerów, jak i programistów. Pozwala im zrozumieć, które linijki kodu są wykonane prawidłowo, a które nie. Wymagana jest do tego podstawowa wiedza na temat programowania. Pomocną czynnością jest wprowadzanie do programu dodatkowego kodu, którego celem będzie dokładniejsze przetestowanie danej funkcjonalności.

Techniki testowania metodą białej skrzynki

Testowanie metodą białej skrzynki możemy podzielić na poniższe techniki:

  • Unit Testing – testowanie jednostkowe (o którym więcej możecie przeczytać w jednym z naszych wpisów tutaj) polega na badaniu wyłącznie części aplikacji nazywanej jednostką. To indywidualne i niezależne fragmenty kodu do analizowania jego głównych poleceń i założeń. Testowanie jednostek może być wykonywane manualnie, jednak najczęściej jest automatyzowane.
  • Static & dynamic Analysis – analiza statyczna to badanie kodu źródłowego (lub kodu po kompilacji) poprzez analizę przepływu danych. Polega to na skanowaniu jednego lub więcej plików źródłowych i prezentacji zeskanowanego źródła w celu jego analizy. Narzędzia do tego służące mogą wykrywać problemy takie jak: wycieki pamięci, przepełnienie buforowania czy problemy ze współbieżnością. Najpopularniejszym ogólnodostępnym narzędziem w tej kategorii jest program SplintAnaliza dynamiczna zaś to badanie programu w czasie jego wykonywania. Podobnie jak w przypadku analizy statycznej, wykorzystuje szereg technik jako funkcję danych potrzebnych do wyodrębnienia. Można użyć jej do zidentyfikowania pokrycia kodu lub podjętych ścieżek w danej aplikacji.
  • Statement Coverage – pokrycie kodu, znane również jako pokrycie linii lub segmentu. Określa, które fragmenty programu pokrywają się ze sobą, czyli zostały wywołane przez zestaw testowy oraz te, których nie udało się wywołać. Statement Coverage pozwala w prosty sposób zidentyfikować obszar niewytestowanego kodu.
  • Branch Coverage – w języku programowania jest zbliżony do instrukcji IF, która posiada dwa „odgałęzienia”: Prawdę i Fałsz (True and False). W zasięgu gałęzi (zwanej również “zasięgiem decyzji”) sprawdza się, czy każde z nich jest wykonywane co najmniej raz. W przypadku instrukcji IF będą występowały dwa warunki, jeden do sprawdzenia prawdziwego oddziału i pozostałe, by sprawdzić te fałszywe. Ta metoda zapewnia, że po uruchomieniu każda gałąź z decyzyjnego punktu widzenia jest wykonywana.
  • Security Testing – odmiana testowania, która zapewnia, że dany system i aplikacje są wolne od jakichkolwiek luk powodujących straty. Testowanie polega na znalezieniu wszystkich możliwych słabości systemu, które mogą doprowadzić do utraty istotnych informacji. Celem testów bezpieczeństwa jest identyfikacja zagrożeń w systemie i pomiar potencjalnych ryzyk. Pomagają programistom w rozwiązywaniu problemów za pomocą kodowania.
  • Mutation Testing – czyli testy mutacyjne, będące rodzajem testowania, w którym mutujemy (zmieniamy) niektóre stwierdzenia w kodzie źródłowym i sprawdzamy, czy przypadki testowe są w stanie znaleźć błędy. Celem testów mutacyjnych jest ocena jakości przypadków testowych, które powinny być na tyle silne, aby nie ulec zmianie (mutacji). Ta metoda jest również nazywana strategią testowania opartą na usterkach, ponieważ wiąże się ona z celowym tworzeniem błędów w programie. Stosowana jest w językach takich jak Java i XML.

Wady i zalety testów strukturalnych

White Box jest obecnie jedną z dwóch najczęściej stosowanych metod testowania. Posiada kilka kluczowych zalet:

  • pozwala lepiej zoptymalizować kod aplikacji
  • jest łatwiejsza do zautomatyzowania
  • umożliwia dokładne określenie przyczyny i miejsca, w którym znajduje się błąd
  • ułatwia określenie typów danych wejściowych i wyjściowych ze względu na wymaganą znajomość struktury kodu pomaga dokładniej i efektywniej przetestować aplikację

Jednak pomimo tych zalet, testowanie strukturalne nie jest doskonałe. Ma również swoje wady:

  • testy koncentrują się na istniejącym oprogramowaniu a brakujące funkcje mogą nie zostać wykryte
  • testowanie wymaga znajomości programowania
  • w niektórych przypadkach nie jest realne, aby móc przetestować każdy istniejący warunek aplikacji

Mamy nadzieję, że nasz post uporządkował wam w głowach wiedzę na temat testów strukturalnych, a biała skrzynka nie kojarzy się już tylko z kwiatową rabatą lub nowoczesnym meblem 🙂 Zapraszamy do naszych kolejnych postów edukacyjnych, które pojawią się już wkrótce!

DYSKUSJA

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

wypróbuj

Zarejestruj się i zacznij działać!