Jak mogę rozpocząć testowanie w testowej antykulturach? [Zamknięte]

20

Muszę się wyspowiadać: sformalizowane automatyczne testy nigdy nie były częścią mojego zaplecza programistycznego. Teraz praca w bardzo dużej firmie z wielu deweloperów (większość internetowych twórców czy innego rodzaju), i to jest oczywiste, że większość z nich nie zrobić test * albo. (* Nie zamierzam powtarzać formalnie ; proszę wywnioskować.)

Jeśli zaczekam na wsparcie mojej organizacji, aby rozpocząć testowanie, nigdy się nie wydarzy. Jeśli spróbuję „zmienić rzeczy od środka”, pchając testy w zarządzie, zabraknie mi pary, zanim nastąpi zmiana. Muszę teraz zacząć testowanie.

Ale z TDD i podobnymi rzeczami skończę z dużą ilością kodu testowego wraz z kodem produkcyjnym. Nasze systemy kontroli wersji (wszystkie scentralizowane) nie są zorganizowane do przechowywania kodu testowego. Będę musiał znaleźć miejsce na to wszystko na mojej stacji roboczej.

Czy można rozpocząć osobistą praktykę testowania oprogramowania w kulturze, która nie docenia ani nie zapewnia narzędzi do tego? Jakich technik i narzędzi używasz do testowania, gdy oficjalne narzędzia i organizacja nie mają miejsca na testy, struktury i automatyzację?

kojiro
źródło
14
Dlaczego nie możesz przechowywać kodu testowego w VCS swojej firmy? Wyobrażam sobie, że w projekcie, który ma srckatalog kodu produkcyjnego, można by również dodać testkatalog - czy z jakiegoś powodu jest to wyraźnie zabronione?
Péter Török
@ PéterTörök Przeceniasz nas. Nie mamy srckatalogu, mamy katalog główny. Aby sprawdzić mój kod w centralnym VCS, sprawdzałbym go w katalogu głównym.
kojiro
Jeśli nie masz kontroli źródła w swojej kulturze antytestowej, postaram się to zrobić najpierw (lub też tak), ponieważ rozwiąże to wiele innych problemów, które jestem pewien, że twój zespół ma. Następnie stanowi podstawę tego, co chcesz zrobić w celu przetestowania.
Scott Wylie
@ScottWylie Nie do końca to powiedziałem. Mamy VCS, po prostu nie mamy go zorganizowanego do testowania (lub wielu innych elementów poza prostymi edycjami do rzeczy z katalogu głównego). Myślę, że czyjś bratanek założył CVS w 1998 roku i od tego czasu nikt go nie zmienił.
kojiro

Odpowiedzi:

22

Zrobiłem to osobiście ze znacznym sukcesem. Kluczowe czynniki sukcesu:

  • Uzyskaj (wstępne) wsparcie zarządzania. Zalety testów automatycznych są dobrze udokumentowane i powinny przekonać każdego menedżera, aby przynajmniej spróbował. Obejmuje to znalezienie miejsca w VCS i serwerze kompilacji, ponieważ
  • Zautomatyzowane testy zapewniają pełną wartość tylko wtedy, gdy są uruchamiane często i automatycznie, abyś wiedział o problemach wkrótce i nie musiał polegać na ludziach, którzy nie zapominają o ich uruchomieniu. Potrzebujesz serwera kompilacji, który uruchamia je co najmniej raz dziennie. To może być stara stacja robocza. Jenkins wymaga bardzo mało pracy, aby biegać.
  • Dawaj dobry przykład. Pisz testy, mów o korzyściach, jakie ci zapewniają, a kiedy ujawnią błędy wprowadzone przez innych programistów, mów o tym, w jaki sposób byli chronieni przed potencjalnie znacznie większym zawstydzeniem.
  • Idź po nisko wiszące owoce. Niektóre części aplikacji będą trudne do przetestowania, inne łatwe. Niektóre będą mocne, inne kruche. Pisanie testów na kruche, ale łatwe do przetestowania części zapewnia największą wartość w jak najkrótszym czasie.
  • Sprawdź, czy możesz pisać testy wielokrotnego użytku, np. Konwencje testowe lub funkcje, które muszą mieć wszystkie moduły (strony internetowe, usługi REST, cokolwiek), ale o których często się zapomina.
Michael Borgwardt
źródło
7

Bez wsparcia zarządzania jesteś martwy w wodzie. Kierownictwo będzie twierdzić, że nie wykonujesz wartościowej pracy, zostaniesz ukarany w swoich opiniach, a na końcu zwolniony. Istnieją sposoby, aby kierownictwo przekonało się, że wczesne testy kosztują je mniej i to wszystko. Można zmienić kulturę, ale kładziesz szyję na bloku do krojenia.

Sugerowałbym przeczytanie rozdziału Księcia Machiavellego, w jaki sposób wprowadzić zmiany przed zrobieniem czegokolwiek.

Sardathrion - Przywróć Monikę
źródło
Twoja jest drugą odpowiedzią sugerującą, że testowanie będzie kosztowało czas, który w innym przypadku nie zostałby poświęcony. Ale testowanie ewangelistów (wydaje mi się) powie ci, że testowanie oszczędza czas. Nie tylko na dłuższą metę, ale nawet w ramach projektu o średniej długości, ponieważ nie poświęcisz tyle czasu na debugowanie kodu produkcyjnego, a testy zmuszą cię do dostosowania kodu, aby je przekazać, co (w moim zrozumienie teorii) wszystko służy zmniejszeniu całkowitego czasu poświęcanego na kodowanie. Czy zauważyłeś, że tak nie jest?
kojiro
1
@kojiro: Tak, ogólne testy zmniejszą czas i koszty. Nie zrobi tego jednak w krótkim okresie. Niektórzy menedżerowie uważają, że krótkoterminowe znaczenie jest ważniejsze. W końcu, co jest dobrym oprogramowaniem, jeśli nie jest to, za które firma otrzymuje zapłatę i może obciążyć klienta za poprawki błędów.
Sardathrion - Przywróć Monikę
2
Testowanie oszczędza czas, ale kiedy trzeba przerobić połowę kodu, aby można go było przetestować, marnujesz czas na początku, wykonując całą tę pracę tylko po to, aby miesiącami później móc przeprowadzić testy, a następnie przyspieszyć. Menedżerowie nie myślą w „miesiącach później”, myślą w „w tym miesiącu”, więc widzą tylko „stratę czasu”, ponieważ ten programista nie tworzy nowego kodu, bawi się testami, które możemy „ sprzedać lub, co bardziej prawdopodobne, kod refaktoryzujący, który „już działa”
Wayne Molina,
Zwykle nawet w krótkim okresie oszczędza to czas. Kiedy pracujesz nad czymś, o wiele szybciej jest w stanie wykonać fragment kodu przez test, a następnie uruchomić całą aplikację i nakłonić go do wykonania tego konkretnego fragmentu kodu.
Stefan Billiet,
3

Z mojego doświadczenia wynika, że ​​jeśli kultura jest anty-testowa, nie można rozsądnie jej wprowadzić. Albo testy będą postrzegane jako strata czasu i otrzymają reprymendę za „marnowanie czasu” lub „zabranie zbyt długo”, albo kod się pojawiał od lat, gdy nie pisano go w sposób testowalny (np. Brak interfejsów, wszystko ściśle powiązane) i będziesz musiał spędzić dużo czasu na refaktoryzacji i / lub przepisywaniu kodu (w ten sposób ryzykując „zbyt długo” i „marnowanie czasu”), aby był on testowalny, dzięki czemu możesz pisać testy w pierwszej kolejności .

Możesz mieć szansę, jeśli robisz rzeczy od podstaw, które muszą tylko wchodzić w interakcje z istniejącymi rzeczami (stworzyć ładne opakowanie wokół złych miejsc) lub jeśli możesz to zrobić w małych ilościach, w których nie spowoduje to problemów lub nie będziesz musiał „praca nad zadaniami nieprzypisanymi do ciebie”, które mogą umieścić cię w niełasce.

Wayne Molina
źródło
1

Nie sądzę, abyś zaszedł daleko, dopóki nie będziesz w stanie wystarczająco dobrze uzasadnić, że istnieje problem (który może nie być obecnie rozpoznawany), który może rozwiązać automatyczne testowanie.

Jeśli istnieje kultura ręcznego testowania w oparciu o zdefiniowane skrypty, wiąże się to z kosztami wykonania tych skryptów, co wiąże się z ryzykiem niepełnych lub niedokładnych wyników. Może istnieć historia (udokumentowana lub w formie „opowieści wojennej”). Zaproponuj projekt pilotażowy, aby zautomatyzować niektóre z tych testów ręcznych w celu zapewnienia długoterminowej oszczędności kosztów.

Jeśli nie ma nawet funkcji ręcznego testowania, sugerowałbym, że firma nie dostrzega, że ​​jakiekolwiek formalne testowanie, zautomatyzowane lub w inny sposób, ma wartość. W takim przypadku uważam, że droga przed nami jest długa i stromo pod górę, ale znowu może potrzebować wyraźnego wykazania, że ​​firma może skorzystać z mniej swobodnego podejścia do jakości oprogramowania. Jeśli nie możesz tego zrobić, to trudno zrozumieć, w jaki sposób można uzyskać wsparcie dla tego pomysłu z przyczyn komercyjnych.

Mike Woodhouse
źródło
0

Jednym z pomysłów jest napisanie testu, który udowodni, że kod napisany przez kogoś innego jest wadliwy. Powinien sprzedać koncepcję.

Anders Lindén
źródło