Chciałem zadać to samo pytanie, aby zobaczyć, ile firm faktycznie ćwiczyło TDD.
Przez 11 lat programowałem profesjonalnie, tylko dwie ostatnie organizacje były świadome TDD (dotyczy to prawie 5 lat, do tego czasu TDD nie było tak popularne jak obecnie). Przejdę do sedna i odpowiem na twoje pytanie, zanim przejdę do mojej oferty sprzedaży TDD :)
W ostatniej firmie, w której pracowałem (internetowy akademicki wydawca nauk humanistycznych i kolekcji naukowych), wiedzieliśmy, że musimy ćwiczyć TDD, ale nigdy do tego nie dotarliśmy. W naszej obronie mieliśmy bazę kodu na 250 tys., Więc dodawanie testów do niestabilnej bazy kodu o takim rozmiarze wydawało się nie do pokonania (teraz czuję się winny, pisząc to!). Nawet najlepsi z nas popełniają błędy .
Każdy, kto wykonał nawet niewielką ilość TDD, wie, jak bolesne mogą być testy uzupełniające do nieestabilnego kodu brązowego pola ... Głównymi przyczynami są ukryte zależności (nie można wyciągnąć wszystkich dźwigni, aby uzyskać wyniki z kodu - nie można kpić scenariusze) i naruszenie zasady pojedynczej odpowiedzialności (testy są skomplikowane, wymyślone, wymagają zbyt dużej konfiguracji i są trudne do zrozumienia ).
Tymczasowo powiększyliśmy nasz zespół ds. Kontroli jakości (od jednej, może dwóch osób do pół tuzina lub więcej), aby przetestować platformę przed wydaniem. Był to niezwykle kosztowny pod względem czasowym i finansowym, niektóre wydania wymagałyby trzech miesięcy, aby ukończyć „testowanie”. Nawet wtedy wiedzieliśmy, że wysyłamy problemy, po prostu nie były to „programy blokujące” ani „krytyczne”, a jedynie „o wysokim priorytecie”.
Jeśli masz wieloletnie doświadczenie handlowe, docenisz to, że każda firma wykonuje zadania krytyczne , a następnie wynajduje wyższy poziom priorytetu powyżej tego, a najprawdopodobniej również jeden powyżej tego - szczególnie, gdy ktoś z góry naciska na funkcję / naprawę błędu. Robię dygresję ...
Z przyjemnością informuję, że ćwiczę TDD w mojej obecnej firmie (dom programowania, aplikacji internetowych i mobilnych) w połączeniu z Jenkins CI, aby przekazywać inne raporty analizy statycznej (pokrycie kodu jest najbardziej przydatne po potwierdzeniu pozytywnego wyniku testu) . Projekty, w których korzystałem z TDD, to system płatności i system obliczeń sieciowych.
Skok sprzedaży ...
Często może to być trudna walka uzasadniająca automatyczne testowanie dla nietechnicznych członków zespołu. Pisanie testów wciąga więcej pracy w proces programowania, ale ... czas, który zainwestujesz w testowanie teraz, pozwoli Ci zaoszczędzić na pracach konserwacyjnych później. Naprawdę pożyczasz czas . Im dłużej produkt jest używany, tym większe oszczędności - i pomoże to uniknąć dużego przepisywania .
Najpierw test oznacza, że najpierw kodujesz swoją intencję, a następnie potwierdzasz, że kod ją spełnia. Zapewnia to skupienie i destyluje twój kod, aby robić tylko to, co jest zamierzone, i nie więcej (nie czytaj wzdęć). Jest to wykonywalna specyfikacja i dokumentacja jednocześnie (jeśli twój test jest dobrze napisany, a testy powinny być tak czytelne / czyste jak kod systemu, jeśli nie więcej!).
Nieprogramiści (często) nie mają tego wglądu, więc TDD nie ma dla nich dużej wartości i jest postrzegany jako jednorazowy skrót do wcześniejszej daty wydania.
Programowanie jest naszą domeną i według mnie to , jako profesjonalistów, naszym obowiązkiem jest doradzać w zakresie najlepszych praktyk, takich jak TDD. Menedżerowie projektów nie mogą decydować, czy zrobiono to w celu skrócenia czasu programowania, leży to poza ich jurysdykcją . W ten sam sposób nie mówią ci, z jakiej struktury, rozwiązania buforującego lub algorytmu wyszukiwania należy korzystać, nie powinni ci mówić, czy powinieneś stosować testy automatyczne.
W moim zdaniem przemysł rozwoju oprogramowania (na ogół) jest podzielona na obecne, fakt, że posiadanie testów dla oprogramowania nie jest normą.
Wyobraź to sobie w innych branżach: medycznej, lotniczej, samochodowej, kosmetycznej, miękkich zabawek, napojów alkoholowych itp. Poprosiłem moją narzeczoną o podanie branży, w której nie testują produktu, a ona nie może!
Być może niesprawiedliwe jest twierdzenie, że nie ma żadnych testów, ponieważ tak się dzieje ... ale w firmach bez testów automatycznych jest to proces bardzo ręczny / ludzki (czytaj niezgrabny i często podatny na błędy).
Jedną kwestię chciałbym podnieść w twoim pytaniu ...
Zazwyczaj chcieli, aby prace rozwojowe rozpoczęły się natychmiast lub po krótkim okresie projektowania. Bardziej zbliżony do Agile.
Będąc „Zwinnym” nie zaleca się przeprowadzania testów bez testów, pierwszym członkiem wymienionym na agilemanifesto.org jest Kent Beck , twórca XP i TDD!
Dwie książki, które gorąco polecam, jeśli interesuje Cię TDD lub po prostu ich nie czytałeś i jesteś zapalonym programistą (czy wszyscy dobrze to czytają?;)
Rosnące oprogramowanie zorientowane na ukierunkowane testy
Clean Code - seria Robert C. Martin („Uncle Bob”)
Te dwie książki wzajemnie się uzupełniają i łączą wiele sensu na kilku stronach.
Dzięki, że zadałeś to pytanie :)