Jestem całkiem nowy w podejściu TDD i moje pierwsze eksperymenty mówią, że napisanie 1 linii kodu funkcjonalnego oznacza napisanie około 2-3 linii kodu testowego. Tak więc, na wypadek, gdy mam zamiar napisać 1000 LOC, cała baza kodu wraz z testami będzie około 3500 LOC.
Czy to jest uważane za normalne? Jaki jest stosunek w pisanym kodzie?
testing
unit-testing
tdd
metrics
Andrey Agibalov
źródło
źródło
Odpowiedzi:
1: 3 jest normalne w przypadku TDD.
Z mojego doświadczenia, a także z innych cytatów, które pamiętam.
źródło
Istnieją odmiany oparte na różnych stylach i językach kodowania. Jednak niezależnie od używanego języka największą odmianą jest Ty.
Robert Martin powiedział kiedyś:
To sprawiło, że pomyślałem. Bardziej szczegółowe testy oznaczają więcej kodów testowych. Bardziej ogólny kod produkcyjny oznacza mniej kodu, więc stosunek test / kod powinien rosnąć w miarę ewolucji kodu.
Ale czekaj, to też nie jest dobre. W niektórych szczególnych przypadkach, na przykład podczas definiowania określonego algorytmu, możesz mieć tylko 6-10 wierszy kodu zawierających kilka „jeśli”, chwilę i może 2-3 rekurencje. Mogę powiedzieć, że ten kod będzie prawdopodobnie zawierał więcej 100 linii kodu testowego.
W prawdziwym projekcie, czymś większym niż kilka algorytmów, stosunek test / kod powinien wynosić od 1: 1 do 2: 1. Jeśli wzrośnie powyżej 2: 1, to zapach, że masz testy, które powinny być refaktoryzowane lub usunięte (lub może kod, który jest trudny do przetestowania). Zawsze powinieneś inwestować tyle samo uwagi i refaktoryzacji w swoje testy, co w kod produkcyjny.
W każdym razie najlepszą odpowiedzią na twoje pytanie może być „cykliczność złożoności” . Im wyższa cykliczność złożoności Twojej metody, tym wykładniczo więcej testu musisz napisać, aby objąć wszystkie przypadki.
źródło
Proporcje będą się różnić w zależności od wielkości twoich metod. Rozmiar twoich metod będzie się różnić w zależności od stylu programowania, języka i dziedziny problemów.
Jeśli twoje metody są krótkie, 3: 1 jest rozsądne. Jeśli twoje metody są długie, 3: 1 jest na wysokim poziomie.
Tak więc, aby odpowiedzieć na twoje pytanie, to zależy. :-)
źródło
W przypadku aplikacji o znaczeniu krytycznym zwykle stosuje się jeden dzień testów na każde 10 funkcjonalnych LoC.
I to nie liczy TDD, która nie dotyczy testu, ale specyfikacji.
źródło
Rozmiar mojego kodu testowego jest o połowę mniejszy niż „rzeczywisty” kod. Postępowanie w inny sposób wskazuje, że twoje testy są zbyt złożone i / lub twój kod jest zbyt trudny do przetestowania i / lub twój kod jest zbyt gęsty / złożony.
Albo po prostu testujesz za dużo i marnujesz czas na malejące zyski.
Zobacz także „kiedy testowanie jednostek jest nieodpowiednie lub niepotrzebne?”
źródło
Mój stosunek wynosi około 2-1 do 10-1 (kod do przetestowania). Upewnij się, że testowanie dotyczy wartości / zachowania, a nie implementacji.
źródło