Dlaczego pozwolić / nie pozwolić programistom na przetestowanie własnej pracy

81

Chcę zebrać kilka argumentów, dlaczego pozwolenie programistom na przetestowanie własnej pracy jako ostatniego kroku przed wejściem produktu do produkcji jest złym pomysłem, ponieważ niestety moje miejsce pracy czasami to robi (ostatnim razem, gdy to się pojawiało , spór sprowadzał się do tego, że większość ludzi była zbyt zajęta innymi rzeczami i nie miała czasu na zapoznanie się z tą częścią programu przez inną osobę - jest to bardzo specjalistyczne oprogramowanie).

W tym przypadku istnieją plany testów (choć nie zawsze), ale zdecydowanie popieram stworzenie osoby, która nie dokonała testowanych zmian, faktycznie wykonując testy końcowe. Pytam więc, czy możesz podać mi dobrą i solidną listę argumentów, które mogę przywołać przy następnej dyskusji. Lub przedstawić kontrargumenty, jeśli uważasz, że jest to w porządku, szczególnie gdy istnieją formalne przypadki testowe do przetestowania.

pyvi
źródło
6
Twoje pytanie wskazuje, że programiści nie powinni przeprowadzać żadnych testów. Chciałbym upewnić się, że programiści faktycznie testują oprogramowanie, aby upewnić się, że działa (nie tylko kompiluje), aby nie marnować czasu testerów.
dnolan
4
@dnolan: Mówię tutaj o testach końcowych, testach przed wprowadzeniem kodu do produkcji. Oczywiście programista powinien przetestować podczas programowania.
pyvi
Ponieważ tak to się kończy: devopsreactions.tumblr.com/post/88260308392/testing-my-own-code
Michał M

Odpowiedzi:

103

Jak zauważyli inni (i ty), programiści powinni przetestować własny kod. Jednak później każdy nietrywialny produkt powinien zostać przetestowany przez niezależną osobę (osoby działające w dziale kontroli jakości i / lub samego klienta).

Programiści zwykle pracują z nastawieniem programistów na „jak sprawić, by to działało?” . Dobry tester myśli o tym „jak to przerwać?” - zupełnie inny sposób myślenia. Testy jednostkowe i TDD uczą programistów do zmiany kapeluszy do pewnego stopnia, ale nie powinieneś na tym polegać. Co więcej, jak zauważyli inni, zawsze istnieje możliwość niezrozumienia wymagań. Dlatego testy ostatecznej akceptacji powinny być przeprowadzane przez osobę możliwie najbliższą klientowi .

Péter Török
źródło
3
Zgadzam się. Po godzinach, dniach, a nawet tygodniach próbowania „sprawić, by działało” w wyznaczonym terminie, przełamanie tego sposobu myślenia może być BARDZO trudne (może nawet niemożliwe). Może być możliwe obiektywne przetestowanie, jeśli masz czas na odłożenie pracy i powrót do niej po przerwie, ale jest to rzadko wykonalne.
PeterAllenWebb
Testerzy w czarnym kapeluszu ...?
Mateen Ulhaq
7
+1 za „Programiści zwykle pracują z nastawieniem programistów na„ jak sprawić, by to działało? ”. Dobry tester zastanawia się nad„ jak temu
zaradzić
Jedna dodatkowa uwaga tutaj; podczas gdy testowanie jest ważne, recenzje kodu znacznie pomagają w wykrywaniu błędów i zapewniają pisanie odpowiednich testów jednostkowych. Programiści mogą testować różne błędy za pomocą testów jednostkowych, dlatego niezwykle ważne jest, aby więcej niż jedna osoba testowała oprogramowanie.
Rudolf Olah,
127

Deweloper wie, jak działa ich kod, i przyzwyczai się do testowania kodu zgodnie z tą wiedzą.

Deweloperowi trudno będzie usunąć się z myślenia „jak to działa”, a nie „jak to powinno działać”.

Z tego powodu lepiej jest poprosić kogoś o wysokim stopniu obiektywności do przetestowania programu, tj. QA lub Test Engineers

John Shaft
źródło
3
Zgadzając się, deweloper wybierze ścieżkę najmniejszego oporu wobec „przetestowania” ich zastosowania, przypadki krawędzi będą rzadko rozpatrywane.
dnolan
68
@dnolan, to nie tylko „ochrona” ich kodu, ale także to, że o czymkolwiek nie pomyśleli w kodowaniu, nie pomyślą o testowaniu.
StuperUser
4
Programiści testują również z tymi samymi uprzedzeniami, jak kierowali swoją pracą. Osoby testujące rzadziej je udostępniają.
AProgrammer
4
@ Jörg W Mittag nie bardzo. Tak jak nie każdy tester pomyśli o każdym przypadku testowym, tak też nie każdy programista. Stąd programowanie par itp. I oddzielne zespoły zapewniania jakości. Dwie głowy są zawsze lepsze niż jedna.
StuperUser
18
W jednym miejscu, w którym pracowałem, miałem nie tylko wdrażać nowe funkcje, ale także pisać plany testów. Oznaczało to, że jeśli coś źle zrozumiem, zostanie to wdrożone niepoprawnie, ale nie zostanie złapany przez dział testowy.
David Thornley,
30

Testerzy Test na złamanie, prosty. Tego rodzaju stronniczość jest potrzebna, aby naprawdę dowiedzieć się o ogranicznikach programu.

Aditya P.
źródło
15

Programiści MUSZĄ przetestować swoją pracę. Jest to dorozumiana odpowiedzialność.

Zakładam, że nie masz zespołu dedykowanego do przeprowadzania testów opartych na twoim oświadczeniu. Jednak posiadanie zespołu dedykowanego do testowania naprawdę pomoże, ponieważ programiści zwykle testują swój kod w sposób, w jaki go kodowali. Nie oznacza to, że gdy masz już jakiś zespół zapewniania jakości, możesz już przystąpić do testowania jako obowiązek programistów.

Programiści zwykle używają sieci z ogromnymi dziurami do wyłapywania błędów. W rezultacie uciekają mniejsze błędy.

setzamora
źródło
+1 za „Deweloperzy MUSZĄ przetestować swoją pracę. Jest to domniemana odpowiedzialność” - Chodzi o to, aby przetestować twoją pracę przez kogoś innego, aby złapać błędy, które przegapiłeś, a nie wykonywać za ciebie pracy (co niektórzy zdają się myśleć)
Wipqozn
15

Ponieważ programiści nie są dobrzy w próbach złamania własnego kodu. Ich umysł po prostu podąża właściwą ścieżką wprowadzania danych i interakcji z aplikacją. Wiele błędów wynika z interakcji z systemem jak normalny facet . Programiści nie są zwykłymi użytkownikami. Są profesjonalnymi użytkownikami.

Saeed Neamati
źródło
3
Ogólnie rzecz biorąc, programiści wykonują okropną robotę testując własny kod, a ja zaliczam się do tej grupy. Dla firmy produkującej oprogramowanie solidny dział kontroli jakości jest absolutnie niezastąpiony.
Adam Crossland,
3
W przypadku wysoce złożonego, specjalistycznego oprogramowania programiści mogą nawet nie być profesjonalnymi użytkownikami oprogramowania. Z pewnością nie zawsze mogę dokładnie przewidzieć, jak zmiana, którą dokonam w kluczowym komponencie, wpłynie na inne części systemu. Przeszukanie go przez kogoś służy temu samemu celowi, co programowanie w parach: nie tylko zmusza cię do myślenia z góry, ale także drastycznie zmniejsza prawdopodobieństwo niezauważenia błędu, dopóki nie wpadnie na niego klient. W tym momencie naprawienie będzie znacznie droższe.
CVn
W przeszłości stwierdziliśmy, że nie potrzebujesz dedykowanych testerów, zwykle wystarczy, aby inny programista sprawdził napisaną przez Ciebie funkcjonalność. Powodem tego jest to, że nasza firma myśli, że mogą wynająć małpy dla testerów. Ale zgadzam się, że dobrzy testerzy są bardzo ważni.
c_maker
10

Istnieje kilka dobrych powodów, aby mieć dedykowany zespół testujący. Po pierwsze, jak wspomniano powyżej, programiści bardzo dobrze sprawdzają, czy ich kod działa, ale go nie łamią.

Ponadto, jak mówisz, programista wie, co napisali, ale zespoły testujące wiedzą, co powinno być napisane. Czasami te dwie koncepcje nie pasują do siebie. Jednym z zadań zespołu testującego jest upewnienie się, że oprogramowanie spełnia wymagania. W wielu przypadkach programista zna bardzo dobrze tylko kilka części systemu, ale zespół kontroli jakości wie wszystko.

Co prowadzi do kolejnego powodu, zespoły testujące przeprowadzają pełne testy integracyjne. Fragment kodu, który właśnie napisałeś, może sam działać dobrze, ale może uszkodzić inne funkcje, o których nie wiedziałeś.

Po pracy z zespołem kontroli jakości i bez niego, mogę powiedzieć, że w 100% doceniam pracę, którą wykonują i powiem, że są cenioną częścią zespołu oprogramowania. Gdy masz zespół kontroli jakości, to znacznie ułatwia uwalnianie twojego kodu, bo wiesz, że został dokładnie przetestowany, a to oznacza, że ​​otrzymujesz mniej połączeń 3 nad ranem.

Tyanna
źródło
Podoba mi się kwestia kontroli jakości w istocie polegająca na sprawdzeniu wyniku, aby upewnić się, że spełnia on wymagania. Dobrze jest mieć przynajmniej 2 osoby, które zgadzają się, że działa tak, jak powinno.
Andy Wiesendanger,
+1 dla a testing teams knows what should have been written. To bardzo prawda.
CVn
8

Programiści powinni testować własny kod.

Niezależni testerzy nie tylko testują złamanie, ale także testują nieokreślone i nieokreślone założenia, które opracowali programiści podczas kodowania.

Gilbert Le Blanc
źródło
+1: To powinno być wyżej w rankingu. Nie chodzi tylko o lenistwo dewelopera. Deweloper, który testuje swój własny kod, będzie miał na uwadze pewien zestaw założeń - tych samych, które miał na myśli podczas kodowania. Więc ma martwy punkt podczas testowania. Nie będzie tak pomysłowy, jeśli chodzi o sposoby łamania własnego kodu, jak niezależny tester, który przychodzi do niego z zupełnie innymi założeniami.
Ken Bloom
7

Spodziewałbym się, że programista przeprowadzi wstępne testy przed dokonaniem jakichkolwiek zmian i upewni się, że kod działa. Oczekiwałbym wtedy, że programista dołączy do przypadków testowych jakąkolwiek konkretną wiedzę na temat „białej skrzynki”. Na przykład wyszczególnia wszelkie inne obszary kodu, które mogły zostać zmienione.

Główny sprzeciw programistów testujących własny kod polega na tym, że testujesz tylko jeden punkt widzenia. Deweloper przeczytał specyfikację i zinterpretował ją. Mamy nadzieję, że specyfikacja jest jasna, kompletna i jednoznaczna, ale nie zawsze tak jest. Deweloper mógł źle zrozumieć część specyfikacji. Jeśli przetestują własny kod, nie zostanie on przechwycony, ponieważ stwierdzą, że funkcja działa zgodnie z oczekiwaniami.

Różni ludzie będą również mieli tendencję do używania produktu w różny sposób i w wyniku tego będą przechodzić różne trasy przez kod. Deweloper zapewni, że kod będzie dla nich działał, ale mógł nie wziąć pod uwagę przypadku, który może znaleźć inny tester.

Luke Graham
źródło
5

Programiści powinni przetestować własną pracę. Pozwalanie programistom na przekazywanie niesprawdzonej pracy zespołowi ds. Kontroli jakości lub ich współpracownikom to naprawdę zły pomysł. Marnuje czas zarówno programistów, jak i testerów oraz niszczy relacje.

Jednak to nie zawsze wystarcza. Deweloperzy prawdopodobnie będą podążać szczęśliwą ścieżką przez system lub będą ślepi na niektóre osobliwości, na które byli narażeni w kółko podczas rozwoju.

Inną kwestią jest to, że może istnieć wiele warstw komunikacji między specyfikacją a wdrożeniem. Może to prowadzić do efektu chińskich szeptów na końcowym urządzeniu. Najlepiej, jeśli ktokolwiek zdefiniował wymaganie lub raport o błędzie, sprawdza, czy działa tak, jak chciał.

Paul Butcher
źródło
3

Jako programista jesteś odpowiedzialny za swój własny kod, powinieneś go przetestować. Does the feature work as expected?Jeśli odpowiedź brzmi tak, to koniec.

Dlaczego nie powinieneś robić przypadków testowych?

  1. Jesteś subiektywny , ponieważ znalezione błędy są pisane przez ciebie (lub twoich kolegów).
  2. Jesteś zbyt drogi, aby firma mogła przeprowadzać testy przypadków. (Mam nadzieję).
Wesley van Opdorp
źródło
2
Pomysł, że programiści są zbyt cenni, aby wykonać <wstaw zadanie, którego nie chcesz tutaj wykonywać> może być dość żrący z mojego doświadczenia.
Jeremy
3

Zazwyczaj programiści nie będą w większości przypadków tymi, którzy używają kodu, z wyjątkiem niektórych specjalnych przypadków. Tak więc ostatnim krokiem testowania przed awansem do systemu produkcyjnego powinno być testowanie akceptacji użytkownika, UAT. Zasadniczo są [lepiej] zaznajomieni z tym, czego oczekują od pakietu. I generalnie są bardziej zdolni do niszczenia rzeczy przy przepływach wejściowych nieznanych komuś, kto nie używa ich na co dzień.

Czy twoje plany projektowe nie uwzględniają testów użytkowników? Jeśli zmusisz użytkowników do przetestowania tego, możesz złapać błędy wcześniej niż po implementacji, co w moim świecie nie jest niczym złym.

kusiciel
źródło
3

Programiści nie powinni testować własnego kodu, ponieważ jest to podobne do oceniania sztuki własnego dziecka. Tak czy inaczej będzie dla ciebie pięknie i naprawdę potrzebujesz profesjonalisty, aby wskazać wady. Z drugiej strony testy jednostkowe są podobne do upewnienia się, że twoje dziecko nie próbuje malować ołowiem.

Jeśli NAPRAWDĘ nie chcesz zatrudniać QA, poproś programistów o napisanie kodu testowego dla innych programistów. To dobry pierwszy krok - wkrótce zobaczysz programistów proszących o zasoby związane z kontrolą jakości, ponieważ większość czasu spędzają na testowaniu kodu innych pod kątem problemów, oprócz CR.

Subu Sankara Subramanian
źródło
Tak, inni programiści testujący kod to minimalne / tymczasowe rozwiązanie, przy braku innych zasobów. (zakładając, że masz wielu dostępnych programistów!)
Tao
3

Nie tylko programiści chronią swój kod, jeśli nie zdają sobie sprawy z konkretnego przypadku lub źle interpretują specyfikację w sposobie, w jaki coś rozwijają, to pominą te przypadki podczas testowania swojego kodu.

Techniki i umiejętności testowania są bardzo różne.

Większość testów przeprowadzanych przez zespół testowy jest funkcjonalna (to, że produkt działa zgodnie ze specyfikacją) i czarna skrzynka (zespół testowy nie zobaczy wewnętrznego działania aplikacji). Testerzy funkcjonalni nie muszą się martwić o to, jak rzeczy działają, muszą jedynie skupić się na tym, czy tak się dzieje.

StuperUser
źródło
2

Z mojego doświadczenia, przynajmniej w mojej małej organizacji, użytkownik końcowy musi przetestować. Niemal każdy projekt, który otrzymujemy, nie zapewnia wszystkich potrzebnych informacji i zawsze pomija pewne szczegóły. Deweloper jest zawsze w niekorzystnej sytuacji testowej, ponieważ nie wie, jak wykonać zadanie użytkownika, więc chociaż wie, że oprogramowanie działa zgodnie z informacjami, które otrzymał, nie wie, czy to pomoże użytkownikowi końcowemu wykonują swoją pracę.

Kratz
źródło
1
Absolutnie. Kod roboczy to nie to samo, co poprawny kod sytuacji.
HLGEM
2

Programiści źle odczytują i błędnie interpretują wymagania, a osoby odpowiedzialne za wymagania często nie określają kluczowych rzeczy. Jeśli nikt poza testami programistów, nikt nie znajdzie tych rozłączeń przed uruchomieniem. Gdy programiści testują, wiedzą zbyt wiele o tym, jak to ma działać i nie próbują głupich rzeczy, które użytkownicy mogą wypróbować. Deweloperzy piszą także testy na podstawie własnej interpretacji wymagań, co zbyt często nie jest tym, co naprawdę miało na myśli. Testy zaliczają się, ale wymaganie nie zostało spełnione. Kiedy przeprowadzasz testy innej osoby, może ona mieć odmienne wyobrażenie o wymaganiach i często znajdujesz miejsca, w których wymaganie zostało źle wyrażone przez to, jak odmiennie interpretują je dwie różne osoby. O wiele lepiej dowiedzieć się tego podczas testowania niż po uruchomieniu.

HLGEM
źródło
Tak, doskonały punkt. Rzeczywistość, której często brakuje analizy biznesowej, oznacza, że ​​wymagania są często łamane lub niekompletne, co powoduje, że programiści albo spalają czas robiąc wymagania (dobrze, ale czasochłonne), albo przyjmują założenia (często niepoprawne, jeśli deweloper nie ma doświadczenia w domena).
Bernard Dy
2

Deweloper powinien wykonać wstępne testy, abyśmy wiedzieli, że kodowany przez nas kawałek będzie działał tak, jak powinien, zgodnie z naszymi wymaganiami. Więc wykonujemy normalne testy, a także piszemy testy jednostkowe dla napisanego przez nas kodu.

Następnym krokiem jest zadanie kontroli jakości, aby dowiedzieć się, czego programiści nie widzą, gdy piszemy kod. Deweloper myśli na wyższym poziomie, ale użytkownik może nie myśleć na tym samym poziomie. Gdy programista testuje swój utwór i musi wpisać jakiś tekst w polu tekstowym, zawsze może wprowadzić pełny ciąg znaków, myśląc, że zrobiłby to również użytkownik. Może i użytkownik może to zrobić, ale losowo, gdy wpisze w tekście znak specjalny, taki jak% & $ ^, który łamie aplikację, nie wygląda dobrze dla użytkownika końcowego. Deweloper nie może i nie będzie myśleć o wszystkich możliwościach, które mogą się wydarzyć, ponieważ nie jest wyszkolony do takiego myślenia. Jeśli chodzi o kontrolę jakości (tester), zawsze myślą o tym, co użytkownik może zrobić, aby złamać tę aplikację i wypróbować każdą głupią rzecz z książki, nie użytkownicy są głupi, ale nie powinniśmy pozostawiać nic przypadkowi.

Teraz musimy również zrozumieć, że na ogół wykonanych jest więcej niż jeden kawałek w tym samym czasie i oba będą przeznaczone do produkcji. Deweloper mógł przetestować tylko swój kawałek i pomyśleć, że działa dobrze, ale należy przeprowadzić ogólne testowanie regresji dla wszystkich elementów, które są wypychane, a także dowiedzieć się, że połączenie dwóch różnych elementów może zepsuć aplikację i robi to też nie wygląda dobrze. Musimy również wziąć pod uwagę scenariusze testowania obciążenia i inne rzeczy, z którymi testerzy są bardziej zaznajomieni.

Wreszcie musimy przejść przez UAT (test akceptacji użytkownika), aby zobaczyć, czy zrobiliśmy to, czego się spodziewaliśmy. Ogólnie rzecz biorąc, chociaż wymagania przechodzą przez BA, osoba końcowa może nie wiedzieć dokładnie, jak to wygląda i może pomyśleć, że to nie jest to, czego się spodziewali lub może chcieć dodać coś innego, aby poprawić wygląd lub z jakiegoś powodu mogą zeskrobać cały kawałek, ponieważ uważają, że kawałek nie byłby zgodny z dostępną już funkcjonalnością.

Jak wyjaśniono powyżej, są one bardzo ważne i nie mogą być wykonane przez samego programistę i są absolutnie potrzebne, aby aplikacja działała poprawnie. Kierownictwo może powiedzieć, że jest to podejście konserwatywne, ale jest to lepsze podejście. Możemy wprowadzić kilka drobnych poprawek do powyższego, ale nie możemy tego uniknąć w całości.

Amar Jarubula
źródło
2

Powyższe komentarze podnoszą świetne punkty.

Dodatkowym, wcześniej nie wymienionym, jest fakt, że oddzielny indywidualny kod testowy działa jako dodatkowa kontrola wymagań i czy system poprawnie je implementuje.

Wymagania i dokumentacja nie są doskonałe, a często implementacja jest wynikiem interpretacji wymagań przez programistę.

Gdy testy przeprowadzane są przez oddzielną osobę, zapewniają one również własną interpretację wymagań podczas tworzenia planu testów i wykonywania testów.

Gdy działania testowe są wykonywane niezależnie od działań programistycznych, a wyniki obu „zgadzają się”, stanowi to dodatkowe potwierdzenie, że system jest poprawny i naprawdę odpowiada pierwotnej intencji wymagań.

tschaible
źródło
2

Podczas testowania programista zobaczy pole tekstowe z etykietą „Ilość” i wpisz „1”. Doświadczony programista przeprowadzi następnie test kontrolny o wartości „2”.

Użytkownik zobaczy pole tekstowe z etykietą „Ilość” i wpisz „~~ jednorożce ROX !!! ~~”. Doświadczony użytkownik spróbuje również „-12 1/2”.

Mamy nadzieję, że tester będzie tam gdzieś, by ostrzec programistę o tym, czego doświadczy użytkownik, gdy zrobi te rzeczy.

Jeffrey L. Whitledge
źródło
2

Jednym z powodów jest to, że programiści są zbyt blisko własnego kodu. Wiedzą, że to dziwactwa, to trochę dziwne zachowania. Mają tendencję do testowania wokół tych drobiazgów, które tak dobrze znają. Nie są wystarczająco obiektywni. Zespoły testowe traktują to jak czarną skrzynkę. Piszą macierze dziesiątek lub setek przypadków testowych i metodycznie je przeglądają, aby zobaczyć, co zrobi kod. Często wymyślają scenariusze, o których zespół programistów nigdy by nie marzył.

Innym powodem jest czas. W przypadku dużych projektów, które są budowane etapami, zespół programistów zbuduje Etap 1. Następnie testerzy przetestują go podczas budowy Etapu 2 i zostaną usunięte wady Etapu 1. Dzieje się tak na wszystkich etapach, więc testowany etap jest poprzednim, który został zbudowany.

FrustratedWithFormsDesigner
źródło
1

Chcę zebrać kilka argumentów, dlaczego pozwolenie programistom na przetestowanie własnej pracy jako ostatniego kroku przed wprowadzeniem testu do produkcji jest złym pomysłem, ponieważ niestety moje miejsce pracy czasami to robi (ostatnim razem, gdy to się pojawiało , spór sprowadzał się do tego, że większość ludzi była zbyt zajęta innymi rzeczami i nie miała czasu na zapoznanie się z tą częścią programu przez inną osobę - jest to bardzo specjalistyczne oprogramowanie).

Testy nie są opcjonalne dla programisty. Deweloper musi przetestować napisany przez siebie kod. Jak inaczej może być pewien, że zadanie zostało wykonane pomyślnie? Musisz albo napisać jakieś testy automatyzacji (unittests), albo wykonać zadanie sprawdzania, czy „maszyna robi to, co chcę” manuall (używając GUI, wywołując polecenie z wiersza poleceń lub cokolwiek innego).

Wszystko, co jest następnie testowane, to „tylko” dodatkowe testy przeprowadzane przez innych ludzi (współpracowników, QA, ...). Nie ma alternatywy dla bezpośredniego testowania przez programistę. Każdy, kto mówi mi, że programista nie musi testować (lub nawet nie wolno mu) kodu / funkcji, którą napisał, po prostu nie rozumie, jak rozwija się oprogramowanie.

perdian
źródło
3
OP nie pyta, czy programiści powinni przeprowadzać testy; OP pyta, czy to dobry pomysł, że programista jako jedyny wykonuje testy.
Lie Ryan
1

Jest testowany przez kogoś, kto nie zna kodu, czy ci się to podoba, czy nie. Pytanie brzmi, czy chcesz, aby ktoś był Twoim klientem.

Karl Bielefeldt
źródło
1

Świetne pytanie. W twojej sytuacji istnieją przypadki testowe - czasami - a oprogramowanie wydaje się być na tyle skomplikowane, że przyspieszenie nowicjatu na produkcie nie jest praktyczne. Mówisz również, że przeprowadzony test jest testem końcowym przed produkcją

Powody, dla których deweloper może wykonać test końcowy

  • Wystarczająco dużo innych testów ... Istnieją testy jednostkowe, istnieje środowisko testów integracyjnych i jest ono używane, przeprowadzono testy interfejsu użytkownika, testy eksploracyjne itp. Itd. Następnie test końcowy jest mniej rygorystycznym kryterium akceptacji niż ostateczny „ przebiec"
  • Istnieje zestaw przypadków testowych napisanych przez profesjonalnego SQA / Testera, które ktoś (programista) może / musi jawnie przestrzegać
  • Ryzyko awarii funkcji / produktu / modułu zostało w inny sposób ograniczone do niskich poziomów (pozwól profesjonalistom przetestować obszary wysokiego ryzyka, a „nowicjusz” przetestować niższe ryzyko)
  • W rzeczywistości sytuacja biznesowa polega na tym, że wypuszczenie produktu z potencjalnymi wadami jest lepsze niż opóźnienie wydania
  • Deweloper, o którym mowa, jest w rzeczywistości również bardzo wykwalifikowanym testerem i jest w stanie dokonać mentalnej zmiany ról
  • Zmiana to poprawka błędu wprowadzona w terenie przez programistę, gdy witryna klienta jest zamykana lub w inny sposób traci przychody z powodu offline systemu (łata, która zostanie przywrócona do biura i przetestowana / wydana w kontrolowanej wersji JAK NAJSZYBCIEJ) )

Powody, dla których programista nie powinien przeprowadzać testów

  • Coś jeszcze

Zasadniczo wydaje się, że jesteś na właściwej drodze do zaatakowania prawdziwego rozwiązania - Poproś eksperta SQA o wygenerowanie przypadków testowych ...

Uwaga: generalnie popieram pozwolenie Deweloperom na testowanie, ale do cholery upewniam się, że istnieje pierwszy punkt ...

Al Biglan
źródło
1

Ludzie, będąc ludźmi, często cierpią na uprzedzenia poznawcze - w których ich ocena w dwóch prawie identycznych scenariuszach będzie się różnić, po prostu z powodu kilku rzeczy, które się zmieniły - jedną z rzeczy, które zauważyłem w ciągu 8 lat rozwoju, jest to, że deweloper ma do czynienia z testowaniem własnego kodu, w przeciwieństwie do kodu napisanego przez kolegę, testy przeprowadzone na jego własnym kodzie są znacznie gorszej jakości.

Nie oznacza to, że deweloper ponosi bezpośrednią winę - jego mózg użyje uprzedzeń, które napisali, aby wzmocnić fakt, że uważają, że ma rację, i wykona tylko podstawowe kontrole, w przeciwieństwie do programisty, który patrzy na kod innej osoby, przeprowadzi wiele dokładniejszych kontroli.

Istnieją tysiące przykładów, w których wprowadzono procedurę zapobiegającą uprzedzeniom poznawczym lub powszechnie znaną jako „czynnik ludzki”, na przykład systemy komputerowe w kontroli ruchu lotniczego, aby zapobiec sytuacji, w której dwa różne samoloty zajmowałyby tę samą przestrzeń powietrzną jednocześnie czas na wprowadzone procedury medyczne, więc więcej niż jeden lekarz musi postawić diagnozę.

Najwyższy czas, aby branża IT podążyła w kierunku bardziej profesjonalnego podejścia i wdrożyła procedury zapobiegające testowaniu własnego kodu.

Koder chirurgiczny
źródło
1
  • Każdy powinien przetestować - kod testowy Develpers, funkcjonalność testu QA'erów, marketingowy komunikat testowy. W ten sposób wszyscy podzielają tę samą filozofię i język testowania, co stanowi połowę sukcesu.

  • Testowanie to rutynowa konserwacja i zwykle używam analogii do porównania . Na przykład analogia wymiany oleju samochodowego. Nigdy nie musisz „wymieniać” oleju. Ale i tak robisz to regularnie. To samo dotyczy mycia zębów. Jest powód, dla którego utrzymujesz je codziennie - nie zamierzają przełamać „dzisiaj”, chodzi o jutro i przyszłe dni oraz o dokonanie inwestycji.

  • Każdy powinien wziąć na siebie odpowiedzialność za testowanie. Zespół ds. Kontroli jakości jest ważny, jednak „testowanie” jest czymś, co robi tylko zespół ds. Kontroli jakości, co sprawia, że ​​jest to „osobne” działanie, które nie jest zintegrowane z rozwojem produktu i przepływem pracy, co nie jest dobrą rzeczą.

  • Kiedy coś się zepsuje w produkcji, wykonaj dwie rzeczy:

    1. Powiedz „hmm, mamy na to test ” jako pierwszy komentarz.
    2. Dokonaj wszelkich poprawek, uwzględniając testy problemu , najpierw do odtworzenia, niż poprawki.
Michael Durrant
źródło
0

W mojej firmie tworzymy dość złożone aplikacje finansowe. Zgodnie z naszą ogólną polityką programista powinien upewnić się, że nie wystąpią żadne błędy techniczne. Zasadniczo wypróbuj wszystko, co możesz, aby go złamać, biorąc pod uwagę zasoby użytkownika. Jeśli nie możesz znaleźć błędu środowiska uruchomieniowego, wyślij go do licencjobiorców w celu przetestowania. Mieliśmy kilku programistów, którzy zagubili się w testowaniu wymagań biznesowych do tego stopnia, że ​​wypalili się, ale tylko dlatego, że za wszystkie te testy nie odpowiadali. O ile nie ma wyraźnego błędu, który jest wyraźnie widoczny, wysyłamy go dalej do osób, które otrzymują wynagrodzenie, aby zrozumieć wynik. Ponadto użytkownicy powinni odgrywać prawdziwą rolę w sprawdzaniu wyników. Sprzedawca w sklepie detalicznym nie przymierza dla ciebie ubrań, a jedynie pomaga ci w „szczegółach technicznych”, takich jak znalezienie ubrań o odpowiednim rozmiarze.

Morgan Herlocker
źródło
0

Jednym z problemów jest to, że programiści nie mają wystarczającej motywacji do łamania własnego kodu - niewiele osób jest skłonnych szukać błędów we własnych pracach lub jest skłonnych do popełniania błędów. Posiadanie osobnego zespołu pomaga zapewnić, że wszystko się zepsuje.

Wyatt Barnett
źródło
-1

Rola zapewniania jakości jest niezbędna, między innymi, aby ktoś mógł sprawdzić, czy programista zrozumiał wymagania. Deweloper nie może sam tego sprawdzić, ponieważ jeśli pomyśli, że źle zrozumiał, poprosi o wyjaśnienie.

Stephen Paulger
źródło