W grudniu 2011 roku napisałem na zakończenie pewnego artykułu o wymaganiach:

Większość projektów takich jak np. wdrażanie nowych metod kontrolingu, zrównoważonej karty wyników, nowych systemów IT itp. cierpi głównie z powodu posiadania nadmiaru informacji z jednej strony i kompletnego jej niezrozumienia z drugiej. Sławne już w badaniach ?złe i niekompletne wymagania? czy ?zmiany zakresu projektu w trakcie jego trwania? to klasyczne skutki złej (a często pomijania!) analizy biznesowej. Koszty tych porażek wielokrotnie przewyższają koszt takich analiz. (Analiza biznesowa ? skuteczne modelowanie a ryzyko projektu).

Specyfikowanie wymagań, zarządzanie wymaganiami, inżynieria wymagań, to jak widać bardzo trudny etap projektu. Trudność bierze się stad, że dostępne zalecenia określają, że wymagania maja być np. spójne i kompletne ale zupełnie nie opisują jak to osiągnąć (a nawet jak to sprawdzić).

 

Często można się spotkać z pojęciem “inżynieria wymagań”. Budzi ono mój opór z dwóch powodów: znaczenie słowa inżynieria w j.polskim i nieadekwatność tego słowa do dziedziny jaką jest specyfikowanie wymagań, które są po protu listą warunków.

Zajrzyjmy do słownika języka polskiego:

inżynieria ?projektowanie i konstruowanie obiektów oraz urządzeń technicznych?

wymaganie ?warunek lub zespół warunków, którym ktoś lub coś musi odpowiadać?

Więc jak rozumieć złożenie “inżynieria wymagań”? Ja nie wiem, chyba, że ktoś uważa, że wymagania się “konstruuje”, i że są to zagadnienia techniczne. Za to ma sens “inżynierii systemów”. Mamy def. pojęcia system:

system ?układ elementów mający określoną strukturę i stanowiący logicznie uporządkowaną całość?

Gdyby definicje słowa “inżynieria” okroić z “technicznych” albo uznać, że systemy są także nie techniczne (bo są np. społeczne)  to mamy wdzięczna definicję:

inżynieria systemów ?projektowanie i konstruowanie układów elementów mających określoną strukturę i stanowiący logicznie uporządkowaną całość?

Jeden z moich ulubionych autorów akademickich, Ian Sommeville (lubię go także za to, że książki pisze w pubach popijając piwo ;)) definiuje inżynierię wymagań tak:

Requirements engineering (RE) refers to the process of formulating, documenting and maintaining software requirements (źr. Kotonya G. and Sommerville, I. Requirements Engineering: Processes and Techniques. Chichester, UK: John Wiley & Sons)

(pojęcie inżynierii wymagań odnosi do procesu formułowania, dokumentowania i zarządzania wymaganiami)

Tak więc uznając, że wymagania na systemy to element inżynierii tych systemów, niniejszym godzę  się używać pojęcia “inżynieria wymagań” w znaczeniu jakim opisał to Sommerville :).

Po co tyle ględzenia o słowach i ich znaczeniach? Poza “szukaniem” alibi dla istnienia pojęcia “inżyniera wymagań” chcę pokazać, że słowa mają znaczenie, zaniedbywanie tego prowadzi do wielu nieporozumień (niejednoznaczność) a po drugie zwracam uwagę, że analiza pojęciowa to jeden z kluczowych elementów analizy w ogóle (i często zaniedbywana).

Skoro wymagania to warunki, to aż prosi się by te warunki sprawdzać. Patrzmy do słownika:

sprawdzać ?skontrolować, zbadać, czy coś jest zgodne z prawdą, czy coś zostało zrobione prawidłowo?

Tak więc wniosek jest prosty:  wymaganie (każde!) powinno być sprawdzalne! Bez tego nie jesteśmy w stanie określić czy “coś” spełnia te wymagania, czyli czy zdanie: “dostarczony produkt jest zgodny z wymaganiami” jest prawdziwe czy nie (a nie chcemy oddać rozstrzygania tego prawnikom ;)).

Inżynieria wymagań

Skoro więc ugiąłem się i uznałem pojęcie inżynierii wymagań, popatrzmy na to systemowo. Jak zawsze proste jest piękne więc co analizujemy w inżynierii systemowej i inżynierii wymagań:

Granice systemu

 

matrioszkaPojęcie “system” to także supersystem (system nadrzędny)  i podsystem (system podrzędny, część systemu). To troszkę jak znane wam, być może, matrioszki 🙂 (figurki jedna w drugiej…).

Jest to, nazewnictwo, bardzo ważne, bo w jednym projekcie (dokumentacji) należy zachować bezwzględną dyscyplinę pojęciową, czyli słowo System powinno się odnosić wyłącznie do konkretnego poziomu  opisu, reszta to elementy systemu nadrzędnego lub podrzędnego.

Mianem system określa się zwyczajowo specyfikowane oprogramowanie, jednak problem pojawi się natychmiast, gdy dotkniemy takich pojęć jak wymagania funkcjonalne na oprogramowanie i wymagania biznesowe. To ostatnie niesie pewną niejasność. Bo nie wiem czy chodzi o wymagania wobec (w stosunku do) biznesu (np. poprawa jakości obsługi klienta o 5% w najbliższym badaniu jakości ISO) czy wymagania biznesu wobec (w stosunku do) oprogramowania (np. minimalizacja do zera otrzymanych i zagubionych zapytań ofertowych).

Popatrzmy na powyższy diagram. Mamy tu dwa Systemy:

  1. Organizacja jest podsystemem, jest elementem systemu, którym tu jest rynek na jakim ta organizacja  funkcjonuje.
  2. Organizacja jest analizowanym systemem, oprogramowanie jest jednym z zasobów tej organizacji (oprogramowanie jest tu podsystemem).

Wymagania możemy tu odnosić  w stosunku do Organizacji i w stosunku do Oprogramowania. To dlatego jasno wyodrębniamy analizę biznesową (produktem są modele biznesowe i wymagania biznesowe) od analizy wymagań na oprogramowanie (modele i wymagania na oprogramowanie). Jak widać wymagania na oprogramowanie to wymagania, których źródłem jest biznes, który ma konkretne cele do osiągnięcia. Nie powinny być one pobożnymi życzeniami użytkowników, aż do momentu gdy sponsor projektu nie powie np.: moim celem jest wygoda pracy moich pracowników. Oczywiście, ta wygoda jest zawsze wymagana ale nie musi ona być celem samym w sobie i nie musi mieć najwyższego priorytetu.

 

Wymagania interesariuszy. Moja definicja interesariusza (jedna z wielu): osoba (podmiot) zainteresowana zaistnieniem produktu, na którą pojawienie się produktu ma wpływ. Nie raz jestem pytany czy interesariusz ma prawo zgłaszania wymagań. Jeżeli ma coś do powiedzenia podczas odbioru produktu to znaczy, że ma wymagania. One mogą być jednak niejawne czyli taki interesariusz nie zgłasza wymagań ale ma wpływ na odbiór produktu, należy go koniecznie zidentyfikować. Jeżeli zaś ktoś nie ma nic do gadania przy odbiorze produktu nie jest interesariuszem (ang. stakeholder, kluczem jest tu ‘holder’ czyli dysponent mający coś do powiedzenia, mający wpływ). Tak wiec interesariusz to ktoś kto, na swoim poziomie ogólności, także musi umieć określić, kiedy uzna, że produkt spełnia jego wymagania. Jak nie potrafi, ktoś musi mu pomóc…analityk :)).

I tu rola analityka. Interesariusz spisuje co mu przyjdzie do głowy swoim językiem, analityk upewnia się, że zrozumiał, doprowadza je do postaci testowalnej  i klasyfikuje “wymagania” jako “źródło: konkretny interesariusz” (bo każde wymaganie musi mieć właściciela). Proszę zwrócić uwagę, że interesariuszem jest także użytkownik jeżeli tylko ma coś go powiedzenia w projekcie :).

Popatrzmy na wymaganie:

Wymagania

 

Wymaganie jest jedno (warunek jaki coś musi spełnić) ale może ono mieć wiele atrybutów i tu widzę “złożoność” wymagań (ich [[taksonomia]]).  Zarówno “wystawianie faktur VAT” jak i “dostępność 99,99% czasu” to równoprawne wymagania bo oprogramowanie np. wspomagające sprzedaż jest bezwartościowe zarówno gdy nie pozwala wystawiać faktur jak wtedy, gdy często się psuje. Owszem, jedno jest funkcjonalne drugie jest poza-funkcjonalne ale jedno i drugie to “równoprawny warunek przydatności” czyli Wymaganie wobec oprogramowania.

Jak wspomniałem, wymagania są (warto tak robić) klasyfikowane za pomocą atrybutów. Najczęściej spotykane to: rodzaj (Kind), źródło wymagania (Source), polecam także priorytet, metodę weryfikacji (np. test, audyt zgodności z opisem w dokumentacji), status (planowane, zaakcpetowane, odrzucone, …) i inne, zależnie od wymagań i typu projektu.

Ważna uwaga i zalecenie IIBA: zarządzanie  wymaganiami “zabrania” ich usuwania (albo renumeracji po usunięciu). usuwanie powoduje to niespójność wersjonowanej dokumentacji, która także ma swój cykl życia. Ja od dłuższego czasu stosuję dodatkowy status “odrzucone”, co daje mi ciągłość dokumentacji a także pozwala na “odwieszenie” wcześniej zdefiniowanego wymagania, gdy ktoś jednak uzna, że coś co było zbędne nagle znowu staje się konieczne :).

 

Liczba pytań i sugestii (także na kilku forach dyskusyjna) skłoniła mnie do podjęcia próby  zbudowania taksonomii wymagań. Jak już wspomniałem wyżej, zalecenia takie jak FURPS to niestety tylko płaska lista “cech” (i nie wszystkich). Wydaje mi się, że struktura wymagań, ich taksonomia wzajemne zależności oraz relacje do udziałowców projektu (interesariusze) i przyszłych użytkowników   rozwiązania, wymagają bardziej formalnego podejścia. Celem jest uzyskanie możliwości sprawdzania czy wymagania – jako przedmiot inżynierii wymagań – spełniają jakieś, trzeba je stworzyć, wymagania.

Taksonomia wymaganPowyżej próba usystematyzowania “wymagań” na bazie wyżej cytowanych definicji tego pojęcia.

Na koniec jeszcze kolejna ważna rzecz. Warto wskazywać, które elementy logiki biznesowej (Model) odpowiadają (są powiązane) z danym wymaganiem bo np. szczegółowo opisują wymagany sposób realizacji danego wymagania (np. system upustów albo konkretny przypadek użycia, także Model). Warto także, jeżeli  opis wymagania nie jest testem, zaprojektować test (przypadek testowy), który potwierdzi spełnienie wymagania np. “oprogramowanie ma pozwalać na wyliczanie pierwiastków drugiego i trzeciego stopnia”. Tu warto podać kilka konkretnych danych wejściowych wraz z prawidłowymi wynikami (może to dotyczyć nap. tabeli upustów, systemu skoringu klientów itp.).

Tego typu metody maja nazwę deklaratywnych:

Programowanie deklaratywne ? rodzina paradygmatów programowania, które nie są z natury imperatywne. W przeciwieństwie do programów napisanych imperatywnie, programista opisuje warunki, jakie musi spełniać końcowe rozwiązanie (co chcemy osiągnąć), a nie szczegółową sekwencję kroków, które do niego prowadzą (jak to zrobić). Programowanie deklaratywne często traktuje programy jako pewne hipotezy wyrażone w logice formalnej, a wykonywanie obliczeń jako ich dowodzenie. Programowanie deklaratywne jest szczególnym przedmiotem zainteresowania naukowców, gdyż dzięki minimalizacji lub eliminacji skutków ubocznych może znacząco uprościć tworzenie programów współbieżnych. Paradygmat programowania deklaratywnego obejmuje szeroką gamę języków programowania i bardziej szczegółowych paradygmatów podrzędnych. (Programowanie deklaratywne ? Wikipedia, wolna encyklopedia).

 

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 8 komentarzy

  1. Ewa

    Identyfikuję się z definicją “pojęcie inżynierii wymagań odnosi do procesu formułowania, dokumentowania i zarządzania wymaganiami” i na co dzień widzę największe problemy w formułowaniu wymagań. Czyli tak naprawdę “translacji” (w uproszczeniu) wymagań z języka interesariuszy na znormalizowany język wymagań, przy zachowaniu jednakże jego zrozumienia przez interesariuszy. Jeżeli utracimy tę łączność, zmierzamy do problemów.

    W tej chwili, jak obserwuję, cała odpowiedzialność za poprawność tej “translacji” spoczywa na analityku i od niego de facto zależy powodzenie realizacji systemu/projektu. To jest zbyt duże ryzyko.

    Co do definicji interesariuszy, to rozumiem ją szerzej – jako nie tylko mających wpływ na system/projekt, ale też system ma wpływ na nich. Czyli myślę z perspektywy zarządzania projektem, a nie tylko “kolekcjonowania” wymagań.

    1. Jarek Żeliński

      Faktycznie analityk jako osoba “translator” stanowi punkt ryzyka jednak chyba większym ryzykiem i znacznie większym kosztem jest zrobienie z tego pracy zespołowej. Niestety każda dziedzina inżynierii to wielu użytkowników, wielu w zespole wytwórcy i projektant w środku. To co warto mieć to sposób na weryfikację pracy tego projektanta czyli jakieś standardy postępowania, nie wyeliminuje to i tak elementu twórczego pracy takiej osoby, podobnie jak copywriter, malarz, architekt budowlany czy fotograf… trzeba mu zaufać albo wymienić.

      W kwestii interesariuszy, zgadzam się, ja mimowolnie zaliczyłem tych “uzależnionych od systemu” to “mających coś do gadania’, oni pośrednio mogę zgłosić niezadowolenie (jeżeli mogą).

  2. jokoz

    Trochę obawiałam się notacji innych niz UML. Ale użycie przez Ciebie pojęc typu atrybut nieco złagodziło mój niepokój. Co do interesariuszy “pośrednich” to byłabym tu bardzo ostrożna. Jeżeli ktoś chce być interesariuszem, to niech się od razu na początku zdeklaruje, a nie bedzie pierwszy mądry, jak system wejdzie w fazę wdrożenia. Oczywiście zdaję sobie sprawę, że naciski na menedżerów wysokiego szczebla mogą byc tu ryzykowne i trzeba by od razu założyć ich “pośredniość” 🙂

    1. Jarek Żeliński

      🙂 Interesariuszami zarządza się tak samo jak wymaganiami …

  3. Ewa

    Osobiście staram się zawsze oddzielić rolę i odpowiedzialność projektanta od roli analityka wymagań/analityka biznesowego. Co innego analityk systemowy, ten już projektuje, ale też tylko pewne elementy systemu. Dlatego uważam, że analiza wymagań to sztuka, a właściwie sztuką jest jej zrobienie i zapisanie, ale była zrozumiała z jednej strony przez interesariuszy, a z drugiej strony przez realizujących, zaczynając od analityka systemowego, projektanta itd.
    Zgadzam się, ze im większe zespoły realizujące, tym większe ryzyko, ryzyko wzajemnego niezrozumienia. Może dobrym rozwiązaniem byłby analityk po stronie zamawiającego i analityk po stronie realizującego. Każdy z nich rozumiałby oczekiwania swojej strony, ale też umiałby się porozumieć z drugim analitykiem.
    Takie są moje doświadczenia i przemyślenia.

    1. Jarek Żeliński

      W kwestii podziału na role jak najbardziej, w kwestii analityka po stronie zamawiającego, moim zdaniem, właśnie jego brak po tamtej stronie jest szkodliwy. Pozostaje “kontrakt” pomiędzy analitykiem biznesowy zamawiającego a projektantem po stronie dostawcy (nadal uważam, ze pojecie analityk systemu IT nie istnieje, jeżeli mowa o analizie systemowej jako takiej, obaj nimi są: analityk biznesowy i projektant). Pytanie jakie zawsze zadaję: co takiego robi analityk systemowy czego nie robi ani analityk biznesowy (wymagania) projektant rozwiązania (projekt implementacji)?

  4. Ewa

    Nowy rysunek “Taksonomia wymagań” bardzo klarowny, podoba mi się.
    Zastanawiam się tylko, czy wymagania związane z samym narzędziem, w którym wytwarzane jest rozwiązanie są w wymaganiach jakościowych – chyba tak – czy może jednak w dziedzinowych, rozumianych szerzej, niż tylko dziedzina biznesowa. Podobne pytanie mam do wymagań związanych z infrastrukturą IT i wdrożeniem rozwiązania.
    Dla idealnego porządku umieściłabym wymagania funkcjonalne na poziomie poza-funkcjonalnych 🙂
    pozdrawiam

    1. Jarek Żeliński

      Otóż “wymagania związane z samym narzędziem, w którym wytwarzane jest rozwiązanie” to straszny haczyk, bo na jakiej podstawie mamy prawo tego oczekiwać? Co do zasady każdy poprawnie wykonany system jest “hermetyzowany”, uzewnętrznia jedynie “przypadki użycia. Wielu developerów uważa, że takie wymagania jest zupełnie nieuprawnione, i zgadzam się z nimi.

      Co do poziomów, to jest to celowe: liście hierarchii sa na jednym poziomie 😉

Możliwość dodawania komentarzy nie jest dostępna.