Co to jest programowanie sterowane testami: przewodnik dla początkujących
Opublikowany: 2018-03-12Programiści i błędy toczą niekończącą się walkę o dominację od czasów nieznanych. Jest to nieuniknione – nawet najlepsi programiści padają ofiarą błędów. Żaden kod nie jest tak naprawdę bezpieczny przed błędami, dlatego przeprowadzamy testy. Programiści, przynajmniej ci przy zdrowych zmysłach, testują swój kod, uruchamiając go na maszynach deweloperskich, aby upewnić się, że robi to, do czego był przeznaczony. Tradycyjnie przypadki testowe były pisane po napisaniu kodu, ale w Test-driven Development zautomatyzowany przypadek testowy jest pisany przed napisaniem dowolnego fragmentu kodu, dzięki czemu wykonanie i testowanie mogą być sprawdzane jednocześnie.
W tym artykule omówimy dogłębnie Test-Driven Development i dlaczego jest lepszy od tradycyjnych metod!

Spis treści
Co to jest programowanie sterowane testami?
Test-Driven Development powstał jako część metodologii Extreme Programming (XP) i został nazwany koncepcją „Test-First” . Programowanie sterowane testami umożliwia dokładne przetestowanie kodu, a także umożliwia szybkie i łatwe ponowne przetestowanie kodu, ponieważ jest to zautomatyzowane. Zasadniczo, przed napisaniem jakiegokolwiek fragmentu kodu, programista najpierw tworzy test jednostkowy. Następnie programista tworzy tylko tyle kodu, aby spełnić test jednostkowy. Po przejściu testu i refaktoryzacji kodu programista może przystąpić do wprowadzania dalszych ulepszeń. Programowanie sterowane testami zapewnia, że kod jest dokładnie testowany, co prowadzi do zmodularyzowanego, rozszerzalnego i elastycznego kodu.
Za każdym razem, gdy ma zostać dodana nowa funkcja, musi przejść tak zwany „cykl życia” TDD. Porozmawiajmy więcej o tym cyklu życia.
Jak zostać programistą Full Stack
Cykl rozwoju oparty na testach
Cykl życia oparty na testach obejmuje wszystko, od napisania wstępnego testu jednostkowego po przerobienie kodu.
- Dodaj test: Każda nowa funkcja musi przejść test przed jej wdrożeniem. Podstawowym wymogiem do napisania testu jest jasne zrozumienie wszystkich wymagań. Odbywa się to za pomocą przypadków użycia i historii użytkowników.
- Uruchom wszystkie testy i sprawdź test sieci: Jest to zrobione, aby zapewnić prawidłowe działanie naszego testu. Zasadniczo ta faza ma na celu sprawdzenie, czy test nie został zdany przez żaden kod, który nie spełnia wymagań. W ten sposób ten krok eliminuje możliwość posiadania pod ręką wadliwego testu.
- Napisz kod: Teraz, gdy masz już swój test, kolejnym oczywistym krokiem jest napisanie kodu, który czyści test. Ten kod nie musi być doskonały we wszystkich aspektach, ale musi wyczyścić test. Gdy mamy pewność, że ten kod wyczyści test, można go zmodyfikować zgodnie z wymaganiami.
- Uruchom testy: Po napisaniu kodu nadszedł czas, aby sprawdzić, czy kod przeszedł test, czy nie. Jeśli Twój kod przejdzie testy, oznacza to, że Twój kod spełnia wymagania – do tej pory.
- Refaktoryzacja kodu: Jest to zasadniczo robione w celu oczyszczenia kodu. Refaktoryzacja nie powoduje uszkodzenia żadnej z funkcjonalności; służy tylko do czyszczenia kodu poprzez usunięcie duplikatów między kodem testowym a kodem produkcyjnym.
- Powtórz: ten cykl jest teraz powtarzany z nowym testem, aby dodać więcej funkcji. Każda funkcjonalność przechodzi ten sam cykl. Zasadniczo wielkość kroków nie powinna przekraczać 1-10 edycji między każdym uruchomieniem testu. Jeśli kod nie przejdzie szybko testu, programista musi cofnąć się i nie debugować nadmiernie.
Plusy i minusy rozwoju sterowanego testami
Programowanie sterowane testami ma pewne zalety w porównaniu z tradycyjnymi metodami testowania – które w większości były ręczne. Jednak nie jest nieomylny. Jak każda inna technologia, rozwój oparty na testach ma również szereg wad.

Przyjrzyjmy się szczegółowo zaletom TDD:
- Pisanie małych testów zapewnia modułowość kodu. Ćwiczenie TDD pomaga zrozumieć podstawowe zasady dobrego projektowania modułowego.
- TDD zapewnia przejrzystość podczas implementacji kodu, co zapewnia siatkę bezpieczeństwa podczas fazy refaktoryzacji.
- Dzięki TDD współpraca jest o wiele łatwiejsza, ponieważ teraz ludzie mogą bez obaw edytować kod, ponieważ test poinformuje ich, jeśli ich zmiany nie są zgodne z testem.
- Podstawą TDD są testy jednostkowe. Dzięki temu refaktoryzacja jest o wiele łatwiejsza i szybsza. Refaktoryzacja starego kodu jest uciążliwa, ale jeśli kod jest wspierany przez testy jednostkowe, staje się to o wiele łatwiejsze.
- Pomaga w wyjaśnieniu wszystkich wymagań przed rozpoczęciem części kodowania. W ten sposób unika się wielu niejasności, które mogą się później pojawić.
- Programowanie sterowane testami skupia się na testowaniu podczas pisania. Zmusza to programistę do uczynienia ich interfejsów wystarczająco czystymi, aby przejść test. Trudno zrozumieć tę zaletę, dopóki nie zaczniesz pracować nad fragmentem kodu, który nie został poddany TDD.
- Niemądre błędy są wyłapywane niemal natychmiast. Pomaga w usuwaniu tych błędów, które zmarnowałyby dużo czasu, gdyby zostały znalezione w QA.
Przyjrzyjmy się teraz, jakie są ograniczenia programowania sterowanego testami:
- Zestaw testów, który jest używany do testowania, musi być utrzymany, w przeciwnym razie testy mogą nie być w pełni deterministyczne.
- Testy są trudne do napisania – zwłaszcza poza fazą testów jednostkowych.
- TDD spowalnia tempo rozwoju, przynajmniej na początku.
- Podobnie jak w przypadku każdej formy rozwoju, jest duża różnica między robieniem tego po prostu a robieniem tego dobrze. Pisanie dobrych testów jednostkowych wymaga pewnego poziomu specjalizacji.
- Trudno jest zastosować to podejście do starego (istniejącego) kodu.
- TDD wymaga wykonywania rutynowych czynności porządkowych. Konieczne jest dopracowanie testów, aby działały szybciej.
- Łatwo jest się rozproszyć przez wymyślne funkcje w jakimkolwiek frameworku do testów jednostkowych, ale należy pamiętać, że proste testy zwykle dają najlepsze wyniki.
- Jeśli wszyscy w zespole nie będą prawidłowo prowadzić swoich testów, cały system może szybko ulec degradacji.
Podsumowując…
Rozwój oparty na testach to droga naprzód, jeśli chodzi o przyszłość tworzenia aplikacji. Istnieje wiele zautomatyzowanych frameworków testowych, takich jak PHPUnit, Serenity, Robot, RedWoodHQ i wiele innych. Wybierz ten, który odpowiada Twoim potrzebom i zacznij tworzyć lepsze aplikacje, które można konserwować w mgnieniu oka!
Zapisz się na kursy inżynierii oprogramowania z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
