O que é programação Defensiva?
Esse tipo de programação é um
particular de uma única linguagem?
Será que
meu código ficará mais difícil de fazer ou até mesmo difícil de ler?
Bem, essas
são as perguntas que irei responder para todos vocês que tem interesse em
aprender um pouco mais sobre o que é programação defensiva e como tornar essa
prática comum no nosso dia a dia de trabalho.
O que é programação defensiva?
O conceito dessa prática é bem similar a prática de direção
defensiva, claro que nem todos os leitores desse artigo sabem dirigir, porém
com certeza já ouviu falar que um motorista dirige pensando em si e nos demais
ao seu redor. Agora por que isso é assim? Por que na prática um erro de um motorista
ao seu redor ocasionará o seu erro, falando em palavras simples, um motorista
aplicando o conceito de direção defensiva, ele sempre dirige pensando em evitar
ou reduzir os efeitos da Lei Murphy, onde tentaremos evitar que aquele erro
aconteça, prevenindo o erro com atitudes pré-pensadas. O conceito em si da
programação defensiva gera em torno desse mesmo pensamento, basicamente é um
conjunto de técnicas de projeto e programação objetivando a estabilidade e a
segurança de um software independentemente de
seu imprevisível. Tornando assim o seu código um vidente do que pode ser
escrito depois por outro programador por exemplo.
Claro que não abordarei todas as aplicações da programação
defensiva, pois esse conceito aborda uma ampla gama de assuntos voltados a
segurança da informação. Minha intenção aqui é mostrar como esse conceito pode
ser aplicado também de forma simples em seu código, evitando erros comuns que
podem ocasionar retrabalho para você mesmo ou para infelizmente outras pessoas
que forem dar manutenção no seu código.
Esse tipo
de programação é um particular de uma única linguagem?
Como já percebemos no conceito, programação defensiva pode e deve ser utilizada em qualquer linguagem, prever o que pode acontecer antes de codificar é uma boa prática de programação e com certeza vai evitar muitos problemas no futuro. Ao dar manutenção em código sendo ele em qualquer linguagem, é comum encontrar brechas que por mais simples que sejam podem gerar situações desagradáveis.
Como já percebemos no conceito, programação defensiva pode e deve ser utilizada em qualquer linguagem, prever o que pode acontecer antes de codificar é uma boa prática de programação e com certeza vai evitar muitos problemas no futuro. Ao dar manutenção em código sendo ele em qualquer linguagem, é comum encontrar brechas que por mais simples que sejam podem gerar situações desagradáveis.
Por esse motivo, é sempre
válido ter desconfiança com relação ao seu código, para prevenir o que possa
vir a dar errado. Basicamente, essa técnica consiste em assumir um maior
controle sobre a execução do código, incluindo um maior número de verificações
no mesmo.
Será que meu código ficará mais
difícil de fazer ou até mesmo difícil de ler?
Muito pelo
contrário, seu código ficará, mas limpo e muito mais seguro, como você tem
certeza? Bem, vamos pensar em uma fábrica de software, em uma fábrica é comum
você pegar uma determinada demanda codificar e entregar em menos de 24 horas.
Como você normalmente sempre trabalha em equipe, seu código pode passar por
todos da sua equipe a fim de fazer uma melhoria solicitada ou até mesmo uma
correção. Se você não tratar o seu código prevendo que o seu colega de equipe
fará uma besteira, com certeza o seu colega irá escrever um trecho de código
que mais tarde irá apresentar problema. Por exemplo:
Imagine que
você precisa mandar um atributo a fim de usá-lo como filtro na sua consulta,
caso esse atributo seja um objeto com vários atributos internos que foi preenchido
na camada VIEW, antes de utilizá-lo na sua consulta você deve sempre verificar
se aquele objeto está nulo e aí sim tentar acessar os seus atributos.
EX: Considerem a classe Filtro descrita abaixo
Agora
considerem o método tentando acessar de forma errada o atributo da classe
Filtro.
Observem,
certamente o desenvolvedor fez dessa forma por que por alguma hipótese ele
achou que o objeto Filtro estaria sempre instanciado ou preenchido, porém vamos
considerar que o objeto está nulo, e aí? Com certeza irá estourar erro, nesse
caso, a forma correta de pensar quando estiver programando é que o objeto também
pode vir nulo. Sendo assim a forma correta de prever o erro seria como descrito
abaixo.
Ex:
Verificar
se objeto está nulo antes de trabalhar com ele é sempre importante, nunca caiam
na besteira de não verificar porque o objeto sempre irá vir instanciado, o
objeto sempre pode vir nulo também.
Como
podem ver no exemplo, o código não ficou complicado só porque verificamos se o
objeto está nulo, mas com certeza ficou muito mais seguro de se trabalhar.
Portanto podemos concluir que é sempre válido pensar nos erros antes de
codificar e assim ter a certeza que seu código está seguro.
Conclusão
Vamos codificar com segurança,
afinal o foco pode até ser a entrega, mas só a entrega com qualidade gera o
verdadeiro lucro.
REFERÊNCIAS
PCS- disponível em; https://edisciplinas.usp.br/pluginfile.php/380807/mod_resource/content/0/Aula08%20-%20Programa%C3%A7%C3%A3o%20Defensiva-2015-10-05.pdf;.
Acessado em 12 de março de 2017.
PHP Sob Ataque- Técnicas de Programação Defensiva- disponível em ; http://www.phpit.com.br/artigos/php-sob-ataque-tecnicas-de-programacao-defensiva-video-e-slides.phpit;.
Acessado em 12 de março de 2017.
Coleman, Derek et al- Desenvolvimento Orientado a Objetos o
Método Fusion; Editora Campus
Comentários
Postar um comentário