background image

OSCR 3

Projektowanie OSCR

Grzegorz Granosik

Oprogramowanie systemów czasu rzeczywistego

2

Cechy dobrego oprogramowania

Dobre oprogramowanie

Bezpieczne (safe)

Pewne (reliable)

Poprawne (correct)

Statycznie zgodne ze 
specyfikacją.

Czy i jak dobrze 
program realizuje swoje 
zadanie gdy zostanie 
uruchomiony.

Wymaganie odnosi się do 
konsekwencji nieprawidłowego 
działania: zranienie, śmierć, straty 
materialne.

Może się zdarzyć, że poprawne oprogramowanie nie jest 
pewne: zostanie sprawdzone zgodnie ze specyfikacją ale w 
układzie nie spełnia swojego zadanie – bo specyfikacja była zła.
Lub odwrotnie: program realizuje zamkniętą pętlę regulacji, 
powinien generować sterowanie z określoną dokładnością jeśli 
tego nie robi jest niepoprawny ale dla małych błędów układ 
zamknięty może działać pewnie.

System może działać 100% pewnie 
ale być niebezpieczny.
I odwrotnie możemy napisać
niepewny program ale będzie w 100% 
bezpieczny… jeśli go nie włączymy

background image

Oprogramowanie systemów czasu rzeczywistego

3

Skutki błędu systemu

Odpowiedź na błąd

Stop

Działa dalej (fault tolerant)

Utrzymuje pełne usługi 
(fail operational)
Systemy krytyczne gdzie 
zatrzymanie miałoby 
skutki katastrofalne

Zredukowane usługi (fail
active)
Np. system awaryjnego 
dojazdu ze zmniejszoną
prędkością

Fail hard
Systemy, których zatrzymanie 
nie powoduje żadnych szkód, 
a występowanie błędu i tak 
prowadzi do niemożliwości 
pracy i stopu (np.. PC)

Fail Safe
Ograniczamy zniszczenia przez 
zatrzymanie (np. reaktor 
jądrowy)

Oprogramowanie systemów czasu rzeczywistego

4

Software errors

– dowolna cecha programu, która powoduje 

jego nieprawidłowe działanie

Błędy oprogramowania

Efekty środowiskowe

Projekt programu

Projekt systemu

Struktura kodu

background image

Oprogramowanie systemów czasu rzeczywistego

5

Projekt systemu

„

Faza wstępna (najważniejsza) 

„

Dobra specyfikacja założeń  – jeśli zrobimy 
złe założenia dotyczące działania systemu i 
środowiska, możemy mieć poważne kłopoty 
w fazie realizacji i odbioru

„

Rada dla programistów – przygotuj 
elastyczne oprogramowanie, nigdy nie 
wiadomo gdzie i ile razy trzeba je będzie 
zmieniać

Oprogramowanie systemów czasu rzeczywistego

6

Projekt programu, kodowanie

„

Błędy związane są z błędnym myśleniem o 
problemie lub jego rozwiązaniu (nie mają 
związku z fizycznym układem)

Logiczne

Znaczeniowe 

(semantyczne)

Składniowe (syntax)

Algorytmiczne

background image

Oprogramowanie systemów czasu rzeczywistego

7

Błędy składniowe (syntax)

„

Definicja i układ symboli tworzących program – słowa 
kluczowe, zmienne, delimitery

„

Użycie złego symbolu np. „:” zamiast „;” – zazwyczaj 
łatwo wykrywane przez kompilatory 

„

Złe użycie symbolu:

‰

If (x=y) run();

‰

If (x==y) run();

„

Najlepiej używać języków wysokiego poziomu – im mniej 
piszemy tym mniejsza szansa na popełnienie błedu

Oprogramowanie systemów czasu rzeczywistego

8

Błędy znaczeniowe (semantyczne)

„

Niedokładnie zrozumieliśmy co 
oprogramowanie ma tak naprawdę rozbić i 
zrobiliśmy coś innego (ale poprawnie)

„

Nieprawidłowo zakodowaliśmy to co 
oprogramowanie ma robić  – złe zrozumienie 
lub znajomość języka programowania

background image

Oprogramowanie systemów czasu rzeczywistego

9

Błędy logiczne

„

Ten typ błędów powoduje, że program nie 
zachowuję się w sposób logiczny: 

‰

przebieg programu jest poprawny ale wyniki 
nieprawidłowe, potencjalne przyczyny:

„

Post-check zamiast pre-check, 

„

brak zerowania (inicjacji) zmiennych), 

„

sprawdzanie złego warunku

‰

może się zawieszać, potencjalne przyczyny:

„

Nieskończone pętle,

„

Zakleszczenie w programach wielowątkowych (deadlock)

Oprogramowanie systemów czasu rzeczywistego

10

Błędy algorytmiczne

„

Pojawiają się w operacjach matematycznych:

„

Overflow, za krótki typ zmiennej, zła znajomość 
reprezentacji liczb na danej maszynie (największa liczba 
jaką maszyna może przechować, najmniejsza liczba, 
relacja pomiędzy  największym i najmniejszym 
argumentem jednej operacji, precyzja)

„

Dzielenie przez 0 – niezdeterminowany wynik

„

Zakres wejść-wyjść

„

Jednostki przyjęte w obliczeniach (ich spójność)

background image

Oprogramowanie systemów czasu rzeczywistego

11

Efekty środowiskowe

„

Oprogramowanie systemów RT nie może być 

traktowane jako samodzielna całość  – jest 

częścią większego procesu obejmującego nie 

tylko hardware ale i ludzi

„

Jak oprogramowanie zachowuje się w 

otoczeniu, w którym ma docelowo działać –

pewne problemy ujawniają się dopiero 

podczas uruchomienia całego systemu

„

Potrzeba głębokiej i całościowej analizy 

procesu w fazie projektu systemu

Oprogramowanie systemów czasu rzeczywistego

12

Skąd się bierze złe oprogramowanie

„

Jest niepoprawne

„

Jest niepewne

„

Jest niebezpieczne

„

Nie jest dostarczone na czas

„

Jest zbyt drogie 

Specyficzne problemy 

implementacyjne

Możliwości zespołu

Zła organizacja firmy

background image

Oprogramowanie systemów czasu rzeczywistego

13

Etos firmy

„

Złe zarządzanie – brak lub niechęć 
zrozumienia potrzeb zespołów programistów, 
developerów oprogramowania

„

Brak dyscypliny związanej z projektem 
i dokumentacją

„

Złe narzędzia 

„

Brak profesjonalizmu

Oprogramowanie systemów czasu rzeczywistego

14

Możliwości merytoryczne zespołu

„

Dobre oprogramowanie nigdy nie powstaje 

przez przypadek

„

Niedocenianie skomplikowania zadania

„

Niedostateczna dokumentacja

„

Niewystarczające korzystanie z narzędzi 

programistycznych

„

Brak prototypowania systemu

„

Tworzenie projektów od podstaw – brak 

ponownego użycia softwaru (biblioteki 

pakiety)

background image

Oprogramowanie systemów czasu rzeczywistego

15

Specyficzne problemy implementacyjne

„

Niejasne wymagania (specyfikacja projektu) –

wszyscy wiedzą co system ma robić ale nic nie jest 

spisane

„

Przekroczenie czasu i/lub budżetu

„

Źle dostarczone oprogramowanie

„

Brak lub słaba dokumentacja

„

Równoczesne tworzenie hardwaru i softwaru

„

Złe wykorzystanie zasobów

„

Użyteczność i granice testów, 

„

Użycie klienta docelowego jako rozszerzenia okresu 

testowego

Oprogramowanie systemów czasu rzeczywistego

16

Tworzenie dobrego oprogramowania -
podstawy

„

Jasno określone wymagania

„

Sprawdzenie, że zaproponowane rozwiązanie spełni wymagania:

‰

Dostępny czas

‰

Dokładność i poprawność danych wejściowych

‰

Wymagana dokładność obliczeń

‰

Interfejs użytkownika

‰

Parametry zasilania 

‰

Wymagania specjalne dot. działania np. podtrzymanie bateryjne

‰

Specjalne wymagania dot. środowiska działania np. radiacja

‰

Czy użyto właściwego języka programowania

‰

Czy jest wsparcie (narzędzia programistyczne, dokumentacja)

‰

Czy wystarczające zasoby systemowe

‰

Czy będą dotrzymane wymagania czasowe programu, a co jeśli 

w testach wyjdzie, że nie? A co ze zdarzeniami 

asynchronicznymi i sporadycznymi?

background image

Oprogramowanie systemów czasu rzeczywistego

17

Tworzenie dobrego oprogramowania -
podstawy

„

Organizacja projektu aby był łatwy do zarządzania

‰

Modularyzacja

‰

Zadania końcowe są dostatecznie małe – dla jednej osoby

‰

Struktura równoległych (konkurencyjnych) działań

„

Organizacja projektu aby możliwe było utrzymanie terminów

„

Uniwersalność programu aby mógł być łatwo modyfikowany

‰

Portability – przenośność między platformami, procesorami, 

konfiguracjami, kompilatorami

‰

Reusability – komponenty programowe: niezależna cześć 

większego systemu, wykonująca określoną funkcję, posiadająca 

jasno określone interfejsy. Przykładowe kryteria podziału 

komponentów:

„

Aplikacja ogólnego przeznaczenia – aplikacja specjalistyczna

„

Kod źródłowy – linkowalna biblioteka (binarna lub program w FPGA)

„

Niezależny od dostawcy – specyficzny dla dostawcy

Oprogramowanie systemów czasu rzeczywistego

18

Tworzenie dobrego oprogramowania -
podstawy

„

Testowalność i łatwość serwisowania 

‰

Program musi być zrozumiały i jednoznaczny (nie tylko dla twórcy!)

‰

Możliwość łatwego i szybkiego przewidzenia skutków określonych 

modyfikacji programu jest niezwykle pożądana

‰

Unikanie programowania ryzykownego

‰

Unikanie trików programowych

‰

Unikanie konstrukcji programowych działających tylko lokalnie, 

specyficznych dla maszyny lub aplikacji

„

Minimalizacja ryzyka przez użycie znanych i sprawdzonych 

metod

‰

Programowanie obiektowe zapewnia dobre środowisko 

developerskie, standardowe i sformalizowane podejście, 

standardowe dokumentowanie

„

Zapewnienie właściwego priorytetu dla bezpieczeństwa

„

Unikanie sytuacji, gdy projekt zależy od konkretnych osób

background image

Oprogramowanie systemów czasu rzeczywistego

19

Unikanie błędów, programowanie 
defensywne

„

Zakładamy, że błędy są nieuniknione – staramy się ograniczyć 

skutki ich pojawienia się  – musimy  poznać ich naturę i źródła:

‰

Human factor (zmiana parametrów systemu na zgubne dla niego)

‰

Błędy obliczeniowe (dzielenie przez 0, przekroczenie zakresów 

zmiennych)

‰

Awaria sprzętu (niepojawienie się sygnału z zewnątrz)

„

Zapobiegać możliwości wprowadzenia błędu (ograniczyć 

dopuszczalne zmiany parametrów)

„

Wykryć błąd jeśli się pojawi (i wprowadzić system w safe mode –

exception handling)

„

Monitorować zachowanie systemu (i odpowiadać na awarię 

szybko, bezpiecznie i deterministycznie)

Oprogramowanie systemów czasu rzeczywistego

20

Cykl tworzenia oprogramowania

Problem klienta 

Analiza problemu 

Specyfikacja wymagań

Projekt architektury 

Projekt fizyczny 

Implementacja 

Debug i testy 

Uruchominie systemu 

Wymagania klienta

Struktura programu

Struktura hard/soft

Moduły programowe

Pakiet programów

Wymagania systemu

Wymagania programu

background image

Oprogramowanie systemów czasu rzeczywistego

21

Źródło i koszt błędów

Żródła błędów

Koszt znalezienia i usunięcia

Specyfikacja w ymagań

Projekt systemu

Kod programu

Inne

Oprogramowanie systemów czasu rzeczywistego

22

Źródła 
specyfikacji

Problem formułowania specyfikacji

Informacja jawna

Informacja ukryta

Wiedza

Trade-off

Formułowanie 

problemu

Niespójność

Założenia

Brak informacji

Problemy

Obszar wiedzy klienta

Obszar 
wiedzy 
projektanta

Kanały wymiany 
informacji

Techniki

Mowa

Diagramy i modele

Tekst

Problemy

Niejednoznaczność

Złożoność

Sprzeczność

Niezrozumiałość

background image

Oprogramowanie systemów czasu rzeczywistego

23

Specyfikacja wymagań

Interfejsy

Osiągi

Funkcja

Co ma robić

Ograniczenia

Software world interface

Real world interface

Jak dobrze ma 

robić

Jak 

komunikuje się

z otoczeniem

Co wolno a co nie 

wolno robić

Databases

Operating

systems

Plant

Man-machine

Oprogramowanie systemów czasu rzeczywistego

24

Specyfikacja wymagań czasowych

Czynnik 

ludzki

Obliczenia 

numeryczne

Pętle 

sterujące

Czasy 

odpowiedzi

Możliwości 

obliczeniowe

background image

Oprogramowanie systemów czasu rzeczywistego

25

Dokumentacja

„

Definiuje:

‰

Co, dlaczego i na kiedy klient chce

‰

Jak i kiedy projektant rozwiąże problem

‰

Szczegóły systemu, osiągi, użytkowanie

„

Informuje

‰

Optymalne jest połączenie tekstu i diagramów

„

Rejestruje przebieg projektu

‰

Założenia

‰

Deliverables

‰

Stan faktyczny produktu

‰

Cechy i osiągi produktu

‰

Instalacja, obsługa, testy

‰

Historia modyfikacji

Oprogramowanie systemów czasu rzeczywistego

26

Dokumentacja a etapy projektu

Projekt 

systemu

Specyfikacja 

wymagań

Implementacja

Integracja, 

debug, testy

Specyfikacja 

oczekiwanych

funkcji

Specyfikacja 

hardware i 

software

Kody 

programu

Dokumentacja 

testów

Opis aplikacji

Opis instalacji 

systemu

background image

Oprogramowanie systemów czasu rzeczywistego

27

Case study

„

Tepson