Programa
UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA
DEPARTAMENTO DE CIÊNCIAS EXATAS
PROFESSOR(A): ROBERTO ALMEIDA BITTENCOURT
PERÍODO LETIVO: 2013.2
PROGRAMA DA DISCIPLINA
EXA 870 – EVOLUÇÃO E MANUTENÇÃO DE SOFTWARE
CARGA HORÁRIA/CREDITAÇÃO
60 horas / (T:30; P:30; E:00)
PRÉ-REQUISITOS
EXA 857 – MI – Engenharia de Software
EXA 809 – Engenharia de Software
EXA 856 – Análise de Sistemas
EMENTA
Conceitos básicos de evolução e manutenção de software. Leis de evolução e outros resultados empíricos. Envelhecimento de software. Extração de dados de artefatos de software. Compreensão de software. Engenharia reversa, recuperação de arquitetura e design de software. Reengenharia de sistemas legados. Processos de manutenção de software. Classificação de mudanças. Solicitações de mudanças. Localização de conceitos. Análise de impacto de mudanças. Implementação de mudanças. Propagação de mudanças. Refatoração no contexto de mudanças. Testes de software no contexto de mudanças. Documentação de mudanças. Gerência de configuração. Reuso no contexto de manutenção de software.
OBJETIVOS
Geral:
· Ser capaz de realizar satisfatoriamente atividades de evolução e manutenção de software através do uso de metodologias, técnicas e ferramentas, embasando-se num referencial teórico e no estado-da-prática da área de engenharia de software.
Específicos:
· Conhecer, compreender e aplicar as metodologias, técnicas e ferramentas de suporte à manutenção de software;
· Realizar mudanças incrementais em nível crescente de complexidade em software de médio porte através de um modelo incremental de mudanças.
· Julgar criticamente as diversas metodologias, técnicas e ferramentas de suporte à evolução e manutenção de software e escolher as mais apropriadas para diferentes contextos de desenvolvimento de software;
· Através do embasamento neste curso e pela prática continuada, participar de (e até mesmo liderar) equipes de desenvolvimento e manutenção de software em organizações ou equipes de produção de software.
CONTEÚDO PROGRAMÁTICO
1. Introdução.
1.1. Modelos de tempo de vida de software.
1.2. Caracterização de mudanças.
1.3. Modelo de mudanças incrementais.
1.4. Leis de Lehman.
1.5. Envelhecimento de software.
2. Modelo de mudanças incrementais.
2.1. Iniciação da mudança.
2.2. Localização de conceitos.
2.3. Análise de impacto de mudanças.
2.4. Atualização.
2.5. Refatoração.
2.6. Testes no modelo de mudanças incrementais.
2.7. Conclusão da mudança.
2.8. Controle de versões.
3. Engenharia reversa e reengenharia.
3.1. Conceitos em engenharia reversa.
3.2. Recuperação de design de baixo nível.
3.3. Recuperação arquitetural.
3.4. Reengenharia de sistemas legados.
4. Tópicos em evolução e manutenção de software.
4.1. Controle de versões distribuído.
4.2. Gerência de mudanças.
4.3. Integração contínua.
4.4. Evolução em processos ágeis.
4.5. Predição de bugs.
4.6. Contextualização.
4.7. Sistemas de recomendação em evolução e manutenção de software.
4.8. Evolução de APIs e reuso de software.
5. Ferramentas de suporte à evolução e manutenção de software.
5.1. Ferramentas de localização de conceitos.
5.2. Ferramentas de análise de impacto de mudanças.
5.3. Ferramentas de apoio à refatoração.
5.4. Ferramentas de recuperação de design de baixo nível.
5.5. Ferramentas de recuperação arquitetural.
5.6. Ferramentas de reengenharia de sistemas legados.
5.7. Ferramentas de controle de versões distribuído.
5.8. Ferramentas de gerência de mudanças.
5.9. Ferramentas de integração contínua.
5.10. Ferramentas de suporte à contextualização.
5.11. Ferramentas de suporte ao desenvolvimento com APIs em evolução.
METODOLOGIA
A metodologia será um híbrido de aulas expositivas dialogadas, tutoriais de técnicas e ferramentas, trabalhos em equipe e seminários apresentados pelos alunos.
A seguir apresentamos os alcances de cada uma destas estratégias metodológicas:
· As aulas expositivas dialogadas têm como objetivo: introduzir conteúdos e práticas da área de qualidade de software, sensibilizar os futuros profissionais sobre os problemas resultantes de produção de software sem controle de qualidade, além de debater as diferentes abordagens de manutenção de qualidade, suas vantagens, desvantagens, alcance e limitações.
· Os tutoriais de ferramentas servem para introduzir rapidamente o uso de ferramentas de qualidade de software, reduzindo a curva de aprendizagem e realçando os aspectos mais importantes destas ferramentas no contexto deste curso.
· Os trabalhos em equipe permitem a prática mais prolongada no uso de técnicas e ferramentas de qualidade de software, situadas em um contexto mais realista do que o apresentado em aulas expositivas ou tutoriais. Em cada trabalho, cada equipe deve gerar artefatos (inclusive um relatório do trabalho), que podem ser individuais e/ou para toda a equipe.
· Os seminários apresentados pelos alunos devem analisar pelo menos três ferramentas com um foco específico em qualidade de software, comparar estas ferramentas entre si através de critérios bem definidos, além de escolher uma destas ferramentas para demonstração de seu uso em sala de aula, aplicando-a no contexto de qualidade de software.
MATERIAL UTILIZADO
O módulo será dividido em três unidades, para que o estudante possa refletir sobre sua situação em diferentes momentos do curso e, caso necessário, realizar correções de rumo no processo de aprendizagem.
Medidas da Unidade:
A medida de cada uma das três unidades será calculada de diferentes formas:
1. Na I e na II Unidade, será a média ponderada dos trabalhos em equipe;
2. Na III Unidade, será a nota da apresentação do seminário.
Média Parcial:
A média parcial será a média aritmética das medidas de cada unidade. Obtendo média igual ou superior a 7,0 (sete), o estudante pode ser aprovado, caso cumpra os requisitos de frequência.
Prova Final:
· Não obtendo média parcial suficiente na avaliação do módulo, o estudante poderá fazer prova final, e a média final será calculada de acordo com o sistema de avaliação vigente na UEFS.
Aprovação no módulo:
Para ser aprovado no módulo, o estudante precisa cumprir os seguintes requisitos:
· Ter frequência igual ou superior a 75% da carga horária efetiva ministrada no módulo, caso contrário haverá reprovação por frequência;
· Ser aprovado na avaliação do módulo, caso contrário haverá reprovação por nota.
REFERÊNCIAS
LIVROS-TEXTO
RAJLICH, V. Software Engineering: The Current Practice. CRC Press, 2012.
GRUBB, P.; TAKANG, A. A. Software Maintenance: Concepts and Practice. World Scientific Pub, 2003.
MENS, T.; DEMEYER, S. (Eds.) Software Evolution. Springer, 2008.
FEATHERS, M. Working Effectively with Legacy Code. Prentice Hall, 2004.
LEITURA COMPLEMENTAR
JARZABEK, S. Effective Software Maintenance and Evolution: A Reuse-Based Approach. Auerbach Pub, 2007.
MADAHVJI, N. H.; FERNANDEZ-RAMIL, J.; PERRY, D. (Eds.). Software Evolution and Feedback: Theory and Practice. Wiley, 2006.
SEACORD, R. C.; PLAKOSH, D.; LEWIS, G. A. Modernizing Legacy Systems: Software Technologies, Engineering Processes, and Business Practices. Addison-Wesley, 2003.
ARNOLD, R. S.; BOHNER, S. Software Change Impact Analysis. Los Alamitos, CA, USA: IEEE Computer Society Press, 1996.
DIEHL, S. Software Visualization: Visualizing the Structure, Behaviour, and Evolution of Software. Springer, 2007.
BROOKS, F. P. The Mythical Man-Month: Essays on Software Engineering. 2. ed. Addison-Wesley, 1995.
ORAM, A.; WILSON, G. Making Software: What Really Works, and Why We Believe It. O’Reilly, 2010.
FENTON, N. E.; PFLEEGER, S. H. Software Metrics: A Rigorous and Practical Approach. 2. ed. Londres, Reino Unido: Thomson, 1997.
FOWLER, M.; BECK, K.; BRANT, J.; OPDIKE, W.; ROBERTS, D. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
Artigos científicos.