Czy zespoły Agile powinny codziennie dostarczać nowe funkcje?

31

Moja firma jest w trakcie przejścia od rozwoju w stylu wodospadu do Agile / Scrum. Mówi się nam między innymi, że oczekujemy, że pod koniec każdego dnia będziemy mieć nowe działające, testowalne (według QA) funkcje.

Większość naszych deweloperów traci około 2 godzin dziennie na spotkania i inne przedsięwzięcia biznesowe. Oznacza to, że w danym 6-godzinnym (co najwyżej) okresie musimy zaprojektować, napisać, przetestować jednostkę, zbudować i wdrożyć (z uwagami do wydania) wystarczającą ilość kodu, aby stworzyć pełną funkcję zapewniania jakości przez QA. Rozumiem, że informacje o kompilacji / wdrożeniu / wydaniu można zautomatyzować przy odpowiedniej konfiguracji CI, ale jeszcze tego nie ma.

Mamy również duży kontyngent morski, który pisze nasz kod po stronie serwera, a 12-godzinna różnica czasu czyni to jeszcze trudniejszym.

Staramy się wypowiadać historie w wąskie, głębokie pionowe segmenty, aby jak najszybciej uzupełniać funkcje od końca do końca, ale przez większość dni czuję się raczej szalony i często przyłapuję ludzi na głupich, delikatnych skrótach, aby upewnić się, że QA ma swoją wersję. Problem ten nasila się po kilku dniach sprintu, gdy nieuchronne usterki zaczynają się pojawiać i muszą zmieścić się w tym samym 6-godzinnym oknie.

Czy to normalne tempo dla zespołów Agile? Nawet jeśli uda nam się wdrożyć konfigurację CI, nie widzę, jak będziemy w stanie utrzymać to tempo i nadal tworzyć oprogramowanie wysokiej jakości.

Edycja: Jest tu kilka dobrych odpowiedzi. Uświadomiłem sobie, że tak naprawdę pytam, czy zespoły Agile powinny codziennie dostarczać nowe funkcje . Zaktualizowałem odpowiednio tytuł.

Joshua Smith
źródło

Odpowiedzi:

52

Przestępstwa popełniane obecnie w imieniu Agile sprawiają mi smutek. Wiele osób ma trudności z przejściem.

Zwinny Manifest: „Cenimy ludzi i interakcje nad procesem i narzędziami”. Kiedy ludzie wyraźnie krzywdzą, proces jest zły. Nie chcę ci mówić, jak to zrobić, ale podzielę się tym, jak to robię.

W moich zespołach ważną częścią jest unikanie angażowania się we wspólny kod repo, który jest uszkodzony w sposób, który zmarnuje resztę czasu zespołu. Tylko w tym sensie staram się „dostarczać działający kod każdego dnia”. Nie łam QA. Nie blokuj innych programistów. Idealnie nigdy nie sprawdzam żadnych błędów. (ha ha).

Implikacja nie polega na tym, że musisz coś popełniać każdego dnia. Sugeruje to, że powinieneś popełniać tylko dobre rzeczy, aby każdego dnia można było uzyskać kompilację wszystkich dobrych rzeczy, które każdy popełnił. W ten sposób zespół strzela do wszystkich cylindrów.

W moich zespołach kontrola jakości jest stała. Buduję produkty komercyjne, więc projekt nigdy się nie kończy, dopóki produkt nie jest przestarzały. Inżynierowie ds. Kontroli jakości testują funkcje dostępne do testowania. Inżynierowie QA zawsze mają zaległości. Nigdy nie ma wystarczająco dużo czasu na kontrolę jakości lub automatyzację wszystkiego, czego idealnie chcielibyśmy.

Jeśli programiści potrzebują wielu dni przed scaleniem zmian dla funkcji lub poprawki, to dobrze, zachęcamy, jeśli pomaga im to w uzyskaniu odpowiedniego kodu, zanim zaryzykuje nasz czas. Programiści mogą przekazywać kod do swojego prywatnego repozytorium lub oddziału bez wpływu na zespół lub kontrolę jakości. Programiści mogą uruchamiać testy jednostkowe lub automatyzację regresji na kodzie zbudowanym z repozytorium dewelopera lub oddziału prywatnego. W szczególnie ryzykownych przypadkach Inżynier ds. Kontroli jakości będzie współpracować z programistą w celu przetestowania przed połączeniem, aby chronić zespół przed opóźnieniem.

W tym sensie ćwiczę to, czego chcą Twoi menedżerowie. Niemal codziennie przez ostatnie 12 lat moje zespoły programistyczne miały kod działający we współdzielonym repozytorium. Zawsze jesteśmy prawie gotowi do wysyłki. Czasami nie osiągamy tego, ale nie przejmujemy się tym zbytnio. Czasami jest celowe, aby uwzględnić poważne zmiany narzędzi lub trudne połączenia.

Dla mnie Manifest Agile stanowi podsumowanie nowego sposobu myślenia o procesie rozwoju, który pojawił się w latach 90. Prawie wierzę w te zasady, ale szczegóły procesu mogą się różnić. Moim zdaniem zwinne jest dostosowanie procesu do potrzeb produktu i klientów, a nie bycie niewolnikiem przetwarzania.

joshp
źródło
2
+1: niesamowita odpowiedź. Naprawdę dobre spojrzenie na to, co „agile” powinno naprawdę znaczyć.
Jim G.
24

Jeśli miałeś działające oprogramowanie wczoraj, dlaczego nie miałoby działać dzisiaj? Jeśli nie ukończyłeś dzisiaj żadnych zadań, dzisiejsza wersja będzie taka sama jak wczoraj. Codzienne kompilacje i tempo rozwoju to osobne rzeczy. To, że masz codzienne wersje, nie oznacza, że ​​masz nowe funkcje w każdej wersji.

Kiedy w końcu jakaś funkcja zostanie ukończona i zameldowana w głównej gałęzi, powinieneś mieć zautomatyzowany proces, który tworzy oprogramowanie i uruchamia testy. Jeśli wystąpi problem z budowaniem lub uruchomieniem testów, zespół jest powiadamiany i dokładają wszelkich starań, aby ponownie uruchomić. Tak działa CI i pomaga w ciągłym wypuszczaniu działającego oprogramowania.

simoraman
źródło
Źle sformułowałem pytanie. Naprawdę pytałem o możliwość codziennego dostarczania nowych funkcji, a nie o to, by nie uszkodzić istniejącego produktu przez codzienne kompilacje. Zaktualizowałem pytanie.
Joshua Smith
@JoshuaSmith: jeśli twoje historie są wystarczająco małe, możesz mieć nowe rzeczy każdego dnia. A jeśli masz serwer ciągłej integracji, posiadanie uszkodzonego produktu nie jest opcją. Jeśli funkcja nie jest gotowa, nie jest synchronizowana z serwerem ani wykonywana w oddziale prywatnym. Wolę pierwsze rozwiązanie.
8

Krótka odpowiedź: Nie . Po prostu nie można tego robić codziennie.

Zwinny zespół miał jednak dostarczać działające elementy oprogramowania lub historie użytkowników w każdym sprincie . Zwykle spotkania statusu odbywają się codziennie, aby zobaczyć postęp i przeszkody.

Jeśli chodzi o oprogramowanie wysokiej jakości , obowiązujące procesy ciągłej integracji (CI) zapewnią, że kontrola jakości zostanie zastosowana do niewielkich nakładów pracy (odprawy) i będzie przeprowadzana tak często, jak skonfigurowano. Ma również na celu poprawę quality of softwarei skrócenie czasu potrzebnego na jego dostarczenie, zastępując tradycyjną praktykę stosowania kontroli jakości po zakończeniu całego rozwoju.

EL Yusubov
źródło
Wygląda na to, że ktoś próbuje zmusić zespół pytającego do sprintu dziennie. Nie powinieneś odkładać czegokolwiek na kontrolę jakości, dopóki nie przejdzie sprintu (lub nie zakończy się ku zadowoleniu wszystkich) ORAZ nie zostanie uznana za akceptowalną (minimalna liczba działających funkcji, udokumentowane znane błędy).
John Lyon,
1
wyjaśnijmy: „Nie powinieneś odkładać czegokolwiek na kontrolę jakości, dopóki historia użytkownika nie zostanie ukończona i zameldowana”.
EL Yusubov,
Trochę więcej wyjaśnień: historia nie jest tworzona, dopóki jej kod nie zostanie przetestowany.
Bryan Oakley,
@ElYusubov Rozumiałem również, że pod koniec każdego sprintu powinniśmy dostarczać nowe funkcje / historie, co jest całkowicie uzasadnione.
Joshua Smith
4

Nie, nie należy oczekiwać dostarczania nowych funkcji każdego dnia. Nie wszystkie funkcje można podzielić na tak małe, aby deweloper mógł ukończyć tę funkcję w około 6 godzin czasu programowania.

Jeśli wykonujesz scrum, powinieneś ćwiczyć na co najmniej 2-tygodniowych sprintach, z funkcjami, których ukończenie zajmie około 0 do 8 dni. Obietnicą dla właściciela produktu jest dostarczenie nowego, przetestowanego i zweryfikowanego poprawnego kodu roboczego, który można wprowadzić do produkcji na koniec sprintu. (UWAGA: Nie trzeba go faktycznie wprowadzać do produkcji, ale celem jest, aby tak było, gdybyś chciał)

Dobra metodologia sugerowała skonfigurowanie serwera CI (Continuous Integration), na którym zautomatyzowano tworzenie co najmniej jednej codziennej wersji działającego oprogramowania. Chodzi o to, by sprawdzić kod, jak tylko skończysz tę funkcję, aby mogła być w następnym cyklu kompilacji, a następnie w rękach kontroli jakości w celu przetestowania.

Pamiętaj, że celem jest wykonanie i przetestowanie funkcji do końca sprintu! Nie będziesz musiał zmuszać kontroli jakości do ostatniego dnia sprintu, abyś mógł zbudować kompilację, a następnie kazał im przetestować wszystkie funkcje. Nie będą mieli czasu na przetestowanie wszystkiego, a ty nie będziesz miał czasu na naprawienie błędów ...

Jeśli nie możesz skonfigurować serwera CI, praktyka powinna polegać na tym, że musisz ręcznie tworzyć nową kompilację do kontroli jakości za każdym razem, gdy programista sprawdza gotowy kod i twierdzi, że jest gotowy z funkcją i gotowy do przekazania kontroli jakości.

Alan Barber
źródło
1
To właśnie robimy teraz, ale nowe funkcje rzadko zajmują tylko jeden dzień, szczególnie w przypadku offshore.
Joshua Smith
2
Co jest w porządku, zwinny / scrum mówi tylko, że pod koniec sprintu dostarczy potencjalnie możliwy do wysyłki kod, nawet nowe funkcje! Wiele miejsc ma całe sprinty, w których poprawia to wydajność lub usuwa kod. Każde miejsce, które oczekuje, że będziesz codziennie wykonywać nową funkcję, nadużywa scrum, aby cię wykorzystać.
Alan Barber
2

To zależy od wielkości projektu; jeśli projekt jest duży, nie ma realnego sposobu na osiągnięcie tego.

Codzienne (a nawet częściej) kompilacje, które powstają z narzędzi ciągłej integracji, nie oznaczają działającego oprogramowania; ledwo oznacza kompilowalny kod.

m3th0dman
źródło
Pod pewnymi względami myślę, że codzienne wprowadzanie nowych funkcji do kontroli jakości powinno być łatwiejsze przy dużym projekcie. np. jeśli masz 5 zespołów deweloperów / deweloperów, możesz sprawić, że będą oni wykonywać 1-tygodniowe sprinty, każdy przesunięty o jeden dzień od następnego.
Dan Neely,
1

Istnieje wiele projektów, które dostarczają codzienne kompilacje, które dzięki ciągłej integracji działają oprogramowanie. Przynajmniej w teorii.

Oznacza to, że niekoniecznie zawiera nowe funkcje. Może kilka drobnych poprawek lub wcale.

Teoretycznie, jeśli nie jesteś w stanie zapewnić codziennej kontroli jakości więcej pracy, musisz albo zwiększyć liczbę programistów, albo zmniejszyć liczbę testerów. Okropny pomysł!

Twoim zadaniem jest załatwienie sprawy.

Powiedz QA, że dostaną coś do przetestowania, kiedy to się skończy. Musisz wyjaśnić im, dlaczego.

Jim G.
źródło
1
Tysiąc razy to. Powiedziałem kierownikowi projektu, że zapewnienie jakości pracy nie jest obowiązkiem mojego zespołu i został mocno odrzucony.
Joshua Smith
Spróbuj wrócić z bardziej przekonującymi faktami: developersurvivalguide.com/how-to-convince-your-boss
@JoshuaSmith: Zredagowałem moją odpowiedź, aby pasowała do twojej ostatniej edycji, ale obawiam się, że nie jest to odpowiedź, której szukasz ...