IMPLEMENTACJA NIEZAWODNOŚCI:
Znaczenie niezawodności:
- Rosnące oczekiwania klientów wynikające m.in. z coraz większej powszechności wykorzystania oprogramowania oraz z wysokiej niezawodności sprzętu; w kwestiach niezawodności oprogramowanie znacznie ustępuje sprzętowi (być może wynika to z mniejszej powtarzalności oraz dużej złożoności oprogramowania)
- Potencjalnie duże koszty błędnych wykonań (wysokie straty finansowe wynikające z błędnego działania funkcji oprogramowania, nawet zagrożenie dla życia)
- Nieprzewidywalność efektów oraz trudność usunięcia błędów w oprogramowaniu
- Często pojawia się konieczność znalezienia kompromisu pomiędzy efektywnością i niezawodnością; teoretycznie łatwiej jest jednak pokonać problemy zbyt małej efektywności niż zbyt małej niezawodności.
Zwiększanie niezawodności
- Unikanie błędów
- Testowanie błędów
- Tolerowanie błędów
Obserwacja liczby błędów podczas testów statystycznych pozwala określać stopień niezawodności oprogramowania
Miary niezawodności oprogramowania:
- Prawdopodobieństwo błędnego wykonania podczas realizacji transakcji (w niektórych systemach każde błędne wykonanie powoduje zerwanie całej operacji; miarą jest częstość występowania operacji, które nie powiodły się wskutek błędów)
- Częstotliwość występowania błędnych wykonań (ilość błędów w jednostce czasu; np. 0.1/h oznacza, że w ciągu 10 godzin ilość spodziewanych błędnych wykonań wyniesie 1; miara stosowana w przypadku systemów, które nie mają charakteru transakcyjnego
- Średni czas między błędnymi wykonaniami (odwrotność poprzedniej miary)
- Dostępność (prawdopodobieństwo, że w danej chwili system będzie dostępny do użytkowania; miarę tę można oszacować na podstawie stosunku czasu, w którym system jest dostępny, do czasu od wystąpienia błędu do powrotu do normalnej sytuacji; miara zależy nie tylko od błędnych wykonań, ale także od szybkości powrotu do normalnego działania)
Oszacowanie i podnoszenie niezawodności
Czasami (ale rzadko) poziom niezawodności (wartość pewnej miary lub miar) jest określany w wymaganiach klienta
Zwykle, jest on jednak wyrażony w terminach jakościowych, co utrudnia obiektywną weryfikację
Informacja o niezawodności jest przydatna również wtedy, gdy klient nie określił jej jednoznacznie w wymaganiach:
- częstotliwość występowania błędnych wykonań ma podstawowy wpływ na koszt konserwacji (znajomość niezawodności pozwala oszacować m.in. liczbę personelu, zgłoszeń tel. , ... dając łączny koszt serwisu)
- pozwala ocenić i poprawić proces wytwarzania pod kątem zminimalizowania łącznego kosztu funkcjonowania firmy
Jeżeli podczas usuwania wykrytych błędów nie wprowadza się nowych błędów, to mamy wzrost niezawodności
Szybszy wzrost niezawodności można osiągnąć jeżeli dane testowe są dobierane nie w pełni losowo, lecz w kolejnych przebiegach testuje się sytuacje, które dotąd nie były testowane
Unikanie błędów:
Można przyjąć, że stworzenie bardziej złożonego systemu, który nie zawiera błędów, jest praktycznie niemożliwe; trzeba natomiast starać się zmniejszać prawdopodobieństwo wystąpienia błędu dzięki:
- unikaniu niebezpiecznych technik (np. programowanie oparte na wskaźnikach)
- stosowaniu zasady ograniczonego dostępu (reguły zakresu, hermetyzacja, ...)
- językom z mocną kontrolą typów i kompilatorom sprawdzających zgodność typów
- dokładnemu i konsekwentnemu specyfikowaniu interfejsów pomiędzy modułami oprogramowania
- zwróceniu szczególnej uwagi na sytuacje skrajne (puste zbiory, pętle z graniczną ilością obiegów, wartości zerowe, niezainicjowane zmienne, ...)
- wykorzystaniu gotowych komponentów (np. gotowych bibliotek procedur lub klas) z zastosowaniem zasady ograniczonego zaufania
- minimalizawaniu różnic pomiędzy modelem pojęciowym i modelem implementacyjnym