Dicas para o desenvolvimento de um software funcional – Parte III

Este é o terceiro artigo sobre algumas dicas para o desenvolvimento de um bom software. Aproveito a oportunidade para agradecer a todos que leram, comentaram e compartilharam o primeiro e o segundo artigo sobre este assunto. Espero que as dicas neste artigo tragam um pouco mais de conhecimento aos leitores, e mais uma vez, quero que sintam-se à vontade para expressar qualquer opinião sobre este texto.

Padronização de código

Este item é bastante importante quando o projeto é desenvolvido por mais de uma pessoa, ou melhor, uma equipe de desenvolvimento. Definir uma padronização do código auxilia na legibilidade e no entendimento do que está sendo executado na aplicação. Identar o código nos blocos de condição “if-else” e nos laços de repetição são uma das práticas que ajudam os desenvolvedores a identificar facilmente a execução de um método. Identação significa “estruturar” as linhas do código em tabulações de acordo com o nível de execução.

Quando há uma grande quantidade de aninhamento de blocos no código-fonte, a identação se torna ainda mais importante para associar o início e o fim de cada bloco aninhado. Algumas ferramentas de desenvolvimento, como o NetBeans e o Visual Studio, possuem o recurso de destacar o aninhamento quando o cursor do mouse é posicionado na chave que abre ou fecha o bloco. Desenvolvedores em Delphi também podem adquirir essa funcionalidade com o addon gratuito cnWizards.

As variáveis, classes, métodos e funções também devem possuir nomes sugestivos de acordo com o seu objetivo. Portanto, uma variável com o nome “SomaTotalPedidos” é bem mais fácil de ser identificada do que uma variável chamada “vSTotPed”. Mesmo que o nome seja ligeiramente maior, o código fica mais legível quando se trabalha com esse tipo de nomenclatura.

Tratamento de exceções

Por mais que o desenvolvedor faça testes na aplicação antes de publicá-la, é natural que alguns erros ainda possam ocorrer inesperadamente para o usuário. Estes erros são decorrentes de problemas de semântica, gravação de dados inconsistentes, falhas de acesso à memória ou até mesmo eventos inesperados do sistema operacional. No ambiente de programação, os erros são conhecidos tecnicamente como “exceções”. Uma boa prática de programação exige que exista um tratamento de exceções em todos os pontos mais sensíveis do código. Inserções e atualizações no banco de dados são exemplos de operações que possivelmente podem retornar algum erro para o usuário.

A recomendação é envolver este código em um bloco de tratamento de exceção e executar uma função de rollback (desfazer as alterações no banco de dados) caso algum erro seja encontrado. Ao utilizar tratamento de exceções, também é possível criar mensagens mais transparentes para reportar a exceção ao usuário. Dessa forma, faz mais sentido exibir a mensagem “Ocorreu um erro. Tente novamente.” ao invés de “An error occurred. Access violation at address 004068EC“. Estes tipos de mensagens em inglês técnico geralmente são desconhecidas para o usuário e não trazem nenhum tipo de informação para auxiliá-lo.

Atualização do sistema

A cada atualização do sistema, normalmente é necessário substituir o executável no computador do cliente, rodar scripts SQL e alterar alguns parâmetros de configuração. Sendo assim, é preciso ir até o cliente e fazer todo o processo manualmente no computador local. Para evitar a viagem, uma alternativa é realizar a atualização remotamente através de softwares como o TeamViewer, LogMeIn ou VNC. O problema surge quando há dezenas ou até centenas de computadores para serem atualizados. Se a atualização for feita em um computador por vez, pode demorar dias para terminar a atualização em todos as máquinas.

Portanto, ao invés de realizar a atualização manualmente, crie um módulo exclusivo para automatizar este processo. A atualização automática está presente na maioria dos softwares atuais, como navegadores e antivírus. O objetivo é permitir que o próprio sistema verifique novas versões, baixe o arquivo de atualização e realize todo o processo automaticamente, sem a intervenção do usuário. Este tipo de módulo não é simples de ser desenvolvido, mas é plenamente funcional e permite atualizar vários computador simultaneamente.

Programação Orientada a Objetos

No mundo da programação, a maioria dos métodos e componentes são modelados em classes para facilitar a reutilização de código e a manipulação de objetos. Trabalhar com classes e objetos pode ser relativamente complexo, mas sem dúvida garante um maior controle de tudo o que acontece dentro da aplicação. Através da Programação Orientada a Objetos (POO), é possível reaproveitar várias linhas de código por meio de técnicas como herança e polimorfismo. Além disso, definir a visibilidade dos atributos de uma classe e criar métodos para manipulação de valores permitem que a estrutura interna da aplicação não seja exposta a nível de usuário.

Utilizar POO no desenvolvimento de um sistema também facilita a produção de regras de negócio, abstração de dados e a integração com padrões de projeto.

Durante a fase de projeto, a Programação Orientada a Objetos é amplamente praticada por projetistas e analistas de sistemas através da linguagem UML para modelagem de dados. O Diagrama de Classes, por exemplo, fornece uma grande quantidade de informações detalhadas para simplificar a modelagem das classes do projeto e das tabelas do banco de dados. Em conclusão, a utilização da POO na modelagem evita que o sistema sofra constantes alterações e adaptações durante o andamento do projeto, reduzindo o tempo de desenvolvimento e minimizando os erros de implementação.

Muito obrigado mais uma vez pela leitura. Um abraço a todos!

Leia também: Parte 1Parte 2Parte 4Parte 5Parte 6Parte 7Parte 8Parte 9Parte 10Parte 11

André Celestino

Mais artigos deste autor »

Desenvolvedor de software há 7 anos e autor do blog AndreCelestino.com. Graduado em Sistemas de Informação e pós-graduado em Engenharia e Arquitetura de Software com ênfase em Desenvolvimento Ágil. Atualmente trabalha como Engenheiro de Software.


7 Comentários

marcos
1

eu me formei em administração e eletronica e processamento de dados, porém gosto muito da área de TI, mas acho a mesmo muito dificil, principalmente desenvolvimento, apenas tenho noções….

Denilson Telaroli
2

quando seu código tem muito if e else ele não tem que ser identado, tem que ser refatorado pois está com design errado.
poo é muito importante mesmo, justamente ele que ajudaria no problema anterior.
a serie trata de tópicos cotidianos, e não trata de assuntos mais importantes e que na maioria das vezes são deixados de lado, como metodologias de gerenciamento de projetos e desenvolvimento guiado por testes, que são justamente o diferencial para entregar um produto com qualidade.

André Luis Celestino
3

Exatamente, Denilson. Essa série de artigos trata apenas de dicas básicas para o desenvolvimento. Portanto, procurei não entrar no mérito de gerência de projetos, metodologias e arquiteturas de software, por serem um tópico mais avançado.
Obrigado pelo comentário.

Jonas
4

Recomendo colocar os links no final da postagem para as partes “I e II” (eu não havia lido ainda, mas já encontrei…).
Abraço.

Carlos
6

Tratamento de exceção é algo que todo mundo deveria saber e aplicar corretamente! Existem práticas incorretas como máscaras do tipo Try {Codigo} Except {Sem código!} End;. Outra coisa que já pude presenciar, são interceptações de exceções com mensagens do tipo “Ocorreu um Erro!”. Poucos se atentam que, um erro quando bem tratado, além de ter clareza, deve ter como objetivo instruções para o usuário(utilizando linguagem de usuário), também dependendo do tipo do erro, identificadores que possam ser úteis ao desenvolvedor. Existem várias boas práticas para tratamento de erros e até ferramentas para logs e envio de mensagens para o desenvolvedor. A maioria dos erros, são causados pela falta de tratamento.
Parabéns novamente André.

André Luis Celestino
7

Legal, Carlos! Você complementou a dica sobre tratamento de exceções de forma perfeita! A questão de fornecer instruções para o usuário no caso de exceção é uma prática muito bem abordada!
Obrigado pelo comentário! Abraço!

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!