Técnicas Avançadas de Construção de Software
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Engenharia de Software |
Ocorrência: 2021/2022 - 1S
Ciclos de Estudo/Cursos
Sigla |
Nº de Estudantes |
Plano de Estudos |
Anos Curriculares |
Créditos UCN |
Créditos ECTS |
Horas de Contacto |
Horas Totais |
M.EIC |
24 |
Plano de estudos oficial |
2 |
- |
6 |
39 |
162 |
Língua de trabalho
Inglês
Objetivos
Os estudantes devem ser capazes de identificar e aplicar técnicas avançadas de especificação, síntese e manipulação de artefactos executáveis em diferentes fases de desenvolvimento de software, com o intuito de promover atributos de qualidade, tais como confiabilidade, flexibilidade, testabilidade e performance. Em particular, pretende-se reduzir ao máximo o tempo investido a "programar", automatizando várias facetas dessa atividade.
Resultados de aprendizagem e competências
- Identificar problemas amenos a técnicas de metaprogramação e desenvolvimento automático;
- Desenhar modelos/meta-modelos específicos de domínio;
- Processar instanciações de especificações textuais com combinadores de parsing, bem como respectivos mecanismos de execução;
- Aplicar técnicas de derivação/geração de código/comportamento automaticamente a partir de especificações de alto nível
- Aplicar técnicas de aprendizagem computacional à construção de código;
- Depurar programas por especificação incremental de propriedades;
- Aplicar técnicas de correção automática de programas;
- Outras técnicas avançadas de desenvolvimento
Modo de trabalho
À distância
Programa
- Metaprogramação e engenharia orientada a modelos
- Modelos, Metamodelos e Meta-Metamodelos
- Idiomas específicos de domínio
- Internos
- Externos
- Visuais vs baseados em texto
- Parser combinators
- Intérpretes e auto-intérpretes
- Geração de código-fonte e Transpiladores
- Meta-programação para reflexão e tempo de execução
- Programação automática
- Especificações de alto nível
- Síntese e Derivação de Programas
- Técnicas de pesquisa de programas
- Derivação formal
- Mutação
- Suportado por Aprendizagem Automática
- Técnicas de Depuramento Avançadas
- Reparação Automática de Programas
- Testes baseados em propriedades e fuzzing
- Localização de falhas
Bibliografia Obrigatória
Volter, M. ; Model-Driven Software Development: Technology, Engineering, Management, Wiley Software Patterns Series, 2006
Fowler, M. ; Domain Specific Languages, Addison-Wesley Signature Series, 2010
Métodos de ensino e atividades de aprendizagem
Aulas teórico-práticas de exposição e discussão dos tópicos programáticos. Primeiramente, os estudantes irão desenvolver um projeto guiado que incrementalmente resultará num sistema baseado em metamodelos com uma linguagem específica de domínio executável, primeiro por técnicas simples de interpretação e finalmente geração de código via transpilação. Subsequentemente irão desenvolver um projeto integrado que aplique o conjunto restante das técnicas a serem expostas.
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Designação |
Peso (%) |
Participação presencial |
5,00 |
Teste |
15,00 |
Trabalho prático ou de projeto |
80,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Elaboração de projeto |
162,00 |
Frequência das aulas |
39,00 |
Total: |
201,00 |
Obtenção de frequência
Todas as componentes têm uma classificação mínima de 40%.
Fórmula de cálculo da classificação final
N = 0.05 * P + 0.15 * T + 0.80 * P
Avaliação especial (TE, DA, ...)
Igual à avaliação normal, excepto a componente de participação
Melhoria de classificação
Através da melhoria do trabalho apresentado, desde que não ultrapasse 4 valores da classificação do teste teórico.