Paulo R. M. Meirelles
IME-USP
01 de Junho de 2009 WTDQS-SBQS Ouro Preto-MG, Brasil
MANGUE
MANGUE
Métricas e Ferramentas para
Métricas e Ferramentas para
Avaliação Automática da Qualidade
Avaliação Automática da Qualidade
de Código-Fonte
de Código-Fonte
MANGUE
MANGUE
•Projeto de Doutorado
•Ciência da Computação no IME-USP
- Projeto do CCSL-USP
- Contexto do Projeto Qualipso
•Orientador: Prof. Dr. Fabio Kon
•Início: 03/2008
•Qualificação: 2009.2
•Previsão de Conclusão: 2011.2
MANGUE
MANGUE
•Motivação
• Crescente aumento do uso e desenvolvimento do FLOSS (Freely-Licensed Open Source Software)
MANGUE
MANGUE
•Motivação
•Comunidades FLOSS
MANGUE
MANGUE
•Motivação
• Ecossistema do FLOSS
- Quantidade de FLOSS disponíveis
- SourceForge em 2007/2008:
» 167.643 projetos
» 1.776.733 usuários e desenvolvedores cadastrados
- 1% de Sucesso?
» Se aumentarmos para 10%...
- UE: 80% do $ em serviços
MANGUE
MANGUE
•Motivação
•Como “convencer a usar”/escolher um determinadado software?
MANGUE
MANGUE
•Motivação
•Como “convencer a usar”/escolher um determinadado software?
MANGUE
MANGUE
•Problema
•Avaliar rapidamente programas e códigos de terceiros
- Semelhante quando surgiu o Outsourcing
•Falta de critérios objetivos para avaliar a confiabilidade do FLOSS
MANGUE
MANGUE
•Questões a serem respondidas
•Como é possível medir a qualidade de produtos de software para ajudar na escolha de um deles?
•Que características são relevantes para avaliação de um FLOSS?
•Quais são as métricas de qualidade de um FLOSS?
MANGUE
MANGUE
•Questões a serem respondidas
•Quais métricas são apropriadas para
avaliação de código-fonte de um FLOSS?
•Como comparar FLOSS similares?
•Como automatizar a avaliação da
qualidade e o que pode ser automático?
•Como verificar a eficiência das métricas e da automação da avaliação?
Agenda
Agenda
•Objetivo
•Mais problemas
•Metodologia
•Pesquisa de campo
•Projetos relacionados
MANGUE
MANGUE
•Objetivo
•Composição de métricas
- Combinação de métricas podem representar uma
característica significativa do software
MANGUE
MANGUE
•Objetivo
•Desenvolver uma ferramenta de avaliação automática da qualidade de código-fonte - métricas combinadas e configuradas por
especialistas
- análise automática de características como
flexibilidade, clareza, modularidade e manutenibilidade do software
MANGUE
MANGUE
•Objetivo
•Aumento da qualidade do FLOSS
•Facilitar a comparação entre FLOSS
•Aumento da adoção de FLOSS pela indústria de software
MANGUE
MANGUE
•Mais problemas
•Código-Fonte é o principal artefato do FLOSS
- Metodologias e métricas baseada na
documentação do processo do software não se aplicada
MANGUE
MANGUE
•Mais problemas
•Métricas existem há decadas...
- “In the past, most metrics have been defined by an individual and then tested and used only in a very limited environment (...). Currently, useful metrics and models cannot be pulled off the shelf and used indiscriminately, careful application of available metrics and models can yield to useful results if they are tuned to a particular
MANGUE
MANGUE
•Mais problemas
MANGUE
MANGUE
•Metodologia
•Análise estatística
- Correlação significativa de métricas X
características com a qualidade do FLOSS
•Experimentos controlados - Ferramentas existentes
MANGUE
MANGUE
•Metodologia
•Levantamento do estado-da-arte em métricas de software
•Estudo das métricas e metodologias usadas em outros projetos e ferramentas
•Coleta de opinião especialistas em FLOSS e métodos ágeis
•Pesquisa de campo com especialista em desenvolvimento de software
MANGUE
MANGUE
•Pesquisa com Especialistas
•Questionário com 123 perguntas - 9 pessoais
- 28 profissionais
- 106 métricas e características listadas
- Dividido em 16 grupos
» Código-fonte(24), Testes(11), Comunidade(12), Manutenibilidade(11), Interoperabilidade(3),
Portabilidade(2), Usabilidade(5), Ferramentas(4), Independência(2), Confiança(6),
Funcionalidades(5), Satisfação(4),
Documentação(6), Suporte(4), Treinamento(4), Canais de distribuição e licenças(2)
MANGUE
MANGUE
•Pesquisa com Especialistas
•38 entrevistados
- ...de 80 convidados por e-mail
- 8 gerentes
- 13 lideres de projetos FLOSS
- 22 com mais de 10 anos de experiência
- 16 com menos de 10 anos de experiência
Pesquisa
Pesquisa
Download do código-fonte e binários
Pesquisa
Pesquisa
Uso de padrões da indústria e protocolos
Pesquisa
Pesquisa
Módulo para configurações
Pesquisa
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Módulo para configurações
(não espalhados pelo código)
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Existência de
comentários no código (cobertura e distribuição
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Uso de bons nomes para classes, métodos, variáveis
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Padrões de nomenclatura
usados uniformemente
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Cobertura dos testes
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Sem duplicação de Código
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Nível de coesão entre módulos/
classes do sistema
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Nível de acoplamento
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Estruturas de dados utilizadas
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Estilo uniforme de
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de testes por método ou
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de testes por linha
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de linhas em cada
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de métodos em
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de linhas de testes
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de linhas em cada
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de atributos em
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de colunas por linha não muito grande
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Complexidade Ciclomática
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de
variáveis locais em cada método
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de métodos ou
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Código-Fonte
Número de classes (ou arquivos ou
MANGUE
MANGUE
•Pesquisa com Especialistas
MANGUE
MANGUE
•Aquele problema
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Existência de testes automatizados
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Existência de testes de desempenho (benchmarks)
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Estudo sobre o consumo de recursos
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Relatos dos experimentos de
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Testabilidade do código (facilidade de
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Uso de um
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Tipos de teste disponíveis
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Estudo sistemático sobre o tempo de
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Publicação dos resultados dos testes
MANGUE
MANGUE
•Pesquisa com Especialistas
•Análise estatística: Testes
Existência de um subgrupo (comunidade
ou pessoa)
MANGUE
MANGUE
•Pesquisa com Especialistas
MANGUE
MANGUE
•Outros projetos
- FlossMetrics - Ohloh - Qualoss - QSOS - SQO-OSS - Fossology - ETICS •Mais focados em metodologias - Avaliações subjetivasMANGUE
MANGUE
•Ferramenta: Crab (caranguejo)
•Módulo de Configuração e Interpretação de Métricas de Software
- Independente para ferramentas de métricas Java
- JaBUTi, Metrics, CheckStyle...
- Carrega métricas de uma ferramenta
- Define intervalos e categoria de cada métrica
- Definição de nota e classificação de cada intervalo
- Resultado geral do programa analisado
- Nota final da avaliação
CRAB
CRAB
CRAB
CRAB
CRAB
CRAB
MANGUE
MANGUE
•Resultados Parciais
•Monografia
- Relatório técnico do IME-USP
•Pesquisa com especialistas - Análise estatística
- Delimitação do escopo do projeto
•Versão 0.1 da Ferramenta Crab - Acoplada à JaBUTi