Desenvolvimento

Programação defensiva: uma estratégia para prevenção de erros

Como proteger o código de possíveis erros? Confira neste artigo o que vem a ser a programação defensiva.

há 10 meses 2 semanas


Você sabia que a TreinaWeb é a mais completa escola para desenvolvedores do mercado?

O que você encontrará aqui na TreinaWeb?

Conheça os nossos cursos

Quando você está desenvolvendo um código, provavelmente você quer que ele seja seguro e confiável. Por isso, o quanto mais você conseguir prever os erros que possam vir a acontecer no software, ou seja, a pensar defensivamente, mais confiável seu código estará.

Sendo assim, veremos neste artigo sobre a programação defensiva, uma das técnicas mais eficazes para evitar erros e problemas no seu código.

O que é a programação defensiva?

A programação defensiva é um conjunto de ações e técnicas que podemos aplicar para tentar garantir o funcionamento contínuo do software sob situações não previstas. Em outras palavras, visa diminuir a chance de falhas e evitar erros que podem ocorrer através de comportamentos dos usuários, como por exemplo, entradas inválidas e falhas de integridade.

O objetivo principal é garantir estabilidade e que seja o mais robusto o possível, ou seja, o software não para: ele continua funcionando ainda que os resultados não sejam aqueles que eram esperados.

É uma abordagem que muitos desenvolvedores de software utilizam justamente por se basear nessa ideia de antecipar possíveis problemas, reduzir a probabilidade de erros e adotar medidas preventivas durante todo o processo de desenvolvimento, além de claro, melhorar a experiência do usuário com o software desenvolvido. Isso não quer dizer que um software nunca possa falhar, mas ele deve permitir identificar e corrigir rapidamente.

Algumas técnicas utilizadas

“Prever” erros de usuários ou de componentes requer atenção, por isso veremos sobre algumas técnicas mais comuns que são utilizadas na programação defensiva.

Lógica Orientada a Objetos - Primeiros Passos
Curso Lógica Orientada a Objetos - Primeiros Passos
Conhecer o curso

Validação de entradas

As entradas são um ponto importante para levar em consideração, pois podem haver entradas inesperadas e imprevisíveis, podendo ser inclusive entradas mal-intencionadas. Nós não temos um controle do que o usuário vai colocar na entrada, mas em contrapartida, podemos definir algumas regras básicas que podem nos ajudar, pensando também na segurança do software.

Verificar quais são as entradas válidas, verificando se ela é aceitável ou não, se aceita somente valores numéricos, se aceita negativos ou não… Por isso, deve-se verificar e validar cuidadosamente todas as entradas de dados recebidas pelo software a fim de garantir que elas estejam corretas, dentro dos limites esperados e claro, seguras.

Tratamento de erros

Quando um erro ocorre é importante que o software seja capaz de identificar e, se possível, se recuperar daquela situação. Por isso, é interessante implementar mecanismos adequados para lidar com esses erros de forma apropriada para aquela situação.

Alguns exemplos são a captura de exceções (que veremos em um próximo tópico), o registro de logs de erros e a adoção de estratégias de recuperação, que são muito úteis para depuração, monitoramento e análise.

Uso de assertions

Essa é uma prática muito útil para validar suposições e condições durante a execução do código. As assertions tem a função de verificar se uma determinada condição é verdadeira. Se não, uma exceção é lançada, indicando uma violação na suposição feita.

Com a utilização das assertions, os problemas e erros são identificados de uma forma mais rápida, durante o desenvolvimento e o teste do software. A ideia é sempre encontrar bugs e problemas logo no início, facilitando a depuração e a correção.

Tratamento de exceções

Utilizar exceções é uma técnica muito utilizada pelos desenvolvedores para tratar erros. Ela é uma indicação de um problema que ocorreu durante a execução do código: um erro ocorre e assim uma exceção é lançada. Com isso, o fluxo do software é interrompido, transferindo o controle para um bloco de código especializado para tratamento dessa exceção. Assim, conseguimos fazer com o que nosso código capture informações sobre o erro e tome as medidas necessárias.

Um exemplo é utilizar blocos try-catch para capturar e tratar essas exceções, para que assim possam nos fornecer mensagens de erro para facilitar a depuração e resolução de problemas.

Documentação clara

Para facilitar o entendimento e uso correto do software por parte de outros desenvolvedores ou até mesmo para quem produziu poder consultar quando necessário, é importante ter uma documentação clara do software. Com isso, as pessoas poderão entender como o código foi projetado e com a descrição das medidas defensivas que foram adotadas (se tiver exemplos melhor ainda).

Além disso, conforme o código for evoluindo, é importante ir atualizando esse documento, como por exemplo quando é implementada uma nova medida defensiva ou qualquer outra alteração feita no código.

Testes abrangentes

Isso inclui todos os tipos de testes que são projetados para validar algo no software, como por exemplo o teste de unidade, integração, etc.

Para a programação defensiva, é importante que todas as medidas defensivas que foram implementadas no software sejam testadas para garantir a sua eficácia. Esses testes também nos auxiliam a garantir a confiabilidade e qualidade do software.

Concluindo…

A programação defensiva tem vários benefícios, mas vale deixar claro que essa técnica não deve ser utilizada em excesso. Deve-se encontrar um ponto de equilíbrio entre o que deve ser protegido versus o tempo x dinheiro que será investido nisso.

Em alguns cenários, é recomendado questionar se sua utilização é realmente recomendada. Como por exemplo, investir tempo em uma proteção de um erro que provavelmente nunca será encontrado. Mas isso não quer dizer que você não possa utilizá-la nos casos que você sabe que pode dar algum problema. Basta usar com moderação e com real necessidade.

Autor(a) do artigo

Marylene Guedes
Marylene Guedes

Responsável pelo sucesso do cliente na TreinaWeb. Graduada em Gestão de Tecnologia da Informação pela FATEC Guaratinguetá, além de estudante de UX/UI.

Todos os artigos

Artigos relacionados Ver todos