{"id":189,"date":"2018-02-08T23:19:29","date_gmt":"2018-02-08T22:19:29","guid":{"rendered":"https:\/\/brozanski.net\/?p=189"},"modified":"2018-02-09T10:34:14","modified_gmt":"2018-02-09T09:34:14","slug":"programowanie-defensywne","status":"publish","type":"post","link":"https:\/\/brozanski.net\/index.php\/2018\/02\/08\/programowanie-defensywne\/","title":{"rendered":"Programowanie defensywne"},"content":{"rendered":"<p>Bezpiecze\u0144stwem system\u00f3w zajmuj\u0119 si\u0119 mniej wi\u0119cej od 4 lat, a od nieco ponad dw\u00f3ch jestem osob\u0105 odpowiedzialn\u0105 za bezpiecze\u0144stwo kodu wytwarzanego w kilku zespo\u0142ach programistycznych. Podczas przegl\u0105d\u00f3w kodu r\u00f3\u017cnych projekt\u00f3w, natrafiam na r\u00f3\u017cne b\u0142\u0119dy, kt\u00f3re niestety od czasu do czasu mog\u0105 do\u015b\u0107 powa\u017cnie zagrozi\u0107 aplikacji. Zauwa\u017cy\u0142em te\u017c, \u017ce spora cz\u0119\u015b\u0107 b\u0142\u0119d\u00f3w wynika z jednego bardzo prozaicznego powodu &#8211; brak stosowania zasad programowania defensywnego. I szczerze nie ma tu znaczenia, czy system jest pisany od podstaw, czy te\u017c dany kod jest rozszerzeniem ju\u017c istniej\u0105cego systemu.<\/p>\n<h3>Co to jest programowanie defensywne?<\/h3>\n<p>Programowanie defensywne jest to zbi\u00f3r technik programowania maj\u0105cych na celu zapewnienie poprawnego dzia\u0142ania kodu i minimalizacji mo\u017cliwo\u015bci jego niepoprawnego wykorzystania. Techniki te skupiaj\u0105 si\u0119 g\u0142\u00f3wnie na poprawie og\u00f3lnej jako\u015bci kodu, \u0142atwo\u015bci jego zroumienia i zapewnienia przewidywalnego dzia\u0142ania. Innymi s\u0142owy, je\u015bli mamy dobry jako\u015bciowo kod i nadal trzymamy si\u0119 zasad to prawdopodobie\u0144stwo wyst\u0105pienia nowych problem\u00f3w jest zdecydowanie ni\u017csze.<br \/>\nPrzysz\u0142a mi do g\u0142owy nawet pewna analogia z psychologii zwana &#8222;teori\u0105 rozbitego okna&#8221;. Je\u015bli pozwolimy w kodzie na jakie\u015b ust\u0119pstwo, to po pewnym czasie to ust\u0119pstwo zacznie si\u0119 coraz bardziej rozprzestrzenia\u0107 i generowa\u0107 kolejne np. b\u0142\u0119dy. Tutaj ju\u017c prosta droga do kodu o kiepskiej jako\u015bci i og\u00f3lnych problem\u00f3w z utrzymaniem.<\/p>\n<p>Niestety wiedza na temat programowania defensywnego nie jest rozpowszechniona w\u015br\u00f3d programist\u00f3w (zw\u0142aszcza junior\u00f3w), a z tego co wiem, nie jest to te\u017c powszechny temat na uczelniach. W kolejnych wpisach chcia\u0142bym opisa\u0107 podstawowe techniki programowania defensywnego takie jak:<\/p>\n<ul>\n<li>zasada KISS<\/li>\n<li>stosowanie danych w postaci kanonicznej<\/li>\n<li>wyj\u0105tki i asercje<\/li>\n<li>programowanie kontraktowe<\/li>\n<\/ul>\n<p>Stay tuned&#8230; \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bezpiecze\u0144stwem system\u00f3w zajmuj\u0119 si\u0119 mniej wi\u0119cej od 4 lat, a od nieco ponad dw\u00f3ch jestem osob\u0105 odpowiedzialn\u0105 za bezpiecze\u0144stwo kodu wytwarzanego w kilku zespo\u0142ach programistycznych. Podczas przegl\u0105d\u00f3w kodu r\u00f3\u017cnych projekt\u00f3w, natrafiam na r\u00f3\u017cne b\u0142\u0119dy, kt\u00f3re niestety od czasu do czasu mog\u0105 do\u015b\u0107 powa\u017cnie zagrozi\u0107 aplikacji. Zauwa\u017cy\u0142em te\u017c, \u017ce spora cz\u0119\u015b\u0107 b\u0142\u0119d\u00f3w wynika z jednego bardzo\u2026 <span class=\"read-more\"><a href=\"https:\/\/brozanski.net\/index.php\/2018\/02\/08\/programowanie-defensywne\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[26],"class_list":["post-189","post","type-post","status-publish","format-standard","hentry","category-security","tag-miroburn_challenge"],"_links":{"self":[{"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/posts\/189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/comments?post=189"}],"version-history":[{"count":2,"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/posts\/189\/revisions"}],"predecessor-version":[{"id":191,"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/posts\/189\/revisions\/191"}],"wp:attachment":[{"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/media?parent=189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/categories?post=189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brozanski.net\/index.php\/wp-json\/wp\/v2\/tags?post=189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}