Bezpieczeństwem systemów zajmuję się mniej więcej od 4 lat, a od nieco ponad dwóch jestem osobą odpowiedzialną za bezpieczeństwo kodu wytwarzanego w kilku zespołach programistycznych. Podczas przeglądów kodu różnych projektów, natrafiam na różne błędy, które niestety od czasu do czasu mogą dość poważnie zagrozić aplikacji. Zauważyłem też, że spora część błędów wynika z jednego bardzo prozaicznego powodu – brak stosowania zasad programowania defensywnego. I szczerze nie ma tu znaczenia, czy system jest pisany od podstaw, czy też dany kod jest rozszerzeniem już istniejącego systemu.
Co to jest programowanie defensywne?
Programowanie defensywne jest to zbiór technik programowania mających na celu zapewnienie poprawnego działania kodu i minimalizacji możliwości jego niepoprawnego wykorzystania. Techniki te skupiają się głównie na poprawie ogólnej jakości kodu, łatwości jego zroumienia i zapewnienia przewidywalnego działania. Innymi słowy, jeśli mamy dobry jakościowo kod i nadal trzymamy się zasad to prawdopodobieństwo wystąpienia nowych problemów jest zdecydowanie niższe.
Przyszła mi do głowy nawet pewna analogia z psychologii zwana „teorią rozbitego okna”. Jeśli pozwolimy w kodzie na jakieś ustępstwo, to po pewnym czasie to ustępstwo zacznie się coraz bardziej rozprzestrzeniać i generować kolejne np. błędy. Tutaj już prosta droga do kodu o kiepskiej jakości i ogólnych problemów z utrzymaniem.
Niestety wiedza na temat programowania defensywnego nie jest rozpowszechniona wśród programistów (zwłaszcza juniorów), a z tego co wiem, nie jest to też powszechny temat na uczelniach. W kolejnych wpisach chciałbym opisać podstawowe techniki programowania defensywnego takie jak:
- zasada KISS
- stosowanie danych w postaci kanonicznej
- wyjątki i asercje
- programowanie kontraktowe
Stay tuned… 😉