Zapisz się na webinar "Asembler w Embedded: Od czego zacząć?"

Ile kosztuje system safety-critical?

Systemy safety-critical - wszystkie wpisy

Zwykle przyjmujemy, że koszt wytworzenia systemu safety-critical spełniającego wymagane normy jest dziesięciokrotnie wyższy, niż zwykły projekt posiadający te same wymagania funkcjonalne. Po przeczytaniu poprzednich części serii powinniście mieć całkiem dobre wyobrażenie skąd biorą się dodatkowe koszty. W tym artykule omówię koszty developmentu, zewnętrznego kodu i narzędzi.

Wykorzystane dane

Do analizy wykorzystam dokument „Cerification Cost Estimates for Future Communication Radio Platforms” wydany przez organizację EUROCONTROL analizujący koszty systemów dla lotnictwa spełniających normy DO-178B dla software’u i DO-254 dla hardware’u. Poziomy bezpieczeństwa DAL (Development Assurance Level) są następujące:

Poziom bezpieczeństwaOpis
Level AUtrata życia pasażerów, zniszczenie samolotu
Level BDuży negatywny wpływ na bezpieczeństwo i osiągi samolotu, możliwe poważne obrażenia pasażerów
Level CZnaczne zmniejszenie marginesu bezpieczeństwa pilotów, możliwe lekkie obrażenia pasażerów
Level DNiewielkie zmniejszenie marginesu bezpieczeństwa pilotów, możliwe niedogodności pasażerów i wydłużenie lotu.
Level EBrak negatywnych skutków

O poziomach bezpieczeństwa więcej można przeczytać w jednej z wcześniejszych części cyklu:

SLOC/h – Ilość linii kodu na godzinę

Ilość kodu produkcyjnego w przeliczeniu na godzinę pracy developera dla poszczególnych poziomów DAL przedstawia wykres:


W pierwszym odruchu możecie sobie pomyśleć, że to jakieś brednie. Jaki doświadczony developer pisałby 12 linii kodu na godzinę? Musicie jednak pamiętać, że wartość SLOC/h (software lines of code per hour) jest obliczana jako ilość ostatecznego kodu produkcyjnego (bez pustych linii i komentarzy) podzielona przez ilość osobogodzin wszystkich osób pracujących nad projektem. Uwzględnia więc ona nie tylko samo pisanie kodu, ale również projektowanie, dokumentację, prototypy, testy, refactoring, meetingi, zarządzanie, certyfikację i wszystkie inne aktywności wykonywane w czasie projektu.

W temacie SLOC trafiłem również w sieci na ciekawe porównanie, które działa na wyobraźnię. Koszt wytworzenia pojedynczej linii kodu produkcyjnego zawiera się w przedziale 10$-45$. Oznacza to, że już 1000 linii kodu może być wartych tyle samo co kilogram złota.

Skąd biorą się różnice między poziomami bezpieczeństwa?

W dokumencie znajdziemy również odpowiedź skąd biorą się różnice między poszczególnymi poziomami DAL. Zostały one przedstawione na kolejnym wykresie:

Dołączono również tabelę opisującą dodatkowe kroki wymagane na poszczególnych poziomach:

Jak widać najwięcej dodatkowej pracy związanej z zapewnieniem wymaganego poziomu DAL dotyczy weryfikacji. Nie oznacza to oczywiście jedynie testowania gotowego rozwiązania. O niektórych zadaniach weryfikacyjnych trzeba pomyśleć już na samym początku projektu. Dobrym przykładem jest tutaj Traceability, czyli możliwość prześledzenia rozwoju funkcjonalności od wymagań przez rozwiązania architektoniczne po implementację i testy.

Gdzie ponosimy koszty?

Koszt możemy ponosić na dwa sposoby:

  • Czas potrzebny na stworzenie własnego rozwiązania.
  • Kupienie gotowego softu i narzędzi.

Wbrew pozorom druga opcja jest często tańsza mimo, że ceny wydają się kosmiczne. Potwierdzenie możemy znaleźć również w dokumencie. Jest tam tabela z wyliczeniem ilości osobodni potrzebnych do realizacji przykładowego projektu spełniając poszczególne poziomy DAL (Table 9, strona 59-60). Aby spełnić najwyższy poziom DAL A potrzeba około 46000 mandayów. Z tego 42000 zajmują 2 komponenty – Stos IPv6 i ORB (Object Request Broker). Korzystając z gotowych rozwiązań jesteśmy więc w stanie zaoszczędzić teoretycznie 90% czasu projektu!

Poza softem możemy również kupić narzędzia automatyzujące pracę. Ułatwiają one zachowanie procesu wytwarzania oprogramowania wymaganego przez normę. Toole tego typu to najczęściej prawdziwe kombajny zawierające ogromną ilość opcji i mające równie ogromną cenę.

Podejmując decyzję o wyborze takiego narzędzia staramy się porównać jego cenę z kosztem robienia wszystkiego ręcznie. Najczęściej takie kalkulacje mocno mijają się z rzeczywistością. Mamy tendencję do robienia zbyt optymistycznych założeń i szacujemy zbyt mały koszt pracy. Najczęstszą przyczyną nietrafionych estymat jest zakładanie, że raz wykonanych czynności nie będziemy musieli powtarzać. Niestety zmiany w projekcie, czy wydawanie nowych wersji wymusza na nas kolejne przejścia cyklu. Napisanie własnych narzędzi albo robienie wszystkiego za każdym razem ręcznie na dłuższą metę bardzo często się nie opłaca. Poza tym dostajemy support, a zaoszczędzony czas możemy przeznaczyć na inne aktywności.




Systemy safety-critical - Nawigacja

1 Comment

  1. Hej! Dzięki za artykuł i za całą kategorię o systemach safety-critical 🙂 Fajne wprowadzenie do tematu i ciekawe referencje!

    Najbardziej zaciekawił mnie wykres pokazujący ilość wytwarzanych linijek kodu w zależności od kategorii bezpieczeństwa systemu. W źródle jednak mówią o SLOC/day a nie per hour, więc ta wydajność jest jeszcze mniejsza, co może być nawet bardziej szokujące. Dodatkowo, wydaje mi się, że dwie linie oznaczone „with experience”, „no experience” nie określają doświadczenia developera, ale rodzaj produktu (czy był rozwijany we wcześniejszych wersjach, czy korzysta z gotowych, przetestowanych wcześniej modułów itp). Ale tak jak słusznie piszesz, mowa tu o całym procesie (i chyba też chodzi o wszystkich członków zespołu, nie tylko SW developerów) w którego skład wchodzi projektowanie, kodowanie, weryfikacja, dokumentacja itp. A w takich systemach dokumentacji są całe tony 🙂

    Zauważyłem też, że link do którego się odnosisz niestety już nie działa, ale znalazłem inne źródło tego dokumentu – podaję dla dociekliwych, pozdrawiam 🙂
    https://docplayer.net/13974967-Certification-cost-estimates-for-future-communication-radio-platforms.html

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *