Análise e Transformação de Software 
 Programa Resumido 
 
-  Análise de programas: 
-  Extracção de dados
-  Armazenamento da informação recolhida
-  Exploração do conhecimento.
 
-  Transformação de programas: 
-  Programação estratégica.
-  Técnicas de Slicing.
-  Especialização de programas e cálculo parcial.
 
-  Paradigmas para visualização de dados e de conhecimento: 
-  visualização de informação, de dados e de software.
-  modelos de visualização.
-  visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
-  visualização/navegação em ontologias.
-  animação de algoritmos.
 
 Resultados de Aprendizagem Específicos 
 
-  Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
-  Capacidade de desenvolver software como uma tarefa de   transformar programas e/ou especificações em implementações eficientes.
-  Capacidade de utilizar métricas e técnicas de transformação de  programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
-  Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
-  Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
 Metodologia de Ensino e Avaliação 
 
-  As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula: 
-  no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
-  depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
-  continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
 
-  A avaliação é feita com base em trabalhos entregues  pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:   
-  monografias, com sinteses dos temas pesquisados; 
-  trabalhos de implementação.
 
 Bibliografia recomendada 
 
-  Flemming Nielson, Hanne Riis Nielson, Chris Hankin, "Principles of Program Analysis. Springer, 452 pages, ISBN 3-540-65410-0, 2005.
-  Aho & Sethi & Ullman, "Compiler Principles, Techniques and Tools", Addison-Wesley, 1986.
-  Pittman & Peters, "The Art of Compiler Design: theory and pratice", Prentice-Hall, 1992.
-  Waite & Carter, "An Introduction to Compiler Construction", HarperCollin?  College Publishers, 1993
-  Terrence Par, The Definitive Antlr Reference: Building Domain-Specific Languages, The Pragmatic Bookshelf, 2007