Jest to już drugi wykład z tej serii.
Dotyczy on bardzo ważnego aspektu w tej dziedzinie - mianowicie komunikacji pomiędzy klientem, a informatykami dotyczącej wymagań systemów informatycznych.
W celu lepszego zrozumienia, czym są wymagania w projektach informatycznych przedstawię pewną historyjkę.
Na slajdzie tytułowym widzieliśmy restaurację.
Załóżmy, że właściciel takiej restauracji dostrzega potrzebę wdrożenia systemu informatycznego, w celu usprawnienia obsługi kelnerskiej klientów.
Właściciel ten zgłasza się do firmy informatycznej i pragnie zamówić taki system.
Rozbijmy go na poszczególne wyrazy…
Jedno wymaganie, to opis pojedynczej funkcji, którą system powinien udostępniać swoim użytkownikom.
Specyfikacja natomiast jest zbiorem wymagań, czyli zakresem funkcjonalności zamawianego systemu.
Mogłoby się więc wydawać, że jeżeli spiszemy wymagania na początku projektu informatycznego (co nie jest powszechną praktyką), mamy zapewnienie, że klient dostanie dokładnie to, czego potrzebuje (i że nie będzie chciał od nas więcej!).
Niestety nie jest to takie proste, przynajmniej z kilku powodów.
Po pierwsze, słowa nie mają znaczenia!
Lingwistyka filozoficzna mówi, że to ludzie umówili się, iż krowa to krowa, dziecko to dziecko, a wiatrak to wiatrak. Równie dobrze można by się umówić, że krowę będziemy nazywać wiatrakiem, a wiatrak krową.
Może to rodzić problemy związane z nazewnictwem, terminologią. W momencie kiedy przystępujemy do informatyzacji pewnego przedsiębiorstwa, z pewnością spotkamy się z szeregiem terminów, których nie zrozumiemy. Np. w firmach spedycyjnych powszechne są określenia: załadunek kompletny, raport miesięczny, SAD.
Co one znaczą?
Czy załadunek kompletny, to samochód, który zapakowano do określonej wagi? Czy też może samochód, którego ładunek zajmuje pewną określoną objętość minimalną? A może też samochód załadowany wszystkimi towarami uwzględnionymi w zleceniu?
Co oznacza termin raport miesięczny? Czy to podsumowanie faktur z całego miesiąca? A może liczba transportów wraz z informacją o sumarycznym załadunku? A może jeszcze coś innego?
SAD to kawałek ziemi obsadzony drzewami owocowymi, czy też może dokument celny?
Stwierdzenie nasze nie jest poprawne również z drugiego powodu: wiedza każdej osoby (a więc również klienta) składa się z części świadomej oraz nieświadomej.
Może się więc zdarzyć (i jest tak dosyć często), że klient nie jest w pełni świadomy każdego wymagania, więc nie jest w stanie wszystkiego przekazać analitykowi.
System zbudowany na podstawie takich niekompletnych wymagań na pewno nie spełni do końca jego potrzeb.
Co oznacza określenie: duży wyświetlacz? Czy wyświetlacz wystarczający do odczytywania wiadomości tekstowych, a może przeglądania zdjęć w dużej rozdzielczości?
Podobnie z pozostałymi określeniami: duże klawisze, wysoka rozdzielczość aparatu.
Ciekawe spostrzeżenie możemy wysnuć w związku z wiedzą nieświadomą. Możemy być pewni, że nigdzie w wymaganiach żadnego telefonu komórkowego nie znajdziemy określenia, że klawiatura powinna być po tej samej stronie telefonu co wyświetlacz. Dlaczego więc nikt nie zrobi na odwrót: przecież gdybyśmy ułożyli klawiaturę po jednej stronie, a wyświetlacz po drugiej - bylibyśmy w stanie jeszcze bardziej zmniejszyć rozmiary telefonu.
Jest to wiedza nieświadoma - każdy z nas korzystał z telefonu i wie że podczas naciskania klawiszy musi widzieć, co się dzieje na ekranie.
Gdyby jednak te produkty były projektowane przez osoby, które nigdy nie miały do czynienia z czymkolwiek podobnym (tak jest w dużej części projektów informatycznych), wtedy z pewnością znalazłoby się wiele rzeczy zrobionych wbrew intuicji przyszłych użytkowników.
No dobrze. Widzimy, że na inżynierów wymagań czyha wiele niebezpieczeństw. Czy jest jakiś uniwersalny sposób poradzenia sobie z nimi?
Niestety nie. Pozyskiwanie wymagań jest pewnego rodzaju sztuką.
Można jednak patrzeć, jak to robią inni oraz spróbować pewnych „dobrych praktyk” zaproponowanych przez ekspertów w tej dziedzinie.
Po tym dłuższym wprowadzeniu, które właśnie miało miejsce, omówimy następujące zagadnienia:
W celu lepszego ogarnięcia wymagań systemów informatycznych, specjaliści podzielili je na 2 kategorie: na wymagania funkcjonalne i pozafunkcjonalne.
Wymagania funkcjonalne to funkcje systemu widziane od strony użytkownika, np wprowadzenie nowej faktury, lub wygenerowanie raportu miesięcznego. Natomiast wymagania pozafunkcjonalne to wszystkie inne wymagania, zwłaszcza takie związane z bezpieczeństwem, wydajnością, awaryjnością, np: system ma umożliwiać wprowadzenie co najmniej 20 faktur w ciągu godziny, lub średni czas pomiędzy awariami (ang. MTBF) powinien wynosić 200000h.
Bardzo powszechny jest również podział FURPS. Pierwsza litera oznacza wymagania funkcjonalne, natomiast pozostałe - wymagania pozafunkcjonalne.
U - użyteczność, oznacza łatwość użytkowania systemu. Takie wymagania można precyzować np. poprzez maksymalny czas szkolenia pracownika, liczba kontaktów ze wsparciem klienta, liczbą sytuacji, w których konieczne jest skorzystanie z systemu pomocy.
R - niezawodność, może być mierzona poprzez: średnią liczbę godzin pracy bez awarii (ang. MTBF - Mean Time Between Failure), maksymalną liczbą godzin w miesiącu w ciągu których system może być wyłączony w celach pielęgnacyjnych (ang. maintainance) - ma to znaczenie szczególnie w przypadku systemów, które muszą pracować na okrągło - np. systemy bankowości elektronicznej
P - wydajność - mierzona np. liczbą transakcji, którą system jest w stanie obsłużyć w ciągu godziny, liczbą użytkowników, którzy mogą być zalogowani jednocześnie do portalu
S - bezpieczeństwo, to wymagania związane z szyfrowaniem, polityką praw, itp.
Wymagania funkcjonalne opisują funkcje poszczególnych użytkowników.
Przedstawimy trzy podejścia. Pierwsze dwa są podejściami historycznymi, natomiast ostatni - przypadki użycia staje się obecnie coraz bardziej popularny.
„System powinien…”
Wymagania w stylu „System powinien…” były intensywnie wykorzystywane w latach 80-tych, 90-tych. W roku 1998 nawet zostały zaproponowane jako standard (IEEE 830-1998). Ich dużą zaletą jest łatwość spisywania.
Niestety obecne systemy stają się coraz bardziej złożone, a wymagania średniej wielkości systemu w tej postaci zajęłyby kilkaset stron. Tak wielka liczba luźnych zdań, niepowiązanych ze sobą sprawia trudności podczas sprawdzania jakości takiej specyfikacji.
Funkcje systemu
Innym podejściem jest opisywanie poszczególnych funkcji systemu. Analogicznie do funkcji matematycznych, każda funkcja systemu informatycznego ma swoje wejście, wyjście, efekty uboczne.
Przykładowo, rozpatrując funkcję wystawiania faktury, wejściem mogą być pozycje faktury, wyjściem wydruk faktury (lub wysłanie jej faksem), natomiast efektem ubocznym zapisanie tej faktury w rejestrze faktur.
Podobnie jak w przypadku wymagań typu „System powinien”, taka specyfikacja wymagań zawiera bardzo dużą liczbę małych funkcji, więc nadal są problemy ze zrozumieniem idei systemu i czytelnością.
Trzecie podejście to przypadki użycia.
Poprzednie podejścia opisywały wymagania z perspektywy systemu - jak system powinien się zachować w określonej sytuacji. Przypadki użycia natomiast skupiają się na interakcji pomiędzy użytkownikiem, a systemem.
Dzięki takiemu podejściu zyskujemy na czytelności - przypadki użycia nie pokazują zbędnych szczegółów. Dużo łatwiej też jest klientowi wyobrazić sobie jak system będzie funkcjonował. Nie czyta opisu matematycznego, lecz pewną opowieść, która mówi o tym, w jaki sposób np. wystawić fakturę.
W dalszej części wykładu skupimy się na tym trzecim podejściu - przypadkach użycia.
Najpierw dowiemy się czym jest przypadek użycia i jak jest zbudowany.
Jak już było powiedziane wcześniej - przypadek użycia jest opisem interakcji pomiędzy użytkownikiem, a systemem informatycznym.
Mogą one występować w różnych formach. Najprostsza to akapit tekstu pisany językiem naturalnym.
Bardziej powszechna jest jednak postać strukturalna.
Każdy przypadek użycia w tej formie składa się z następujących elementów:
Nazwa - wyraża cel przypadku użycia (np. wystawianie faktury, zamówienie książki, dodanie wpisu na forum)
Przykładowo w kroku 3. może się okazać, że sprzedawca nie dodał żadnej pozycji. Dzięki rozszerzeniom możemy podać sekwencję kroków, która będzie wykonana w takiej sytuacji.
Dodatkowo, do każdego wymagania możemy dołączyć listę atrybutów, np.
Przypadki użycia są często mylone z diagramami przypadków użycia z UML’a.
Postaram już na początku zaznaczyć te różnice, żebyście Państwo nie mieli takich problemów w przyszłości.
Diagram przypadków użycia prezentuje tylko połączenie aktorów z przypadkami użycia. Każdy przypadek użycia jest tutaj reprezentowany jako nazwa. Jest to dobre w początkowej fazie analizy wymagań, kiedy odkrywamy funkcje systemu, lecz wymaga późniejszego doprecyzowania, czyli napisania specyfikacji wymagań, która będzie zawierać kompletne przypadki użycia.
W takiej specyfikacji wymagań dobrze jest umieścić na początku diagram przypadków użycia, który będzie służył jako „spis treści” dokumentu.
Plan wykładu
Na kolejnych slajdach przedstawię podstawowe zasady pisania przypadków użycia.
Stworzyli oni listę „wzorców”, czyli „dobrych praktyk” dotyczących pisania i podzielili ją na 4 grupy:
Nazwa przypadku użycia jest bardzo ważna - występuje w wielu miejscach dokumentu (spisie treści, diagramach przypadków użycia, itp), tak więc w sformułowanie prawidłowej nazwy powinna być włożona odrobina wysiłku, tak aby dobrze odzwierciedlała ona zawartość przypadku użycia.
Mówi o tym pierwszy wzorzec, jaki wybrałem z książki: „Fraza czasownikowa w nazwie”.
Frazy czasownikowe dobrze opisują cele przypadków użycia, np jak spotkamy nazwę: wystawianie faktury, albo generowanie raportu miesięcznego, to od razu wiemy o jakie wymaganie chodzi.
Kilka przykładów złych nazw:
Drugi omawiany wzorzec to „Scenariusz i rozszerzenia”
Przypadek użycia powinien być podzielony na takie 2 części - dzięki temu czytelnik może się zapoznać najpierw z głównym scenariuszem i zrozumieć na czym polega wymaganie, a następnie przejść do niuansów zawartych w rozszerzeniach.
Generalną zasadą jest zwięzłość i przejrzystość, aby czytelnik nie pogubił się.
Dlatego, każdy scenariusz powinien zawierać od 3-9 kroków (gdy jest ich mniej, specyfikacja wymagań jest zbyt fragmentaryczna, natomiast gdy jest ich więcej - czytelnik nie jest w stanie ogarnąć pamięcią całości).
Ze względu na czytelność, również poszczególne kroki scenariusza nie powinny być zbyt skomplikowane. Najlepiej gdy są wyrażone prostym zdaniem zawierającym podmiot (czyli aktora).
Rozszerzenia natomiast, to sekwencje kroków wykonywane podczas sytuacji wyjątkowych. Numer rozszerzenia składa się zawsze z numeru kroku, którego rozszerzenie dotyczy, oraz litery - stanowiącej numer rozszerzenia (w ramach tego kroku).
Czyli przykładowo możemy się spotkać z takimi rozszerzeniami:
1.A.
2.A.
3.A.
1.B.
Rozszerzenia mogą być wielokrotnie zagnieżdżane, czyli przykładowo, jeżeli mamy krok 1.A.2 i chcemy do niego dodać rozszerzenie, to będzie ono miało numer 1.A.2.A.
Wzorzec kolejny: „ Obojętność technologiczna”
Błędem jest, gdy przypadki użycia zawierają szczegóły technologiczne:
Pierwszy wzorzec z tej grupy to „Rozwijalna historia”
Zbiór przypadków użycia powinien stanowić rozwijalną historię, czyli być zorganizowany w hierarchiczne drzewo scenariuszy. Im głębiej, tym przypadki użycia są bardziej szczegółowe.
Dzięki temu będzie można przeczytać tylko przypadki użycia najwyższego poziomu, aby mieć ogólną wiedzę o systemie, lub zagłębiać się coraz bardziej jeżeli potrzebujemy większych szczegółów.
W celu łatwiejszego zorientowania się w tej hierarchii scenariuszy, wprowadzono podział przypadków użycia na trzy poziomy.
Środkowy poziom - to poziom celu użytkownika. Przypadki użycia na tym poziomie opisują poszczególne funkcje systemu, z punktu widzenia użytkowników, np. Rejestracja na szkolenie, Wypełnienie ankiety, Redagowanie ankiety…
Niekiedy do opisania pewnych funkcji potrzebujemy większych szczegółów. Wtedy korzystamy z przypadków użycia poziomu podfunkcji. Jeżeli np. uważamy, że „Dodawanie komponentu do ankiety”, lub „Wysyłanie wiadomości email” wymaga doprecyzowania, możemy stworzyć taki przypadek użycia i wywołać go z przypadku użycia wyższego poziomu. Przykładowo, mamy dane 2 przypadki użycia:
UC1. Rozsyłanie ankiety, oraz
SUB1. Wysyłanie wiadomości email.
Wtedy z UC1, możemy wywołać drugi przypadek użycia, poprzez wymienienie tego przypadku użycia w treści jednego z kroków:
UC1. Rozsyłanie ankiety
….
3. System wysyła prośbę o wypełnienie ankiety do wszystkich firm zarejestrowanych w systemie (SUB1).
…
To jest znak dla czytelnika, że jeżeli interesują go szczegóły danego kroku, może zajrzeć do przypadku użycia SUB1.
Trzeci poziom, to poziom biznesowy. Służy on do naszkicowania kontekstu dla tworzonego systemu. W momencie kiedy analityk pozna specyfikę konkretnej firmy, jej procesy biznesowe, dużo prościej zrozumieć wymagania użytkownika.
W celu opisania tych procesów można skorzystać z przypadków użycia poziomu streszczenia (biznesowego).
Pozyskiwanie wymagań jest procesem odkrywczym. Nie ma osób, które są w stanie od razu zaproponować w pełni poprawne wymagania. Często pytamy klienta, jak wyobraża sobie poszczególne funkcje systemu, następnie zapisujemy to w formie przypadków użycia, po czym okazuje się, że chodziło o coś zupełnie innego.
Dlatego warto robić to stopniowo, na początku bardzo zgrubnie, a w momencie kiedy upewnimy się, że nasz tor myślenia jest prawidłowy, można dodawać szczegóły.
Takie podejście właśnie oznacza określenie „Szerokość przed głębokością”
Dla przypadków użycia proponowane są następujące etapy:
Ostatnia grupa wzorców, to wzorce dotyczące zespołu autorów przypadków użycia.
Kluczowym czynnikiem stanowiącym o jakości specyfikacji wymagań jest wielkość zespołu analityków.
Z praktyki wynika, iż 2-3 osoby są w zupełności wystarczające - o tym mówi ten wzorzec. Jeżeli będzie więcej piszących, to narzut związany z komunikacją między nimi będzie zbyt duży, a kompromisy trudne do osiągnięcia.
Więcej osób można zaangażować na etapie recenzji - wtedy inne osoby (testerzy, użytkownicy) będą w stanie wyrazić swoje zdanie.
W trakcie pracy nad ogromnymi systemami może się okazać, że 2-3 osoby nie są w stanie ogarnąć całości. Wtedy warto taki system podzielić na moduły i powołać po jednym małym zespole do analizowania wymagań tylko w ramach modułu.
Drugim kluczowym czynnikiem, jeżeli chodzi o zespół analityków, jest różnorodność specjalistów.
W dzisiejszych czasach żadko kto ma tak obszerne doświadczenie, że zna się jednocześnie na tworzeniu oprogramowania i dziedzinie, którą informatyzujemy. W związku z tym warto na etapie powstawania wymagań połączyć siły specjalistów z różnych dziedzin. Autorzy wzorców nazwali to „Zrównoważonym zespołem”.
Tak skomponowany zespół będzie w stanie dostrzec dużo wcześniej wiele problemów i szybciej stworzyć poprawne wymagania.
To tyle, jeżeli chodzi o podstawowe informacje dotyczące tworzenia przypadków użycia. W celu ich lepszego utrwalenia wykonajmy proste ćwiczenie…
Spróbujmy znaleźć naruszenia podanych wcześniej zasad na bieżącym slajdzie.
Najważniejsze błędy to:
To, co zostało przedstawione do tej pory podczas tego wykładu, to jedynie kilka podstawowych pomysłów (dobrych praktyk) związanych z dokumentowaniem wymagań. Inżynieria wymagań to dziedzina dużo bardziej skomplikowana.
Skąd więc czerpać nowe pomysły?
W momencie kiedy będziemy już pracować jako analitycy w firmach informatycznych przydałby się sposób na ocenienie, na ile dobrze wykonujemy fazę analizy wymagań. Skąd mogę wiedzieć, czy to co robię do tej pory, wystarcza już do efektywnego pozyskiwania wymagań, czy też może mogę robić to znacznie lepiej?
Z odpowiedzią na te dylematy przychodzi książka opublikowana w 1997 roku przez panów Yana Sommerville i Pete Sawyera poświęcona dobrym praktykom inżynierii wymagań.
Zdefiniowali oni również pewien model, wg którego można oszacować poziom dojrzałości procesów inżynierii wymagań w firmie.
W celu sprawdzenia stopnia dojrzałości inżynierii wymagań w firmie, należy wziąć listę wszystkich praktyk zaproponowanych przez autorów, a następnie każdej z nich przydzielić od 0-3 punktów, w zależności od tego, w jaki sposób praktyka jest wykorzystywana w organizacji:
Autorzy zdefiniowali 3 poziomy dojrzałości procesów inżynierii wymagań w przedsiębiorstwach (kryteria są lekko rozmyte):
Poziomy te można krótko scharakteryzować:
Podsumujmy krótko co udało się przedstawić podczas tego wykładu: