Testowanie jednostkowe brzmi dla mnie świetnie, ale nie jestem pewien, czy powinienem poświęcić trochę czasu na naukę, chyba że uda mi się przekonać innych, że ma to znaczną wartość. Muszę przekonać innych programistów i, co ważniejsze, osoby zajmujące się liczeniem fasoli w zarządzaniu, że cały dodatkowy czas spędzony na nauce frameworka testowego, pisaniu testów, utrzymywaniu ich aktualizacji itp. Zwróci się na siebie, a potem trochę.
Jaki jest dowód? Czy ktoś faktycznie opracował to samo oprogramowanie z dwoma oddzielnymi zespołami, z których jeden stosował testy jednostkowe, a drugi nie, i porównał wyniki? Wątpię. Czy mam to po prostu usprawiedliwić słowami: „Poszukaj tego w Internecie, wszyscy o tym mówią, więc to musi być słuszne”?
Gdzie są twarde dowody, które przekonają laików, że testy jednostkowe są warte wysiłku?
źródło
„Muszę przekonać innych programistów i, co ważniejsze, pracowników zarządzających, że cały dodatkowy czas poświęcony na naukę frameworka testowego, pisanie testów, aktualizowanie ich itd. Zwróci się na siebie, a potem trochę. "
Czemu?
Dlaczego nie zrobić tego po prostu cicho i dyskretnie. Nie musisz robić tego wszystkiego od razu. Możesz to zrobić w małych kawałkach.
Uczenie się ram zajmuje bardzo mało czasu.
Napisanie jednego testu, tylko jednego, zajmuje bardzo mało czasu.
Bez testów jednostkowych jedyne, co masz, to zaufanie do oprogramowania. Dzięki jednemu testowi jednostkowemu nadal masz pewność, a także dowód, że co najmniej jeden test przeszedł pomyślnie.
To wszystko, czego potrzeba. Nikt nie musi wiedzieć, że to robisz. Po prostu to zrób.
źródło
Podchodzę do tego inaczej:
Jakie masz zapewnienie, że Twój kod jest poprawny? Albo że nie łamie założenia X, gdy ktoś w twoim zespole zmieni funkcję func1 ()? Bez testów jednostkowych zapewniających „uczciwość” nie jestem pewien, czy masz dużo pewności.
Idea aktualizowania testów jest interesująca. Same testy często nie muszą się zmieniać. Mam 3x kod testowy w porównaniu z kodem produkcyjnym, a kod testowy został bardzo nieznacznie zmieniony . To jednak pozwala mi dobrze spać w nocy i pozwala mi powiedzieć klientowi, że mam pewność, że mogę wdrożyć funkcjonalność Y bez przerywania pracy systemu.
Być może w środowisku akademickim istnieją dowody, ale nigdy nie pracowałem w świecie komercyjnym, w którym ktoś zapłaciłby za taki test. Mogę ci jednak powiedzieć, że dobrze mi się udało, trochę czasu zajęło mi przyzwyczajenie się do frameworka testowego, a pisanie testów sprawiło, że naprawdę zastanawiałem się nad swoimi wymaganiami i projektem, o wiele bardziej niż kiedykolwiek pracowałem w zespołach, które nie napisał żadnych testów.
Oto, gdzie to się opłaca: 1) masz zaufanie do swojego kodu i 2) łapiesz problemy wcześniej niż w innym przypadku. Ty nie masz QA facet powiedzieć „hej, nie przeszkadzało granice sprawdzanie funkcji xyz (), prawda? On nie dostać się do stwierdzenia, że błąd, ponieważ jesteś okazało się, że miesiąc temu. To jest dobre dla go, dobre dla Ciebie, dobre dla firmy i dobre dla klienta.
Najwyraźniej to anegdota, ale dla mnie zdziałało cuda. Nie jestem pewien, czy mogę zapewnić Ci arkusze kalkulacyjne, ale mój klient jest zadowolony i to jest ostateczny cel.
źródło
Udowodniliśmy twardymi dowodami, że można napisać kiepskie oprogramowanie bez testów jednostkowych. Uważam, że istnieją dowody na kiepskie oprogramowanie z testami jednostkowymi. Ale nie o to chodzi.
Testowanie jednostkowe lub programowanie sterowane testami (TDD) to technika projektowania, a nie technika testowa. Kod napisany na podstawie testów wygląda zupełnie inaczej niż kod, który nim nie jest.
Chociaż to nie jest twoje pytanie, zastanawiam się, czy naprawdę jest to najłatwiejszy sposób, aby pójść tą drogą i odpowiedzieć na pytania (i dostarczyć dowody, które mogą zostać zakwestionowane przez inne raporty), które mogą zostać źle zadane. Nawet jeśli znajdziesz twarde dowody w swojej sprawie - ktoś inny może znaleźć twarde dowody przeciwko.
Czy zadaniem liczników ziaren jest określanie, jak powinni pracować pracownicy techniczni? Czy zapewniają najtańsze narzędzia we wszystkich przypadkach, ponieważ uważają, że nie potrzebujesz droższych?
Argument ten jest albo wygrywany na podstawie zaufania (jedna z podstawowych wartości zespołów zwinnych), albo przegrywany w oparciu o siłę roli zwycięskiej strony. Nawet jeśli zwolennicy TDD wygrają w oparciu o siłę roli, uznałbym to za przegrane.
źródło
Jeśli jesteś również zainteresowany dowodami przeciwko testom jednostkowym, oto jeden dobrze zbadany i przemyślany artykuł:
Dlaczego większość testów jednostkowych to marnotrawstwo James O Coplien (szczupły i zwinny guru)
źródło
Więcej o TDD niż stricte jednostkowym testowaniu, tutaj jest łącze do Uświadomienia sobie poprawy jakości poprzez rozwój oparty na testach: wyniki i doświadczenia czterech zespołów przemysłowych , autorstwa Nagappana, E. Michaela Maximiliena, Thirumalesh Bhat i Laurie Williams. artykuł opublikowany przez grupę Microsoft Empirical Software Engineering and Measurement (ESM) i już wspomniany tutaj.
Zespół odkrył, że zespoły TDD stworzyły kod, który jest od 60% do 90% procent lepszy (pod względem gęstości defektów) niż zespoły bez TDD. Jednak zespoły TDD potrzebowały od 15% do 35% więcej czasu na ukończenie swoich projektów.
źródło
Oto świetna i zabawna lektura faceta, który zmienia swoją firmę od wewnątrz. Nie ogranicza się do TDD. http://jamesshore.com/Change-Diary/ Zauważ, że od dłuższego czasu nie przekonał „fasolkowych liczników” i zamiast tego zastosował „taktykę partyzancką”.
źródło
Aby dodać więcej informacji do tych odpowiedzi, istnieją dwa źródła metaanalizy, które mogą pomóc w określeniu wpływu wydajności i jakości na doświadczenie akademickie i branżowe:
Wstęp redaktorów gościnnych: TDD - sztuka nieustraszonego programowania [ link ]
Wpływ rozwoju opartego na testach na zewnętrzną jakość i produktywność: metaanaliza [ link ]
Abstrakcyjny:
źródło
Cóż, jest kilka dużych firm, które wymagają używania testów jednostkowych, ale jeśli jesteś małą firmą, po co naśladować duże?
Dla mnie, kiedy zacząłem od testów jednostkowych, wiele lat temu (dziś używamy głównie modelu zachowania ), było to spowodowane tym, że nie mogłem kontrolować całej ścieżki w jednej aplikacji.
Byłem przyzwyczajony do programowania od dołu i REPL, więc kiedy dostałem test jednostkowy (jeden test dla każdej funkcji), było to jak przywrócenie REPL do języków, które są bardzo mocno kompilowane. To przywróciło zabawę do każdego wiersza kodu, który napisałem. Czułem się bogiem. Lubię to. Nie potrzebowałem raportu, aby powiedzieć mi, że zacząłem pisać lepszy kod szybciej. Mój szef nie potrzebował raportu, żeby to zauważyć, ponieważ robiąc szalone rzeczy, nagle nigdy nie przegapiliśmy terminu. Mój szef nie potrzebował raportu, aby zauważyć, że liczba „zwykłych” błędów spada z (do wielu) do prawie zera z powodu tej bardzo dziwnej rzeczy związanej z pisaniem nieproduktywnego kodu.
Jak już napisał inny plakat, nie używasz TDD do testowania (weryfikacji). Piszesz go, aby uchwycić specyfikację, zachowanie tego, co działa twoja jednostka (obiekt, moduł, funkcja, klasa, serwer, klaster).
Istnieje wiele niepowodzeń i historii sukcesów związanych z przejściem na inny model tworzenia oprogramowania w wielu firmach.
Po prostu zacząłem go używać, gdy miałem coś nowego do napisania. Jest takie stare powiedzenie, które ciężko mi przetłumaczyć na angielski, ale:
źródło
Istnieją statystyki, które dowodzą, że naprawienie błędu znalezionego w teście jednostkowym / integracyjnym kosztuje wielokrotnie mniej niż naprawienie go już w systemie live (opierają się na monitorowaniu tysięcy rzeczywistych projektów).
Edycja : na przykład, jak wskazano, książka „ Code Complete ” opisuje takie badania (paragraf 20.3, „Względna skuteczność technik jakości”). Ale są też prywatne badania w dziedzinie doradztwa, które również to potwierdzają.
źródło
Mam do tego jeden zestaw punktów danych - z doświadczenia, które sprzedało mi testy jednostkowe.
Wiele księżyców temu byłem świeżo upieczonym absolwentem pracującym nad dużym projektem VB6 i miałem okazję napisać dużą część kodu procedury składowanej. Z podsystemu, który pisałem, stanowiło około 1/4 całej bazy kodu - około 13 000 LOC z około 50 KB.
Napisałem zestaw testów jednostkowych dla procedur składowanych, ale testowanie jednostkowe kodu interfejsu użytkownika VB6 nie jest tak naprawdę wykonalne bez narzędzi takich jak Rational Robot; przynajmniej wtedy nie było.
Statystyki z zapewniania jakości dotyczące tego artykułu wskazywały, że około 40 lub 50 usterek zostało zgłoszonych w całym podsystemie, z czego dwa pochodziły z procedur składowanych. To jedna wada na 6500 linii kodu w porównaniu z 1 na 1000–1200 w całym fragmencie. Należy również pamiętać, że około 2/3 kodu VB6 to standardowy kod do obsługi błędów i rejestrowania, identyczny we wszystkich procedurach.
Bez zbytniej zmiany kierunku można przypisać testom jednostkowym przynajmniej poprawę współczynnika defektów o rząd wielkości.
źródło