Wytwarzanie systemów krytycznych

● Techniki programowania

stosowane przy budowaniu

krytycznych systemów

oprogramowania

Inżynieria oprogramowania - 18

Slide 1

Niezawodność oprogramowania

●

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

Osiąganie niezawodności

●

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

Minimalizacja liczby usterek

●

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

Koszty usuwania usterek Co

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

Programowanie strukturalne

●

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

Konstrukcje podatne na błędy

●

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

Konstrukcje podatne na błędy

●

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

Ukrywanie informacji

●

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

Czynności zatwierdzania

●

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

Tolerowanie usterek

●

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

Aspekty tolerowania usterek

●

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

Obsługa wyjątków

●

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

Programowanie z wyjątkami

●

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

Główne tezy

●

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