Qualidade de Código
Victor Henrique Queiroga de oliveira
TÓPICOS
 MOTIVAÇÃO
 PRÉ-REQUISITOS DE CODIFICAÇÃO
 ESTILOS DE CODIFIÇÃO
 MELHORANDO A ESCRITA
 IDENTIFICADORES
 PADRÕES DE NOMENCLATURA
 TÉCNICAS DE ESTRUTURAÇÃO DE CÓDIGO
 FERRAMENTAS
 DOCUMENTAÇÃO
TÓPICOS
 REAPROVEITAMENTO DE CÓDIGO
 BIBLIOTECAS
 PROGRAMAÇÃO DEFENSIVA
Motivações
 Frequentemente, encontrar uma solução a um problema é um feito
individual;
 Muitas vezes programadores que trabalham em equipe devem
contribuir entre si;
 Escrever corretamente o código auxilia na busca dos objetivos;
 Programar sempre foi importante;
Motivações
Com isso, outras atividades permanecem em pauta:
 Tradução de especificação de código;
 Análise de código de outros programadores;
 Modificar código para remover defeitos.
Pré-requisitos da codificação
Instrumentos necessários
Conhecimento da sintaxe e semântica
 As linguagens atuais possuem um repertório extenso de sintaxe e
semântica;
 Seu desconhecimento torna facilmente um programa mais
complicado do que realmente é;
 E portanto, pode significar que desenvolvedores estejam fazendo
esforço desnecessário;
Obs.: Cuidado para não reinventar a roda!!!
Dica 1:
Conheça bem a API
Conhecimento e uso de técnicas
 Escrita e organização de textos;
 Inclusão das informações necessárias a futuras atividades de
manutenção e testes;
 Inclusão no código de dispositivos de segurança;
Leitura de código
Compreensão e melhora da escrita
Compreensão da semântica
 As linguagens de programação não foram projetadas para tornar fácil
a leitura;
 Cada diferente linguagem de programação acaba possuindo um estilo
de escrita;
 Regras simples de estilo de codificação podem poupar trabalho de
compreensão;
Melhorando a escrita
Garantir uma leitura mais fácil do programa é um objetivo
recompensado com diversas vantagens:
 Menor probabilidade de perda de controle sobre a complexidade;
 Maior facilidade de depurar;
 Melhora o trabalho em equipe.
Exemplos de regras e dicas de estilo
Descrição Solução
Confusão entre o operador de atribuição = e o
operador de comparação ==
Acostumar-se a sempre usar:
if(5 == a) em lugar de if(a == 5)
Uso combinado de atribuição e comparação com nulo Usar if(null != (a=b)) em lugar de if(a = b)
Falta de comandos break em um switch Utilizar o recurso de auto completar, disponível na
maioria do editores de código
Erro de aninhamento de comandos if / else Escrever código usando adequadamente as chaves {}
Leitura complexa causada pela “sopa de letras” (Falta
de identação, nomenclatura confusa, etc.)
Usar corretamente as técnicas de recuos,
espaçamento e alinhamento
Identificadores
Alguns programadores se confundem no momento de escolher
identificadores, o que gera dificuldade na compreensão.
 É impossível a outro programador deduzir o propósito de cada
variável;
 O próprio programador que escolheu os nomes pode ter dificuldade
depois de um tempo;
 A atividade de resolução de erros torna-se mais difícil;
Identificadores
 Os identificadores podem levar à direção da auto documentação de
código;
 Existem várias estilos de nomenclatura com abordagens diferentes;
 Não existem normas universalmente aceitas;
Tipos de nomenclatura
1. Indicação de Tipos associados;
2. Indicação da Função;
Identificadores (Tipo associado)
ELEMENTO PREFIXO
Formulário frm
Texto txt
TextArea txa
CheckBox chk
Hidden hdn
Password psw
Botão Radio rdo
Botão Reset rst
Botão Submit sbt
Select slt
Um padrão de nomenclatura em HTML
Exemplo:
<input type=“text” id=“txtLogin” value=“” />
Identificadores (Função associada)
Prefixo SIGNIFICADO
min Valor mínimo de algo
max Valor máximo de algo
val Representa valor de
algo
Exemplos:
double minValPropriedade;
double maxValPropriedade;
Ferramentas apropriadas: editores
 Editores de código oferecem alguns recursos que permitem agilizar a
tarefa de escrita
 Recuos
 Auto completar;
 Code Templates;
 Gerador de interfaces;
 Demos
Dica2:
Use sua IDE com sabedoria
Documentação de código
 Muitas vezes a escrita organizada e clara não é suficiente;
 Existem muitos programadores que não se preocupam;
 Pequenas explicações podem economizar a leitura de dezenas de
linhas;
 Mas também deve-se ter o cuidado para não exagerar:
// incrementa o contador
++cont;
O que você deve
documentar
Ao estudar o funcionamento de um
programa, um desenvolvedor precisa
compreendê-lo inicialmente como um todo
e, depois entender a operação de cada
componente.
Ferramentas de documentação
 Doxygen
 gera diagramas de herança e chamadas de sub-rotinas;
 declarações de estruturas de dados;
 e listas alfabéticas de sub-rotinas, variáveis, módulos, etc.).
 JavaDoc
 NaturalDoc
Reaproveitamento de código
Princípio: Problemas que já foram solucionados no passado não devem
ser resolvidos novamente.
 É comum que os membros de uma equipe usem funções comuns;
 Evita perda de tempo com replicação de código já existente;
Solução: criação de repositório de funções;
Reuso de trechos de código
 Copiar código é, muitas vezes, uma excelente solução.
 Representa economia de tempo e custo;
 A solução já pode ter sido testada, tornando essa fase desnecessária;
 Testes de integração ainda podem ser necessários;
 Exemplo: Integração de um sistema de chat “pronto” a um sistema
em desenvolvimento.
Comunidades de desenvolvedores
A internet é uma fonte repleta de possibilidades:
 Tutorias;
 Programas completos;
 Bibliotecas de funções.
Comunidades de desenvolvedores
 http://www.codeguru.com
 http://www.codeproject.com
 http://www.codes-sources.com
 http://www.linhadecodigo.com.br
 http://pt.stackoverflow.com **
Bibliotecas
Há bibliotecas para uma grande diversidade de áreas:
 Acesso a Banco de dados
 Compressão e criptografia;
 Construção de interface;
 Comunicação em rede;
 Cálculo numérico;
 Manipulação gráfica 2D e 3D;
Exemplos de biblitotecas
 DigestUtils (Operações para simplificar a geração de hash em java)
String digest = DigestUtils.sha256Hex(pass);
 JPA (Javax Persistence API) (Mapeamento Objeto Relacional)
@Column(name "EMAIL", length = 100, nullable = false, unique = true)
public String getEmail() {
return email;
}
Programação defensiva
Basicamente se traduz em aumentar o controle sobre a execução do
programa.
Entrada de Dados
 Baseia-se na ideia de que um programa não deveria aceitar entradas
erradas em nenhuma hipótese.
 É preciso prever como tratar os erros para proteger a execução da
rotina
float raiz(float n){
return (n > 0)?sqrt(n) : -1.0;
}
....
Z = x *(x -1.0) / raiz(y);
Exceções
Exceção é uma condição inesperada que causaria uma falha no programa.
 Todas as situações podem ser tratadas por comandos if, porém leva a um
código confuso;
 Em algumas situações configuram ruído de programação;
 O tratamento de exceção provê uma solução mais limpa;
....
Try{
int teste = Integer.parseInt(valorDigitado);
}catch(NumberFormatException ex){
System.err.println(“Erro de conversão” +ex.getMessage());
}
....
Por fim
 O estilo de codificação não se relaciona apenas aos algoritmos, mas
também a forma como é escrito;
 É preciso haver equilíbrio entre otimização e legibilidade;
 As linguagens são repletas de funções e bibliotecas criadas para os
mais variados propósitos (Não precisa reinventar a roda);
 Um texto corretamente documentado, organizado, com
identificadores claros auxilia bastante o programador em seu
trabalho;
Referências
 KOSCIANSKI, André. Qualidade de Software: aprenda as metodologias
e técnicas mais modernas para o desenvolvimento de software. 2º Ed.
– São Paulo: Novatec Editora, 2007

Qualidade de Código

  • 1.
    Qualidade de Código VictorHenrique Queiroga de oliveira
  • 2.
    TÓPICOS  MOTIVAÇÃO  PRÉ-REQUISITOSDE CODIFICAÇÃO  ESTILOS DE CODIFIÇÃO  MELHORANDO A ESCRITA  IDENTIFICADORES  PADRÕES DE NOMENCLATURA  TÉCNICAS DE ESTRUTURAÇÃO DE CÓDIGO  FERRAMENTAS  DOCUMENTAÇÃO
  • 3.
    TÓPICOS  REAPROVEITAMENTO DECÓDIGO  BIBLIOTECAS  PROGRAMAÇÃO DEFENSIVA
  • 4.
    Motivações  Frequentemente, encontraruma solução a um problema é um feito individual;  Muitas vezes programadores que trabalham em equipe devem contribuir entre si;  Escrever corretamente o código auxilia na busca dos objetivos;  Programar sempre foi importante;
  • 5.
    Motivações Com isso, outrasatividades permanecem em pauta:  Tradução de especificação de código;  Análise de código de outros programadores;  Modificar código para remover defeitos.
  • 6.
  • 7.
    Conhecimento da sintaxee semântica  As linguagens atuais possuem um repertório extenso de sintaxe e semântica;  Seu desconhecimento torna facilmente um programa mais complicado do que realmente é;  E portanto, pode significar que desenvolvedores estejam fazendo esforço desnecessário; Obs.: Cuidado para não reinventar a roda!!!
  • 8.
  • 9.
    Conhecimento e usode técnicas  Escrita e organização de textos;  Inclusão das informações necessárias a futuras atividades de manutenção e testes;  Inclusão no código de dispositivos de segurança;
  • 10.
    Leitura de código Compreensãoe melhora da escrita
  • 11.
    Compreensão da semântica As linguagens de programação não foram projetadas para tornar fácil a leitura;  Cada diferente linguagem de programação acaba possuindo um estilo de escrita;  Regras simples de estilo de codificação podem poupar trabalho de compreensão;
  • 12.
    Melhorando a escrita Garantiruma leitura mais fácil do programa é um objetivo recompensado com diversas vantagens:  Menor probabilidade de perda de controle sobre a complexidade;  Maior facilidade de depurar;  Melhora o trabalho em equipe.
  • 13.
    Exemplos de regrase dicas de estilo Descrição Solução Confusão entre o operador de atribuição = e o operador de comparação == Acostumar-se a sempre usar: if(5 == a) em lugar de if(a == 5) Uso combinado de atribuição e comparação com nulo Usar if(null != (a=b)) em lugar de if(a = b) Falta de comandos break em um switch Utilizar o recurso de auto completar, disponível na maioria do editores de código Erro de aninhamento de comandos if / else Escrever código usando adequadamente as chaves {} Leitura complexa causada pela “sopa de letras” (Falta de identação, nomenclatura confusa, etc.) Usar corretamente as técnicas de recuos, espaçamento e alinhamento
  • 14.
    Identificadores Alguns programadores seconfundem no momento de escolher identificadores, o que gera dificuldade na compreensão.  É impossível a outro programador deduzir o propósito de cada variável;  O próprio programador que escolheu os nomes pode ter dificuldade depois de um tempo;  A atividade de resolução de erros torna-se mais difícil;
  • 15.
    Identificadores  Os identificadorespodem levar à direção da auto documentação de código;  Existem várias estilos de nomenclatura com abordagens diferentes;  Não existem normas universalmente aceitas;
  • 16.
    Tipos de nomenclatura 1.Indicação de Tipos associados; 2. Indicação da Função;
  • 17.
    Identificadores (Tipo associado) ELEMENTOPREFIXO Formulário frm Texto txt TextArea txa CheckBox chk Hidden hdn Password psw Botão Radio rdo Botão Reset rst Botão Submit sbt Select slt Um padrão de nomenclatura em HTML Exemplo: <input type=“text” id=“txtLogin” value=“” />
  • 18.
    Identificadores (Função associada) PrefixoSIGNIFICADO min Valor mínimo de algo max Valor máximo de algo val Representa valor de algo Exemplos: double minValPropriedade; double maxValPropriedade;
  • 19.
    Ferramentas apropriadas: editores Editores de código oferecem alguns recursos que permitem agilizar a tarefa de escrita  Recuos  Auto completar;  Code Templates;  Gerador de interfaces;  Demos
  • 20.
    Dica2: Use sua IDEcom sabedoria
  • 21.
    Documentação de código Muitas vezes a escrita organizada e clara não é suficiente;  Existem muitos programadores que não se preocupam;  Pequenas explicações podem economizar a leitura de dezenas de linhas;  Mas também deve-se ter o cuidado para não exagerar: // incrementa o contador ++cont;
  • 22.
    O que vocêdeve documentar Ao estudar o funcionamento de um programa, um desenvolvedor precisa compreendê-lo inicialmente como um todo e, depois entender a operação de cada componente.
  • 23.
    Ferramentas de documentação Doxygen  gera diagramas de herança e chamadas de sub-rotinas;  declarações de estruturas de dados;  e listas alfabéticas de sub-rotinas, variáveis, módulos, etc.).  JavaDoc  NaturalDoc
  • 24.
    Reaproveitamento de código Princípio:Problemas que já foram solucionados no passado não devem ser resolvidos novamente.  É comum que os membros de uma equipe usem funções comuns;  Evita perda de tempo com replicação de código já existente; Solução: criação de repositório de funções;
  • 25.
    Reuso de trechosde código  Copiar código é, muitas vezes, uma excelente solução.  Representa economia de tempo e custo;  A solução já pode ter sido testada, tornando essa fase desnecessária;  Testes de integração ainda podem ser necessários;  Exemplo: Integração de um sistema de chat “pronto” a um sistema em desenvolvimento.
  • 26.
    Comunidades de desenvolvedores Ainternet é uma fonte repleta de possibilidades:  Tutorias;  Programas completos;  Bibliotecas de funções.
  • 27.
    Comunidades de desenvolvedores http://www.codeguru.com  http://www.codeproject.com  http://www.codes-sources.com  http://www.linhadecodigo.com.br  http://pt.stackoverflow.com **
  • 28.
    Bibliotecas Há bibliotecas parauma grande diversidade de áreas:  Acesso a Banco de dados  Compressão e criptografia;  Construção de interface;  Comunicação em rede;  Cálculo numérico;  Manipulação gráfica 2D e 3D;
  • 29.
    Exemplos de biblitotecas DigestUtils (Operações para simplificar a geração de hash em java) String digest = DigestUtils.sha256Hex(pass);  JPA (Javax Persistence API) (Mapeamento Objeto Relacional) @Column(name "EMAIL", length = 100, nullable = false, unique = true) public String getEmail() { return email; }
  • 30.
    Programação defensiva Basicamente setraduz em aumentar o controle sobre a execução do programa.
  • 31.
    Entrada de Dados Baseia-se na ideia de que um programa não deveria aceitar entradas erradas em nenhuma hipótese.  É preciso prever como tratar os erros para proteger a execução da rotina float raiz(float n){ return (n > 0)?sqrt(n) : -1.0; } .... Z = x *(x -1.0) / raiz(y);
  • 32.
    Exceções Exceção é umacondição inesperada que causaria uma falha no programa.  Todas as situações podem ser tratadas por comandos if, porém leva a um código confuso;  Em algumas situações configuram ruído de programação;  O tratamento de exceção provê uma solução mais limpa; .... Try{ int teste = Integer.parseInt(valorDigitado); }catch(NumberFormatException ex){ System.err.println(“Erro de conversão” +ex.getMessage()); } ....
  • 33.
    Por fim  Oestilo de codificação não se relaciona apenas aos algoritmos, mas também a forma como é escrito;  É preciso haver equilíbrio entre otimização e legibilidade;  As linguagens são repletas de funções e bibliotecas criadas para os mais variados propósitos (Não precisa reinventar a roda);  Um texto corretamente documentado, organizado, com identificadores claros auxilia bastante o programador em seu trabalho;
  • 34.
    Referências  KOSCIANSKI, André.Qualidade de Software: aprenda as metodologias e técnicas mais modernas para o desenvolvimento de software. 2º Ed. – São Paulo: Novatec Editora, 2007