Skocz do zawartości

Czym jest Test Driven Development? Wprowadzenie, przykłady


Pomocna odpowiedź

1 minutę temu, Harnas napisał:

>"warto mieć testy, żeby przy refactoringach czegoś nie popsuć."

Jeśli zmienia się również interfejsy to trzeba wtedy pisać od nowa testy. Przy takim dynamicznym kodzie chyba lepiej pisać testy po napisaniu kodu.

Testy również refaktorujesz. Dobre IDE sporo pracy wykonują za Ciebie.

I raz jeszcze podkreślam - TDD to nie to samo co testy jednostkowe. Jeśli refaktorujesz, to zdecydowanie chcesz mieć funkcjonalność pokrytą testami.

  • Lubię! 1
Link do komentarza
Share on other sites

To wszystko fajnie brzmi ale w rzeczywistości ciężko jest zrobić to dobrze. TDD wymaga czasu, rygoru, doświadczenia. Nie wyobrażam sobie używać TDD do prototypowania w momencie kiedy nie wiem jak, po co i dlaczego coś ma działać tak a nie inaczej, a jest to warunek konieczny aby sformalizować rezultat działania kodu, który ma być przetestowany. TDD jest wspaniałe do typowo książkowych przykładów, takie rdzenne biblioteki jak w artykule są po prostu idealnym materiałem - to jest kod, który ma się zachowywać w ściśle określony sposób, jest łatwy do odizolowania, robi bardzo konkretną rzecz i praktycznie nie ma zależności zewnętrznych - korzysta tylko z podstawowych elementów języka, w jakim pisany jest kod. Ba, łatwiej napisać kod, który dowiedzie, że działa prawidłowo niż przetestować go ręcznie... Schody się zaczynają z kodem, który musi coś spinać, korzystać z zewnętrznych bibliotek, które nie są zbyt dobrze udokumentowane, nikt nie stworzył ich z myślą o automatyzacji i testowaniu, nie jesteśmy w stanie w pełni na nich polegać bo jeszcze zbyt słabo je poznaliśmy albo generują wyniki, które ciężko interpretować maszynowo. W takich przypadkach aby zastosować TDD trzeba się uciekać do sztuczek, rozbijać proste obiekty na osobne komponenty i zmuszać przyszłych użytkowników do specyficznej ich inicjalizacji, kolokwialnie mówiąc zrobić mały bajzel w architekturze aby część rzeczy w ogóle mogła zostać przetestowana na niskim poziomie, a i tak czasami gdzieś trzeba coś przepchnąć aby kod w ogóle działał. To wszystko wymaga czasu. Czasami jest to naturalne, bo trzeba i tak napisać kawałek kodu, który dowiedzie, że mamy coś co działa ale niektóre rzeczy są ciężko mierzalne jeśli dają efekt poza kontrolowanym systemem.

Sam z chęcią bym usłyszał więcej też o tym gdzie warto, a gdzie nie warto używać TDD. A jeśli warto wszędzie to chciałbym usłyszeć jak radzić sobie z typowymi problemami, chociaż nie wierzę, że mając do zrobienia prototyp i sprawdzenia czy fajnie się w coś gra ktoś klepałby testy do każdej jednej funkcji mając czas na projekt ograniczony do kilku roboczodni - jak dla mnie to jest strata po prostu z definicji bo w pewnych przypadkach chcemy właśnie testować UX a nie poprawność działania kodu.

  • Lubię! 1
Link do komentarza
Share on other sites

Temat trochę stary, ale odświeżę.

Ostatnio pracuję przy jednym sporym projekcie na STM32 w Cubie i zastanawiałem się jak usprawnić pisanie kodu i testowanie. Testowanie na sprzęcie wymaga za dużo czasu, głównie przez wgrywanie kodu i odpalenie debuggera. Dodanie nowej klasy niezwiązanej ze sprzętem aż prosi się o testy jednostkowe - bo i tak piszę kod na x64 i gdy zadziała to przenoszę do projektu... Mam pomysł zaczerpnięty z książki Embedded System Architecture żeby dokonać separacji:

  • peryferia,
  • warstwa abstrakcji,
  • aplikacja niezależna od platformy.

Odpalenie kodu na maszynie hosta jest błyskawiczne i łatwe w debugowaniu.

Mam pomysł żeby zostawić projekt Cuba tak jak jest, ale osobno dodać makefile - najpierw do uruchamiania testów dla klas niezależnych od platformy, a później do budowy wspomnianej aplikacji. Do UT można użyć np GoogleTest, peryferia jakoś zamockować. 

Czy to ma sens? Czy jest jakiś inny sposób żeby nie siedzieć w beznadziejnej pętli drobnych poprawek wgrywanych na platformę docelową?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.