La programación defensiva es la creación de código para software de computadora diseñado para evitar problemas antes de que surjan y hacer que el producto sea más estable. La idea básica detrás de este enfoque es crear un programa que pueda ejecutarse correctamente incluso a través de procesos imprevistos o cuando los usuarios realizan entradas inesperadas. La programación defensiva a menudo se basa en una combinación un tanto paradójica de eliminar el código innecesario mientras se asegura que se generen cantidades suficientes para manejar todas las posibles acciones del usuario. También es importante realizar pruebas exhaustivas para este proceso, al igual que la creación de software que pueda auditarse y comprobarse fácilmente.
En muchos sentidos, el concepto de programación defensiva se parece mucho al de conducción defensiva, en el sentido de que los problemas se consideran antes de que surjan. Un método común para intentar hacer esto es a través de la creación de código que está destinado a lidiar con cualquier escenario posible que se le presente. Los programadores suelen intentar determinar las formas en las que es probable que los usuarios ingresen datos o intenten utilizar software que puede estar fuera de los parámetros esperados. El uso de la programación defensiva se basa en la base del código en sí, que está diseñado para poder manejar entradas extrañas sin fallar o encontrar un evento de error.
Sin embargo, aparentemente en contraste con este elemento de programación defensiva, el código bien escrito debe estar desprovisto de entradas innecesarias. Cuantas más líneas de código formen parte de un programa, más oportunidades habrá de que se introduzcan errores. Las prácticas de programación defensivas suelen animar a los desarrolladores a eliminar el código innecesario y optimizar los programas siempre que sea posible. Por lo tanto, se debe lograr un equilibrio entre la programación que tiene en cuenta los escenarios inesperados y el código que contiene demasiado contenido innecesario sin proporcionar un beneficio.
Las pruebas son uno de los aspectos más importantes de la programación defensiva. A pesar de un gran esfuerzo para garantizar que el código sea perfecto, los desarrolladores casi siempre pierden un error o crean código con resultados inesperados. Las pruebas exhaustivas realizadas por probadores profesionales permiten que un desarrollador tenga cientos de horas de uso del producto para encontrar errores antes de que se publique el software.
El código en sí que se crea en la programación defensiva también es un aspecto vital de este proceso. No solo debe simplificarse tanto como sea posible, sino que también debe presentarse de una manera clara y concisa. Los desarrolladores suelen utilizar las auditorías para revisar el código que se ha creado. Esto permite que otros programadores vean el trabajo que se ha realizado, y el código legible es importante para que esto sea una parte realista del desarrollo.