Inżynieria wymagań. Wymagania stawiane oprogramowaniu

Podobne dokumenty
Inżynieria wymagań. Inżynieria wymagań 1/1

IO - inżynieria oprogramowania. dr inż. M. Żabińska, zabinska@agh.edu.pl

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Wstęp. Inżynieria wymagań. Plan wykładu. Wstęp. Wstęp. Wstęp. Schemat procesu pozyskiwania wymagań

SPECYFIKACJA WYMAGAŃ. Technologie Obiektowe

Cele przedsięwzięcia

Inżynieria Programowania Inżynieria wymagań. Plan wykładu. Motto. Wstęp. Notatki. Notatki. Notatki. Notatki. Arkadiusz Chrobot

Faza Określania Wymagań

Projektowanie systemów informatycznych. Roman Simiński siminskionline.pl. Inżyniera wymagań

UPEDU: Rozpoznanie wymagań (ang. requirements discipline)

Określanie wymagań. Cele przedsięwzięcia. Kontekst przedsięwzięcia. Rodzaje wymagań. Diagramy przypadków użycia use case diagrams

KATEDRA INFORMATYKI STOSOWANEJ PŁ INŻYNIERIA OPROGRAMOWANIA

Wykład 3 Wymagania. MIS n Inżynieria oprogramowania Październik Kazimierz Michalik Akademia Górniczo-Hutnicza im. S. Staszica w Krakowie

Wykład 1 Inżynieria Oprogramowania

Inżynieria oprogramowania wykład IV Faza określenia wymagań

Spis treúci. 1. Wprowadzenie... 13

Inżynieria Programowania Inżynieria wymagań

Wymagania, specyfikacja i projektowanie

Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie

Algorytm. a programowanie -

Modelowanie i analiza systemów informatycznych

PRZEWODNIK PO PRZEDMIOCIE

KARTA MODUŁU KSZTAŁCENIA

Grupy pytań na egzamin inżynierski na kierunku Informatyka

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE SYSTEMOWE

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Zakres wykładu. Podstawy InŜynierii Oprogramowania

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

REQB POZIOM PODSTAWOWY PRZYKŁADOWY EGZAMIN

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

Inżynieria oprogramowania. Wykład 7 Inżynieria wymagań: punkty widzenia, scenariusze, przypadki użycia

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Maciej Oleksy Zenon Matuszyk

Zasady organizacji projektów informatycznych

PRZEWODNIK PO PRZEDMIOCIE

Wstęp do zarządzania projektami

Inżynieria oprogramowania II

Inżynieria oprogramowania (Software Engineering)

Metodyka projektowania komputerowych systemów sterowania

Analiza i projektowanie obiektowe 2015/2016. Wykład 2: Przypadki użycia

Etapy życia oprogramowania

Wstęp do zarządzania projektami

Podstawy programowania III WYKŁAD 4

Zagadnienia (1/3) Inżynieria Oprogramowania

Testowanie wymagań KAROLINA ZMITROWICZ, RADOSŁAW SMILGIN

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

Efekt kształcenia. Ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie algorytmów i ich złożoności obliczeniowej.

Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik

Procesowa specyfikacja systemów IT

Modelowanie jako sposób opisu rzeczywistości. Katedra Mikroelektroniki i Technik Informatycznych Politechnika Łódzka

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Tom 6 Opis oprogramowania

Narzędzia informatyczne wspierające przedsięwzięcia e-commerce

Wytwórstwo oprogramowania. michał możdżonek

Inżynieria oprogramowania. Wykład 6 Analiza i specyfikowanie wymagań

SPECYFIKACJA WYMAGAŃ

Cel wykładu. Literatura. Wyższa Szkoła Menedżerska w Legnicy. Modelowanie wymagań Wykład 2

020 ANALIZA WYMAGAŃ. Prof. dr hab. Marek Wisła

1 Wprowadzenie do algorytmiki

Wykład I. Wprowadzenie do baz danych

Inżynieria wymagań. Wykład 3 Zarządzanie wymaganiami w oparciu o przypadki użycia. Część 5 Definicja systemu

1. WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI

Wprowadzenie do systemów informacyjnych

zna metody matematyczne w zakresie niezbędnym do formalnego i ilościowego opisu, zrozumienia i modelowania problemów z różnych

Gry społecznościowe. wykład 0. Joanna Kołodziejczyk. 24 lutego Joanna Kołodziejczyk Gry społecznościowe 24 lutego / 11

Inżynieria Programowania Zarządzanie projektem

Karta opisu przedmiotu Zaawansowane techniki analizy systemowej oparte o modelowanie warsztaty

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Narzędzia CASE dla.net. Łukasz Popiel

Praktyka testowania dla początkujących testerów

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

System komputerowy. System komputerowy

Analityk i współczesna analiza

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Inżynieria wymagań. Jarosław Kuchta Dokumentacja i Jakość Oprogramowania

Narzędzia Informatyki w biznesie

<Nazwa firmy> <Nazwa projektu> Specyfikacja wymagań projektu. Wersja <1.0>

Opracowała dr Ryta Suska-Wróbel. Gdańsk, 25 luty 2016 r.

Projekt: Współpraca i Rozwój wzrost potencjału firm klastra INTERIZON

Wykład I. Podstawowe pojęcia. Studia Podyplomowe INFORMATYKA Architektura komputerów

Testowanie oprogramowania

Inżynieria Programowania Zarządzanie projektem. Plan wykładu. Motto. Motto 2. Notatki. Notatki. Notatki. Notatki.

Metodyki i techniki programowania

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Testowanie oprogramowania. Piotr Ciskowski

Diagram przypadków użycia

Wstęp do zarządzania projektami

Modelowanie procesów współbieżnych

Algorytm. Krótka historia algorytmów

Podstawy programowania

Metodyki i techniki programowania

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz

Procesy wytwarzania oprogramowania Specyfikacja i projektowanie oprogramowania

Transkrypt:

Inżynieria wymagań. Wymagania stawiane oprogramowaniu Wykorzystane materiały: prezentacje J.E. Sienkiewicza i M.A. Płotki I. Sommerville, Inżynieria oprogramowania, WNT 2003 wykłady MIT Dilbert by Scott Adams

Czym jest inżynieria wymagań? pozyskiwaniem analizowaniem dokumentowaniem weryfikowaniem i walidacją funkcji i ograniczeń projektowanego systemu (czyli właśnie wymagań) oraz zarządzaniem nimi. Inżynieria wymagań jest relatywnie nowym terminem, który został wymyślony w celu nazwania wszystkich działań związanych z pozyskiwaniem, dokumentacją i utrzymywaniem zbioru wymagań dla systemu komputerowego. (I. Sommerville)

Wymaganie formalna definicja (a) Warunek (ang. condition) lub cecha (zdolność, ang. capability) nieodzowna dla rozwiązania problemu lub osiągnięcia zamierzonego celu. (b) Warunek lub cecha, które muszą być spełnione bądź posiadane przez system, aby być w zgodzie z kontraktem, standardem, specyfikacją lub innym formalnie narzuconym dokumentem. Udokumentowana reprezentacja warunku lub zdolności wg (a) lub (b).

Wymaganie pierwszy przykład Poprawnie sformułowane wymaganie to takie, które określa pewną zdolność systemu, której funkcjonowanie może zostać poddane walidacji oraz którą system musi posiadać, aby cele i wymagania klienta były spełnione, oraz na którą narzucone zostały pewne mierzalne warunki i ograniczenia (IEEE1233) Zdolność systemu: Samolot ma przewozić ludzi pomiędzy Nowym Jorkiem a Paryżem Warunek: Średnia prędkość lotu powinna wynosić 2500 km/h Ograniczenie: Maksymalna prędkość, jaką może osiągnąć samolot to 5000 km/h

Cechy dobrego wymagania Wymaganie powinno być: poprawne jednoznaczne możliwe do zrozumienia kompletne spójne realistyczne (możliwe do zrealizowania) uporządkowane (wg ważności i stabilności) sprawdzalne (weryfikowalne, testowalne) modyfikowalne możliwe do śledzenia

Określanie wymagań Innymi słowy: chcemy ustalić co system powinien robić, przy uwzględnieniu istniejących ograniczeń.

Dlaczego to w ogóle jest takie ważne? Najczęstszą przyczyną błędów w systemie jest błędna specyfikacja (ok. 60%). Koszt naprawy błędów powstałych na etapie tworzenia specyfikacji jest bardzo duży (sięga 80% budżetu projektu najczęściej trzeba w mniejszym lub większym stopniu przebudować cały system).

Rodzaje specyfikacji wymagań i jej zapis Wymagania użytkownika Oczekiwane usługi systemu oraz ograniczenia, w których system ma działać, wyrażone w języku naturalnym. Zapis powinien być zrozumiały dla udziałowców systemu, którzy nie mają szczegółowej wiedzy technicznej. Można wykorzystać język naturalny, posiłkując się prostymi i intuicyjnymi diagramami (np. diagramem UML Use Cases przypadki użycia). Wymagania systemowe Szczegółowe i precyzyjne ustalenie usług systemu i ograniczeń. Zwykle wykorzystuje się strukturalny język naturalny (formularze i szablony), notację graficzną (diagramy UML), języki opisu projektu (Program Design Language PDL), specyfikacje matematyczne.

Specyfikacja wymagań Dokumentacja wymagań stawianych oprogramowaniu (nazywana też specyfikacją wymagań stawianych oprogramowaniu, ang. Software Requirements Specification, SRS) jest oficjalną deklaracją tego, co jest wymagane od wytwórców systemu. Powinna zawierać zarówno wymagania użytkownika jak i szczegółową specyfikacje wymagań systemowych (SWS). Nie jest projektem powinna opisywać co system ma robić, a nie jak to robić. Powinna określać zachowanie systemu jedynie z zewnątrz. Powinno być łatwo ją zmieniać, ze względu na często zmieniające się lub uzupełniane wymagania. Specyfikacja wymagań jest podstawą kontraktu na implementację systemu, powinna być zatem pełną i niesprzeczną jego specyfikacją. Stanowi również punkt wyjścia do projektowania systemu.

Cechy poprawnej specyfikacji wymagań Jest czytelna i zrozumiała dla klientów, użytkowników i projektantów Opisuje jedynie zachowanie systemu widziane z zewnątrz ( czarna skrzynka ) Zapisana jest w sposób ułatwiający dokonywanie zmian Opisuje zarówno funkcje systemu jak i jego ograniczenia Opisuje, co w systemie można zrobić i czego nie można Powinna być użyteczna dla konserwatorów systemu jako referencja Powinna być kompletna, jednoznaczna, spójna, realna i testowalna Powinna specyfikować akceptowane reakcje systemu na sytuacje wyjątkowe Opisywać przyrosty (jeżeli stosowana będzie metodologia ewolucyjna lub przyrostowa) lub minimalną i maksymalną funkcjonalność (priorytety) Opisywać przewidywane zmiany wymagań w przyszłości (zarówno od strony środowiska jak i oprogramowania)

Kto czyta dany rodzaj specyfikacji? Wymagania użytkownika Menedżerowie klienta Użytkownicy systemu Inżynierowie klienta Menedżerowie zleceniobiorcy Projektanci systemu Wymagania systemowe Użytkownicy systemu Inżynierowie klienta Projektanci systemu Programiści Największy zarzut, który usłyszysz od osób piszących specyfikację brzmi, że "nikt jej nie czyta". Joel Spolsky, http://www.joelonsoftware.com/articles/fog0000000033.html

Kto i do czego używa specyfikacji? Użytkownicy systemu i inżynierowie klienta Menedżerowie klienta i zleceniobiorcy Projektanci systemu, programiści Testerzy Określają wymagania i czytają je, aby sprawdzić, czy odpowiadają ich potrzebom. Określają także zmiany wymagań. Używają dokumentacji wymagań do planowania oferty budowy systemu i do planowania procesu jego tworzenia Używają wymagań, aby zrozumieć, jaki system ma być zbudowany Używają wymagań, aby opracować i przeprowadzić testy zatwierdzające system Inżynierowie konserwacji systemu Używają wymagań jako pomocy w zrozumieniu systemu i związków między jego częściami

Podział wymagań stawianych oprogramowaniu Wymagania ogólne (biznesowe) Pozwalają umieścić system w kontekście biznesowym, technicznym i środowiskowym. Wymagania funkcjonalne Stwierdzają, jakie usługi ma oferować system, jak ma reagować na określone dane wejściowe oraz jak ma się zachowywać w określonych sytuacjach. W niektórych wypadkach wymagania funkcjonalne określają, czego system nie powinien robić. Wymagania niefunkcjonalne Określają ograniczenia usług i funkcji systemu (czasowe, dotyczące procesu tworzenia, standardów itd.) Wymagania dziedzinowe Odzwierciedlają charakterystykę dziedziny zastosowania systemu. Mogą być zarówno funkcjonalne jak i niefunkcjonalne.

Wymagania ogólne (biznesowe) Wymagania pozwalające umieścić system w kontekście biznesowym, technicznym i środowiskowym. Wśród wymagań z tej kategorii powinno znaleźć się odniesienie do celów (biznesowych) systemu, przepisów i regulacji prawnych, zgodności z obowiązującymi i powszechnie stosowanymi w podobnych programach standardami oraz do udziałowców, a zwłaszcza przyszłych użytkowników systemu. Przykłady: WO1. Wspomaganie nauczania podstaw komputera przy wykorzystaniu idei i technologii Learning Objects do tworzenia zestawów aktywnych ćwiczeń praktycznych. WO2. Wypełnienie luki na rynku dla podobnego oprogramowania. WO3. System przeznaczony jest na rynek. WO4. Użytkownikami systemu będą adepci informatyki oraz osoby tworzące zestawy.

Wymagania funkcjonalne Odpowiadają na pytanie: jakie funkcje system ma udostępniać użytkownikom? Wymagania funkcjonalne opisują funkcjonalność lub usługi, które system powinien oferować. Zależą od rodzaju tworzonego oprogramowania, spodziewanych jego użytkowników oraz rodzaju wytwarzanego systemu. Gdy mają postać wymagań użytkownika, ich opis jest zwykle bardziej ogólny, natomiast wymagania systemowe szczegółowo definiują funkcje systemu, jego wejścia, wyjścia, wyjątki itd.

Przykłady wymagań funkcjonalnych Wymagania użytkownika zapisane w postaci tekstowej (system e-learningowy): F1. Odtwarzanie kursu. F2. Nieliniowe prezentowanie kursu (nawigacja po lekcjach), powtarzanie lekcji. F3. Możliwość ograniczenia/monitorowania czasu prezentowanego fragmentu. F4. Drukowanie. F5. Nawigacja po slajdach. F6. Pauzowanie lekcji. F7. Zamieszczanie filmów, dźwięków, animacji, pokazywania grafiki. F8. Przeprowadzanie testów, quizów. F9. Tworzenie raportów z przebiegu lekcji. F10. Administrowanie użytkownikami. F12. Wyświetlanie wprowadzenia do lekcji.

Przykłady wymagań funkcjonalnych Wymagania użytkownika zapisane w postaci tzw. diagramu przypadków użycia (Use Cases): Diagram przypadków użycia będzie szczegółowo omówiony na kolejnym wykładzie Diagramowi temu towarzyszy zwykle opis scenariuszy

Przykłady wymagań funkcjonalnych Wymaganie użytkownika F6 przepisane jako wymaganie systemowe:

Kompletność i spójność wymagań funkcjonalnych Specyfikacja wymagań funkcjonalnych stawianych systemowi powinna być kompletna i spójna. Kompletność oznacza, że wszystkie potrzebne użytkownikowi usługi powinny być zdefiniowane. Spójność oznacza, że wymagania nie powinny mieć sprzecznych definicji. W praktyce, w wypadku wielkich złożonych systemów nie da się osiągnąć kompletności i spójności. Przyczynami tego są swoista złożoność tych systemów oraz fakt, że różne punkty widzenia są związane ze sprzecznymi potrzebami.

Wymagania niefunkcjonalne Odpowiadają na pytanie: jak system ma działać? Mogą definiować ograniczenia systemu, takie jak możliwości urządzeń wejścia-wyjścia lub dostępne reprezentacje danych. Wymagania niefunkcjonalne wynikają z potrzeb użytkownika, ograniczeń budżetowych, strategii firmy, konieczności współpracy z innymi systemami sprzętu lub oprogramowania, czynników zewnętrznych. Wymagania stawiane procesowi tworzenia oprogramowania specyfikacja standardów jakości, których należy użyć, stwierdzenie, że projekt należy opracować za pomocą konkretnego zbioru narzędzi CASE. Wymagania te nie dotyczą bezpośrednio konkretnych funkcji systemu, ale związane są z takimi cechami jak: niezawodność, efektywność pracy, czas reakcji, bezpieczeństwo, ochrona czy wiarygodność.

Przykłady wymagań niefunkcjonalnych N1. System powinien posiadać zabezpieczenia przed niepowołanym dostępem do funkcji administrowania użytkownikami i tworzenia raportów (hasła dostępu) N2. System powinien płynnie odtwarzać lekcje (np. brak przypadkowego zatrzymywania się animacji czy dłuższego niż 1s wczytywania się kolejnego slajdu). N3. System należy wdrożyć do końca semestru dyplomowego. N4. System powinien działać pod systemami operacyjnymi Windows, Mac OS i Linux. N5. Należy wykorzystać język programowania Java. N6. Minimalne wymagania sprzętowe: prędkość procesora XX GHz, dysk twardy YY GB, karta graficzna itp. Wymagania niefunkcjonalne systemowe również należy zapisywać w karcie wymagania tak, jak wymagania funkcjonalne (opuszczając jedynie niektóre jej pola, które w ich przypadku nie mają sensu, np. czynności równoczesne, warunki początkowe i końcowe itp.)

Klasyfikacja wymagań niefunkcjonalnych Wymagania produktowe Określają zachowanie produktu. Przykładami są wymagania efektywnościowe dotyczące szybkości działania systemu i jego zapotrzebowania na pamięć, wymagania niezawodności. Wymagania organizacyjne Wynikają ze strategii i procedur w firmie klienta i w firmie wytwórcy. Wymagania zewnętrzne Ta szeroka kategoria mieści wszystkie wymagania wynikające z czynników zewnętrznych. Obejmują m.in. wymagania współpracy, które definiują interakcje systemu z systemami innych firm i wymagania prawne.

Podział szczegółowy wymagań niefunkcjonalnych Wymagania produktowe Wymagania organizacyjne Wymagania zewnętrzne Wymagania sprawnościowe Wymagania niezawodności Wymagania przenośności Wymagania współpracy Wymagania etyczne Wymagania użyteczności Wymagania dostawy Wymagania implementacyjne Wymagania standardów Wymagania prawne Wymagania efektywnościowe Wymagania pamięciowe Wymagania ochrony prywatności Wymagania zabezpieczeń

Problemy z wymaganiami niefunkcjonalnymi Trudności z weryfikacją niektórych wymagań. Mogą one być podawane przez klienta w sposób odzwierciedlający jego ogólne dążenia, takie jak łatwość użycia, zdolność do naprawy awarii i szybka reakcja na działania użytkownika. To jednak zostawia bardzo duży margines do interpretacji i stwarza potencjalną możliwość konfliktów z klientem już po dostarczeniu systemu.

Rozwiązywanie problemów z wymaganiami niefunkcjonalnymi WYMAGANIA MUSZĄ BYĆ WERYFIKOWALNE (powinny dać się zmierzyć/zweryfikować/sprawdzić za pomocą przyjętych metryk) Wymaganie nieweryfikowalne System powinien być łatwy w użyciu dla doświadczonych użytkowników, a sposób jego organizacji powinien minimalizować liczbę błędów użytkownika. Poprawione, weryfikowalne wymaganie Doświadczeni użytkownicy powinni móc używać wszystkich funkcji systemu po szkoleniu trwającym dwie godziny. Po tym szkoleniu, średnia liczba błędów popełnianych przez użytkowników nie powinna przekroczyć dwóch dziennie.

Miary do specyfikowania wymagań niefunkcjonalnych Właściwość Szybkość Rozmiar Łatwość użycia Niezawodność Solidność Przenośność Miara Liczba przetworzonych transakcji na sekundę Czas reakcji na zdarzenie wywołane przez użytkownika Czas odświeżenia ekranu Kilobajty, Megabajty itp. Liczba układów pamięci RAM Czas szkolenia Liczba okien pomocy Średni czas bez awarii Częstość błędów Czas uruchomienia systemu po awarii Procent zdarzeń powodujących awarie Prawdopodobieństwo zniszczenia danych podczas awarii Procent kodu zależnego od platformy Liczba docelowych systemów

Wymagania dziedzinowe Wynikają bardziej z dziedziny zastosowania systemu niż z konkretnych potrzeb użytkowników. Mogą być nowymi wymaganiami funkcjonalnymi, ograniczać istniejące wymagania funkcjonalne albo np. ustalać sposób wykonywania konkretnych funkcji. Wymagania dziedzinowe są istotne, ponieważ jeśli nie są spełnione, to system może nie działać w sposób zadowalający lub np. nie uzyskać wymaganych atestów.

Przykłady wymagań dziedzinowych Czytelnia norm: D1. Wszystkie bazy danych powinny być dostępne przez jednolity interfejs użytkownika, którego podstawą jest standard Z39.50. D2. Ze względu na ochronę praw autorskich system powinien udostępniać normy jedynie w formie przeznaczonej do odczytu na ekranie monitora, bez możliwości pobrania pliku ani jego wydruku. Jedynie po uzyskaniu potwierdzenia dokonania wpłaty, system powinien umożliwić wydruk dokumentu lub jego pobranie. System sterowania ruchem pociągu: D1. Tempo hamowania pociągu będzie wyznaczane następująco: D pociągu = D sterowania + D nachylenia gdzie D nachylenia wynosi 9,81m/s2 * nachylenie / alfa, a współczynniki alfa są znane dla różnych typów pociągów.

Problemy z wymaganiami dziedzinowymi Są one zwykle wyrażone za pomocą języka specyficznego dla dziedziny zastosowania, co sprawia, że inżynierowie oprogramowania często ich nie rozumieją. Eksperci z danych dziedzin często mogli pominąć jakąś informację, ponieważ po prostu jest dla nich oczywista. Może nie być jednak oczywista dla twórców systemu, którzy mogą to wymaganie zaimplementować w sposób nieprawidłowy.

Trudności z pozyskiwaniem wymagań Klienci mogą nie wiedzieć, czego naprawdę potrzebują. Z drugiej strony, jeżeli podane wymagania zawierają zbyt wiele informacji, ograniczają wybór innowacyjnych rozwiązań oraz utrudniają zrozumienie wymagań. Klienci mogą nie być w stanie przetłumaczyć swoich celów na wymagania ilościowe. Wymagania niefunkcjonalne są często sprzeczne lub powiązane z innymi wymaganiami funkcjonalnymi. Zawsze należy starać się odróżnić wymagania funkcjonalne i niefunkcjonalne w dokumentacji wymagań. W praktyce jest to jednak czasami dość trudne.

Zapisywanie wymagań. Problemy z językiem naturalnym Brak jasności Czasem trudno jest wyrażać się w języku naturalnym precyzyjnie i jednoznacznie, bez czynienia dokumentów przegadanymi i nieczytelnymi. Sprzeczność wymagań Trudno jest jasno rozgraniczać wymagania funkcjonalne, niefunkcjonalne, cele systemu i elementy projektu, co często powoduje narastanie sprzeczności. Łączenie wymagań Kilka różnych wymagań może być zapisanych razem jako jedno wymaganie (albo odwrotnie).

Zapisywanie wymagań. Dobre praktyki Opracuj standardowy format i spraw, aby wszystkie definicje wymagań były z nim zgodne (np. opracuj formatkę dla wymagań systemowych, a wymagania użytkownika zapisuj w formie graficznej diagramu przypadków użycia z opisem scenariuszy). Konsekwentnie używaj pojęć językowych. Rozróżnij wymagania kluczowe od opcjonalnych. Stosuj wyróżnienia (wytłuszczenia, kursywy) do zaznaczania głównych części wymagania. Unikaj, jeżeli tylko się da, żargonu komputerowego. Zapisuj uzasadnienia związane z wymaganiami (szczególnie niefunkcjonalnymi i dziedzinowymi). Pomagają one wytwórcom i konserwatorom systemu w zrozumieniu, dlaczego takie wymaganie się pojawiło, i w ocenie wpływu zmiany tego wymagania.

Karta wymagania. Opis Uwagi Każde wymaganie powinno być zapisane w osobnej karcie Nie wszystkie pola mają sens w przypadku wymagań niefunkcjonalnych i dziedzinowych

Formalne techniki specyfikowania wymagań Stosowane, gdy ewentualne niepowodzenie zagraża zdrowiu lub życiu ludzkiemu, bądź może spowodować ogromne straty finansowe (systemy krytyczne) Powinny być używanie zgodnie z zasadą zdrowego rozsądku Należy używać tylko jednej metody do opisu wszystkich wymagań Należy opisywać podobne systemy w ten sam sposób Metody: Pseudokod Maszyny o skończonej ilości stanów (UML: State machine diagram) Drzewo decyzyjne Diagramy czynności (UML: Activity diagram), schematy blokowe Modele związków jednostek Analiza obiektowa (UML: Diagram obiektów) Analiza strukturalna

Formalne techniki specyfikowania wymagań. Pseudokod Przykład w języku PDL: if pixel_mode == random then Create three random values for x, y and color. else if pixel_mode == linear then Increment x value by 1. Create a random value for color. end if

Formalne techniki specyfikowania wymagań. Diagram maszyny stanowej oraz macierz stanów

Formalne techniki specyfikowania wymagań. Drzewo decyzyjne

Formalne techniki specyfikowania wymagań. Diagram czynności

Formalne techniki specyfikowania wymagań. Model związków jednostek

Formalne techniki specyfikowania wymagań. Analiza obiektowa (diagram obiektów)

Formalne techniki specyfikowania wymagań. Analiza strukturalna

I na koniec: lektura obowiązkowa. Z blogu Joela Spolsky ego Painless Functional Specifications Part 1: Why Bother http://www.joelonsoftware.com/articles/fog0000000036.html Part 2: What's a Spec? http://www.joelonsoftware.com/articles/fog0000000035.html Part 3: But... How? http://www.joelonsoftware.com/articles/fog0000000034.html Part 4: Tips http://www.joelonsoftware.com/articles/fog0000000033.html