Defenzivno programiranje je stvaranje koda za računalni softver dizajniran da izbjegne problematične probleme prije nego što se pojave i učini proizvod stabilnijim. Osnovna ideja iza ovog pristupa je stvoriti program koji je u stanju ispravno raditi čak i kroz nepredviđene procese ili kada korisnici naprave neočekivane unose. Defenzivno programiranje se često oslanja na pomalo paradoksalnu kombinaciju eliminiranja nepotrebnog koda uz osiguravanje generiranja dovoljnih količina za rukovanje svim mogućim radnjama korisnika. Opsežno testiranje je također važno za ovaj proces, kao i stvaranje softvera koji se može lako revidirati i provjeravati.
Na mnogo načina, koncept obrambenog programiranja je sličan onom obrambenog upravljanja, jer se problemi razmatraju prije nego što se pojave. Jedna uobičajena metoda za pokušaj da se to učini je stvaranje koda koji je namijenjen rješavanju bilo kojeg mogućeg scenarija koji mu je nametnut. Programeri obično pokušavaju odrediti načine na koje će korisnici vjerojatno unijeti unos ili pokušati koristiti softver koji bi mogao biti izvan očekivanih parametara. Korištenje obrambenog programiranja izgrađeno je na temelju samog koda, koji je dizajniran da može rukovati čudnim unosom bez rušenja ili susreta s događajem pogreške.
Naizgled za razliku od ovog elementa obrambenog programiranja, međutim, dobro napisan kod mora biti lišen nepotrebnih unosa. Što je više redaka koda dio programa, to je više mogućnosti za uvođenje pogrešaka. Prakse obrambenog programiranja obično potiču programere da eliminiraju nepotreban kod i pojednostave programe kad god je to moguće. Stoga se mora uspostaviti ravnoteža između programiranja koje uzima u obzir neočekivane scenarije i koda koji sadrži previše nepotrebnog sadržaja bez koristi.
Testiranje je jedan od najvažnijih aspekata obrambenog programiranja. Unatoč velikom trudu koji je uložen u osiguravanje savršenstva koda, programeri gotovo uvijek propuste pogrešku ili kreiraju kod s neočekivanim rezultatima. Temeljito testiranje od strane profesionalnih testera omogućuje razvojnom programeru stotine sati korištenja proizvoda kako bi pronašao pogreške prije nego što se softver pusti.
Sam kod koji se stvara u obrambenom programiranju također je vitalni aspekt ovog procesa. Ne samo da treba biti što je moguće više pojednostavljen, već bi trebao biti i predstavljen na način koji je jasan i sažet. Programer često koristi revizije za pregled koda koji je stvoren. To omogućuje drugim programerima da vide obavljeni posao, a čitljiv kod je važan kako bi to bio realan dio razvoja.