Zio-09-wyk-Slajd5

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Problemy z Oprogramowaniem

Problemy z Oprogramowaniem


Przykłady poważnych usterek w oprogramowaniu są równie częste co spektakularne. W 1996 roku Europejska Agencja Kosmiczna po 10 latach przygotowań i wydaniu 7 miliardów dolarów opracowała wartą 5 milionów dolarów rakietę Ariane 5 zdolną do wyniesienia na orbitę kilkutonowych satelitów. Ariane 5 miała być dowodem na dynamiczny rozwój przemysłu kosmicznego w Europie oraz pozwolić na ustanowienie przewagi nad dominującymi dotychczas w tym zakresie USA i Rosji. 36,7 sekundy po starcie wystarczyło, aby doprowadzić rakietę do eksplozji i zniweczyć wysiłek naukowców i inżynierów. Wraz z rakietą zniszczeniu uległy 4 trzytonowe satelity.

Bezpośrednią przyczyną katastrofy była nagła zmiana kursu spowodowana przez informację z systemu nawigacyjnego. Zmiana kursu spowodowała gwałtowną reakcję aerodynamiczną, która wyzwoliła mechanizm samozniszczenia rakiety. Zmiana kursu spowodowana została przez błąd w programie konwertującym stanowiącym część oprogramowania kontroli lotów głównego komputera rakiety. Program próbował skonwertować prędkość rakiety reprezentowaną przez liczbę 64 bitową do formatu liczby 16 bitowej. Taki błąd na komputerze stacjonarnym zwykle spowodowałby zawieszenie się lub błąd np. arkusza kalkulacyjnego. W tym przypadku programista „nie przewidział” wystąpienia sytuacji, w której rakieta osiągnie tak dużą prędkość i nie zaprogramował zabezpieczenia przed taką sytuacją. Doprowadziło to do zamknięcia się systemu naprowadzania i problemy ze zmianą kursu.

Czy z punktu widzenia inżyniera oprogramowania istniał sposób na uniknięcie katastrofy? Analizując przyczyny eksplozji, jako główny brak wskazać można niewystarczająco zdefiniowane wymagania dotyczące niezawodności programu konwersji. Zasada, która każe programiście „nie ufać” danym, które trafiają do danego komponentu programu (np. funkcja, moduł) nabiera szczególnego znaczenia w przypadku systemów krytycznych – takich jak system kontroli lotu rakiety. Dodatkowe fragmenty kodu odpowiedzialne za sprawdzanie poprawności wyników pomimo, że często nadmiarowe i wpływające negatywnie na wydajność aplikacji, mają krytyczne znaczenie w przypadku takich systemów, jak omawiany w niniejszym przykładzie.


<< Poprzedni slajd | Spis treści | Następny slajd >>