Dlaczego jakość kodu jest ważna?
Dlaczego jakość kodu jest ważna?
-
odróżnia programistę od klepacza kodu
-
programowanie jest grą zespołową
-
zapewnia odpowiednią kulturę pracy
-
znacznie zwiększa niezawodność
Unsafe' means ‘Somebody may die’.
— Safety officer
Upadek: Sprawa Boeinga
Przykłady standardów
-
MISRA C i MISRA C++ (Motor Industry Software Reliability Association)
-
AUTOSAR (AUTomotive Open System ARchitecture)
-
C++ Core Guidelines
-
PEP 20: The Zen of Python
-
Linux kernel coding style
Literki są naprawdę za darmo
int a = 0;
Literki są naprawdę za darmo
int digitsOnDisplay = 0;
Wszelkie inne znaki też są za darmo (sic!)
int readTemperature()
{
if (temperatureIsReady()) return i2cReadFrom(SENSOR_ADDRESS) else return 0;
}
Wszelkie inne znaki też są za darmo (sic!)
int readTemperature()
{
if (temperatureIsReady()) {
return i2cReadFrom(SENSOR_ADDRESS);
} else {
return 0;
}
}
Funkcje i pliki są prawie za darmo
Dokumentuj kod
int setCorrection(const int* coefficients)
{
…
}
Dokumentuj kod
/**
* Ustawia krzywą korekcji termopary wg standardu K.
*
* @param coefficients Tablica współczynników.
*
* @retval 0 Ustawiono poprawnie.
* @retval 1 Wystąpił błąd alokacji.
*/
int setCorrection(const int* coefficients)
{
…
}
Wykorzystuj to, za co i tak zapłaciłeś
-
przerwania
-
timery
-
DMA (Direct Memory Access)
-
rejestry ustawiające i zerujące
Przedwczesna optymalizacja
Premature optimization is the root of all evil.
— Donald Knuth
dobra architektura ≠ przedwczesna optymalizacja
Sprzętowe wsparcie niezawodności
Redundancja
-
DMR — Dual Modular Redundancy
-
TMR — Triple Modular Redundancy
Podstawowe zagadnienia
-
zabezpieczenie przed odczytem
-
zabezpieczenie przed zapisem
-
podpis cyfrowy
Newag Impuls 45WE
-
pociągi Kolei Dolnośląskich nie ruszają po przeglądzie w warsztacie konkurencji
-
Dragon Sector pobiera wsad, dezasembluje i odkrywa blokady geograficzne
-
po zmianie bitu w konfiguracji pociągi ruszają
-
Newag S.A. nic nie wie (pikachu face)
-
sprzęt nie wspiera podpisu, więc udowodnijcie, że to my
-
poza tym jakim prawem używacie składów ze zmodyfikowanym oprogramowaniem?
Operacja Olympic Games
-
robak Stuxnet stworzony prawdopodobnie około 2009 r. przez USA i Izrael
-
robak zaraża komputery z Microsoft Windows np. przez pendrive'a (atak 0-day)
-
wyszukuje w sieci sterowniki PLC
-
aktywuje się, gdy rozpoznaje Siemens SIMATIC S7-300 lub S7-400
-
zwiększa częstotliwość pracy falownika
-
skutecznie psuje irańskie wirówki do wzbogacania uranu
TEE (Trusted Execution Environment)
-
fizycznie odizolowany mechanizm w procesorze
-
bezpieczny system operacyjny
-
chroni integralność danych
-
chroni integralność programu
-
wykorzystuje sprzętowe szyfrowanie pamięci
-
jednorazowo ustawiany klucz szyfrujący w procesorze
Implementacje TEE
-
AMD Platform Security Processor
-
Intel Software Guard Extensions
-
IBM Secure Service Container
-
RISC-V MultiZone Security Trusted Execution Environment
-
ARM TrustZone
TPM (Trusted Platform Module)
-
generator losowy
-
generator kluczy
-
podpis oprogramowania
-
bezpieczne (?) przechowywanie kluczy
Zagrożenia
-
ataki na elektrownie, wodociągi
-
ataki na infrastrukturę energetyczną za pomocą oprogramowania domowej fotowoltaiki
-
ataki DDoS (Distributed Denial-of-Service) za pomocą IoT (Internet of Things)
-
ataki na samochody (nie tylko przez GSM, ale nawet DAB)
-
atak na Google Maps za pomocą…