Wiem, że to brzmi jak inne pytania, które już zostały zadane, ale w rzeczywistości jest nieco inne. Wydaje się, że ogólnie uważa się, że programiści nie są dobrzy w wykonywaniu roli testowania aplikacji. Na przykład:
Joel on Software - Pięć najlepszych (błędnych) powodów, dla których nie masz testerów (moje wyróżnienie)
Nawet nie myśl o próbie powiedzenia absolwentom CS college'u, że mogą przyjść dla ciebie pracować, ale „zanim przejdziesz do kodowania, wszyscy muszą trochę przećwiczyć kontrolę jakości. Widziałem dużo tego. Programiści nie robią dobrych testerów , a stracisz dobrego programistę, którego znacznie trudniej wymienić.
I w tym pytaniu jedna z najpopularniejszych odpowiedzi mówi (ponownie, moje podkreślenie):
Programiści mogą być testerami, ale nie powinni być testerami. Programiści zwykle mimowolnie / nieświadomie unikają korzystania z aplikacji w sposób, który mógłby ją uszkodzić. To dlatego, że to napisali i przeważnie testują, w jaki sposób należy go używać.
Pytanie brzmi, czy programiści źle sprawdzają się podczas testowania? Jakie są dowody lub argumenty na poparcie tego wniosku? Czy programiści źle radzą sobie z testowaniem własnego kodu? Czy istnieją dowody sugerujące, że programiści są naprawdę dobrzy w testowaniu?
Co mam na myśli przez „testowanie”? Ja nie średnią testów jednostkowych lub niczego, co jest uważane za część metodologii stosowanej przez zespół oprogramowania do oprogramowania zapisu. Mam na myśli jakąś metodę zapewnienia jakości, która jest używana po zbudowaniu kodu i wdrożeniu go na czymkolwiek, co zespół oprogramowania nazwałby „środowiskiem testowym”.
Odpowiedzi:
Wydaje się, że pytanie dotyczy konkretnie testowania systemu , więc do tego mam na myśli w tej odpowiedzi.
Myślę, że należy wprowadzić rozróżnienie między byciem złym człowiekiem, który chce przeprowadzić testowanie, a byciem złym w testowaniu.
Dlaczego programiści źle radzą sobie z testowaniem:
Dlaczego programiści są dobrzy w testowaniu:
Dlaczego programiści są złymi testerami:
źródło
Myślę, że programiści źle sprawdzają swój kod .
Chcemy wierzyć, że nasz kod działa idealnie zgodnie z wymaganiami i testujemy go jako taki. W moim przypadku testujemy własny kod, a następnie testujemy siebie nawzajem, zanim przejdziemy do rzeczywistego cyklu testowego, i wykryto w ten sposób znacznie więcej błędów niż tylko testowanie własnego kodu
źródło
Programiści są zdecydowanie właściwymi ludźmi do testowania niektórych części systemu - w niektórych miejscach są jedynymi, którzy mogą to zrobić skutecznie.
Jedno miejsce, w którym programiści są bardzo źli w testowaniu, to cały bit „używaj interfejsu użytkownika jak zwykły użytkownik” - nie są zwykłymi użytkownikami i nie zachowują się tak jak oni. Na przykład:
Zatem normalni użytkownicy robią wiele rzeczy, których nie robią programiści. UAT nie może całkowicie polegać na zespole deweloperów.
źródło
Na poziomie technicznym (testy jednostkowe, testy integracyjne, testy regresji) programiści są prawdopodobnie jedynymi wykwalifikowanymi osobami, które mogą być testerami, ponieważ tego rodzaju testy są zautomatyzowane i dlatego powinny być zautomatyzowane, co wymaga programowania.
Ale nie sądzę, że o tym mówisz, i jestem prawie pewien, że nie to też oznacza Joel Spolsky - pozostaje ta część, faktyczne ręczne testowanie: przekształcenie dokumentu wymagań i specyfikacji funkcjonalnej w skrypt testowy, a następnie skrupulatnie wykonujący ten skrypt na gotowym produkcie.
Bycie dobrym testerem wymaga cech, które są w większości ortogonalne w stosunku do tych, które są dobrym programistą. Jest trochę nakładania się - musisz być w stanie myśleć analitycznie, potrzebujesz pewnego pokrewieństwa z komputerami w ogóle - ale poza tym umiejętności testera są bardzo różne. To samo w sobie nie oznacza, że możesz mieć oba zestawy umiejętności, a tak naprawdę całkiem sporo osób prawdopodobnie ma. Jednak bycie naprawdę dobrym programistą wymaga pewnego lenistwa (chęci zautomatyzowania obowiązków), podczas gdy naprawdę dobry tester potrzebuje wytrwałości (sprawdź wszystkie trzy tysiące pól formularza pod kątem niespójności), aw konsekwencji nawet tych programistów, którzy mieć to, czego potrzeba, aby zostać testerem, zwykle brzydzi się tym pomysłem.
A potem jest selektywne uprzedzenie: programista, który jest już zaangażowany w projekt, nawet jeśli tylko marginalnie, ma już pewną wiedzę wewnętrzną na temat bazy kodu i będzie miał trudności z podejściem do niego z pustym umysłem, z perspektywy użytkownika końcowego . Nie musi to być nawet wyraźne, ponieważ w „Wiem, że ten przycisk działa, więc po prostu zauważę„ pass ”; może być znacznie bardziej subtelny, a te subtelne efekty mogą prowadzić do pominięcia krytycznych przypadków krawędziowych w testach.
źródło
Z mojego doświadczenia wynika, że tak, programiści są złymi testerami. Zbyt często widziałem, jak inni i ja mówili „Huh, ale przetestowałem to, zanim się zameldowałem!” gdy skonfrontowany przez testera odtwarzającego błąd przed tobą.
Czemu? Cóż, nie jestem pewien, dlaczego tak jest, ale może dlatego, że chcemy, aby wszystko działało. Lub chcemy po prostu przejść przez testowanie tej lub innej funkcji już.
W każdym razie, testowanie nie jest umiejętnością, której się nauczyliśmy i nie pracujemy jako programista, ponieważ jesteśmy dobrzy w łamaniu funkcji. Możemy również nie mieć pojęcia, jak właściwie zaplanować testy lub wykonać inne czynności związane z kontrolą jakości. Nie jesteśmy już wykwalifikowani do wykonywania pracy testera, niż tester jest uprawniony do wdrożenia nowego potoku renderowania 3D.
Jak w pytaniu, testowanie nie oznacza niczego zautomatyzowanego, ale testowanie za pomocą programu.
źródło
Istnieje kilka poziomów testowania. Testy „niskiego poziomu” mogą i muszą być wykonywane przez programistów. Myślę na testach jednostkowych.
Z drugiej strony, testy „wysokiego poziomu” to zupełnie inna sprawa. Ogólnie rzecz biorąc, myślę, że programiści są złymi testerami, nie dlatego, że brakuje im umiejętności, ale dlatego, że bardzo trudno zmienić sposób myślenia i sposób pracy za kilka razy.
Próbuję testować jak najszersze kody, ale po co najmniej 10 minutach wykonanych przez testera pojawia się coś, co można rozważyć pod kątem błędu lub ulepszenia. Oznacza to, że testowanie czegoś, co tworzysz, jest ciężką pracą. Wiesz, gdzie kliknąć, wiesz, kiedy kliknąć, znasz logikę biznesową, prawdopodobnie wiesz, jak dane są utrwalane. Jesteś bogiem, którego nigdy nie upadniesz.
źródło
Jakie masz na myśli testy? Jeśli masz na myśli kompleksowe, wyczerpujące testy, to mógłbym zobaczyć kilka uzasadnień dla powiedzenia tak, ale podejrzewam, że większość ludzi byłaby uboga w tej kategorii, gdyby wziąć pod uwagę wszystkie możliwe kombinacje danych wejściowych jako wymóg dla takich testów.
Mogę przyznać, że twórca oprogramowania, który projektuje oprogramowanie, może mieć wizję tunelową, jeśli chodzi o obsługę kodu i zignorować niektóre możliwe przypadki graniczne, których po prostu nie wzięto pod uwagę. Na przykład, jeśli zbuduję formularz internetowy, który przyjmuje liczbę, n, a następnie drukuje od 1 do n na ekranie, mogę przegapić pewne szczególne przypadki, takie jak jeśli nic nie zostanie wprowadzone lub coś, co nie jest liczbą naturalną, np. E lub pi . To, co program ma zrobić w takich przypadkach, może budzić wątpliwości.
Rozwój oparty na testach byłby przykładem metodologii programistycznej, która stawia testy w innym świetle, co może dać inny pogląd tutaj.
źródło
Programiści dobrze definiują testy, gdy definiują testy przed napisaniem kodu. Z praktyką stają się jeszcze lepsi.
Jednak podczas definiowania testów napisanego kodu nie radzą sobie zbyt dobrze. Będą mieli te same martwe punkty podczas testowania, co podczas pisania kodu.
Używanie programistów do ręcznego testowania jest po prostu głupie. Testowanie ręczne jest samo w sobie głupie; zmuszanie programistów do robienia tego jest wyjątkowo głupie. Jest drogi i odstrasza kompetentnych programistów.
źródło
Jednym z rodzajów testów, na których szczególnie widziałem devloperów, jest testowanie, czy warunek został spełniony. To, co devlopers uważają za coś wymaganego, a co testerzy uważają za to, to często dwie zupełnie różne rzeczy.
Mogę pomyśleć o jednym niedawno, w którym develoepr został poproszony o dokonanie eksportu delta, a twórca pomyślał, że oznacza to uzyskanie wszelkich rekordów, które nie zostały wysłane ani razu, a testerzy uznali, że oznacza to uzyskanie nowych zapisów i zmian. Musieli wrócić do klienta, aby dowiedzieć się, kto miał rację. Dokonałem przeglądu kodu i przyjąłem takie samo założenie, jak deweloper odnośnie do wymagań. Ponieważ logicznie, jeśli chcesz uwzględnić aktualizacje, wspomniałbyś o nich. I zazwyczaj jestem dobry w wykrywaniu tych dwuznacznych rzeczy, ponieważ kiedyś byłem po stronie użytkownika.
Więc inni deweloperzy przeprowadzający testy mieliby tendencję do przyjmowania wielu takich samych założeń, ponieważ oni również przyjmowali pewne założenia, takie jak: „mieliby więcej szczegółów, gdyby mieli na myśli X vice Y, ponieważ jest tyle szczegółów, na które należy odpowiedzieć, zanim będę mógł to zrobić Ale twórcy wymagań nie myślą w ten sposób. Więc ktoś, kto myśli bardziej jak twórcy wymagań, musi przetestować założenia programisty, a osoba, która nie jest programistą, jest lepszym człowiekiem, aby nawet dostrzec, że jest jakiś problem.
źródło