Jak radzisz sobie z niefunkcjonalną pracą ze Scrumem we wbudowanych systemach?

15

Mam dwa problemy ze Scrumem w systemach wbudowanych. Po pierwsze, jest wiele zadań do wykonania, szczególnie na wczesnych etapach, których nie można wykazać. Zaczęliśmy od płyty programistycznej, bez systemu operacyjnego, bez wyświetlacza, bez komunikacji szeregowej itp. Nie mieliśmy naszego wyświetlacza przez sześć sprintów.

Pierwsze cztery sprinty to:

  • Pierwsze RTOS uruchomiony
  • Tworzenie zadań pisania sterowników sieciowych i szeregowych
  • Pisanie procedur przerwań dla przycisków, komunikacji itp.
  • Pisanie podstawowych klas i metod bazy danych
  • Pisanie menu debugowania szeregowego

Większość z tych zadań nie jest dobrze dopasowana do historii użytkowników. W rzeczywistości jedynym interfejsem w całym systemie było menu debugowania szeregowego, wbudowane w sprint 3, więc na końcu sprintów nie było nic do zademonstrowania. Nawet menu szeregowe było przeznaczone do użytku wewnętrznego, a nie użytkownika końcowego. Niemniej jednak nadal chcę śledzić i zarządzać tymi działaniami programistycznymi za pośrednictwem Scrum.

Skończyliśmy pisać „historie użytkowników”, takie jak „Jako programista ...”, z czego nie jestem zadowolony, ale korzystając z Target Process (www.targetprocess.com), nie ma pojęcia o pozycji zaległości, która jest zadanie lub obowiązek.

Po drugie, jak radzisz sobie z wydaniami i testami? To dla nas prawdziwy ból, ponieważ testerzy nie mają debugerów sprzętowych, dlatego musimy zbudować wersje flash kodu i wypalić je na płytach programistycznych, aby przetestować. Testerzy nie są technicznie tak bystrzy jak programiści i często wymagają dużo wsparcia, aby wszystko działało na wczesnych etapach (resetowanie płyty, podłączenie komunikacji szeregowej itp.), A nawet zrozumienie wyniku.

Wreszcie, jeśli chodzi o definicję ukończenia, sprint nie może zostać ukończony, dopóki wszystkie historie nie zostaną ukończone. Wszystkie historie nie są kompletne, dopóki nie zostaną zweryfikowane przez testerów. Nie ma sposobu, aby uniknąć „okradania” czasu programisty, aby dać testerom. Innymi słowy, jeśli ostatnie trzy historie użytkowników w sprincie będą testowane przez pięć dni, należy je zakodować i przetestować jednostkowo pięć dni przed końcem sprintu. Co powinien zrobić programista? Przestać działać?

Jestem żartobliwy, ale to prawdziwy problem, próbując dostosować się do zasad. Teraz nie mam nic przeciwko naginaniu reguł, ale problem polega na tym, że to psuje wszystkie moje wskaźniki wypalenia, jeśli nie mogę oznaczyć rzeczy zrobionych, dopóki nie zostaną przetestowane.

Chciałbym usłyszeć, jak inni poradzili sobie z tymi sytuacjami.

Bruce
źródło
2
Krok 1. Wyszukaj innych ludzi z tym samym pytaniem. Przykład. stackoverflow.com/questions/5909533/... . To bardzo częste pytanie.
S.Lott
To zabawne, ile czasu i wysiłku ludzie marnują, próbując postępować zgodnie z procesem rozwoju, który wydaje się w ogóle nic nie dodawać do wyników końcowych
Steve

Odpowiedzi:

8

Używasz metodologii produktu niezgodnego IMHO.

W sposób, w jaki większość ludzi definiuje zwinność, cała praca jest do negocjacji w oparciu o zmieniające się priorytety, możliwość ponownego zamówienia lub wymiany.

Sposób, w jaki większość ludzi definiuje wodospad, polega na tym, że prace są układane w kolejności przed czasem, począwszy od znacznego wysiłku architektonicznego na początku.

Wyżej wymienione zadania wydają mi się bardzo wodospadowe. Muszą być w określonej kolejności i nie podlegają negocjacjom.

Nie twierdzę, że musisz przestrzegać czyichś poglądów na jakikolwiek proces, ale przynajmniej w przypadku tych zadań wydaje mi się, że jesteś w niestabilnym projekcie. Próba zamiany tego w zwinny proces będzie w najlepszym razie niechlujna.

Jeśli reszta projektu jest dobrze dostosowana do zwinności, nie martwiłbym się zbytnio o to, że początkowa konfiguracja była nieodpowiednia, ale fakt, że wspomniałeś o RTOS i płytach programistycznych, sprawia, że ​​podejrzewam, że lepiej byłoby w coś więcej jak wodospad (długi ciąg nieruchomych zależności).

Rachunek
źródło
7

OK, więc nie wiem nic o budowaniu systemów wbudowanych, ale z tego, co widzę, nie ma nic, co uczyniłoby Scrum nieodpowiednim do takiego rozwoju. Łatwo jest przyzwyczaić się do martwienia się o to, że tak naprawdę nie ma funkcji skierowanej do użytkownika, więc trudno jest pisać „historie użytkowników” z posiadaniem użytkowników. Tyle że historie użytkowników nie są tak naprawdę częścią Scruma - są często używane ze Scrumem - ale tak naprawdę tylko jako narzędzie.

Częścią Scrum jest pomysł dostarczenia kompletnych funkcji, które są w pełni przetestowane i potencjalnie możliwe do wdrożenia w środowisku na żywo w każdym Sprint. Kiedy zaczynasz od zera pierwszego dnia dowolnego projektu, rzeczywista wartość jakiejkolwiek funkcjonalności, którą możesz dostarczyć w Sprint 1, jest dość mała. Dzieje się tak, ponieważ każda drobiazg potrzebuje ton infrastruktury zbudowanej, aby działała. Ale chodzi o to, że budujesz tylko tyle infrastruktury, aby każda funkcja działała. A potem rozbudowujesz go, dodając więcej funkcji.

Chodzi o to, że NIE spędzasz miesięcy na budowaniu infrastruktury, która nie ma możliwości wykrycia z zewnątrz systemu. Dlaczego? Ponieważ dopóki nie zbudujesz rzeczy, które faktycznie robią, nie wiesz dokładnie, jaka powinna być infrastruktura. Tego się uczysz, budując rzeczywiste funkcje systemu. Jeśli budujesz infrastrukturę na początku, budujesz ją, gdy wiesz najmniej o systemie.

Jeśli nie chcesz pisać historii użytkowników, pamiętaj, że użytkownicy nie muszą być ludźmi. Piszecie więc coś w stylu: „Jako moduł obsługi przerwań CMOS muszę wykryć status flagi modulacji bingle whozzit, gdy kompresor fluxotronic sygnalizuje pasywne niedociążenie obejścia”. Absolutnie nie pisz historii użytkowników „Jako programista ...”.

Dave
źródło
3
Dobra odpowiedź, z wyjątkiem ostatniego stwierdzenia. Programiści mogą być również użytkownikami, a czasem trzeba wykonać pracę, aby wesprzeć innych programistów w zespole.
Bryan Oakley,
„Jeśli budujesz infrastrukturę na początku, budujesz ją, gdy wiesz najmniej o systemie.” - nie wynika z tego, że doświadczony programista nie będzie miał pojęcia, co powinna zrobić podstawowa infrastruktura. Jeśli zbudowałeś każdy element infrastruktury (który z definicji obsługuje wiele funkcji) tylko po to, aby poradzić sobie z bezpośrednim problemem i bez jakiejkolwiek próby przewidywania, możesz w końcu przepisać go w nieskończoność i być może będziesz musiał ciągle przepisywać gotowe funkcje, aby je ponownie zintegrować z infrastrukturą, która jest później przepisywana w celu dostosowania go do innej funkcji
Steve
1

Używasz Scruma w ściśle określonym obszarze i na każdym kroku naruszasz domniemany proces. Twoje pytanie powinno prawdopodobnie brzmieć: Czy istnieje inna zwinna metodologia, która lepiej pasuje do mojego środowiska? Po prostu bardzo trudno jest pomóc ci w lepszym Scrumie, jeśli twoje środowisko na to nie pozwala. Problemy, które widzę w twoim opisie:

  • Brak możliwych do wykazania zadań, które można uznać za zadania infrastrukturalne. Jeśli potrzebujesz kilku sprintów, aby zrobić coś, co nie jest uważane za wartość biznesową, Twoje historie użytkowników są prawdopodobnie źle zdefiniowane. Jeśli musisz zbudować narzędzie lub cokolwiek innego, aby zapewnić wartość biznesową, produkt można podzielić na dwie części / wydania - zbudowanie narzędzia i budowanie wartości biznesowej. W takim przypadku historie użytkowników „Jako programista ...” będą całkowicie poprawne, ponieważ narzędzie jest tworzone dla programistów.

    Problem polega na tym, jak przekazać to klientowi, ponieważ jego / jej zaangażowanie w pierwsze wydanie wynosi zero. Jeśli nie ma żadnej wartości biznesowej dla klientów, jak mogą oni wziąć udział? Jak właściciel produktu może zdefiniować priorytet biznesowy?

    Myślę, że głównym problemem jest to, że nie jest to coś, co pasuje do Scruma. Scrum stara się dostarczyć najważniejsze funkcje biznesowe w pierwszej kolejności, ale potrzebujesz dwóch miesięcy, aby dostarczyć pierwszą. Scrum i cała zwinność akceptują zmianę - co się stanie, jeśli po dostarczeniu pierwszych funkcji klient będzie wymagał zmiany, która sięga wszystkich początkowych sprintów?

  • Testowanie. Kolejna porażka, ponieważ zespół w Scrumie jest uważany za grupę członków międzyfunkcyjnych. Oznacza to, że wszyscy zajmują się programowaniem i testowaniem, dlatego też nie ma sytuacji opisanych w końcowym punkcie (lub przynajmniej przez pięć dni). Nie oznacza to, że nie może istnieć oddzielna kontrola jakości w celu przeprowadzenia bardziej złożonych i wyrafinowanych testów, ale zespół musi zapewnić już przetestowaną / zweryfikowaną funkcję. W twoim przypadku naprawdę wygląda na to, że Scrum nie jest tym, czego potrzebujesz. Potrzebujesz osobno obsługiwanego programowania i testowania oraz przekazywania funkcji między nimi.
Ladislav Mrnka
źródło