Tolerancja błędów oprogramowania
Tolerancja błędów oprogramowania to zdolność oprogramowania komputerowego do kontynuowania normalnego działania pomimo obecności błędów systemowych lub sprzętowych . Oprogramowanie odporne na błędy ma zdolność spełniania wymagań pomimo awarii.
Wstęp
Jedyną stałą rzeczą jest zmiana. Jest to z pewnością bardziej prawdziwe w przypadku systemów oprogramowania niż prawie każdego zjawiska, ponieważ nie każde oprogramowanie zmienia się w ten sam sposób, więc odporności na błędy oprogramowania mają na celu przezwyciężenie błędów wykonania poprzez modyfikację wartości zmiennych w celu stworzenia akceptowalnego stanu programu . Konieczność kontrolowania błędów oprogramowania jest jednym z najbardziej rosnących wyzwań stojących obecnie przed przemysłem oprogramowania. Tolerancja błędów musi być kluczową kwestią na wczesnym etapie tworzenia oprogramowania .
Istnieją różne mechanizmy odporności oprogramowania na awarie, między innymi:
- Bloki odzyskiwania
- Oprogramowanie w wersji N
- Oprogramowanie do samokontroli
Awaria systemu operacyjnego
Aplikacje komputerowe nawiązują połączenie za pomocą interfejsu programowania aplikacji (API) w celu uzyskania dostępu do współdzielonych zasobów, takich jak klawiatura, mysz, ekran, dysk twardy, sieć i drukarka. Mogą one zawieść na dwa sposoby.
- Zablokowane połączenia
- Usterki
Zablokowane połączenia
Zablokowane połączenie to żądanie usług z systemu operacyjnego, które zatrzymuje program komputerowy do czasu uzyskania wyników.
Na przykład wywołanie TCP blokuje się do czasu uzyskania odpowiedzi ze zdalnego serwera. Dzieje się tak za każdym razem, gdy wykonujesz czynność w przeglądarce internetowej. Intensywne obliczenia powodują długie opóźnienia z takim samym skutkiem, jak zablokowane wywołanie API.
Istnieją dwie metody obsługi blokowania.
- Wątki
- Timery
Wątkowość umożliwia oddzielną sekwencję wykonywania dla każdego wywołania interfejsu API, które można zablokować. Może to zapobiec zatrzymywaniu całej aplikacji podczas oczekiwania na zasób. Ma to tę zaletę, że żadne informacje o stanie wywołania API nie są tracone podczas wykonywania innych czynności.
Języki z wątkami obejmują następujące.
Ada | Afnix | C++ | C# | CILK | Eiffla | Erlang |
Jawa | Seplenienie | Magenta | Moduł 3 | Napiera 88 | Oz | Presto |
pSather | Perla 5.8.7+ | PHP | Pyton | R | Rubin | Pogawędka |
Tcl/Tk | V | Unikon | Balerina |
Timery umożliwiają przerwanie zablokowanego połączenia. Okresowy zegar pozwala programiście emulować wątkowanie. Przerwania zwykle niszczą wszelkie informacje związane ze stanem zablokowanego wywołania API lub intensywnych obliczeń, więc programista musi oddzielnie śledzić te informacje.
Języki bez wątków obejmują następujące.
Grzmotnąć | JavaScript | SQL | Visual Basic |
Uszkodzony stan wystąpi z timerami. Można tego uniknąć w następujący sposób.
Usterki
Błędy są wywoływane przez sygnały w systemach zgodnych z POSIX, a sygnały te pochodzą z wywołań API, z systemu operacyjnego iz innych aplikacji.
Każdy sygnał, który nie ma kodu obsługi, staje się błędem powodującym przedwczesne zakończenie działania aplikacji.
Program obsługi to funkcja wykonywana na żądanie, gdy aplikacja odbierze sygnał. Nazywa się to obsługą wyjątków .
Sygnał zakończenia jest jedynym sygnałem, którego nie można obsłużyć. Wszystkie inne sygnały mogą być kierowane do funkcji obsługi.
Funkcje obsługi występują w dwóch szerokich odmianach.
- Zainicjowane
- W linii
Zainicjowane funkcje obsługi są parowane z każdym sygnałem podczas uruchamiania oprogramowania. Powoduje to uruchomienie funkcji obsługi, gdy nadejdzie odpowiedni sygnał. Ta technika może być używana z timerami do emulacji wątków.
Funkcje obsługi w wierszu są powiązane z wywołaniem przy użyciu specjalistycznej składni. Najbardziej znany jest następujący używany w C++ i Javie.
- spróbuj
- {
- API_call();
- }
- złap
- {
- kod_obsługi_sygnału;
- }
Awaria sprzętu
Odporność na awarie sprzętu dla oprogramowania wymaga spełnienia następujących warunków.
Kopia zapasowa przechowuje informacje na wypadek konieczności wymiany sprzętu. Można to zrobić na jeden z dwóch sposobów.
- Automatyczne zaplanowane tworzenie kopii zapasowych za pomocą oprogramowania
- Ręczne tworzenie kopii zapasowych według regularnego harmonogramu
- Przywracanie informacji
Kopia zapasowa wymaga strategii przywracania informacji, aby informacje o kopii zapasowej były dostępne w systemie zastępczym. Proces przywracania jest zwykle czasochłonny, a informacje będą niedostępne do momentu zakończenia procesu przywracania.
Redundancja polega na replikacji informacji na więcej niż jednym urządzeniu komputerowym, tak aby opóźnienie odzyskiwania było krótkie. Można to osiągnąć za pomocą ciągłego tworzenia kopii zapasowych w działającym systemie, który pozostaje nieaktywny do momentu, gdy jest to potrzebne (zsynchronizowana kopia zapasowa).
Można to również osiągnąć poprzez replikację informacji w miarę ich tworzenia w wielu identycznych systemach, co może wyeliminować opóźnienia w przywracaniu.
Zobacz też
- Wbudowany autotest
- Wbudowany sprzęt testowy
- Konstrukcja odporna na błędy
- System odporny na awarie
- Odporny na awarie system komputerowy
- Programowanie uwzględniające odporność
- Wbudowany autotest logiki
- Programowanie w wersji N
- Inżynieria bezpieczeństwa
- OpenSAF — API dostępności usług