Faculdade de Ciências e Tecnologia

Reutilização e Evolução de Software

Código

11173

Unidade Orgânica

Faculdade de Ciências e Tecnologia

Departamento

Departamento de Informática

Créditos

6.0

Professor responsável

Ana Maria Dinis Moreira, Miguel Jorge Tavares Pessoa Monteiro

Horas semanais

4

Língua de ensino

Português

Objectivos

O foco desta edição da disciplina é no componente de ''''evolução'''', que abrange a manutenção, engenharia reversa e reengenharia de sistemas existentes.

Muitos alunos formados com o curso de LEI são confrontados, no início das suas carreiras e/ou percursos profissionais, com o cenário de ter de trabalhar com sistemas de software complexos que não conhecem, cuja documentação é inadequada, desactualizada ou mesmo inexistente e sem apoio adequado de outros membros duma equipa.
Esta disciplina destina-se a conferir preparação para situações desse tipo, ministrando técnicas e abordagens úteis para lidar com tais cenários. O maior foco desta edição da disciplina está na reengenharia de software, com destaque para a engenharia reversa.
O componente do programa respeitante à reutilização está representado na secção relativa aos padrões de concepção (design patterns).

Saber
- Detectar e saber lidar com necessidade de evolução de sistemas
- Distinguir Re-Engenharia, Engenharia Reversa e Reutilização
- Técnicas de Engenharia Reversa de Sistemas Legados
- Refabricação de Programas (refactoring)
- Padrões de Concepção (design patterns): conceitos associados

Fazer
- Analisar sistemas existentes e aplicar técnicas de Reutilização e Re-Engenharia
- Usar técnicas e ferramentas de re-engenharia em larga escala
- Obtenção/extracção de conceitos de alto nível de sistemas legados: estabelecer diagnósticos úteis para a re-engenharia
- Conhecer abordagens de desenvolvimento orientadas à reutilização (e.g., técnicas de engenharia reversa e de reengenharia de sistemas legados)
- Padrões de Concepção (design patterns): padrões Gang-of-Four - saber implementá-los e detectá-los/identificá-los em sistemas existentes.

Conteúdo

Nesta edição da disciplina, o foco recai no tópico da Reengenharia de software, com destaque para a engenharia reversa de sistemas legados - análise do sistema ao nível do texto IGNOREe e extracção de representações a níveis de abstracção mais altos, mais fáceis de entender, nomeadamente para servirem de suporte a tarefas de manutenção de software, refabricação, reutilização e produção de documentação actualizada.

Nesta edição, o universo de sistemas legados cingir-se-á a sistemas Java de dimensões não triviais, preferencialmente montados na plataforma Eclipse. A avaliação consistirá fundamentalmente em trabalhos. Só haverá um teste ou exame escrito com peso de 30%.
Os (3) trabalhos serão consistirão em tarefas de engenharia reversa sobre o(s) mesmo(s) sistema(s). Consistirão numa análise de representações visuais (de métricas) para apreciação preliminar do sistema, seguida de diversos tipos de análise, nomeadamente extracção de métricas e sua análise, detecção de clones, de problemas de mau estilo e "maus cheiros" no código, de padrões de concepção e de facetas tranversais (crosscutting concerns) do sistema legado a analisar. Para esse efeito serão usadas diversas ferramentas como suporte, de preferência plugins do Eclipse (e.g., SourceMiner, Eclipse Software Metrics, ModelGoon, CodePro AnalytiX). O terceiro e último trabalho deverá incluir uma tarefa de refabricação de dimensão/complexidade pequena ou média que tirará partido da informação extraída nas tarefas anteriores.

Bibliografia

- Chikofsky, E.J., Cross II, J.H. Reverse Engineering and Design Recovery: a Taxonomy. IEEE Software 7(1), pp.13-17, IEEE Computer Society Press, January 1990.

- Fowler M. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999. ISBN:0-201-48567-2

- Feathers M. Working Effectively with Legacy Code. Prentice Hall 2004.

- Lanza M.; Marinescu R. Object-Oriented Metrics in Practice. Springer-Verlag 2006. ISBN-10 3-540-24429-8

- Rainsberger J.B. JUnit Recipes. Manning 2004.

- Gamma E.; Helm R., Johnson R., Vlissides J., Design Patterns, Elements of Reusable Object-Oriented Software. Addison Wesley, 1995. ISBN:0-201-63361-2

Método de ensino

A metodologia pedagógica proposta para esta unidade curricular centra-se na condução de várias tarefas de exploração de um ou mais sistemas de dimensão não trivial. As tarefas incluem a extracção de informação qualitativa e quantitativa, por meio de diversas ferramentas - nomeadamente de cálculo de métricas, detecção de clones, produção de diagramas UML, vizualização de software, etc. Segue-se uma avaliação crítica dos valores e artefactos obtidos para a elaboração de relatório sobre o sistema analizado.

Método de avaliação

Esta disciplina tem uma natureza fundamentalmente prática, na qual se valoriza a experiência adquirida com a realização dos trabalhos práticos.

Existem 2 componentes de avaliação:
Teste escrito (único):                            30%
3 trabalhos práticos, 20%, 25%, 25%: 70%

Frequência:
Obtém frequência o aluno que cumpra cumulativamente os seguintes requisitos:
- média dos trabalhos práticos superior ou igual a 9.5.
- mínimo de 7.5 em cada um dos 3 trabalhos práticos.

Só são efectuados arredondamentos no cálculo da nota final.

Cursos