Testy jednostkowe i integracyjne: jak może stać się odruchem


27

Wszyscy programiści w moim zespole znają testy jednostkowe i testy integracyjne. Wszyscy z tym pracowaliśmy. Wszyscy mamy z nim pisemne testy. Niektórzy z nas nawet poczuli większe zaufanie do własnego kodu.

Jednak z jakiegoś powodu pisanie testów jednostkowych / integracyjnych nie stało się odruchem dla żadnego z członków zespołu. Nikt z nas nie czuje się źle, gdy nie pisze testów jednostkowych w tym samym czasie co rzeczywisty kod. W rezultacie nasza baza kodu jest w większości odkryta w testach jednostkowych, a projekty wchodzą do produkcji nieprzetestowane.

Problem polega na tym, że gdy projekty są już w produkcji i już działają dobrze, uzyskanie czasu i / lub budżetu na dodanie testów jednostkowych / integracyjnych jest praktycznie niemożliwe.

Członkowie mojego zespołu i ja już znamy wartość testów jednostkowych ( 1 , 2 ), ale wydaje się, że nie pomaga to w przeprowadzeniu testów jednostkowych w naszym naturalnym przepływie pracy. Z mojego doświadczenia wynika, że ​​wprowadzanie testów jednostkowych i / lub zasięgu docelowego jest obowiązkowe, po prostu powoduje to słabą jakość testów i spowalnia członków zespołu po prostu dlatego, że nie ma motywacji do wygenerowania tych testów. Gdy tylko ciśnienie spadnie, testy jednostkowe nie będą już pisane.

Moje pytanie brzmi: czy są jakieś metody, z którymi eksperymentowałeś, które pomagają budować dynamikę / dynamikę w zespole, prowadząc do osób naturalnie chcących stworzyć i utrzymać te testy?


7
Rozczarowujące, jeśli oferowane są głosy plus i minus na temat tego, czy PO używa odpowiedniej formy płci. Z pewnością jakość pytania zależy od tego, o co jest zadawane i jego znaczenia dla strony, a nie na subiektywnych poglądach, czy włączenie zarówno jego, jak i jej, należy uznać za seksistowskie, czy nie. Ten rodzaj przyjaznej sprzeczki naprawdę nie pomoże reputacji strony ... ani zaangażowanych osób. (Mówię tylko!)
S.Robins,

@ S.Robins, masz rację i nie głosowałbym, gdybym nie pomyślał, że to nie jest dobre pytanie. Ale i tak komentarz jest obraźliwy. A kiedy dość często widzę takie rzeczy wśród programistów, po prostu nie mogę tego zatrzymać w sobie.
superM

2
@superM LOL! Wiem co masz na myśli. Nadmierna polityczna poprawność doprowadza moją kozę. Piszę albo całkowicie neutralnie pod względem płci, albo używam „on” wyłącznie po prostu dlatego, że takie odniesienie do twojej płci jest naturalne. Mój komentarz miał jednak być ogólnie stosowany, a nie konkretnie wzywać poszczególnych osób. ;)
S.Robins

1
Wyczyściłem niektóre komentarze. Komentarze + -1 są czystym hałasem i należy ich unikać, jeśli nie dodają niczego użytecznego do postu - przeczytaj naszą stronę z uprawnieniami do komentowania, aby uzyskać wskazówki , i prosimy o przeprowadzenie takich rozmów na czacie inżynierii oprogramowania . Jeśli chodzi o obraźliwe komentarze, należy je oznaczyć jako takie.
yannis

Odpowiedzi:


13

Nikt z nas nie czuje się źle, gdy nie pisze testów jednostkowych w tym samym czasie co rzeczywisty kod.

To jest punkt, do którego musisz się odnieść. Kultura twojego zespołu musi się zmienić tak, aby nie pisać testów podczas sprintu (lub jakiejkolwiek innej jednostki czasu, której używasz) staje się tak samo zapachem kodu, jak wartościami kodującymi. Wiele z nich wiąże się z presją rówieśników. Nikt tak naprawdę nie chce być postrzegany jako niespełniający norm.

Wykonaj testy samodzielnie. Widocznie krytykuj siebie, gdy ich nie robisz. Wskaż, gdzie „dobry” programista złapałby ten błąd, gdyby napisał testy jednostkowe. Nikt nie chce być zły. Spraw, aby to niepożądane zachowanie było złe, a ludzie podążą za nim.


+1 za zmianę kultury i chciałbym, abym miał jeszcze +1 za prowadzenie za przykład. Niezła odpowiedź.
Erik Dietrich,

5

Sprawienie, by cały zespół naprawdę tego samego chciał , może być dość trudne. Często zdarza się, że samo postrzeganie wartości w czymś nie wystarcza, aby zachęcić ludzi do zmiany zakorzenionego zachowania. Nawet ci, którzy cenią zmianę i którzy jej szczególnie pragną, mogą czasami być odpowiedzialni za podświadomie z nią walkę.

Problem dotyczy naprawdę motywacji indywidualnej, a nie motywacji zespołowej jako takiej. Przychodzi moment, gdy dociera do ciebie chwila jasności, albo w wyniku czegoś, co w końcu zrozumiałeś, albo w wyniku jakiegoś nowego narzędzia lub innej subiektywnej rzeczy, która powoduje, że przeciętny programista rzuca wszystko i całkowicie zmienia proces. Twoim zadaniem - jeśli zdecydujesz się na to, z wyjątkiem - jest sprawdzenie, czy istnieje sposób dla ciebie lub zespołu, aby dowiedzieć się, które rzeczy będą wyzwalać jasność dla każdego członka zespołu.

Dla mnie osobiście było to po prostu odkrycie frameworku StoryQ dla BDD w DotNet, co sprawiło, że zbyt łatwo było to zignorować i całkowicie mnie przekroczyło „barierę” test-pierwsza kontra test-jednocześnie. Później potwierdziłem mój wybór, kiedy znalazłem NCrunch dla Visual Studio. Połowa bitwy czasami nie polega na sprzedaży pomysłu, ale raczej na zmniejszeniu wysiłku wymaganego do wprowadzenia radykalnej zmiany nawyków ... a nawet wtedy może to zająć trochę czasu i pracy. Te same osobiste wyzwalacze nie były jednak wystarczające, aby wpłynąć na podejście moich kolegów w tym czasie, którzy wciąż piszą tyle samo kodu testowego jednocześnie, a nawet po kodzie implementacyjnym.

Czasami również nie chce się zmienić sposobu, w jaki się to robi, z powodu nieodłącznego strachu, nieufności lub niesmacznego spojrzenia na wysiłek wymagany do nauczenia się robić coś inaczej, nawet jeśli uzasadnienie zmiany jest rozsądne. Jeśli cała platforma testowa jest przystosowana do pracy w określony sposób, może być trudne uzasadnienie zmiany sposobu wykonywania zadań i potencjalnej zmiany oprzyrządowania , zwłaszcza gdy stare i nowe testy będą musiały nadal współistnieć przez cały okres istnienia projekt - i na pewno nie będziesz musiał przepisywać każdego testu, który kiedykolwiek stworzyłeś. Dziwne jest to, że czasami ludzie uważają, że jest to jedyny sposób na przyjęcie nowej metodologii testowania, a to samo w sobie utrudnia zaakceptowanie rozsądnych zmian na lepsze.

Naprawdę, jedynym sposobem, w jaki coś staje się refleksyjne, jest zmuszanie się do robienia tego w kółko, dopóki nie zauważysz, że musisz zbytnio koncentrować się na tym, jak to zrobić. Czasami jedynym sposobem na zrobienie tego w zespole jest ustalenie zasad, które mogą być nieco drakońskie, oraz ćwiczenie programowania par i recenzji kodu oraz wszystkiego innego, co może pomóc członkom zespołu wspierać się i dosłownie wymusić zmianę w zachowaniu, które ma nastąpić. Jednak, aby taka strategia była naprawdę skuteczna, nadal wymaga silnego i uczciwego zaangażowania ze strony każdego członka zespołu, aby zaakceptować niezbędne środki i wziąć udział w procesie ... oraz dużo cierpliwości ze strony wszystkich zaangażowanych .


3

Nikt z nas nie czuje się źle, gdy nie pisze testów jednostkowych w tym samym czasie co rzeczywisty kod

Nie jestem pewien, co rozumiesz przez „jednocześnie”, ale co powiesz na napisanie ich przed właściwym kodem?

Z psychologicznego punktu widzenia jest łatwo zrozumiałe, dlaczego jakakolwiek istota ludzka nie chciałaby zawracać sobie głowy pisaniem testów jednostkowych po kodzie. W tym momencie kod już działa, więc dlaczego, u licha, powinniśmy go przetestować? Pewne lenistwo zachodzi automatycznie, ponieważ jest nudne, pozornie bezużyteczne, a pisanie testów nie wydaje się niebezpieczne. W rezultacie nie znam wielu zespołów, które przez długi czas utrzymywały podejście testowe.

Z mojego doświadczenia wynika jednak, że po raz pierwszy (w stylu TDD) można się szybko uzależnić, ponieważ istnieją co najmniej 2 natychmiastowe, namacalne, uwalniające endorfiny korzyści:

  • Pomaga zaprojektować kod twarzą w twarz z konkretnymi wymaganiami wykonywalnymi i ulepszyć projekt, gdy dokonujesz refaktoryzacji, co jest znacznie bardziej celowe i satysfakcjonujące niż tylko podwójne sprawdzenie czegoś, co już działa.

  • Cykl TDD jest przerywany częstymi momentami „zielonego paska”, w których możesz cieszyć się smakiem natychmiastowego sukcesu. To sprawia, że ​​twój umysł jest zawsze zadowolony i gotowy do wprowadzenia kolejnej funkcji.

Więc nie próbowałbym sprawić, by twój zespół czuł się źle, kiedy nie pisali testów. Zamiast tego postaram się, aby poczuli się dobrze . TDD jest jednym ze sposobów na to.


3
Kolejną zaletą TDD (szczególnie w przypadku narzędzia do ciągłego testowania) jest szybka informacja zwrotna. W dużej bazie kodu, gdzie budowanie i uruchamianie oprogramowania może trwać kilka minut, TDD / CT drastycznie przyspiesza sprzężenie zwrotne, a tym samym rozwój.
Erik Dietrich,

0

najpierw musisz upewnić się, że napisanie testu i uruchomienie go jest łatwe, skonfigurowanie frameworka w bieżących projektach i uproszczenie procedury konfiguracji w przyszłych projektach

w ten sposób, gdy programista chce udostępnić nową funkcję, próbuje debugować, nie musi skakać przez tuzin obręczy, aby testy działały poprawnie

im bardziej bystre jest coś, co można zrobić, tym mniej prawdopodobne jest, że zrobisz z tego nawyk


0

Jedną z rzeczy, które zrobiłem, co okazało się nieco skuteczne w zainicjowaniu zmiany kultury, jest zorganizowanie cotygodniowego seminarium „curation test unit”. Oficjalnym celem tego jest utrzymanie szybkiego i aktualnego zestawu testów jednostkowych, ale moim zdaniem ważniejszym celem jest zapewnienie ludziom niskiego ciśnienia, aby mogli się wpaść, zadawać pytania i ćwiczyć testy . Fakt, że chcesz poświęcić godzinę lub cokolwiek tygodniowo wyłącznie na testy, również wysyła wiadomość, że jest to ważne.

Myślę, że w ten sposób zmieniasz kulturę i zaczynasz usuwać barierę robienia tego „odruchowo”, jak to ujmujesz. Ludzie będą mieli tendencję do powrotu do starych nawyków przy pierwszych oznakach przeciwności - takie spotkanie nie naprawi tego za jednym zamachem, ale myślę, że zainicjuje zmianę kultury i usunie barierę wynikającą z niezupełnie wiedząc co robisz.


0

Posiadanie grupy programistów, w której wszyscy naturalnie chcą coś zrobić, jest utopią (szczególnie, gdy mówimy o dużej grupie).

Testy jednostkowe i integracyjne są standardem . Tworzysz standard dla przepływu pracy i każdy członek zespołu powinien go przestrzegać. Standardy powinny być opracowywane z pomocą specjalistów ds. Kontroli jakości, ponieważ znają to lepiej. Programiści powinni przestrzegać standardów. To, co możesz zrobić, to uczynić standardy czystymi, łatwymi do zrozumienia i przestrzegania.

Nie chodzi o zaufanie do własnego kodu i chęć korzystania, chodzi o konieczność posiadania standardów kodowania i testowania, z których wszyscy korzystają, aby robić dobre rzeczy, i każdy programista powinien to zrozumieć.

Kiedy sprawisz, że ludzie od samego początku będą postępować zgodnie ze standardem, stanie się to odruchem i będzie przestrzegane. Ustanowienie zasady, że żaden kod nie może zostać umieszczony w bazie kodu bez testu jednostkowego, przekonałoby ludzi, że muszą to zrobić. W przypadku repozytoriów projektów obowiązują jeszcze bardziej restrykcyjne reguły. Na przykład firmy wykonują testy jednostkowe przed faktycznym kodowaniem jednostki (kiedy robią specyfikację modułu) i jest to bardzo dobra metoda. Jeśli programista umieści kod w bazie projektu / kodu, kod zostanie przepuszczony przez moduł testowy, a jeśli testy jednostkowe nie przejdą, wrócą do pracy.

Jeśli w tej chwili trudno jest dodać standardy i zasady, przynajmniej pomyśl o dodaniu ich do przyszłych projektów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.