Wpadł mi niedawno do skrzynki mailowej kolejny artykuł serwisu Modern Analyst, cytat:

If you create only one view of the requirements, you must believe it. You have no other choice. If you develop multiple views, though, you can compare them to look for disconnects that reveal errors and different interpretations. (źr. Why Create Multiple Requirements Views? > Business Analyst Community & Resources | Modern Analyst > Business Analyst Articles & Systems Analysis Articles | Modern Analyst).

Autor sugeruje by łączyć wymagania funkcjonalne z przypadkami użycia, testami, modelami. W dużym uproszczeniu: jeżeli mamy tylko jedną perspektywę wymagań (np. w postaci listy wymagań funkcjonalnych i pozafunkcjonalnych) musimy im wierzyć bo nie mamy ich weryfikatora (nie mamy innego wyjścia). Troszkę to łączenie “każdy z każdym” chyba jednak nie ułatwia:

źr. http://www.modernanalyst.com/

Problem kompletności i spójności wymagań jest dość trudny do rozwiązania. Wymagania niekompletne i niespójne potrafią zaś zabić projekt, wady specyfikacji (takie jak niekompletność i niespójność) skutkują odkrywaniem ich w trakcie projektu, rośnie w niekontrolowany sposób złożoność projektu.

Jeżeli wypracujemy więcej perspektyw, możemy je skonfrontować i porównać, wykrywając ewentualne nieścisłości i błędy.  Także [[BABoK]] (rodem z [[IIBA]]) zaleca utrzymywanie tak zwanej śladowalności, to jest wywodzenia np. wymagań na oprogramowanie z wymagań biznesowych, a tych z celu projektu. Nadal jednak mamy tylko jedno źródło dla każdego wymagania. To rodzi pewne ryzyko, gdyż brak weryfikatora powoduje, że ryzyko błędu pozostaje.

Od kilku lat stosuje metodę polegającą na testowaniu lub specyfikowaniu relizacji wymagań. Rok 2008, na zakończenie artykułu IEEE830-1998 ? czy produkuje dobre wymagania?  napisałem:

Metodyka, którą stosuję

  1. Wymagania funkcjonalne to przypadki użycia systemu; Przypadki użycia systemu to czynności wyselekcjonowane z modelu procesów na bazie zakresu projektu.
  2. Wymagania niefunkcjonalne to ograniczenia nakładane na poszczególne przypadki użycia (mogą być grupowane np. maksymalny czas odpowiedzi systemu nie może przekroczyć 1 s. z wyjątkiem raportów, gdzie maksymalny czas odpowiedzi to 1 minuta)
  3. Wymagania dziedzinowe opisywane są modelem dziedziny systemu (diagram klas lub ERD)

c.d. kiedyś nastąpi?

Tak więc  mamy ciąg dalszy :). Wspomniałem o wymaganiach dziedzinowych. Osobiście traktuję je właśnie jako “trzecią nogę” wspierającą model wymagań. Funkcjonalność (usługa systemu) mówi nam czego oczekuje użytkownik, jednak “usługa systemu” opisuje system jako tak zwaną “czarną skrzynkę”. Jeżeli uzupełnimy opis wymagań elementami modelu dziedziny, dodamy weryfikator w postaci opisu wnętrza tej czarnej skrzynki (wymagamy nie tylko “tworzenia faktury VAT” ale definiujemy jej strukturę, to się nazywa opis “białej skrzynki”).

Jak wspomniałem swego czasu, opracowując wymagania na gotowe i zaawansowane oprogramowanie nie ma sensu jego projektowanie. Zbyt szczegółowa specyfikacja zbliża nas do projektu, a my chcemy jednak coś gotowego (ma być taniej i szybciej).

Standardowo, specyfikując wymagania,  należy skupić się na tym do czego będziemy używali oprogramowania a nie na tym jak ono to robi. Jednak “do czego” oznacza “co będziemy tworzyć i przetwarzać”. Co więc robić? Proszę popatrzeć:

Tak więc wymaganie:

  1. kojarzymy z realizującym je modelem (przypadkiem użycia, procesem, elementem dziedziny),
  2. kojarzymy z testem sprawdzającym czy zostało spełnione (z pomocą dobranego scenariusza testowego).

Powszechnie posługujemy się wymaganiami funkcjonalnymi. Czym jest wymaganie dziedzinowe? Wyobraźmy sobie, że chcemy opisać wszystkie metody i scenariusze wystawienia faktury VAT. Będzie ich bardzo dużo, zapewne możliwe będą takie, których nie “wymyśliliśmy”.  Bezpieczniej jest opisać fakturę VAT wraz z regułami rządzącymi jej poszczególnymi polami, zamiast uznać ją za “czarną skrzynkę” i próbować opisać metodą “jak można jej użyć”.

Młotek można opisać tym “do czego będzie używany” (przypadki użycia) lub “jak wygląda”. Nie raz druga metoda jest bezpieczniejsza, jednak jest to już projektowanie i należy to robić świadomie. Czy to źle? Nie, bo nie raz zaprojektowanie jest mniej ryzykowne niż opis “do czego” (zamiast złożonego opisu wielu zastosowań młotka, prościej jest go narysować).

Zawsze, przy każdym wymaganiu, należy podjąć decyzję, czy realizacja wymagania przez dostawcę stanowi ryzyko (i jakie). Sami projektujemy realizację (tworzymy model) zawsze, gdy to ryzyko jest za duże by je akceptować. Podobnie traktujemy testy. Projektujemy je, gdy koszt niespełnienia danego wymagania przekracza dopuszczalny poziom. Testem może być także model (np. procesu biznesowego).

Takie podejście powoduje, że zanim jeszcze dotkniemy gotowego produktu (tu niestety już po jego wyborze) możemy po pierwsze: przetestować samą specyfikację a po drugie przekazać potencjalnemu dostawcy (na etapie zapytania) pełną informację o tym, czego oczekujemy od produktu i jak to sprawdzimy.

Powyższe podejście w postaci ‘full wypas” może być pracochłonne, dlatego możliwe są warianty pośrednie, czyli tylko dla wymagań oznaczonych jako ryzykowne budujemy testy lub modele, jednak mamy narzędzie do panowania nad tym ryzykiem. Po drugie zyskujemy narzędzie do weryfikacji, odbiór oprogramowania nie będzie sprawdzaniem pokaźnej i ryzykownej zarazem listy dziesiątek cech, będzie “jazdą próbną na sucho”, a więc relatywnie tanią i pewną metodą testów: dostawca deklaruje (oferta na nasze zapytanie) zgodność z naszymi wymaganiami, a te są weryfikowalne. Należy rozważać zawsze kojarzenie modeli z testami.

Kiedy jeszcze piszemy realizację”? Gdy chcemy pozostać jej autorami i chronić nasz know-how.

Jarosław Żeliński

Jarosław Żeliński: autor, badacz i praktyk analizy systemowej organizacji: Od roku 1991 roku, nieprzerwanie, realizuje projekty z zakresu analiz i projektowania systemów, dla urzędów, firm i organizacji. Od 1998 roku prowadzi samodzielne studia i prace badawcze z obszaru analizy systemowej i modelowania (modele jako przedmiot badań: ORCID). Od 2005 roku, jako nieetatowy wykładowca akademicki, prowadzi wykłady i laboratoria (ontologie i modelowanie systemów informacyjnych, aktualnie w Wyższej Szkole Informatyki Stosowanej i Zarządzania pod auspicjami Polskiej Akademii Nauk w Warszawie.) Oświadczenia: moje badania i publikacje nie mają finansowania z zewnątrz, jako ich autor deklaruję brak konfliktu interesów. Prawa autorskie: Zgodnie z art. 25 ust. 1 pkt. 1) lit. b) ustawy o prawie autorskim i prawach pokrewnych zastrzegam, że dalsze rozpowszechnianie artykułów publikowanych w niniejszym serwisie jest zabronione bez indywidualnej zgody autora (patrz Polityki Strony).

Ten post ma 3 komentarzy

  1. Łukasz Pasek

    Panie Jarku,
    Pana sposób podejścia do wymagań wydaje mi się kompletny i słuszny. Czytałem trochę Pana bloga i pomimo, że nie wszystko rozumiem to generalnie trudno się z Panem nie zgodzić. Mam zbliżone poglądy do Pana i tworząc wymagania używam use case’ów uzupełnionych o wymagania szczegółowe. Jednocześnie używam modelu danych, słownika danych i diagramów Warniera. Są to inne i być może nie tak wyczerpujące modele jak te których Pan używa. Nie stosuję też UML’a. Bardzo ciekawe i pouczające byłoby gdyby umieścił Pan na swoim blogu jakiś przykład: kompletny zestaw wymagań i modeli do jakiegoś hipotetycznego projektu. Mi osobiście i myślę, że też innym Pana czytelnikom przydałoby się zobaczyć jak wygląda Pana specyfikację od A do Z. Od celów biznesowych przez modelowanie do wymagań szczegółowych. Mam więc dp Pana prośbę o danie dobrego przykładu 🙂

    Pozdrawiam serdecznie,
    Łukasz Pasek

    1. Jaroslaw Zelinski

      jak się pewnie Pan domyśla szewc bez butów chodzi :)))
      ale są “szczątki:

      dość szczegółowy opis krok po kroku:

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.