1 / 44

Ferramentas para Auditoria de Código

Ferramentas para Auditoria de Código. Eduardo Aranha. Ferramentas para Auditoria de Código. Metamata Audit Metamata Metrics JavaPureCheck. Ferramentas para Auditoria de Código. Metamata Audit Avalia código fonte procurando erros, pontos fracos, estilos de acordo com padrões de codificação

eydie
Télécharger la présentation

Ferramentas para Auditoria de Código

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ferramentas para Auditoria de Código Eduardo Aranha

  2. Ferramentas para Auditoria de Código • Metamata Audit • Metamata Metrics • JavaPureCheck

  3. Ferramentas para Auditoria de Código • Metamata Audit • Avalia código fonte procurando erros, pontos fracos, estilos de acordo com padrões de codificação • Sugere modificações geralmente para melhorar • Performance, Robustês, Legibilidade • Métricas: boas práticas de programação • Habilitação das métricas • Criação de métricas próprias

  4. Métricas utilizadas na ferramenta Metamata Audit • Ordem de ocorrência dos modificadores • Corpo de loops e de comandos if obrigatoriamente dentro de blocos • Importação de classes • pacote java.lang • desnecessárias • tipo <nome-pacote>.*

  5. Métricas utilizadas na ferramenta Metamata Audit • Convenções de Nomeclatura • Classes, interfaces, métodos, atributos, constantes, pacotes, variáveis locais • v.isEmpty() == true • for (int i = 0 ; i < v.size() ; i++ { ... } • while (...) { str = str + “...”; } • int i; float f; ... ; f = (float) i;

  6. Métricas utilizadas na ferramenta Metamata Audit • class Carro extends Veiculo { ... } Carro car; ... ; if (car instanceof Veiculo) ... Veiculo v; ... ; if (v instanceof Carro) ... • i = j = 3 + 4; • i = j++ + 10 ; ... ; i = (j = 5) + 1; • int sum(i) { ... ; i++ ; ... } ...; sum(n) • for (int i = 0 ; ...; i++) { ... ; i = 10 ; ... }

  7. Métricas utilizadas na ferramenta Metamata Audit • if (a && b || c) { ... } ... if ((a && b) || c) { ... } • class C { int f; ... int do() { int f; ... } ... int do(int f) { ... } ... } • class C {int index() { ... } ... int do() { int index; ... } ... } • abstract interface MyInterface { ... }

  8. Métricas utilizadas na ferramenta Metamata Audit • Um método que retorna valor não deve alterar o estado (polêmico) class M { int i; ... void incr() { i++ } ... int val() { i-- ; incr(); return i; } } Justificativa: • separação de métodos que consultam estados x executam Desvantagem: eficiência

  9. Métricas utilizadas na ferramenta Metamata Audit • Métodos sincronizados synchronized void do() { ... } void do() {synchronized (this) { ... } } Vantagens: • Legibilidade (+ de 1 sync.), redefinição, depuração Desvantagens: • Eficiência de alguns compiladores

  10. Métricas utilizadas na ferramenta Metamata Audit • Métodos estáticos sincronizados static synchronized void do() { ... } void do() { synchronized (MyClass.this) { ... } } Vantagens: • Livre de problemas em certas versões do JDK

  11. Métricas utilizadas na ferramenta Metamata Audit • interface I { public static final int x = 4; public abstract void do(); } • int x[]; double[] num[]; char[] c; • try { ... } catch (MyException me) {} • try { throw new IOException(); } catch (Exception e) { ... }

  12. Métricas utilizadas na ferramenta Metamata Audit • import MyClass; ... ; import MyClass; ... • Declarações locais (variáveis, parâmetros, membros privados) não utilizadas • Declarações globais (acessível fora da própria classe) não utilizadas

  13. Métricas utilizadas na ferramenta Metamata Audit • class SuperClass { private void f(Vector v) {...} } class SubClass extends SuperClass { private void f(Vector v) {...} }

  14. Métricas utilizadas na ferramenta Metamata Audit • class SuperClass { void f(Vector v) {...} } class SubClass extends SuperClass { abstract void f(Vector v); }

  15. Métricas utilizadas na ferramenta Metamata Audit • class SuperClass { void f(int i) {...} void f(Vector v) {...} } class SubClass extends SuperClass { void f(double d) {...} }

  16. Métricas utilizadas na ferramenta Metamata Audit • public class MyClass1 { public int f(int i) { ... } int f(char i) { ... } } class MyClass2 { // classe de outro pacote public void do() { char c = ...; MyClass1 mc = ...; mc.f(c); } }

  17. Métricas utilizadas na ferramenta Metamata Audit • switch (exp) { case 1: ... case 2: ... ... case 256: ... case 257: ... }

  18. Métricas utilizadas na ferramenta Metamata Audit • class MyClass { static void do() { ... } } class MyClass2 { void f() { MyClass c = ... ; ... ; c.do(); } }

  19. Métricas utilizadas na ferramenta Metamata Audit • class MyClass { static int valor; static void init(int i) { valor = i; } } class MyClass2 { static int valor2 = MyClass.valor + 2; }

  20. Ferramentas para Auditoria de Código • Metamata Metrics • Identifica complexidade, acoplamento e coesão de código • Métricas baseadas em recomendações da quality assurance comunity • Serve de guia para cálculo da qualidade de software • Habilitação das métricas

  21. Métricas utilizadas no Metamata Metrics • V(G) • Número de caminhos possíveis de execução em um código • Complexidade • Comandos while, if, for, switch

  22. Métricas utilizadas no Metamata Metrics • LOC • Linhas de código • Legibilidade, reusabilidade, manutenbilidade • Número de linhas de código, em branco ou de comentário, número de comandos

  23. Métricas utilizadas no Metamata Metrics • DIT • Profundidade de hierarquias de classes • Interfaces e classe Object: profundidade 1 • Outras classes: 1 + profundidade da superclasse

  24. Métricas utilizadas no Metamata Metrics • NOA • Números de atributos declarados em uma classe • Quanto maior o estado, maior a dificuldade de • manter invariantes • entendimento

  25. Métricas utilizadas no Metamata Metrics • NRM • Número de Métodos Remotos • Um método é remoto para uma classe se ele for invocado e não for declarado • Na própria classe • Em alguma superclasse ou superinterface • Em alguma subclasse

  26. Métricas utilizadas no Metamata Metrics • NLM • Número de Métodos Locais • Um método é local para uma classe se ele for invocado e for declarado na própria classe ou interface

  27. Métricas utilizadas no Metamata Metrics • WMC • Complexidade da Classe de acordo seus Métodos locais • Conta número de métodos locais ponderando de acordo com • V(G) • Número de parâmetros

  28. Métricas utilizadas no Metamata Metrics • RFC • Tamanho do conjunto de resposta para uma classe • Conjunto de resposta • Métodos locais e de outros objetos • Podem ser chamados a partir da invocação de um método da classe • DAC • Número por classe de tipos utilizados na definição de atributos que não sejam do próprio tipo da classe, das subclasses e das superclasses

  29. Métricas utilizadas no Metamata Metrics • FAN OUT • Número de tipos utilizados na declaração de • Atributos • Partâmetros formais e retornos de métodos • Throws • Variáveis locais que não sejam do próprio tipo da classe, das subclasses e das superclasses

  30. Métricas utilizadas no Metamata Metrics • CBO • Acoplamento entre classes baseado • No acesso de membros de outras classes • Na passagem de objetos de outras classes como parâmetro de métodos • Usa o Fan Out

  31. Métricas utilizadas no Metamata Metrics • LCOM • Falta de coesão dos métodos de uma classe • Interseção dos conjuntos de atributos acessados por esses métodos • NOCL • Número de classes definidas

  32. Ferramentas para Auditoria de Código • JavaPureCheck • Inspeciona o código em busca de problemas de portabilidade • Parte do 100% Pure Java Certification Program • Identifica alguns dos problemas levantados pelo 100% Pure Java Certification Program

  33. Desenvolvendo Programas Puros • Linhas guias • Runtime.exec() • Class.forName() (warning) • ClassNotFoundException.printStackTrace() • RemoteException.printStackTrace() • Hard-coded path (/log/output.log) • Código nativo

  34. Desenvolvendo Programas Puros • Linhas guias (cont.) • Prioridades de Threads • Tamanho e posição diretamente de componentes visuais • Method.invoke() • AWT Peer classes ao invés das interfaces AWT • System.exit(), System.in, System.out

  35. Desenvolvendo Programas Puros • Linhas guias (cont.) • Drives JDBC (drive é portável?) • Terminador de linha (\n, \r\n, …) • Processamento da linha de comando • Internacionalização • Unicode • …

  36. Execução do JavaPureCheck • Input

  37. Execução do JavaPureCheck • Check

  38. Execução do JavaPureCheck • Analyse

  39. Execução do JavaPureCheck • Warning

  40. Execução do JavaPureCheck • Error

  41. Execução do JavaPureCheck • Relatório

  42. Conclusões e Trabalhos Futuros • Grande suporte para o controle de qualidade de código • Pouco suporte para o controle de qualidade do projeto • Nenhum suporte para as outras atividades • Auditoria do código do Radix • Mapeamento de problemas em refactorings

  43. Referências • www.metamata.com • www.metamata.com/audit.html • www.metamata.com/metrics.html • www.javasoft.com • java.sun.com/100percent/index.html

  44. Ferramentas para Auditoria de Código Eduardo Aranha

More Related