Należę do zespołu programistów, który współpracuje z wieloma innymi zespołami w celu utrzymania i ulepszania aplikacji, która była używana przez co najmniej 15 lat. Kiedy został zbudowany i zaprojektowany po raz pierwszy, TDD było niespotykane.
Aplikacja jest dość stabilna i rzadko napotykamy błąd zatrzymujący program, ale robimy średnio około jednego lub dwóch błędów tygodniowo, co poważnie obniża jakość usług. Te błędy trwają wiecznie, aby je znaleźć i naprawić, głównie z powodu wskazywania palcem, a jedynym testem, jaki mamy, jest testowanie interfejsu. Ponieważ jest dużo marnowanego czasu na szukanie, gdzie jest błąd, zanim będzie można go naprawić, ja i inny programista planujemy zaproponować Test Driven Development. Niedługo nadejdzie nowy przegląd i chcielibyśmy zobaczyć prawie całkowite testowanie jednostek przeprowadzone na nowych modułach, planujemy również zaproponować zbudowanie jednostek testowych dla każdego kodu, który musimy zmienić, który jest starszy (tj. Naprawa błędu lub implementacja funkcji ), ale nie marnuj czasu na tworzenie przypadków testowych dla kodu, który nie spowodował problemów.
Wydaje mi się to rozsądne. W tym miesiącu mieliśmy błąd, którego usunięcie zajęło ponad dwa tygodnie, ale można go było zidentyfikować przed wdrożeniem, gdyby przeprowadzono testy jednostkowe. Ale dla naszych menedżerów wygląda na to, że wydadzą więcej pieniędzy.
Jak przekonać naszych klientów, że chcą wydać pieniądze na testy jednostkowe i rozwój oparty na testach? Czy są jakieś badania, które pokazują ROI testów jednostkowych?
źródło
Odpowiedzi:
Bezpośrednie włączenie pełnej wersji TDD do starszego kodu, projekt konserwacji jest bardzo trudny do sprzedania. Podejście, które widziałem bardzo dobrze, jest takie. Dla każdego przychodzącego błędu utwórz automatyczny test jednostkowy, który demonstruje błąd. Przez „niejednostkowy” rozumiem coś, co może dotykać wielu części systemu, trafionej bazy danych i systemu plików itp. - ale przez „automatyczny” rozumiem uruchamianie bez interakcji człowieka. Jest to rodzaj testu, który będzie potrzebny w pakiecie regresji w każdym przypadku. Napisanie go powoduje wiele rzeczy: sprawia, że kod jest testowalny, nawet jeśli na tym bardzo zgrubnym poziomie, i wystawia cię na konstelację kodu, która może mieć coś wspólnego z błędem, więc edukuje i informuje cię o bardzo konkretny materiał.
Ale to nie koniec. Po uruchomieniu tego testu i uruchomieniu go na czerwono (demonstrując błąd w kodzie), znajdź czas, aby dowiedzieć się, co jest nie tak (w każdym razie musisz to zrobić). Ale jeszcze tego nie naprawiaj. Po wyizolowaniu tego, co uważasz za problem - napisz jednostkętest, który pokazuje ten problem. Teraz masz coś, z czym możesz pracować (i, nawiasem mówiąc, być może musiałeś nieco bardziej udoskonalić w kierunku jeszcze większej testowalności). Napraw błąd. Obejrzyj test zaliczeniowy jednostki. Może dopracuj to w niektórych przypadkach; zdobądź tę jedną jednostkę - tę, która kosztuje Cię zaledwie dwa tygodnie - solidna, czysta i dobrze przetestowana. Teraz uruchom test regresji i zobacz, jak się kończy (oczywiście, jeśli nie, musisz wykonać jeszcze więcej badań i pracy na poziomie jednostki - powtarzaj, aż on też przejdzie). Sprawdź to wszystko. Co masz? Testy regresji dla wcześniej nieudanego kodu. Testy jednostkowe wcześniej nieudanego kodu. Działający kod, który zawiódł. Lepiej zaprojektowany kod, ponieważ teraz jest bardziej testowalny niż był. Większe zaufanie do bazy kodu,
To nie jest „czysty” TDD. Ale szybko pokazuje wyniki i poprawia jakość kodu w miarę upływu czasu. Wyniki pomogą ci uzyskać wpisowe do zarządzania.
źródło
W mojej firmie po prostu zastosowałem metodę „tylko chrząknięcia” od JoelOnSoftware i zacząłem pisać testy jednostkowe, ilekroć normalnie po prostu zhakowałem jakąś aplikację konsolową. Zacząłem robić rzeczy znacznie szybciej dzięki bardziej stabilnym wydaniom i zostałem za to zauważony. Zapytany, co robię, wyjaśniłem, że zacząłem używać TDD i pisać testy jednostkowe za każdym razem, gdy modyfikowałem stary kod lub pisałem nowy. Moi koledzy programiści zaczęli się interesować i sami zaczęli używać zintegrowanych testów jednostkowych. Nie wydaje mi się, aby istniał dobry argument za pisaniem testów działającego starszego kodu, ale jeśli możesz udowodnić, że pisanie testów automatycznych jest szybsze i wygodniejsze niż pisanie spaghetti hackowania na konsoli, inteligentni programiści pójdą za nimi.Będą tam również inne korzyści, które skutkują wyższą jakością oprogramowania, ale kluczem do zalogowania się programisty jest pokazanie, że ułatwia im to życie. Jeśli chodzi o rejestrację biznesową, fakt, że zapewni lepsze oprogramowanie i prawdopodobnie zajmie mniej czasu niż wcześniej, powinien wystarczyć do ich przekonania.
źródło
Po pierwsze, należy docenić swoje podejście i szczerość w stosunku do wartości dodanej do pieniędzy klienta. A oto moje przemyślenia na temat tego, jak przekonać swojego menedżera i klienta:
Istnieje inny sposób, a mianowicie próba dołączenia do swojego menedżera podczas konferencji Agile, które odbywają się w okolicy. Na pewno warto wziąć udział.
Jeśli uważasz, że nic nie działa, przejdź dalej ... dołącz do miejsca, które Ci odpowiada. Szczerze, to właśnie zrobiłem. Kiedy wszystko zawiodło, przeszedłem;)
I dowiedz się, jakie testy Jednostek po napisaniu kodu nie są tak naprawdę TDD, ale zawsze może to być pierwszy krok. Co najmniej tak dobrze tu pasuje.
Życzę powodzenia i sukcesów!
źródło