Jak przekonać członków drużyny do korzystania z TDD [zamknięte]

15

Jestem jedyną osobą w moim zespole, która korzysta z TDD. Jak zmusić ich do korzystania?

Jestem zirytowany, że kiedy pociągnę, czyjś kod przerwie moje testy i to ja muszę je naprawić.

Czy użycie github, widelca i żądania ściągnięcia rozwiąże ten problem, więc będą musieli przejść test przed zaakceptowaniem ściągania?

Nie jestem kierownikiem projektu i wydaje mi się, że nie mogę jej przekonać do korzystania z niego.

wizztjh
źródło
11
„czyjś kod zepsuje moje testy”. Czy bierzesz pod uwagę możliwość, że oznacza to, że Twój projekt i / lub testy są zbyt kruche?
komar
1
Ściśle powiązane: programmers.stackexchange.com/questions/44145/…
Péter Török
2
Być może zacznij tworzyć testy integracyjne. Są trudniejsze do złamania, ponieważ wejście / wyjście powinno (prawie) zawsze być takie samo. Gdy wszyscy się już do tego przyzwyczają, dodaj testy jednostkowe, ponieważ testy integracyjne są nieco wolne podczas uruchamiania wszystkich z nich. Na marginesie: Gdybym był dyrektorem generalnym jakiegoś małego projektu (na przykład mniej niż 2 miesiące), nie podobałoby mi się, gdyby twórcy spędzili czas na pisaniu testów. Projekt musi zostać zakończony, a pisanie testów jest dobre, ale zajmuje dużo czasu, a przy tak małych projektach szanse są niewielkie, że wykonujesz wiele prac konserwacyjnych w czasie projektu.
Jan_V
1
Deweloperzy powinni przestać pisać solidny i stabilny kod, a testy mogą w tym pomóc. Nawet nie mówimy premierom, że piszemy testy, ponieważ to nie ich niepokój. Piszemy je, aby zapewnić, że nasz kod nadal działa tak samo jak 5 miesięcy temu. Nie należy też postrzegać go jako prawdziwego „testu”, który jest raczej ubezpieczeniem, pomocnikiem lub kontrolerem. Kiedy ktoś mówi „piszemy testy”, można się pomylić i pomyśleć, że jest to zadanie, które powinien wykonać tester.
Jan_V
2
Również bardzo podobny do: programmers.stackexchange.com/q/141468/39178 ... i wciąż szukam dobrych argumentów. Problem polega na tym, że naprawdę nie można zmienić zdania ludzi, jeśli nie są otwarci na zmiany lub jeśli uważają, że to, co już robią, jest dla nich wystarczająco dobre.
S.Robins,

Odpowiedzi:

5

Moim zdaniem, jedynym sposobem na przekonanie się o testach jest wykazanie, że są one przydatne - tzn. Że niepowodzenia testów pomagają znaleźć i naprawić błędy .

Sposób, w jaki opisujesz problem, wygląda na to, że tak nie jest. Popatrz...

... kiedy pociągnę, czyjś kod przerwie moje testy i to ja muszę je naprawić.

Jeśli dobrze rozumiem, masz na myśli, że musisz zmodyfikować testy. Cóż, to nie brzmi jak niepowodzenia testów pomagają znaleźć i naprawić błędy , prawda? Jeśli testy nie pomogą w znalezieniu błędów, to jest dość słaba pozycja, by zacząć przekonywać kolegów - czego mogliby oczekiwać? żmudne poprawki w delikatnym kodzie testowym?

To może brzmieć jak ślepy zaułek, ale tak naprawdę nie jest. Twój ostateczny cel (przekonanie do TDD) nadal ma całkiem dobry sens, nie porzucaj go. Po prostu ponownie skoncentruj swoje wysiłki na usunięciu odkrytej przeszkody.

Niepowodzenia testowe, które Ci teraz przeszkadzają, są w zasadzie „fałszywymi alertami” - co oznacza, że ​​są to błędy w testach, których nie ma w kodzie. Wykorzystaj je jako okazję do ulepszenia testów, aby dowiedzieć się, jak zrobić dobry, niezawodny projekt testu. Pracuj nad testami, aby „fałszywe alarmy” były rzadsze i aby ułatwić wykrywanie prawdziwych błędów w testowanym kodzie.

Gdy odkryjesz prawdziwe błędy, daj znać swoim kolegom i pomóż im je naprawić - i nie zapomnij wskazać, że błędy te zostały wykryte przez twoje testy. To naprawdę solidna podstawa do przekonania kolegów.


Warto wspomnieć, że umiejętności projektowania testów rozwijane na etapie „wstępnym” najprawdopodobniej będą ponownie potrzebne, jeśli (kiedy :) w końcu przekonasz swoich kolegów z drużyny do korzystania z TDD. Pomyśl o tym...

... Co by się stało, gdy niedoświadczonym kolegom wprowadzono programowanie oparte na testach?

Pierwszą rzeczą, jakiej można się spodziewać, jest to, że chłopaki zaczną pisać kiepskie testy, a (horror!) Nawet łamać dobre podczas nauki. Aby pomóc im znaleźć sposób, aby zrobić to dobrze, musisz dość dobrze zrozumieć dobry projekt testu.

Wszystkie błędy, które znajdziesz i naprawisz teraz w testach, będą powtarzane przez wszystkich twoich kolegów z drużyny, gdy zaczną się uczyć. Jeśli (kiedy!) Tak się stanie, lepiej przygotuj się do szybkiego i jasnego wyjaśnienia, jak poprawić, jeśli chcesz, aby pozostali pozytywnie nastawieni do TDD.

komar
źródło
2
Dobra odpowiedź, ale wspomnę, że jeśli nikt inny nie używa TDD ani nie uruchamia pakietu testowego, wówczas częstym scenariuszem przerwania testu byłby przypadek, gdyby ktoś dokonał zmiany w kodzie produkcyjnym bez zmiany testu, aby spodziewać się zmiany zachowania. Może to być tak proste, jak zmiana sformułowania w komunikacie o wyjątku. Sprawdzają się, OP sprawdzają, testy się psują, pojawia się wesołość. Możesz rozważyć test, w którym dokładny komunikat o błędzie jest zbyt kruchy, ale w umowie dotyczącej mojej ostatniej pracy zdefiniowano wadę jako każde odchylenie od podanego AAT, a komunikaty o błędach były częstymi wadami.
KeithS
12

Kiedy chciałem zachęcić do korzystania z Test Driven Development , uruchomiłem Cyber-Dojo . W tego rodzaju ćwiczeniach nacisk kładziony jest nie na sam kod, ale na proces pisania kodu .

Popołudnie spędziliśmy w parach, powtarzając ten sam kata, ale w różnych warunkach. Zaczęliśmy od wszystkich grup wykonujących jedno ćwiczenie w tym samym czasie. To zapewniło punkt odniesienia.

Następnie omówiliśmy niektóre podstawowe zasady TDD, aby wszyscy zmienili partnerów i powtórzyli tę samą kata. Powtórzyliśmy ten sam kata, aby nie podkreślać generowania kodu i zamiast tego koncentrować ludzi na procesie nazywania przypadków testowych i cyklu Czerwonego / Zielonego.

Następnie powtórzyliśmy kata ponownie, ale mniej więcej co 10 minut jedna osoba w każdej grupie przechodziła do innej grupy, symulując dość płynne środowiska zespołowe, które często spotykamy w tych dniach.

W końcowej iteracji obaj partnerzy zmieniali się co około 10 minut na różne grupy. Pomogło to wykazać, że w przypadku TDD nawet przeniesienie z jednego zespołu do zupełnie innego niekoniecznie musi być zbyt bolesne, ponieważ projekt powinien działać tylko jeden cykl czerwony / zielony od pracy.

Interesujące było to, że niewielu ludzi zrobiło TDD przed sesją, ale wiedza na temat TDD szybko się rozpowszechniła, aż do końcowej iteracji przez kata większość ludzi myślała TDD w sposób przynajmniej zrozumiały, dlaczego może być korzystne.

Ludzie ogólnie mówili, że popołudnie było zarówno zabawne, jak i pouczające, a my teraz szukamy innych sposobów wykorzystania Cyber-Dojo w moim miejscu pracy.


Cyber-Dojo , napisane przez Jona Jaggera , działa niezwykle dobrze do tego rodzaju ćwiczeń. Jest to internetowy oparty zintegrowane środowisko do prowadzenia celowego praktyki z TDD i uczenia się o dynamice zespołu. Ma wiele wybranych kata specjalnie, aby pomóc ludziom skoncentrować się na procesie TDD, a nie na problemie. Obsługuje także wiele języków, od Python i Ruby po Java i C ++.

Najlepszą rzeczą jest to, że po wykonaniu kata możesz wrócić i spojrzeć na czerwony / zielony postęp (a może nie * 8 ') każdej z uczestniczących grup. To sygnalizacja świetlna to świetny sposób na wizualizację działania procesu TDD.

Jeśli chcesz mieć własny serwer CyberDojo, cały projekt można znaleźć na github, a stamtąd jest nawet podłączona wirtualna maszyna urządzenia Linux pod klucz , co oznacza, że ​​zakładając, że masz już zainstalowany VMware player lub VirtualBox , możesz zacząć działać w kilka minut pobierania urządzenia!

Mark Booth
źródło
1
+1 za odniesienie do cyber-dojo. Nie był świadomy. Wygląda bardzo interesująco.
radarbob
8

Jeśli są odporne na TDD, jest w porządku. Wiele osób (w tym ja) ma najpierw problemy z pisaniem testów jednostkowych.

Powinieneś jednak zadać pytanie, czy w ogóle nie ma testów jednostkowych, a problem zerwania testów jednostkowych. Testy jednostkowe to sieć bezpieczeństwa, która zapobiega wielu możliwym błędom i pozwala na refaktoryzację kodu. Wyjaśnij o wyższej jakości kodu i czystszym kodzie.

Myślę, że najlepiej byłoby znaleźć film, który wyjaśnia zalety korzystania z TDD i pokazać go na spotkaniu.

Jeśli nie chce słuchać, możesz spróbować udać się do kogoś powyżej niej, ale może to nie być zbyt mądre, jeśli twój szef jest tak uparty.

BЈовић
źródło
6

Naprawdę trudno jest przekonać ludzi do zmiany nawyków, ale oto kilka rzeczy, które możesz wypróbować:

  • Porozmawiaj z innymi programistami i wyjaśnij im, dlaczego uważasz TDD za dobry pomysł.
  • Przekonaj ich (lub przynajmniej niektóre z nich), aby wypróbowali go przez ograniczony czas
  • Postaraj się ustalić minimalne wymagania, aby dobrze pracować jako zespół. Nie muszą koniecznie wykonywać TDD, ale z pewnością nie powinni sprawdzać kodu, który nie przejdzie testów jednostkowych. Jest to osobna kwestia niż przekonanie ich do korzystania z TDD i jest o wiele ważniejsze do rozwiązania.
  • Spróbuj przekonać kierownictwo do egzekwowania okresu próbnego dla TDD. Będziesz musiał być gotowy do przedstawienia dowodów na to, dlaczego jest to dobra praktyka i jak pozwoli zaoszczędzić czas i pieniądze firmy w przyszłości.

Jeśli to nie działa, możesz rozważyć pracę w innym miejscu. Istnieje wiele innych firm, w których życie byłoby znacznie łatwiejsze.

Oleksi
źródło
1
Singapur to mały kraj, niewiele wyborów.
wizztjh
6
„Jeśli to wszystko w ogóle nie działa, możesz rozważyć pracę w innym miejscu”. Lub, dla przypomnienia, możesz rozważyć zaprzestanie używania TDD :).
Lukas Stejskal
1
+1 za trzeci punktor. To jest prawdziwy problem.
riwalk
6

Istnieją tutaj 2 nieco inne problemy: zachęcanie ludzi do robienia TDD i łamanie testów.

Nie jestem pewien co do pierwszego numeru, osobiście uważam, że jest to sztuczny sposób pracy i nie pasuje do wszystkich rodzajów rozwoju. Jestem za dobrym zestawem testów jednostkowych, ale zwykle wydajniej jest najpierw napisać kod, a potem testy, ponieważ podczas pisania kodu moje pomysły ciągle się zmieniają, a pisanie testów to także strata czasu wcześnie (IMO).

W drugim wydaniu skonfiguruj projekt tak, aby testy jednostkowe były uruchamiane przy odprawie, tak aby inni programiści nie mieli innego wyboru, jak wiedzieć, że zerwali test.

Chris Card
źródło
To dobra uwaga, są to 2 osobne kwestie. Najpierw rozwiąż problem „łamią moje testy”. Następnie pracuj nad nakłonieniem ich do wykonania TDD.
ozz
+1 za „ponieważ podczas pisania kodu moje pomysły ciągle się zmieniają” i interesująca obserwacja. Może jestem w ten sam sposób i dlatego najpierw mam trudności z pisaniem testów? Zwłaszcza na początku eksperymentalnego projektu.
Buttons840
4

Jak powiedziano w wielu innych „jak przekonać X do użycia metody / technologii Y”, moja odpowiedź jest zawsze taka sama: przykładowo.

Użyj go i uzyskaj lepsze (wymierne) wyniki. Następnie upewnij się, że inni to zauważą.

Klaim
źródło
2

W przypadku istniejącego projektu nie. To tak, jakbyś wprowadzał zmiany w sposobie umieszczania nawiasów klamrowych w starszym kodzie, ponieważ nie lubisz stylu wcięcia.

Dante
źródło
to nowy projekt, właśnie zacząłem go w tym tygodniu.
wizztjh
Nasz ostatni projekt stał się zbyt duży i zawierał błędy. Więc myślę, że dobrym pomysłem jest użycie TDD w tym projekcie.
wizztjh
2

Wiele dobrych rad. A teraz trochę więcej ...

Musisz zdobywać serca i umysły (WHAM) po jednym Luddite na raz. Zapomnij o zmuszaniu go do opuszczenia gardła. Wiele lekcji obiektowych przez czas nieokreślony (przepraszam za to). W końcu trafisz na masę krytyczną, przekonaj „właściwą” osobę (osoby).

Twój stały i konsekwentny entuzjazm dla TDD jest bardzo ważny w kampanii WHAM.

Musisz zmienić przełamywanie testów i zmiany kodu w możliwe do nauczenia chwile, lekcje, które mają znaczenie dla twoich współkodujących. Spersonalizuj to. IE Czy zależy im na reputacji dostarczania ponadprzeciętnego czystego kodu? Czy zależy im na tym, by kierownictwo szarpało ich kodem, który jest teraz spóźniony, ponieważ testerzy integracji sprawdzili ich rzeczywistość? Czy Jack chce zmodyfikować jakiś trudny kod, ale boi się skutków ubocznych?

Zbierz dobre przykłady przełamywania testów jako chwytania błędów wywołanych koderem. Koderzy zobaczą zmianę testów jako niepotrzebną pracę na nieistotny kod; muszą zrozumieć, że testy obejmowały tylko ich osły.

Znajdź kod o globalnych implikacjach (prosta metoda użyteczności), zbuduj testy, a następnie zademonstruj, że testy pozwalają na zmianę bez obaw o trzęsienia ziemi w całej aplikacji. Chcę też podkreślić problem emocjonalny!

Zbierz kilka prostych przykładów kodu do wyczyszczenia (tj. Przekazanych do produkcji) i zademonstruj, że pomimo dodatkowych wysiłków związanych z kodowaniem testowym , zrobiliśmy to szybciej i z wyższą jakością.

Ostrzeżenie: TDD nie jest lekarstwem i nie może przezwyciężyć złego projektu i kodowania OO (ale na pewno może to ujawnić). Nie pozwól, aby luddyści obwiniali wysiłki związane z testowaniem kodu za ich niekompetencję.

radarbob
źródło
1

Spróbuję ponownie przekonać kierownika. Z tego, co napisałeś, nie sądzę, byś mógł przekonać swoich kolegów z drużyny do wykonania TDD za jej plecami.

Musisz mówić jej językiem. Menedżerowie zwykle nie są pod wrażeniem technologii, ale rozumieją język biznesowy:

  • testy pozwolą zaoszczędzić czas podczas programowania, ponieważ zamiast testowania ręcznego (próba lokalnego odtworzenia błędu, granie z konsolą szynową ...) uruchomisz testy automatycznie

  • test pozwoli zaoszczędzić dużo czasu podczas konserwacji aplikacji, dzięki czemu można łatwo wykryć błędy przy każdej zmianie. Wyjaśnij, że testy wymagają wyższych nakładów początkowych, ale na dłuższą metę się zwrócą (utrzymanie dobrych testów jest zwykle szybkie i łatwe)

  • a co zrobisz z dodatkowym czasem? tworzyć rzeczy z moar i zarabiać na nie

Jeśli chodzi o programistów, wypróbuj ten argument (zadziałało dla mnie, dawno temu): „Testujesz kod mimo to, z TDD lub bez. Tylko robisz to ręcznie zamiast zautomatyzować. Inteligentni programiści automatyzują tyle rzeczy, ile mogą. „

Lukas Stejskal
źródło
0

Przy prawdziwych projektach z terminami ludzie chcą skupić się na tym, aby wykonać pracę z tym, co wiedzą. To tylko ludzka natura. A jeśli nigdy nie nauczyłeś się TDD, byłbyś taki sam jak ona w tej sytuacji. Gwarantuję to.

Dlaczego tłum śmieciarzy nie kocha, nie uczy się i nie żyje RAII? Jak możesz popierać automatyczne zarządzanie pamięcią, ale zachować staromodne zarządzanie ogólnymi zasobami, takimi jak pliki, połączenia itp.? Ponieważ RAII jest technologią, której nie znają, nie rozumieją i nie mają czasu na użycie, gdy mają termin, który wymaga pracy.

Założę się, że nie używasz RAII i nie chcesz się go uczyć i rozumieć w obecnym projekcie. Tak samo jak twój współpracownik, który nie chce się uczyć i rozumieć TDD.

Lord Tydus
źródło