Niedawno zadałem pytanie na temat testów w tworzeniu gier - oto BTW, skąd o tym wiedziałem. Odpowiedzi wskazywały na pewne ciekawe, konkretne wady:
- To jest kosztowne, gdy twój kod powinien być wysoce sprzężony .
- Trudno to zrobić, gdy trzeba być świadomym różnych platform sprzętowych, kiedy należy przeanalizować dane wyjściowe dla użytkownika, a wynik kodu ma sens tylko w szerszym kontekście .
- Testowanie interfejsu użytkownika i interfejsu użytkownika jest bardzo trudne .
- Co więcej, zautomatyzowane testy mogą być droższe i mniej skuteczne niż kilka bardzo tanich (lub bezpłatnych) beta testerów .
Czwarty punkt przypomina mi o moich doświadczeniach. Pracowałem w bardzo szczupłej, zorientowanej na XP firmie Scrum, w której wysoce zalecane były testy jednostkowe. Jednak na drodze do bardziej szczupłego, mniej biurokratycznego stylu firma po prostu zaniedbała budowę zespołu ds. Kontroli jakości - nie mieliśmy testerów. Tak często klienci znajdowali trywialne błędy przy użyciu niektórych systemów, nawet przy pokryciu testowym> 95%. Chciałbym więc dodać kolejny punkt:
- Zautomatyzowane testy mogą sprawić, że poczujesz, że kontrola jakości i testowanie nie są ważne.
Pomyślałem też o dokumentacji i wysunąłem hipotezę, która może być ważna (w mniejszym stopniu) do testów dwóch. Po prostu czułem, że kod ewoluuje tak szybko, że bardzo trudno jest stworzyć dokumentację zgodną z taką prędkością, dlatego bardziej cenne jest spędzanie czasu na tworzeniu kodu niż pisanie ciężkiej, łatwo przestarzałej dokumentacji. (Oczywiście nie dotyczy to interfejsów API, ale tylko wewnętrznej implementacji.) Test cierpi z powodu tego samego problemu: może być zbyt wolny, aby pisać w porównaniu z testowanym kodem. OTOH, jest to mniejszy problem, ponieważ testy ostrzegają, że są nieaktualne, a twoja dokumentacja pozostanie cicha, dopóki nie przeczytasz jej bardzo, bardzo ostrożnie .
Wreszcie pojawia się problem: automatyczne testowanie może zależeć od narzędzi, a narzędzia te mogą być źle napisane. Jakiś czas temu zacząłem projekt przy użyciu XUL, a pisanie testów jednostkowych dla takiej platformy jest po prostu bolesne. Uruchomiłem inną aplikację przy użyciu Objective-C, Cocoa i Xcode 3, a model testowy na niej był w zasadzie mnóstwem obejść.
Mam inne doświadczenia na temat wad automatycznego testowania, ale większość z nich wymieniono w innych odpowiedziach. Niemniej jednak jestem zagorzałym zwolennikiem zautomatyzowanych testów. Pozwoliło to zaoszczędzić dużo pracy i bólu głowy i zawsze domyślnie go polecam. Uważam, że te wady są jedynie szczegółami w porównaniu z korzyściami z automatycznych testów. (Ważne jest, aby zawsze głosić swoją wiarę po skomentowaniu herezji, aby uniknąć auto da fé.)