W mojej firmie z powodzeniem pracujemy z elastycznymi praktykami - ale bez iteracji. Głównym powodem jest to, że nie możemy znaleźć czystego sposobu, aby zmieścić się w kontroli jakości w cyklu iteracji.
QA rozumiemy jako dodatkową weryfikację pewnej kompilacji (kandydata do wydania), zanim ta kompilacja zostanie wdrożona u klienta. Chodzi o to, aby uniknąć tego, że pojedyncze złośliwe popełnienie zniszczy całe wydanie. Ponieważ nigdy nie wiadomo, który to jest, QA musi poczekać, aż wszystkie funkcje / zatwierdzenia do wydania znajdą się w kompilacji. (Żadne słynne ostatnie słowa „To była tylko drobna zmiana” jest niedozwolone).
Jeśli QA znajdzie błędy w kandydacie do wydania, programiści naprawią je w odpowiedniej gałęzi wydania (i połączą w pień). Kiedy wszystkie błędy zostaną naprawione, wdrażana jest nowa kompilacja do kontroli jakości w celu ponownego przetestowania. Tylko wtedy, gdy nie znaleziono żadnych błędów w określonym kandydacie do wydania, jest on oferowany klientowi do weryfikacji.
Zwykle zajmuje to około dwóch do trzech kandydatów, około tygodnia na wydanie. Czas na napisanie poprawek jest zwykle znacznie krótszy niż wysiłki związane z testowaniem. Aby więc utrzymać programistów w pracy, pracują nad wersją N + 1, podczas gdy QA działa na N.
Bez korzystania z iteracji nie stanowi to problemu, ponieważ możemy nakładać się na pracę dla wydań N i N + 1. Jednak z tego, co rozumiem, nie jest to zgodne z podejściami opartymi na iteracji, takimi jak Scrum lub XP. Wymagają, aby iteracja była zwalniana na końcu, a wszelkie wysiłki związane z testowaniem powinny być włączone do iteracji.
Uważam, że to niekoniecznie prowadzi do jednego z następujących niepożądanych efektów:
(A) Programiści są bezczynni na końcu iteracji, ponieważ QA potrzebuje czasu, aby zweryfikować kandydata do wydania, a prace naprawcze nie w pełni zajmują deweloperów.
(B) Kontrola jakości zaczyna działać już przed przygotowaniem pierwszego kandydata do wydania. Jest to najczęściej zalecane na Stack Exchange. Ale to nie jest to, co moja firma rozumie jako kontrolę jakości, ponieważ nie ma testowanego konkretnego kandydata do wydania. A „drobna zmiana”, która psuje wszystko, wciąż może zostać wprowadzona niezauważona.
(C) Błędy są przenoszone do następnej iteracji. Jest to również zalecane na stosie wymiany. Nie wydaje mi się, żeby to było w ogóle rozwiązanie. Zasadniczo oznacza to, że nigdy nie otrzymujemy zweryfikowanej wersji, ponieważ za każdym razem, gdy wprowadzane są poprawki błędów, nowe, niezweryfikowane zatwierdzenia są również dodawane do tej samej gałęzi.
Czy jest jakieś wyjście z tego dylematu?