Olá pessoal! Estou retomando os posts, após um hiato devido a finalização do mestrado. Foi um processo árduo, mas de muito aprendizado, e espero compartilhar com vocês parte do conteúdo investigado e produzido.
Este é o primeiro post da série EARLY-FIX. Ao final do artigo, você também encontra um link para a dissertação e também os slides da apresentação da defesa…
Manutenção de Software
Software possui uma natureza diferente de outros produtos tecnológicos. A tendência de mercado é a substituição de produtos obsoletos pelos mais modernos. Entretanto, devido ao grande volume financeiro investido em software nas empresas, busca-se maximizar seu ciclo de vida. Neste cenário, a curto-médio prazo, corrigir, adaptar e evoluir um software existente costuma ser mais vantajoso do que iniciar um novo desenvolvimento.
Nos últimos anos, diversas metodologias e processos de desenvolvimento de software têm surgido, visando a obtenção de qualidade e produtividade em sua construção. Menos atenção, entretanto, têm recebido as atividades de desenvolvimento após a implantação (release) de um produto como correção de defeitos, inclusão de novas funcionalidades, adaptação a diferentes ambientes de execução e otimização de desempenho (Ware, 2007).
Estima-se que as atividades de manutenção de sistemas constituam mais de 50% do esforço de desenvolvimento de um software (Kemerer, 1999). Segundo (Bennett2002), a manutenção constitui entre 40% e 90% do custo total do ciclo de vida de um software como produto. Neste início do século XXI, mais de 50% dos profissionais de software destinam-se à modificar aplicações existentes, ao invés de escrever novas aplicações (Jones, 2007).
Localizar e corrigir defeitos após a implantação de um software apresenta frequentemente custos elevados em relação às fases anteriores de um projeto (Boehm, 2001). Uma maneira de se direcionar o esforço de testes e aumentar as chances de encontrar defeitos em fases iniciais de um projeto consiste na identificação da provável localização dos mesmos, permitindo-se que ações corretivas sejam tomadas (Bezerra, 2008).
Predição de Defeitos
A predição de defeitos de software representa uma área de pesquisa ativa na academia, que envolve o uso de modelos preditivos, geralmente baseados em técnicas estatísticas ou de inteligência artificial.
Grandes empresas como a Microsoft (Nagappan, 2005), a Ericcson (Tomaszewski, 2006) e a IBM (Moser, 2008) têm aplicado técnicas de predição de defeitos. Contudo, a adesão a estas técnicas tem sido menos representativa em empresas de menor porte, em parte devido aos conhecimentos especializados necessários e ao elevado esforço de investigação.
Estudos empíricos têm confirmado a hipótese de que as características técnicas do código-fonte de um software influenciam diretamente no custo, esforço e assertividade de sua manutenção (Ware, 2007), (Ahn, 2003). Desta forma, uma das abordagens adotadas para predição de defeitos vem sendo utilização de métricas de qualidade interna de software, obtidas através de análise estática de código.
A predição de defeitos baseada em métricas de produto de software pode auxiliar na análise do risco de se manter uma base de código que foi desenvolvida por outros profissionais. Empresas de outsourcing, que ofereçem serviços de Application Management, por exemplo, podem utilizar estas informações como fatores na estimativa de manutenção de sistemas desenvolvidos por outras empresas.
Entre os principais benefícios proporcionados pela predição de defeitos pode-se citar:
- Suporte ao planejamento e execução das atividades do processo de testes, direcionando o esforço para os pontos críticos que merecem maior foco durante estas atividades;
- Priorização de módulos mais propensos a defeitos para a realização de atividades de inspeção e refatoração;
- Identificação de fatores que influenciam na ocorrência de defeitos; e
- Suporte a modelos de estimativa de custos e riscos de manutenção corretiva.
Processos iterativos de desenvolvimento
Em projetos desenvolvidos com processos iterativos, como o Rational Unified Process - RUP (Kruchten, 2000), ou métodos ágeis, como o Scrum (Schwaber, 2002) e a eXtreme Programming – XP (Beck, 1999), ocorrem idealmente implantações ao final de cada iteração. Neste contexto, a manutenção de funcionalidades entregues em uma iteração ocorre frequentemente em paralelo com o desenvolvimento da iteração seguinte.
Este cenário apresenta ao menos duas dificuldades adicionais na predição de manutenção corretiva: (1) como identificar as modificações corretivas em meio a outros tipos de manutenção e novos desenvolvimentos em paralelo e (2) Como identificar a evolução dos defeitos nas classes ao longo do tempo.
EARLY-FIX: Um Framework para Predição de Manutenção Corretiva de Software utilizando Métricas de Produto
Em minha dissertação de mestrado, foi concebido e implementado um framework, denominado EARLY-FIX (Moreira, 2011), para predição de manutenção corretiva de software, utilizando métricas de produto. Este framework suporta projetos iterativos de software, inclusive de pequeno e médio porte, e também projetos open-source.
O EARLY-FIX tem como requisitos a utilização de ferramentas bastante comuns em projetos de software:
- Sistema de Issue Tracker, onde os defeitos sejam registrados;
- Sistema de Controle de Versão de código-fonte;
- Algum tipo de integração entre os sistemas de Issue Tracker e de Controle de Versão, que possibilite rastrear em que classes um defeito foi detectado e corrigido; e
- Ferramenta de análise estática, que permita a extração de métricas a partir do código-fonte ou binários de um software.
Na implementação do EARLY-FIX na dissertação, utilizaram-se técnicas estatísticas de regressão, que permitiram a utilização de medidas de qualidade interna de software para calibração de modelos (equações) dos projetos considerados. A saída destas equações foi o número esperado de defeitos para uma classe, durante um determinado período de tempo, após sua liberação em um release.
O próximo passo deste trabalho de pesquisa é a criação do projeto open-source EARLY-FIX, cuja missão consiste em tornar prática a utilização da predição de defeitos em projetos de software. Serão endereçados o suporte aos principais sistemas de Controle de Versão e de Issue Tracker, e a implementação de técnicas de predição de predição de defeitos investigadas na academia.
Nos próximos posts da série, temas como métricas de qualidade de software orientado a objetos, técnicas de predição de defeitos, o framework EARLY-FIX e exemplos de implementação serão abordados.
Até lá!
Referências
- AHN, Y. et al. The software maintenance project effort estimation model based on function points. Journal of Software Maintenance, New York, NY, v. 15, n. 2, p.71–85, 2003. ISSN 1040-550X.
- BECK, K. Extreme programming explained. [S.l.]: Addison-Wesley, 1999.BENNETT, K. Software maintenance: a tutorial. Software Engineering, Dor fman and Thayer, New York: IEEE, 2002.
- BEZERRA, M. Detecção de módulos de software propensos a falhas através de técnicas de aprendizagem de máquina. 2008. Dissertação (Mestrado em Ciência da Computação) — Universidade Federal de Pernambuco, Recife.
- JONES, C. Geriatric issues of aging software. Dec 2007. Disponível em: <http://www.crosstalkonline.org/storage/issue-archives/2007/200712/200712-Jones.pdf>. Acesso em: 01 dez. 2011.
- KEMERER, C. F.; SLAUGHTER, S. An empirical approach to studying software evolution. IEEE Trans. Softw. Eng., Piscataway, NJ, v. 25, n. 4, p. 493–509, 1999. ISSN 0098-5589.
- KRUCHTEN, P. Rational unified process: an introduction. [S.l]: Addison-Wesley-Longman, 2000.
- MOREIRA, G. S. P. EARLY-FIX: Um Framework para Predição de Manutenção Corretiva de Software utilizando Métricas de Produto. 2011. Dissertação (Mestrado em Ciência da Computação) — Instituto Tecnológico de Aeronáutica (ITA), São José dos Campos, SP.
- MOSER, R.; PEDRYCZ, W.; SUCCI, G. A comparative analysis of the efficiency of change metrics and static code attributes for defect prediction. In: INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING, 30., 2008, Leipzig. Proceedings… New York: ICSE, 2008.
- NAGAPPAN, N.; BALL, T.; ZELLER, A. Mining metrics to predict component failures. In: INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING, 28., 2005, Shanghai. Proceedings… New York: [s.n.], 2006.
- SCHWABER, K.; BEEDLE, M. Agile software development with scrum. [S.l.]: Prentice-Hall, 2002.
- TOMASZEWSKI, P.; GRAHN, H.; LUNDBERG, L. A method for an accurate early prediction of faults in modified classes. In: INTERNATIONAL CONFERENCE ON SOFTWARE MAINTENANCE, 22., 2006, Philadelphia. Proceedings… [S.l.]: ICSM 2006.
- WARE, M. P.; WILKIE, F. G.; SHAPCOTT, M. The application of product measures indirecting software maintenance activity. J. Softw. Maint. Evol., New York, v. 19, n. 2, p.133–154, 2007. ISSN 1532-060X






