rozwój oparty na testach - kto powinien pisać testy?

12

Początkowo pisanie testu jest obowiązkiem programisty, ale zauważyłem, że w wielu przypadkach / programiści e-dojrzali przypadki te nie zapewniają nawet 80% zasięgu.
Co powiesz na to, że mam osobę odpowiedzialną za kontrolę jakości, która pisze WSZYSTKIE testy dla danego projektu zamiast programisty?
Czy są jakieś wady?

Itay Moav-Malimovka
źródło
2
Należy pamiętać, że TDD NIE oznacza zapisu wszystkich testów dla całego kodu, a następnie napisania kodu. To jest termin; jednak praktycznym podejściem jest pisanie testów, a następnie pisanie kodu w małych iteracjach; podchodząc do tego w bardziej równoległy sposób. Pisanie WSZYSTKICH testów przed czasem jest stratą czasu, ponieważ refaktoryzacja nieuchronnie się pojawi.
Aaron McIver

Odpowiedzi:

19

W rozwoju opartym na testach testy muszą być napisane przez programistę. W przeciwnym razie rozwój kieruje ktoś inny niż programista.

Gdy więc zlecisz pisanie testów nie-programistom, osoba ta zostanie programistą.

Moje doświadczenie w TDD polega na tym, że pisanie kodu testowego jest często tak samo trudne lub trudniejsze niż pisanie kodu produkcyjnego. Jeśli więc masz zasoby zdolne do napisania dobrego kodu testu jednostkowego / testu integracji, powinni oni napisać kod produkcyjny, który powoduje, że testy są udane.

Eric Wilson
źródło
1
Jeśli miałeś dwie podobnie myślące osoby ze stanowiska nastawionego na umiejętności, możesz prawdopodobnie podejść do TDD w sposób programowania parą, przełączając między testami a kodem. Nazywaj ich testerami / programistami / małpami kodowymi ... chodzi o zestaw umiejętności, których dotknąłeś.
Aaron McIver
A biorąc pod uwagę, że piszesz_test-write_code-run_test prawdopodobnie co minutę unicestwisz swoje tempo postępu.
Frank Shearar,
7

Zadaniem QA jest przeprowadzenie zupełnie innego rodzaju testu (tj. Testowania użyteczności / integracji). Nie muszą tak naprawdę znać technologii zastosowanych w kodzie.

Jeśli martwisz się niskim poziomem kodu, musisz zdyscyplinować programistów. Na przykład zatrzymanie pracy nad nowymi funkcjami, aż zwiększy się zasięg kodu. Niektóre organizacje posuwają się do tego, że mają repozytorium przechwytujące przed zatwierdzeniem, które nie zezwala na rejestrowanie odkrytego kodu.

Wreszcie, w „czystym” TTD, nie powinno być w ogóle żadnego odkrytego kodu (ponieważ najpierw piszesz testy). Są jednak przypadki (choć ludzie się o to kłócą), w których akceptowalny jest mniejszy zasięg kodu. Niektórzy twierdzą na przykład, że pisanie testów dla osób pobierających / ustawiających POJO to strata czasu.

Mchl
źródło
2

przypadki te nie zapewniają nawet 80% zasięgu

To może być problem z zarządzaniem.

Lub może to być nieistotne.

Po pierwsze, różnica między 80% a 100% pokrycia jest prawdopodobnie dużym kosztem przy bardzo niewielkich korzyściach.

„Zasięg” może znaczyć wszystko. Linie kodu, ścieżki logiczne itp. Domyślam się, że masz na myśli linie kodu (nie ścieżki logiczne).

Niektóre ścieżki logiczne są dość dobrze testowane „przez kontrolę”. Kod jest oczywisty, nie zawiera instrukcji if, ma bardzo, bardzo niską złożoność i prawdopodobnie nie wymaga dodatkowego testu.

20% więcej testów nie zawsze o 20% wyższa jakość.

Druga. To problem z zarządzaniem. Jeśli zarząd chce 100% pokrycia, musi wprowadzić system nagród, który nagradza 100% pokrycia zamiast „wystarczająco dobrego, aby uwolnić” 80% pokrycia.

Dodanie ludzi do kontroli jakości, aby napisać więcej testów, niewiele pomoże.

Dodanie programistów do napisania większej liczby testów jest wymagane, aby uzyskać 100% pokrycia testowego.

S.Lott
źródło
Kto powiedział coś o 100% zasięgu?
Eric Wilson,
@FarmBoy: Pytanie sugeruje, że 80% pokrycia nie jest wystarczająco dobre. Co jest wystarczająco dobre? Zwykle magiczna liczba to 100% zasięgu.
S.Lott,
1
Ale mój trener zawsze kazał mi dawać 110%. Dlaczego nie mogę wymagać takiej ochrony ... ;-P
Berin Loritsch
@Berin Loritsch: Jestem za tobą 200%.
S.Lott
1
@Job: „Niektórzy ludzie QA mogą napisać kod”. Dobrze. Potem stają się programistami, co jest dobrą rzeczą.
S.Lott,
2

Testowanie jednostek IMHO nie jest procesem kontroli jakości. Chodzi raczej o przyspieszenie programowania (poprzez zmniejszenie pętli sprzężenia zwrotnego dla programistów). Powinno to być zrobione przez osobę piszącą komponent (aka unit), ze szczególnym uwzględnieniem użycia komponentów (przez innego programistę).

Testy funkcjonalne to proces kontroli jakości, który może i powinien zostać przeprowadzony przez zespół kontroli jakości. Może to zrobić programista, ale programista nie byłby lepszy, ponieważ programista może nie znać wszystkich sposobów korzystania z aplikacji przez użytkownika.

Oba mogą być wykonane w sposób TDD.

Heath Lilley
źródło
2

TDD to nie tylko testowanie, ale także projektowanie. Pisanie kodu tylko po to, aby przejść testy, zwykle prowadzi do mniejszego i łatwego do utrzymania kodu. Jeśli oddelegujesz inną osobę do napisania testów, będziesz również delegować odpowiedzialność za tworzenie dobrego kodu.

Należy również pamiętać, że zasięg nie powie ci o jakości kodu i nie powie ci, czy reguły domeny są objęte.

Fernando
źródło
0

Jeśli potrzebujesz co najmniej 80% zasięgu, musisz zrobić kilka rzeczy:

  • Zapewnij programistom narzędzia, których potrzebują, aby określić, jaki poziom pokrycia mają - i upewnij się, że są to jabłka do jabłek. Jest więcej niż jeden sposób pomiaru zasięgu.
  • Zapewnij nagrodę / zachętę za dokonanie tego wyczynu. Programiści robią tylko to, co według nich się opłaci. Jeśli 50% pokrycia jest wystarczająco dobre, aby zapewnić jakość i wykonać całą pracę, właśnie to zrobią.

Na koniec zrozum, że istnieje różnica między zamierzonymi ścieżkami wykonania a niezamierzonymi ścieżkami wykonania. Podczas pisania kodu sterowanego testem mogłeś udowodnić, że potrzebujesz pary niezależnych instrukcji if. W rezultacie dostępne są testy dwóch z czterech potencjalnych ścieżek wykonania. Dodaj jeszcze jedną niezależną instrukcję if, a masz potencjał ośmiu ścieżek wykonania (tzn. Rośnie wykładniczo).

Zrozum, że TDD niekoniecznie przewiduje każdą potencjalną ścieżkę wykonania, więc istnieje szereg testów, które mogą wymagać napisania w celu ukończenia, ale nie są napisane, ponieważ nie było potrzeby testowania tej ścieżki. W skrócie TDD nie gwarantują pokrycia, ale nie gwarantuje, że istnieje co najmniej jedno badanie w celu udowodnienia przyczyny d'Eter do kodu, który nie istnieje.

Berin Loritsch
źródło