Wytwarzanie systemów krytycznych
● Techniki programowania
stosowane przy budowaniu
krytycznych systemów
oprogramowania
Inżynieria oprogramowania - 18
Slide 1
●
Ogólnie, klienci oczekują, że oprogramowanie będzie niezawodne. Jednakże w przypadku aplikacji niekrytycznych klienci są zmuszeni do zaakceptowania pewnych usterek
oprogramowania
●
Niektóre aplikacje posiadają bardzo wysokie wymagania jeśli chodzi o niezawodność, dlatego też aby ją osiągnąć trzeba zastosować specjalne metody programowania
Inżynieria oprogramowania - 18
Slide 2
●
Unikanie usterek
•
Oprogramowanie tworzone jest w taki sposób aby uniknąć błędów człowieka, a co za tym idzie zminimalizować ryzyko wystąpienia usterek w systemie
•
Proces tworzenia zorganizowany jest w taki sposób, że usterki oprogramowania wykrywane są i usuwane zanim oprogramowanie zostanie dostarczone do klienta
●
Tolerowanie usterek
•
Oprogramowanie projektowane jest w taki sposób ażeby błędy oprogramowania nie powodowały uszkodzenia systemu Inżynieria oprogramowania - 18
Slide 3
●
Obecne metody inżynierii oprogramowania umożliwiają produkcję oprogramowania bezusterkowego
●
Oprogramowanie bezusterkowe oznacza oprogramowanie które dokładnie odpowiada swojej specyfikacji. NIE oznacza to jednak, że oprogramowanie zawsze działa poprawnie ponieważ błędy mogły wystąpić na etapie specyfikacji
●
Koszt produkcji oprogramowanie bezusterkowego jest bardzo wysoki dlatego też tworzy się je tylko w wyjątkowych sytuacjach.
Inżynieria oprogramowania - 18
Slide 4
Koszt st
pe
usunię r er
cia ror
dele
jednego b t
łę ed
du
Few
Many
wiele
mało
Very
bardzo
Number of resi
Liczba powstałdual e
ych b rr
łęors
dów
fe
maw
ło
Inżynieria oprogramowania - 18
Slide 5
Tworzenie oprogramowanie bezusterkowego
●
Wymaga precyzyjnej (najlepiej formalnej) specyfikacji
●
Wymaga organizacyjnego podejścia do utrzymania jakości w procesie wytwarzania oprogramowania
●
Istotą projektowania oprogramowania jest ukrywanie informacji i enkapsulacja
●
Należy wykorzystywać języki programowania z dobrze zdefiniowanymi typami danych, umożliwiające kontrolę w trakcie wykonywania
●
Konstrukcje podatne na błędy nie powinny być stosowane
●
Niezawodny i powtarzalny proces tworzenia Inżynieria oprogramowania - 18
Slide 6
●
Pierwszy raz omawiane w latach siedemdziesiątych
●
Programowanie bez instrukcji skoku („goto”)
●
Jedynymi strukturami sterującymi są pętle „while”
i instrukcje warunkowe „if”
●
Projektowanie z góry w dół (top-down)
●
Ważne ponieważ zainicjowało dyskusje na temat programowania
●
Prowadzi do powstawania programów łatwiejszych do czytania i zrozumienia
Inżynieria oprogramowania - 18
Slide 7
●
Liczby zmiennoprzecinkowe
•
Z natury niedokładne. Niedokładność może prowadzić do błędnych porównań.
●
Wskaźniki
•
Wskaźniki odnoszące się do nieprawidłowych obszarów pamięci mogą zniszczyć dane. Czynią program trudniejszym do zrozumienia a co za tym idzie trudniejszym do edycji
●
Dynamiczny przydział pamięci
•
Przydzielanie pamięci programu w czasie jego wykonywania może być powodem jej wyczerpania
●
Równoległość
•
Może prowadzić do subtelnych błędów czasowych z powodu nieprzewidzianych zależności pomiędzy procesami współbieżnymi Inżynieria oprogramowania - 18
Slide 8
●
Rekurencja
•
Błędy w rekurencji mogą być powodem przepełnienia pamięci
●
Przerwania
•
Przerwania mogą być powodem wstrzymania wykonywania operacji krytycznej i czynią program trudnym do zrozumienia. Są one porównywalne z instrukcjami goto
●
Dziedziczenie
•
Kod związany z danym obiektem nie jest zlokalizowany w jednym miejscu. Może to prowadzić do nieoczekiwanych zachowań i problemów ze zrozumieniem
●
Konstrukcje te nie muszą być unikane lecz powinny być stosowane ze szczególna ostrożnością Inżynieria oprogramowania - 18
Slide 9
●
Informacja powinna być eksponowana tylko dla tych części programu, które potrzebują dostępu do danych informacji. Dotyczy to tworzenia obiektów lub abstrakcyjnych typów danych które posiadają stan i operacje
●
Ukrywanie informacji pozwala uniknąć usterek z trzech powodów:
•
prawdopodobieństwa przypadkowego zniszczenia informacji
•
informacje są otoczone przez „ściany ogniowe” tak więc istnieje mniejsze prawdopodobieństwo rozprzestrzenienia się problemu na inne części programu
•
gdy informacje są zlokalizowane w jednym miejscu, istnieje mniejsze prawdopodobieństwo, że programista popełni błąd i większe że recenzent odnajdzie ten błąd
Inżynieria oprogramowania - 18
Slide 10
Procesy tworzenia niezawodnego oprogramowania
●
W celu zapewnienia minimalnej liczby usterek oprogramowania należy zastosować dobrze zdefiniowany, powtarzalny proces tworzenia
●
Dobrze zdefiniowany powtarzalny proces nie zależy od indywidualnych umiejętności ludzi
●
W celu minimalizacji liczby usterek, proces powinien obejmować weryfikację i zatwierdzanie Inżynieria oprogramowania - 18
Slide 11
●
Kontrola (inspekcja) wymagań
●
Zarządzanie wymaganiami
●
Weryfikacja modeli
●
Kontrole projektu i kodu
●
Analiza statyczna
●
Planowanie i zarządzanie testowaniem
●
Istotne jest również zarządzanie konfiguracją Inżynieria oprogramowania - 18
Slide 12
●
W sytuacjach krytycznych, systemy oprogramowania muszą tolerować usterki. Tolerancja usterek wymagana jest tam gdzie istnieje wysoka dostępność wymagań lub gdzie koszt awarii systemu może być bardzo wysoki
●
Tolerowanie usterek oznacza, że system może kontynuować swoje działanie pomimo usterek oprogramowania
●
Nawet jeśli system wydaje się być bezusterkowy, musi również tolerować usterki ponieważ mogły wystąpić błędy w fazie specyfikacji lub też zatwierdzanie mogło być nieprawidłowe
Inżynieria oprogramowania - 18
Slide 13
●
Wykrywanie usterek
•
System musi wykryć, że usterka (nieprawidłowy stan systemu) ma miejsce
●
Ocena szkód
•
Należy wykryć części systemu, na które awaria miała wpływ
●
Odtwarzanie po usterkach
•
System musi odtworzyć jakiś znany stan uznawany za
„bezpieczny”
●
Naprawa usterek
•
Syste m m
usi być zmodyfikowany tak aby zapobiec powtórzeniu się usterki. W wielu przypadkach usterki oprogramowania są chwilowe, tak więc często nie trzeba nic naprawiać Inżynieria oprogramowania - 18
Slide 14
Podejścia do tolerowania usterek
●
Programowanie defensywne
•
Programiści zakładają, że istnieją błędy w kodzie systemu i dodają nadmiarowy kod, który ma sprawdzać stan systemu po modyfikacjach i zapewniać, że zmiana stanu jest spójna
●
Architektury tolerujące usterki
•
Architektury systemów oprogramowania i sprzętu, które zapewniają nadmiarowość sprzętową i programową oraz realizują tolerowanie usterek. Zawierają sterownik tolerowania usterek, który wykrywa problemy i wspomaga odtwarzanie po usterkach
Inżynieria oprogramowania - 18
Slide 15
●
Wyjątek to błąd lub jakieś nieoczekiwane zdarzenie jak np. awaria zasilania
●
Konstrukcje obsługujące wyjątki pozwalają na obsługę takich zdarzeń bez potrzeby dodatkowych instrukcji sprawdzających wyjątki
●
Wykorzystanie normalnych konstrukcji sterujących do wykrywania wyjątków w sekwencji zagnieżdżonych wywołań funkcji wymaga dodania wielu dodatkowych instrukcji i wprowadza znaczną nadmiarowość czasową Inżynieria oprogramowania - 18
Slide 16
●
Wyjątki mogą być wykorzystywane jako normalna technika programistyczna a nie tylko jako sposób na odtwarzanie stanu systemu w wyniku awarii
Inżynieria oprogramowania - 18
Slide 17
●
Pewność systemu można osiągnąć poprzez unikanie usterek i tolerowanie usterek
●
Niektóre konstrukcje języków programowania takie jak „goto”, rekurencje czy wskaźniki są z natury źródłem błędów
●
Stosowanie dobrze zdefiniowanych typów danych pozwala w wielu wypadkach na wykrywanie potencjalnych usterek już w fazie kompilacji Inżynieria oprogramowania - 18
Slide 18