key successful unit testing how developers test their own code
Testerzy czarnej skrzynki nie obchodzą mnie testy jednostkowe. Ich głównym celem jest sprawdzenie aplikacji pod kątem wymagań bez wchodzenia w szczegóły implementacji.
Ale jako ciekawostka lub Myślenie nieszablonowe , czy kiedykolwiek zastanawiałeś się, jak programiści testują swój kod? Jakiej metody używają do testowania przed udostępnieniem kodu do testów? Jakie znaczenie ma dev-testing w zwinnym procesie? Odpowiedzią na to wszystko są testy jednostkowe. Chcę Cię nauczyć, jak ważne jest testowanie jednostkowe, aby zespoły programistyczne i testujące mogły współpracować przy projektowaniu, testowaniu i wydawaniu doskonałej aplikacji.
Kto wie, że w przyszłości niektórzy z was mogą nawet przejść na testowanie białoskrzynkowe i zastosować te techniki walidacji i ulepszania kodu!
Czego się nauczysz:
Co to jest testowanie jednostkowe?
Testowanie jednostkowe nie jest nową koncepcją. Jest tam od pierwszych dni programowania. Zwykle programiści, a czasami Testery typu white box pisz testy jednostkowe w celu poprawy jakości kodu poprzez weryfikację każdej jednostki kodu używanej do implementacji wymagań funkcjonalnych (zwanych również testami sterującymi rozwojem TDD lub test-first development).
Większość z nas może znać klasyczną definicję -
„Testowanie jednostkowe to metoda sprawdzania najmniejszego fragmentu możliwego do przetestowania kodu pod kątem jego przeznaczenia”. Jeśli cel lub wymaganie nie powiodło się, test jednostkowy nie powiódł się.
W prostych słowach oznacza to - napisanie fragmentu kodu (testu jednostkowego) w celu zweryfikowania kodu (jednostki) napisanego na potrzeby implementacji.
Testowanie jednostkowe w SDLC
W przypadku testów jednostkowych programiści używają testów ręcznych lub automatycznych, aby upewnić się, że każda jednostka w oprogramowaniu spełnia wymagania klienta. Ta jednostka może być indywidualną funkcją, obiektem, metodą, procedurą lub modułem w testowanym oprogramowaniu.
Pisanie testów jednostkowych w celu przetestowania poszczególnych jednostek ułatwia pisanie kompleksowych testów, ponieważ wszystkie jednostki są złożone. Podczas tworzenia oprogramowania jest to pierwszy poziom testowania.
Znaczenie pisania testów jednostkowych
Testy jednostkowe służą do projektowania niezawodnych komponentów oprogramowania, które pomagają w utrzymaniu kodu i eliminowaniu problemów w jednostkach kodu. Wszyscy wiemy, jak ważne jest znajdowanie i naprawianie usterek na wczesnym etapie cyklu tworzenia oprogramowania. To badanie służy temu samemu celowi.
Jest integralną częścią zwinnego procesu tworzenia oprogramowania. Kiedy zestaw testów jednostkowych uruchamiania kompilacji nocnej powinien zostać uruchomiony i powinien zostać wygenerowany raport. Jeśli którykolwiek z testów jednostkowych nie powiódł się, zespół ds. Kontroli jakości nie powinien akceptować tej kompilacji do weryfikacji.
Gdybyśmy traktowali to jako standardowy proces, wiele defektów zostałoby wychwyconych na wczesnym etapie rozwoju, oszczędzając dużo czasu na testowanie.
Wiem, że wielu programistów nie lubi pisać testów jednostkowych. Ignorują lub piszą złe przypadki testów jednostkowych z powodu napiętego harmonogramu lub braku powagi (tak, piszą puste testy jednostkowe, więc 100% z nich przechodzi pomyślnie ;-)). Ważne jest, aby pisać dobre testy jednostkowe lub nie pisać ich wcale. Jeszcze ważniejsze jest zapewnienie wystarczająco dużo czasu i sprzyjające środowisko dla realnych korzyści.
Metody testowania jednostkowego
Można to wykonać na 2 sposoby:
- Testowanie ręczne
- Testowanie automatyczne
W Testowanie ręczne , tester ręcznie wykonuje przypadki testowe bez użycia narzędzi do automatyzacji. Tutaj każdy etap testu jest wykonywany ręcznie. Testowanie ręczne jest żmudne, zwłaszcza w przypadku testów, które są powtarzalne i wymagają więcej wysiłku w celu utworzenia i wykonania przypadków testowych. Testowanie ręczne nie wymaga znajomości żadnego narzędzia testowego.
Faktem jest, że 100% automatyzacji nie jest możliwe i dlatego zawsze będzie wykonywany pewien poziom testów ręcznych.
W Testowanie automatyczne, narzędzia do automatyzacji testów oprogramowania służą do automatyzacji testów / przypadków testowych. Narzędzie do automatyzacji może rejestrować i zapisywać test, a także może być odtwarzany tyle razy, ile potrzeba, bez dalszej interwencji człowieka.
Narzędzia te mogą nawet wprowadzać dane testowe do testowanego systemu, a także porównywać oczekiwane wyniki z rzeczywistymi wynikami i automatycznie generować raporty. Jednak początkowy koszt konfiguracji narzędzi do automatyzacji testów jest wysoki.
Techniki w testowaniu jednostkowym
# 1) Testowanie białoskrzynkowe:
W testach białoskrzynkowych tester zna wewnętrzną strukturę oprogramowania, w tym kod, i może przetestować go pod kątem projektu i wymagań. Dlatego testowanie białoskrzynkowe jest również znane jako przejrzyste testy .
# 2) Testowanie czarnoskrzynkowe:
W testach czarnoskrzynkowych tester nie zna struktur wewnętrznych ani kodu oprogramowania.
# 3) Testowanie szarej skrzynki:
Nazywa się to również półprzezroczyste badanie techniki co znaczy, testerzy są świadomi tylko częściowo wewnętrznej struktury, funkcji i projektów wraz z wymaganiami. Debugowanie odbywa się na podstawie rzeczywistych danych wejściowych z front-endu, aby uzyskać dokładne dane z zaplecza. Szara skrzynka jest zatem uważana za połączenie technik testowania czarnoskrzynkowych i białoskrzynkowych.
Testy szarej skrzynki obejmują następujące rodzaje testów:
- Testowanie macierzy.
- Testowanie wzorców.
- Testowanie wzorców ortogonalnych.
- Testowanie regresji.
Korzyści z testów jednostkowych
- Proces staje się zwinny: Aby dodać nowe funkcje lub cechy do istniejącego oprogramowania, musimy wprowadzić zmiany w starym kodzie. Ale zmiana rzeczy na już przetestowany kod może być ryzykowna, a także kosztowna.
- Jakość kodu poprawia się: Jakość kodu jest automatycznie poprawiana po wykonaniu testów jednostkowych. Błędy zidentyfikowane podczas tego testowania są naprawiane przed wysłaniem ich do fazy testów integracyjnych. Zapewnij solidne projektowanie i rozwój, gdy programiści piszą przypadki testowe, najpierw rozumiejąc specyfikacje.
- Wczesne wykrywanie błędów: Gdy programiści przeprowadzają testy jednostkowe, wykrywają błędy na wczesnym etapie cyklu życia oprogramowania i rozwiązują je. Obejmuje to wady lub brakujące części w specyfikacji, a także błędy w implementacji programisty.
- Łatwiejsze zmiany i uproszczone integracje: Przeprowadzanie testów jednostkowych ułatwia programiście restrukturyzację kodu, wprowadzanie zmian i utrzymywanie kodu. Ułatwia również testowanie kodu po integracji. Naprawienie problemu w testach jednostkowych może rozwiązać wiele innych problemów występujących na późniejszych etapach programowania i testowania
- Dostępność dokumentacji: Deweloperzy, którzy przyglądają się funkcjonalności na późniejszym etapie, mogą zapoznać się z dokumentacją testów jednostkowych i łatwo znaleźć interfejs testów jednostkowych oraz szybko i łatwo poprawić lub pracować.
- Łatwy proces debugowania: Pomaga w uproszczeniu procesu debugowania. Jeśli test zakończy się niepowodzeniem na którymkolwiek etapie, kod wymaga debugowania, w przeciwnym razie proces można kontynuować bez żadnych przeszkód.
- Niższy koszt: Gdy błędy są wykrywane i usuwane podczas testów jednostkowych, zmniejsza się koszt i czas projektowania. Bez tego testowania, jeśli te same błędy zostaną wykryte na późniejszym etapie po integracji kodu, ich śledzenie i rozwiązanie staje się trudniejsze, co zwiększa koszty i wydłuża czas projektowania.
- Kompletność kodu można wykazać za pomocą testów jednostkowych: Jest to bardziej przydatne w procesie zwinnym. Testerzy nie otrzymują kompilacji funkcjonalnych do testowania, dopóki integracja nie zostanie zakończona. Uzupełnienia kodu nie można usprawiedliwić pokazaniem, że napisałeś i sprawdziłeś kod. Ale uruchomienie testów jednostkowych może wykazać kompletność kodu.
- Oszczędność czasu na rozwój: Ukończenie kodu może zająć więcej czasu, ale dzięki mniejszej liczbie błędów w testach systemowych i akceptacyjnych można zaoszczędzić ogólny czas programowania.
- Pokrycie kodu można zmierzyć
Cykl testów jednostkowych
[wizerunek źródło ]
Co sprawia, że test jednostkowy jest dobry?
Cóż, nie jestem odpowiednią osobą, aby powiedzieć, co składa się na dobry test jednostkowy, ale na podstawie moich obserwacji z różnych projektów mogę określić cechy dobrego testu jednostkowego. Zły test jednostkowy nie dodaje wartości do projektu. Zamiast tego koszt projektu znacznie wzrasta, pisanie i zarządzanie błędnymi testami jednostkowymi.
Jak pisać dobre testy jednostkowe?
implementacja funkcji skrótu c ++
- Test jednostkowy powinien być napisany w celu zweryfikowania pojedynczej jednostki kodu, a nie integracji.
- Małe i izolowane testy jednostkowe z przejrzystym nazewnictwem ułatwiłyby pisanie i konserwację.
- Zmiana innej części oprogramowania nie powinna wpływać na test jednostkowy, jeśli są one izolowane i napisane dla określonej jednostki kodu.
- Powinien działać szybko
- Test jednostkowy powinien być wielokrotnego użytku
Struktury testów jednostkowych
Struktury testów jednostkowych są najczęściej używane do szybkiego i łatwego pisania testów jednostkowych. Większość języków programowania nie obsługuje testów jednostkowych za pomocą wbudowanego kompilatora. Aby testowanie jednostkowe było jeszcze przyjemniejsze, można użyć narzędzi open source i komercyjnych innych firm.
Lista popularnych Narzędzia do testów jednostkowych dla różnych języków programowania:
- Framework Java - JUnit
- Framework PHP - PHPUnit
- Struktury C ++ - UnitTest ++ i Google C ++
- .NET Framework - NUnit
- Framework Pythona - py.test
Błędne przekonania i prawdy
- Pisanie kodu za pomocą przypadków testowych Unit zajmuje więcej czasu, a nie mamy na to czasu - w rzeczywistości na dłuższą metę zaoszczędziłoby to czas potrzebny na tworzenie oprogramowania.
- Testowanie jednostkowe wykryje wszystkie błędy - nie będzie, ponieważ celem testu jednostkowego nie jest znalezienie błędów, ale opracowanie solidnych komponentów oprogramowania, które będą miały mniej błędów na późniejszych etapach SDLC.
- 100% pokrycia kodu oznacza 100% pokrycia testowego - to nie gwarantuje, że kod jest wolny od błędów.
Jak zaakceptować testy jednostkowe?
Dobre testy jednostkowe można przeprowadzić w 3 podstawowych częściach.
- Napisz kod testu jednostkowego
- Uruchom kod testu jednostkowego, aby sprawdzić, czy spełnia on wymagania systemowe
- Wykonaj kod oprogramowania, aby przetestować pod kątem wszelkich defektów i sprawdzić, czy kod spełnia wymagania systemowe.
Po wykonaniu powyższych 3 kroków, jeśli kod wydaje się być poprawny, mówi się, że test jednostkowy został zaliczony. A jeśli nie spełnia wymagań systemowych, test kończy się niepowodzeniem. W takim przypadku programista musi ponownie sprawdzić i poprawić kod.
W niektórych przypadkach konieczne jest oddzielenie kodu, aby przeprowadzić dokładniejsze testy.
Najlepsze praktyki
Aby stworzyć najlepszy kod podczas tego testu, rozważ poniższe punkty:
- Kod powinien być silny: Istnieją przypadki, w których test się nie powiedzie lub w najgorszych przypadkach w ogóle nie zostanie wykonany, jeśli kod jest uszkodzony.
- Zrozumiałe i rozsądne: Kod powinien być łatwy do zrozumienia. Ułatwia to programiście pisanie kodu, a nawet inni programiści, którzy będą później pracować nad kodem, będą mogli łatwo debugować.
- Powinien być pojedynczy przypadek: Testy, które definiują wiele przypadków w jednym, są skomplikowane w obsłudze. Dlatego pisanie kodu pojedynczego przypadku jest najlepszą praktyką, dzięki czemu kod jest łatwiejszy do zrozumienia i debugowania.
- Zezwalaj na testy automatyczne: Deweloperzy powinni upewnić się, że test działa w formie automatycznej. Powinien być w ciągłym procesie dostarczania lub integracji.
Inne kwestie, o których należy pamiętać, są następujące:
- Zamiast tworzyć przypadki testowe dla wszystkich warunków, skup się na teście, który ma wpływ na zachowanie systemu.
- Istnieje prawdopodobieństwo ponownego wystąpienia błędu z powodu pamięci podręcznej przeglądarki.
- Przypadki testowe nie powinny być współzależne.
- Zwróć również uwagę na stan pętli.
- Planuj częściej przypadki testowe.
Wniosek
Testowanie jednostkowe pojawia się, gdy trzeba osobno przetestować każdą funkcję. Wykrywanie i naprawianie błędów podczas tych testów oraz oszczędność czasu i kosztów jest bardziej rozsądne niż wyszukiwanie na późniejszym etapie tworzenia oprogramowania.
Chociaż oferuje wiele zalet, istnieją również ograniczenia związane z jego używaniem. W całym procesie tworzenia oprogramowania wymagana jest rygorystyczna dyscyplina i konsekwencja pokonać ograniczenia i uzyskać zamierzone korzyści.
Twoje komentarze są jak najbardziej mile widziane!
Jakie są Twoje spostrzeżenia na temat testów jednostkowych w swoim zespole jako tester czarnej skrzynki? Czy ktoś ma lepszy pomysł na udane testy jednostkowe?
rekomendowane lektury
- Różnice między testowaniem jednostkowym, testowaniem integracyjnym i testowaniem funkcjonalnym
- 20 najpopularniejszych narzędzi do testowania jednostek w 2021 r
- Pisanie testów jednostkowych w Spock Framework
- Najlepsze narzędzia do testowania oprogramowania 2021 [Narzędzia do automatyzacji testów QA]
- Kluczowe różnice między testami czarnoskrzynkowymi a białoskrzynkowymi
- Testowanie obciążenia za pomocą samouczków HP LoadRunner
- Różnica między testami na komputerach stacjonarnych, serwerach klienckich i testach internetowych
- Co to jest test gamma? Końcowy etap testów