Post on 25-Jan-2016
description
Fábrica de Software
Ferramentas para Auditoria de Ferramentas para Auditoria de CódigoCódigo
Eduardo Aranha
Fábrica de Software
Ferramentas para Auditoria Ferramentas para Auditoria de Códigode Código
• Metamata Audit
• Metamata Metrics
• JavaPureCheck
Fábrica de Software
Ferramentas para Auditoria Ferramentas para Auditoria de Códigode 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
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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>.*
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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;
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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 ; ... }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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 { ... }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• Métodos sincronizados
synchronized void do() { ... } void do() {synchronized (this) { ... } }
Vantagens:– Legibilidade (+ de 1 sync.), redefinição,
depuraçãoDesvantagens:– Eficiência de alguns compiladores
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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) { ... }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class SuperClass {
private void f(Vector v) {...} }
class SubClass extends SuperClass {
private void f(Vector v) {...} }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class SuperClass {
void f(Vector v) {...} }
class SubClass extends SuperClass {
abstract void f(Vector v); }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit
• class SuperClass { void f(int i) {...}
void f(Vector v) {...} }
class SubClass extends SuperClass {
void f(double d) {...} }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta 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); } }
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• switch (exp) {
case 1: ...
case 2: ...
...
case 256: ...
case 257: ...
}
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class MyClass {
static void do() { ... }
}
class MyClass2 {
void f() { MyClass c = ... ; ... ; c.do(); }
}
Fábrica de Software
Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class MyClass {
static int valor;
static void init(int i) { valor = i; }
}
class MyClass2 {
static int valor2 = MyClass.valor + 2;
}
Fábrica de Software
Ferramentas para Auditoria Ferramentas para Auditoria de Códigode 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• V(G)
– Número de caminhos possíveis de execução em um código
– Complexidade
– Comandos while, if, for, switch
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• DIT
– Profundidade de hierarquias de classes– Interfaces e classe Object: profundidade 1– Outras classes: 1 + profundidade da superclasse
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• NOA
– Números de atributos declarados em uma classe
– Quanto maior o estado, maior a dificuldade de• manter invariantes
• entendimento
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata 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
Fábrica de Software
Ferramentas para Auditoria Ferramentas para Auditoria de Códigode 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
Fábrica de Software
Desenvolvendo Programas Desenvolvendo Programas PurosPuros• Linhas guias
– Runtime.exec()– Class.forName() (warning)– ClassNotFoundException.printStackTrace()– RemoteException.printStackTrace()– Hard-coded path (/log/output.log)– Código nativo
Fábrica de Software
Desenvolvendo Programas Desenvolvendo Programas PurosPuros• 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
Fábrica de Software
Desenvolvendo Programas Desenvolvendo Programas PurosPuros• Linhas guias (cont.)
– Drives JDBC (drive é portável?)– Terminador de linha (\n, \r\n, …)– Processamento da linha de comando– Internacionalização– Unicode– …
Fábrica de Software
Conclusões e Trabalhos Conclusões e Trabalhos FuturosFuturos• 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
Fábrica de Software
ReferênciasReferências
• www.metamata.com
• www.metamata.com/audit.html
• www.metamata.com/metrics.html
• www.javasoft.com
• java.sun.com/100percent/index.html