Jak przygotować historie użytkowników jako programista?

10

Piszę system, w którym zarówno właściciel systemu, jak i ja jesteśmy programistami, a obecnie jesteśmy jedynym źródłem „żądań” lub wymagań dotyczących systemu, które chciałbym uchwycić w historiach użytkowników związanych z funkcjami {1}. Moim pilnym priorytetem jest teraz zdobycie zaległości w managaeble. Jak powinienem zająć się przechwytywaniem poziomu specyfikacji technicznej, z którą jestem przyzwyczajony do pracy w historiach użytkowników, które nie powinny być zbyt techniczne.

{1} Oceniam zwinną usługę zarządzania projektami TargetProcess , a każda historia użytkownika musi być powiązana z funkcją nadrzędną. System wydaje się być dobrze dopasowany, więc to małe ograniczenie jest czymś, z czym wolałbym raczej pracować niż pracować.

ProfK
źródło

Odpowiedzi:

14

Typowy szablon historii jest bardzo łatwy do wizualizacji:

As a [ROLE] I need to [WHAT] so that/because [WHY].

Interesujące jest to, że znaczenie komponentów jest odwrócone.

DLACZEGO jest ważniejsze niż CO i to jest ważniejsze niż ROLA

Przykład użycia tego pytania

Jako programista muszę nauczyć się pisać historie użytkowników, aby wypełnić zaległości szkicami, aby rozpocząć dyskusje o funkcjach i przypisać im punkty.

Coś więcej komplikuje zamiar i wdrażanie historii użytkowników.

Dodatkowe narzędzia (najlepsza integracja)

Można użyć narzędzi do przechwytywania dodatkowych szczegółowych informacji o opowieściach, które są przechwytywane podczas omawiania ich w celu przypisania punktów / oszacowań, ale szczegóły te nie powinny być częścią samej opowieści. Coś tak prostego jak Wiki z 1 stroną na historię do umieszczenia szczegółów / transkrypcji dyskusji jest wystarczająco dobrym rozwiązaniem. Arkusz Excel jest okropnym rozwiązaniem.


źródło
5

Skoncentruj się na tym, co jest i dlaczego, i unikaj tego, jak piszesz historie użytkowników.

To, z czym masz do czynienia, jest w rzeczywistości bardzo dobrym ćwiczeniem dla wszystkich programistów. Ważną umiejętnością jest umiejętność wyrażenia wymagań w prosty, biznesowy sposób.

Powinieneś skupić się na ogólnym wymogu, takim jak „potrzeba dokonania pojedynczego wyboru z listy rozwijanej obiektów, aby użytkownik mógł włączyć akcję Foo”, zamiast wybierać kombinację lub pole listy lub cokolwiek, co uruchamia określoną procedurę .

Innym sposobem podejścia do tego jest udawanie, że podstawowa baza kodu / framework to prawie kompletna czarna skrzynka. Za każdym razem, gdy mówisz „użyj obiektu XYZ”, możesz sam sprawdzić, pytając, czy wiesz o tym w systemie czarnej skrzynki.

Aktualizacja:
IMO, w porządku jest umieszczanie szczegółów w przypadku użycia, który wskazuje poziom szczegółowości wymagany dla informacji. Na przykład w przypadku systemu rejestracji można określić uczciwą grę
- nazwisko; pole wymagane
- imię; pole wymagane
- identyfikator konta; system nie wygenerował żadnych danych wejściowych
- znak zodiaku; pole opcjonalne - (sugestia) podać wyszukiwanie od daty urodzin?
- etc ....

Kluczem jest to, że nie określasz technicznego sposobu dla tych informacji. Jeśli zauważysz, że mówisz „użyj klasy String / tablicy znaków / lub pola varchar” dla nazwiska, oznacza to, że przesadzasz.

Jeśli jesteś wielojęzyczny, użyj dwóch różnych języków jako testu lakmusowego. Na przykład ciągi w C są na ogół tablicami char (aktor), podczas gdy C ++, Java i C # (dobrze, i prawie wszyscy inni ...) mają rzeczywisty obiekt typu String. Jeśli stwierdzisz, że twoja specyfikacja została unieważniona przy użyciu jednego z tych języków, będziesz wiedzieć, że została przekroczona.

Warto zauważyć, że konkretnie używam terminu Przypadek użycia w przeciwieństwie do User Story , chociaż wariant, którego używam, jest hybrydą obu. Moim celem przypadku użycia jest przedstawienie przeglądu tego, co się dzieje (User Story w najściślejszym znaczeniu), ale następnie praca z aktorami, systemami i ogólną wymaganą funkcjonalnością. Moje podejście jest bliższe temu, co sugeruje Fowler w tym artykule na Wikipedii, w przeciwieństwie do podejścia Cockburn.

Więc będę miał jeden przypadek użycia (lub mniej więcej) dla scenariusza rejestracji lub elementu pracy. Jeśli to naprawdę skomplikowane, podzieliłbym to na wielokrotności, ale to nie jest wielka sprawa. W razie potrzeby przypadek użycia można następnie podzielić na poszczególne zadania. To, co jest wrzucane do konkretnego scrumu, zależy od wielu zmiennych, ale w tym podejściu nie ma nic, co uniemożliwiałoby posiadanie możliwego do udowodnienia komponentu na końcu scrumu.


źródło
3
Nawet powiedzenie „lista rozwijana” może być zbyt szczegółowe.
Donal Fellows,
@DonalFellows - To dobry punkt i zastanawiałem się nad tym przez chwilę. Poszedłem z tym, ponieważ lista rozwijana jest dość standardowym, ogólnym elementem interfejsu użytkownika, który zobaczysz w modelach szkieletowych. Listbox i Combobox to specyficzne konstrukcje językowe dla list rozwijanych. +1 w komentarzu.
@ GlenH7 Rozumiem to, ale moim problemem jest to, że nie wiem, gdzie uchwycić techniczne rzeczy. Jeśli pewne pola są wymagane np. Dla nowego pracownika, nie chcę używać historii dla każdego pola, ale raczej „jako użytkownik muszę przechwycić pole x i y”, a „może wybrać przechwycenie pola q i z „wpisz coś. Jeśli moje krótkie przykłady tutaj są właściwym kierunkiem, spróbuję w ten sposób wykonać więcej ćwiczeń.
ProfK
@ProfK Jako administrator HR muszę wprowadzić informacje o nowych pracownikach, aby móc zapisać ich do systemów płac, 401K i świadczeń ubezpieczeniowych. To powinna być dobra historia, szczegóły dotyczące wszystkiego innego to tylko te szczegóły, które powinny być udokumentowane na stronie wiki lub w innym dokumencie. Jeśli do tej historii należy dodać przypadek innych nowych funkcji, nowe Historie z tymi specyficznymi wymaganiami, które zostały pominięte, staną się nowymi historiami w systemie. Historia zostanie wykonana, gdy ROLE może ukończyć tę czynność za zgodą klientów.
2
@ProfK - zaktualizowałem moją odpowiedź w odpowiedzi na twoje pytanie. IMO, myślę, że jesteś na dobrej drodze. Przepracowałem wiele różnych metodologii, a kluczowym aspektem, o którym należy pamiętać, jest sprawienie, by działało w twojej sytuacji. Wygląda na to, że potrzebujesz trochę więcej niż zapewnia formalna historia użytkownika. Dostosuj sposób generowania historii użytkowników i idź naprzód. Niektórzy zapewne podpalą mnie za komentarz, ale szczerze mówiąc, chodzi o to, żeby napisać kod i kontynuować projekt.