MANUTENÇÃO E EVOLUÇÃO
DE SOFTWARE ATRAVÉS DO
PROCESSO DE MUDANÇAS
INCREMENTAIS
Dalton Dario Serey Guerrero
Orientador
Software escolhido

Jedit
◦
◦
◦
◦
Editor de texto open source
Mais de 500 classes
Projeto ativo, com vários change requests
Projeto popular no SourceForge
Modus Operandi
Três grupos de quatro alunos
Coordenação do projeto: Dalton
Um gerente de projeto para cada grupo:
mestrando ou doutorando do GMF
 Pair programming
 Programação em horário e local fixos (para
atender às necessidades de pesquisa)
 Estimativa de 8 horas semanais de trabalho
 Uso do XPlanner
 Cada grupo gera uma monografia de
conclusão de curso ao final do projeto



Fases do processo de mudanças
incrementais
Iniciação
 Localização de Conceitos
 Análise de Impacto
 Pré-Refatoração
 Atualização
 Propagação da Mudança
 Pós-Refatoração
 Nova Baseline
 Testes

Iniciação

Analisar a user story ou change request e
extrair os conceitos relevantes
◦ Pode vir de um bug report ou de uma open
source “wish list”
◦ Conceitos expressos em linguagem natural
Localização de Conceitos

Localizar os conceitos no código-fonte
◦ Conceitos podem ser explícitos ou implícitos
◦ Conceitos explícitos são representados como
métodos, atributos, trechos de código e/ou
classes
◦ Conceitos implícitos não estão
implementados em código, deve-se achar
conceitos similares que apontam onde o novo
conceito deve ser implementado
Análise de Impacto

Identificar um conjunto de classes (ou
métodos) provavelmente afetado pela
mudança incremental
◦ Localização dos conceitos gera conjunto
inicial de impacto
◦ Percorrendo o conjunto inicial e suas
dependências, é possível achar que também
precisarão mudar para implementar os novos
conceitos
Pré-Refatoração

Refatorar para tornar a mudança mais
fácil
◦ Atividade oportunista para limitar o tamanho
da mudança e de sua propagação
◦ Exemplo: refatoração Extract Method pode
colocar métodos, atributos e trechos de
código relevante em uma nova classe que
implementa o novo conceito
Atualização

Implementar os conceitos no códigofonte e incorporar o novo código ao
sistema existente
◦ Se o conceito é implícito, cria-se nova classe e
esta é plugada no resto do código através de
dependências
◦ Se o conceito é explícito, o código já
existente pode ser extraído para nova classe
ou a classe já existe. Nova funcionalidade
pode ser adicionada e dependências adicionais
podem ser criadas.
Propagação da Mudança

Propagar a mudança através do sistema e
corrigir inconsistências
◦ A partir das classes modificadas, o
programador visita as suas dependências para
checar se estas classes precisam ser
modificadas também
◦ Mudanças de interface levam a mudanças em
quem usa a interface
◦ Mudanças de semântica são mais complexas e
requerem análise mais detalhada
Pós-Refatoração

Refatorar para eliminar falhas de design
(bad smells) introduzidos durante a
mudança
◦ Verificar se anti-patterns foram introduzidos
pela mudança
◦ Bad smells comuns são Data Class, Long Method
e Middle Man
◦ Arquitetura do software é melhorada para
facilitar mudanças incrementais futuras
Nova Baseline

Atualizar o repositório do software como
novo código, atualizar a documentação e
lançar a nova versão para os clientes
◦ Podem ser necessárias várias rodadas de IC
até terminar uma user story ou requisito
◦ Check-in no sistema de controle de versões
◦ Melhorar documentação (comentários de
código, javadoc, documentação externa)
◦ Suporte ferramental facilita atualização de
documentação
Testes

Testar o software ao longo do processo
◦ Testes de regressão depois da pré- e pósrefatoração para assegurar a não introdução
de erros
◦ Criar casos de teste como parte da
atualização para testar a nova funcionalidade
◦ Quando conceitos foram extraídos de uma
classe, pode ser necessário mover testes de
um caso de teste existente para o novo
Referências
Febbraro, N. and Rajlich,V. 2007. The Role of
Incremental Change in Agile Software
Processes. In Proceedings of the AGILE 2007
(August 13 - 17, 2007). AGILE. IEEE
Computer Society, Washington, DC, 92-103.
 Petrenko, M., Poshyvanyk, D., Rajlich, V., and
Buchta, J. 2007. Teaching Software Evolution
in Open Source. Computer 40, 11 (Nov.
2007), 25-31.
 Rajlich, V. and Gosavi, P. 2004. Incremental
Change in Object-Oriented Programming.
IEEE Softw. 21, 4 (Jul. 2004), 62-69.

Download

Slide 1 - Computação UFCG