Adaptando um Processo de Desenvolvimento de Software para Análise de Cobertura de Código Prof....
Transcript of Adaptando um Processo de Desenvolvimento de Software para Análise de Cobertura de Código Prof....
Adaptando um Processo de Desenvolvimento de Software para Análise de Cobertura de Código
Prof. Alexandre Marcos Lins de Vasconcelos06/out/2007
Apresentação do Palestrante• Bacharel em Ciência da Computação, UFPE,
1987• Mestre em Informática, UFPE, 1989• PhD em Ciência da Computação (Engenharia
de Software), University of York, GB, 1993 • Professor Adjunto do CIn-UFPE desde 1995• Sócio-Fundador da Qualiti• Consultor nos modelos de qualidade de
software CMMI e mps.BR• Consultor na Área de Testes de Software• Coordenador do Projeto de Testes CIn-
EPSON
Agenda• Motivação• Contexto da Proposta• Visão Geral da Proposta• Introdução à Análise de Cobertura de
Código• O Processo de Desenvolvimento Proposto • Conclusões• Referências
Motivação• Os custos associados às falhas de software justificam
um processo de testes rigoroso e bem planejado• Apesar do rigor, não é possível garantir que os casos
de testes cubram uma parte significativa do código a ser testado– Bugs podem não ser encontrados pelo processo de testes
de unidade, sendo localizados apenas em estágios posteriores de testes.
• Os custos com teste podem variar de 25% a 50% do orçamento total em muitos projetos de desenvolvimento de software
Motivação• Um problema que pode ser encontrado,
no processo de desenvolvimento é a ausência de uma medida quantitativa da qualidade dos casos de teste produzidos
• Uma aproximação usada para obter essas medidas quantitativas é adotar a análise de cobertura de código no processo de desenvolvimento de código, para os testes de unidade elaborados pela organização
Contexto da Proposta• Desperdício de tempo do time de
desenvolvimento para analisar o código fonte na identificação de cenários para criação de casos de teste– Não sabem que partes do código são realmente
testadas pelos casos de testes existentes– Não sabem o quão forte é o conjunto de casos do
teste unitários
• Como conseqüência, alguns bugs podem ser encontrados em fases de testes posteriores
Visão Geral da Proposta• Definição de um processo de
desenvolvimento utilizando técnicas de análise de cobertura de código
• Desenvolvido no contexto do STP (Software Test Program), parceria entre Motorola (BTC – Brazil Test Center) e CIn (Centro de Informática)
Introdução à Análise de Cobertura de Código
Análise de cobertura de Código• É um tipo de técnica usada em teste de
caixa-branca (teste estrutural), cujo objetivo é verificar como o conjunto de testes exercita partes do código
• É utilizada para averiguar a qualidade do conjunto de testes e não a qualidade do produto de software
• Normalmente utilizada nos estágios de teste de unidade e de integração
Análise de cobertura de Código• Consiste em determinar o percentual de
elementos requeridos, por um dado critério de teste, que foram exercitados pelo conjunto de casos de teste utilizado
• A partir dessa informação o conjunto de casos de teste pode ser aprimorado, acrescentando-se novos casos de teste para exercitar os elementos ainda não cobertos
• Permite uma análise sobre a redundância e utilidade dos testes unitários
Com a análise pode-se saber• Que partes do software os casos de teste
não cobrem?
• Que novos casos de teste precisam ser criados para se ter uma melhor cobertura?
• Quais casos de teste são redundantes?
Instrumentação do código• Consiste em introduzir pontos de
verificação em partes específicas (estratégicas) do código (break points, controle de fluxo, labels do código, início e fim de procedimentos, ...).
Algumas Métricas de Cobertura de Código
Como a cobertura de código trabalha
Statement Coverage
Como a cobertura de código trabalha
Branch Coverage
Funcionamento de uma Ferramenta de Análise de Cobertura de Código
Código Fonte
Compilação
Execução dosCasos de Testes
Código Instrumentado
Relatório de Cobertura
Instrumentação
Aplicação
Ferramenta de Cobertura
Cantata++ for testing C, C++ and Java
Algumas Ferramentas de Análise de Cobertura de Código
Relatórios de Cobertura de Código
• Dependendo da ferramenta de cobertura, podem ser gerados vários tipos de relatórios, com formato textual e/ou gráfico e com diversas extensões (ex.: html, pdf, xml).
Relatório de Cobertura de Código - EMMA
O Processo de Desenvolvimento Proposto
Configuração da ferramenta
Guideline da Ferramenta
Execução dos testes unitários
Compilação do código
Instrumentação do código
Geração do relatório
Relatório de cobertura
Build instrumentada
Código fonte instrumentado
Código fonteoriginal
Análise dos resultados de cobertura
Desenvolvedor
Casos de testes unitários
Arquivo de histórico de execução
Recuperação dos testes
Alteração do código fonte
Avaliação do Processo:Estudo de caso 1 - Utilização do código instrumentado em Simuladores
• Resultados
• Subsídios para elaboração do processo proposto
• A proposta de métricas de cobertura foi adotada pelo time de desenvolvimento
• Aquisição da ferramenta de cobertura de código pelo time de desenvolvimento
• Criação de guideline de cobertura
Avaliação do Processo:Estudo de caso 2 - Utilização do código instrumentado no sistema embarcado
• Resultados
• Sucesso na inserção da análise de cobertura de código no fluxo de testes
• Build instrumentada rodando no aparelho
• Detecção dos motivos do baixo nível de cobertura
Avaliação do Processo:Estudo de caso 3 - Impacto na Execução dos Casos de Testes
Gráfico de Execução de Caso de Teste - Tempo Total
0:00:000:00:430:01:260:02:100:02:53
1 3 5 7 9 11 13 15 17 19
Casos de Testes
Tem
po
Méd
io
de
Exe
cuçã
o
Build com Instrumentação Build sem Instrumentação
Execução Completa dos Casos de Testes
0:00:00
0:00:17
0:00:35
0:00:52
0:01:09
0:01:26
0:01:44
0:02:01
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Tem
po
s
Build com Instrumentação Build sem Instrumentação
Tempo médio do ciclo completo da execução dos casos de testes
Tempo médio completo da execução dos casos de testes realizado por um
testador
Resultados
Conclusões• Processo de Desenvolvimento de Software com
cobertura de código– Melhoria significativa na qualidade dos testes unitários;
• Utilização da ferramenta de cobertura– Possibilita alcançar um código bem testado;– Agrega mais qualidade, em menos tempo;– Baixo impacto na utilização do processo– Elimina erros, criando cenários de falha ou de
sucesso;– Dá mais produtividade aos processos de codificação e
de teste.
Perguntas?
Referências• MYERS, G., The Art of Software Testing, Wiley, 2004.• DUSTIN, E. Effective Software Testing: 50 Specific Ways to Improve Your
Testing. Addison Wesley. : December 18, 2002• CRAIG, R. D., JASKIEL, S. P. Systematic Software Testing. Artech House.
2002• KRUCHTEN, P. Rational Unified Process, The: An Introduction, Third Edition.
Addison Wesley. 2003.• TELES, V. M. Cobertura de Testes na Prática.• BullseyeCoverage. Bullseye Testing Technology. Disponível em:
http://www.bullseye.com/productInfo.html. Acesso em: 11 Nov.• Cantata C++. IPL software Products Group. Disponível em:
http://www.ipl.com/products/tools/pt400.uk.php. Acesso em: 11 Nov.• LDRA. Testbed Manual. C/C++ 7.x (Windows (95\98\2K\NT\XP)) Manual
Revision 23 - October 2004. Liverpool: Liverpool Data Research Associates Ltd.
• Clover Code Coverage. Cenqua Pty Ltd. Disponível em: http://www.cenqua.com/clover/. Acesso em: 11 Nov.
• Testwell CTC++. Testwell. Disponível em: http://www.testwell.fi/ctcdesc.html. Acesso em: 11 Nov.
Qualiti: [email protected]: [email protected]