Jakość oprogramowania

Co to jest oprogramowanie?

Specyfika produktu programowego

Modele jakości oprogramowania

Kryteria jakości oprogramowania

Metryki jakości

Co to jest oprogramowanie?

Oprogramowanie to efekt pracy ludzkiego umysłu,

obejmujący programy, procedury, zasady i wszelkie

dokumenty związane, dotyczące obsługiwania

systemu przetwarzania danych

ISO 2382-1:1984

Wyrób programowy to kompletny zestaw

programów komputerowych, procedur, danych i

dokumentów związanych, dostarczany

użytkownikowi.

Jednostka programowa to dowolna część wyrobu

programowego identyfikowalna podczas

konkretnego etapu opracowywania.

Software vs. Hardware (1)

Oprogramowanie stanowi algorytmiczny zapis

złożonych procesów ekonomicznych, społecznych,

technologicznych, itp. (produkt niematerialny)

Zmiany w oprogramowaniu wydają się być łatwiejsze (zmiana kodu jest łatwiejsza niż naprawa sprzętu) Wiele problemów sprzętowych rozwiązuje się przez modyfikacje oprogramowania (np. poprzez

aktualizację sterowników urządzenia)

Software - Hardware (2)

Oprogramowanie jest często elementem

integrującym system lub wiele systemów, co

zwiększa jego złożoność

Oprogramowanie odpowiada najczęściej za te

elementy systemu, które kontaktują się

bezpośrednio z użytkownikiem i przez to jest

narażone na zmiany wymagań i krytykę użytkownika Wytwarzanie oprogramowania jest stosunkowo

młodą dyscypliną – stąd niewielu menedżerów rozumie i docenia potrzebę zapewnienia jakości

tworzonego oprogramowania

Software - Hardware (3)

Dyscypliny związane z oprogramowaniem nie są

ugruntowane w naukach naturalnych - brak jest

technik testowania i projektowania (nie ma do tego

uniwersalnych instrukcji)

Oprogramowanie jest w całości wymyślane przez

ludzi, stąd jego jakość zależy w dużej mierze od jakości „twórców”

Oprogramowanie nie ma postaci materialnej

dlatego charakteryzuje się inną krzywą

niezawodności:

Niezawodność oprogramowania

Intensywność uszkodzeń

produkty materialne

oprogramowanie

Dojrzewanie

Stabilizacja

Zużycie

Czas

Jakość oprogramowania

Jakość oprogramowania to ogół cech i właściwości programu decydujących o jego zdolności do

zaspokojenia stwierdzonych lub przewidywanych

potrzeb użytkownika

ISO 9000-3

Jakość oprogramowania to stopień w jakim

oprogramowanie posiada pożądaną kombinację

cech

IEEE 610.12

Jakość oprogramowania

Jakość oprogramowania to:

jakość wymagań +

jakość projektu +

jakość wykonania +

jakość użytkowania +

Kryteria jakości oprogramowania

Jest wiele modeli jakości oprogramowania, np.

Model McCall’a (1977)

Model Boehm’a (1978)

Model FURPS

Model Dromey’a

Inne

Opisują one kryteria jakości jako postulowane cechy, które powinno posiadać oprogramowanie wysokiej

jakości.

Modele te dotyczą głownie produktów końcowych -

programów.

Pionierskie modele jakości oprogramowania Do pionierskich modeli jakości oprogramowania, na

których bazuje większość późniejszych modeli, należą modele McCall'a i Boehm'a.

Jako pierwsze nakierowały one uwagę na potrzebę

współpracy między użytkownikiem a developerem,

poprzez wskazanie konkretnych czynników jakości,

odzwierciedlających wspólne priorytety użytkowników

i developerów oprogramowania.

Model McCall'a wyróżnia 3 główne perspektywy

definiujące jakość produktu: możliwość wprowadzania

zmian, adaptacyjność w różnych środowiskach,

możliwe do wykonania operacje. Perspektywy te stały

się fundamentem dla wszystkich modeli jakości.

Kryteria jakości oprogramowania

(charakterystyka jakości zewnętrznej i wewnętrznej) Jakość oprogramowania można opisać od strony cech wpływających na jego jakość „techniczną”

(jako konkretnego produktu) a zarazem pośrednio

(„przy okazji”) wpływających na zadowolenie

użytkownika.

Funkcjonalność

Niezawodność

Użyteczność

Skuteczność

Pielęgnowalność (utrzymywalność)

Przenośność

Funkcjonalność

Charakterystyki szczegółowe:

odpowiedniość

wpływa na odpowiedniość produktu dla danego zastosowania

i obecność w produkcie określonego zbioru funkcji

dokładność

wpływa na poprawność i zgodność rezultatów ze specyfikacją

Integralność (współdziałanie)

wpływa na zdolność do współpracy z systemem i innymi

programami

zgodność

wpływa na zgodność z przyjętymi normami, przepisami, itp.

bezpieczeństwo

wpływa na zdolność zabezpieczenia danych i programów

przed niepowołanym dostępem

Niezawodność

Charakterystyki szczegółowe:

dojrzałość

wpływa na ilość pojawiających się błędów i defektów w

działaniu programu

odporność

wpływa na zdolność zachowania określonego poziomu

działania w sytuacji awaryjnej

Odtwarzalność (odzyskiwalność)

wpływa na zdolność do odtworzenia określonego poziomu

działania bezpośrednio po zajściu sytuacji awaryjnej

Użyteczność

Charakterystyki szczegółowe:

zrozumiałość

wpływa na wysiłek niezbędny do poznania koncepcji i logiki

użytkowania programu

(np. kwestia jasnego wyjaśnienia użytkownikowi do czego

służą poszczególne elementy programu)

prostota

wpływa na wysiłek niezbędny do nauczenia się programu

(np. kwestia przejrzystego interfejsu)

operatywność

wpływa na wysiłek niezbędny do operowania i sterowania

programem

(np. kwestia uporządkowanego interfejsu)

Skuteczność

Charakterystyki szczegółowe:

Przepustowość (czas reakcji)

wpływa na czasy odpowiedzi i przetwarzania podczas

wykonywania funkcji

(np. kwestia optymalności zastosowanych algorytmów)

zasobochłonność

wpływa na ilość i czas wykorzystania zasobów w trakcie

wykonywania funkcji

(np. kwestia czyszczenia niepotrzebnych danych

pomocniczych z pamięci)

Pielęgnowalność

Charakterystyki szczegółowe:

analizowalność

wpływa na wysiłek potrzebny do dokonania analizy przyczyn błędów lub identyfikacji komponentów do wymiany

(np. kwestia dokładnej obsługi wyjątków)

modyfikowalność

wpływa na wysiłek potrzebny do dokonania modyfikacji

(np. kwestia modułowości programu)

Stabilność

wpływa na poziom ryzyka związanego z efektami ubocznymi

modyfikacji

(np. czy naprawienie jednego błędu nie spowoduje innego)

testowalność

wpływa na wysiłek potrzebny do walidacji zmodyfikowanego

oprogramowania (jak bardzo skomplikowane jest sprawdzenie

poprawności działania całego programu)

Przenośność

Charakterystyki szczegółowe:

adaptowalność

wpływa na zdolność adaptacji programu dla różnych środowisk bez stosowania dodatkowych działań poza niezbędnymi (np. czy działanie programu jest możliwe w różnych systemach operacyjnych)

instalowalność

wpływa na wysiłek potrzebny do zainstalowania oprogramowania w

określonym środowisku (np. czy klient będzie musiał sam dochodzić jak zainstalować program)

koegzystencja

Wpływa na współistnienie jednego rodzaju oprogramowania z innym oprogramowaniem w tym samym środowisku (np. czy działanie jednego programu nie zaburzy działania innego)

zgodność

zgodność z przyjętymi standardami, normami, przepisami, itp. odnoszącymi się do przenośności

zastępowalność

wpływa na zdolność i wysiłek niezbędny do zastosowania programu zamiast określonego oprogramowania w danym środowisku (np. dany program może być tańszym substytutem innego programu)

Przykładowe zagadnienia dla charakterystyk jakości zewnętrznej i wewnętrznej

Charakterystyka

Pytania

1. Czy oprogramowanie realizuje zadania w odpowiedni sposób?

2. Czy uzyskane rezultaty są zgodne z oczekiwaniami?

Funkcjonalność

3. Czy system współdziała z innymi systemami?

4. Czy oprogramowanie posiada skuteczne mechanizmy autoryzacji?

1. Czy oprogramowanie potrafi odpowiednio zareagować na wystąpienie błędu?

2. Czy oprogramowanie kontynuuje pracę oraz daje możliwość odzyskania informacji po Niezawodność

wystąpieniu błędu?

3. Czy większość błędów została wykryta i usunięta podczas rozwoju oprogramowania?

1. Czy użytkownik uważa oprogramowanie za łatwe w obsłudze?

2. Czy użytkownik szybko uczy się obsługi oprogramowania?

Użyteczność

3. Czy obsługa systemu wymaga dużego wysiłku użytkownika?

4. Czy interfejs jest przyjazny użytkownikowi?

1. Jak szybko oprogramowanie reaguje na polecenia użytkownika?

Skuteczność

2. W jaki sposób oprogramowanie wykorzystuje zasoby?

1. Czy łatwo jest zdiagnozować błędy?

2. Czy zmodyfikowanie oprogramowania sprawia trudności?

Utrzymywalność

3. Czy wprowadzenie zmian wpływa na dotychczasową funkcjonalność?

4. Czy łatwo jest przetestować oprogramowanie?

1. Czy oprogramowanie może zostać przeniesione do innego środowiska?

2. Czy oprogramowanie jest zgodne ze standardami dotyczącymi przenaszalności?

Przenaszalność

3. Czy dane oprogramowanie może zastąpić inne?

4. Czy instalacja oprogramowania sprawia trudności?

Kryteria jakości oprogramowania

(charakterystyka jakości użytkowej)

Jakość oprogramowania można również opisać patrząc tylko oczami użytkownika, czyli od strony cech bezpośrednio wpływających przede wszystkim na stosunek użytkownika do programu.

Wydajność

Czy program umożliwia użytkownikowi realizację

zaplanowanych celów

Produktywność

Jak bardzo program zwiększa produktywność użytkownika

Bezpieczeństwo

Czy użytkownik czuje się bezpiecznie i komfortowo

Satysfakcja

Czy użytkownik jest zadowolony z korzystania z programu

Kryteria jakości oprogramowania

(charakterystyka jakości użytkowej)

Charakterystyka

Pytanie

1. Ile z założonych celów jest osiągane?

Wydajność

2. Jaka jest częstotliwość pojawienia się błędu?

3. Jaki procent z całkowitej ilości rozpoczętych działań zostaje doprowadzony do końca?

1. Ile czasu zajmuje wykonanie określonej czynności, przetworzenie informacji wejściowej przez oprogramowanie?

2. Jak produktywni są użytkownicy oprogramowania (liczba zadań ukończonych w danej Produktywność

jednostce czasu)?

3. Jakie koszty generują użytkownicy wykorzystujący oprogramowanie?

4. Jaka jest wydajność użytkownika w porównaniu z wydajnością eksperta?

1. Czy wykorzystanie danego oprogramowania ma wpływ na zdrowie i komfort pracy użytkownika?

Bezpieczeństwo

2. Jak często oprogramowanie powoduje straty finansowe?

3. Jaka jest częstotliwość awarii systemu?

1. W jakim stopniu użytkownik jest usatysfakcjonowany korzystaniem z oprogramowania?

Satysfakcja

2. W jakim stopniu możliwości oprogramowania satysfakcjonują jego użytkownika?

3. Jaka liczba potencjalnych użytkowników zdecyduje się wykorzystać dane oprogramowanie?