Zajmuję się programowaniem stron internetowych od 15 lat, a PHP przez ostatnie 5 lat. Zawsze pisałem solidny kod. JEDNAK mam klienta, który nalega, aby 80% kodu było testowane jednostkowo. Ponieważ klient jest ZAWSZE PRAWIDŁOWY, planuję użyć PHP_CodeSniffer, aby upewnić się, że mój kod wygląda poprawnie, a PHPUnit do przeprowadzenia testów jednostkowych. Mam nadzieję nauczyć się czegoś dzięki temu doświadczeniu.
Czy są to odpowiednie narzędzia do użycia? Ile czasu zajmuje konfiguracja PHPUnit i napisanie dodatkowego kodu? Pisanie stron internetowych i autotest powinien zająć mi około 8 tygodni, tak jak robiłem to w przeszłości. Jeśli dodam dodatkowe 4 dni (10%) na testy jednostkowe (PHPUnit), czy to wystarczy? Myśli? Propozycje? Dzięki.
Odpowiedzi:
W jednym wierszu: zależy od tego, jak pracujesz. Uważam, że 10% to zdecydowanie za mało. Powinien wynosić co najmniej 25%, jeśli nie 40%, jeśli nie 60%, jeśli nie więcej.
Po pierwsze, bardzo zgadzam się z twoim klientem. Testy jednostkowe są istotną częścią solidnego, łatwego w utrzymaniu i łatwego do debugowania produktu.
Będę mówić z tego, co wiem. Używam TDD (Test-Driven Development) do większości projektów. TDD zasadniczo powoduje, że piszesz testy przed właściwym kodem. Ustanawiają zestaw kryteriów akceptacji, które musi spełniać produkt końcowy. Zwykle spędzasz od 50% do 70% czasu na pisaniu testów, a resztę na implementację kodu, aby je zdać.
Choć może to zabrzmieć absurdalnie i / lub ogromnie, zapewniam cię, że tak nie jest. Dlatego:
PHPUnit jest de facto narzędziem do testowania jednostek PHP i jest w tym bardzo dobry. Nie korzystałem dużo z PHP_CodeSniffer. Myślę jednak, że jeśli pracujesz sam, prawdopodobnie nie potrzebujesz go. Bardziej przydatne w zespole jest upewnienie się, że kod wygląda tak samo bez względu na to, kto go kodował.
źródło
Proponuje ci postawę, że nauczysz się czegoś na podstawie tego doświadczenia. Jestem pewien, że tak.
Pierwszą rzeczą, której powinieneś się nauczyć, jest to, że konieczność testów jednostkowych nie ma nic wspólnego z twoim doświadczeniem . Najlepszy programista będzie również jednym z najlepszych testerów jednostkowych:
Od http://www.artima.com/intv/refactorP.html
Pisałem PHP bez testów jednostkowych. Potem, po latach praktykowania testów jednostkowych w Javie, odkryłem, że nie mogę pracować na niczym bardziej skomplikowanym niż pojedyncze strony w PHP bez testów jednostkowych. Powód? Produktywność . Bez testów jednostkowych nie mogłem pewnie refaktoryzować - oznaczało to, że albo A) będę musiał zburzyć znacznie więcej i pracować nad wszystkim od początku, albo B) , będę musiał poradzić sobie z brzydkim, starszym kodem.
Kiedy składasz ofertę, czy musisz wziąć pod uwagę czas na przetestowanie? Tak . Czy wydaje się intuicyjne, że zajmie to więcej czasu? Tak, jeszcze raz . Prawdopodobnie, jak z grubsza oszacowały niektóre inne odpowiedzi, będziesz musiał oszacować 50-100% więcej niż bez testów jednostkowych.
Jednak!...
W rezultacie Twoje szacunki będą dokładniejsze . Jeśli pobierzesz opłatę za godzinę, bardziej zaimponujesz swoim klientom i będziesz w stanie podnieść stawki. Jeśli pobierzesz opłatę ryczałtową, zarobisz więcej pieniędzy na godzinę.
Bez testowania twoje prognozy najprawdopodobniej są bzdurą. Błędy, zlecenia zmian i redefinicje są bardzo trudne do dokładnego oszacowania. Testowanie jest kluczem do zminimalizowania wpływu wszystkich trzech!
źródło
Nie ma łatwej odpowiedzi na pytanie, ile czasu to zajmie.
Ale jako podstawową zasadę, jeśli jest to krótki projekt: Powiedziałbym, że rozwój wraz z dobrym testowaniem jednostkowym zajmie 1,75-2 razy dłużej niż rozwój bez testów jednostkowych. W przypadku dłuższych projektów może 25-30%?
Sugeruję wykonanie testów jednostkowych przed napisaniem kodu. W ten sposób zbudowanie rusztowania testu jednostkowego staje się częścią procesu projektowania, więc nie powinieneś brać pod uwagę, że tracisz czas na testy jednostkowe, ale raczej, że budowanie testu jednostkowego pomaga ci zaprojektować świetny produkt i istnienie tego testu po jego zbudowaniu ułatwia upewnienie się, że tak pozostanie. Pisanie testów jednostkowych na początku jest cudowne, ponieważ pomaga skupić się na rzeczywistych wymaganiach, daje nam jasny sposób sprawdzenia, czy jesteśmy skończeni (zaliczenie testów jednostkowych) i pomaga nam „testować wcześnie i często testować”.
Jeśli chodzi o PHPUnit ... Minęło trochę czasu, odkąd go użyłem, mam wrażenie, że jest potężny, ale być może potrzebuje trochę więcej pracy, zanim będzie naprawdę dopracowany.
Jeśli jest jednak jedna rzecz, którą chcę tutaj przekazać: proszę nie widzieć Testowania Jednostek jako zwykłej formalności na końcu projektu. Jeśli to wszystko, moim zdaniem, jest to bezwartościowe.
źródło
Odpowiedzi do tej pory są dość dokładne, więc dodam tylko jeden punkt nieuwzględniony: będzie dodatkowy czas związany z użyciem PHPUnit
Klasy modeli testów jednostkowych, które nie zajmują się prezentacją, są dość proste. Piszesz test dla każdej klasy, aw tych przypadkach testowych możesz bezpośrednio utworzyć instancję i skonfigurować obiekt do testowania określonej metody / funkcji. Gdy już skonfigurujesz i uruchomisz PHPUnit, będziesz w stanie szybko uruchomić testy.
Strony internetowe z testami jednostkowymi mogą być trudniejsze. Jeśli używasz Zend Framework, Symfony, Smarty lub dowolnego innego silnika MVC, sprawienie, by PHPUnit dobrze z nimi grało, może zająć więcej czasu. Używamy Zend Framework i spędziłem dużo czasu na budowaniu klas podstawowych do testowania kontrolerów i przeglądania skryptów w izolacji. Biorąc pod uwagę rozmiar tego projektu, prawdopodobnie lepiej zacząć od
ControllerTestCase
.źródło