2024/25
Esta unidade curricular do 1º semestre do 1º ano do Mestrado em Engenharia Informática da Universidade do Minho tem por objetivo introduzir a utilização dos Métodos Formais na Engenharia de Software.
Os alunos interessados em aprofundar os conhecimentos adquiridos nesta unidade curricular podem optar por frequentar o perfil de Métodos Formais de Programação no 2º semestre.
Programa
- Lógicas para especificação formal
- Lógica proposicional (PL)
- Lógica de primeira ordem (FOL)
- Lógica relacional (RL)
- Lógica temporal linear (LTL)
- Técnicas de prova automática
- SAT solving para lógica proposicional
- SMT solving para lógica e teorias de primeira ordem
- Model-finding via SAT para lógica relacional
- Bounded model-checking via SAT para lógica temporal
- Conceção formal de software com Alloy
- Modelação estrutural
- Modelação comportamental
- Teste automático baseado em modelos
- Especificação e verificação de programas com Why3
- Linguagem lógica, teorias (biblioteca) e prova
- Linguagem de programas, especificação comportamental, e verificação de correção
- Desenvolvimento de sistemas com estado
Docentes
- Alcino Cunha (MAC)
- Jorge Sousa Pinto (JSP)
Avaliação
- Época normal
- Exercícios de avaliação (20%)
- Teste individual (80%)
- Época de recurso
- Exame individual (100%)
Os exercícios de avaliação serão propostos no final de algumas aulas teóricas e serão para submeter na plataforma de e-learning na 6ª feira seguinte.
As notas acima de 18 valores (quer na época normal, quer na época de recurso) terão que ser defendidas através da realização de um pequeno projeto / desafio.
Horário
Tipo | Turno | Horário | Sala | Docente |
---|---|---|---|---|
Teórica | 2ª 13h-15h | CP1 0.08 | ||
Teórico-prática | 1 | 2ª 15h-16h | CP2 2.02 | JSP |
Teórico-prática | 2 | 2ª 11h-12h | CP2 2.06 | JSP |
Teórico-prática | 3 | 2ª 15h-16h | ED7 1.10 | MAC |
Teórico-prática | 4 | 2ª 11h-12h | CP1 0.17 | MAC |
Teórico-prática | 5 | 2ª 17h-18h | CP1 2.23 | MAC |
Planificação
# | Data | Docentes | Sumário |
---|---|---|---|
1 | 9 Set | MAC | Apresentação da UC. Lógica proposicional. Análise de modelos de variabilidade com lógica proposicional. |
2 | 16 Set | MAC | SAT solving. Resolução de problemas de alocação com lógica proposicional. |
3 | 23 Set | MAC | Lógica de 1ª ordem. Formalização de modelos de domínio em lógica de primeira ordem. |
27 Set | Entrega do 1º exercício de avaliação. | ||
4 | 30 Set | MAC | Modelação estrutural em Alloy: declaração assinaturas e relações, lógica relacional. Formalização de modelos de domínio em Alloy. |
5 | 7 Out | MAC | Tópicos avançados sobre modelação estrutural em Alloy: relações de aridade superior, overloading, predicados e funções, sistema de tipos. Teste automática baseado em modelos. |
6 | 14 Out | MAC | Modelação comportamental com Alloy: especificação e validação de sistemas de transição de estado usando lógica temporal. Software concepts design com Alloy. |
18 Out | Entrega do 2º exercício de avaliação. | ||
7 | 21 Out | MAC | Modelação comportamental com Alloy: especificação e verificação de requisitos em lógica temporal. App design com Alloy. |
8 | 28 Out | JSP | Introdução ao Why3. Linguagem lógica. Modelos de domínio em Why3. |
1 Nov | Entrega do 3º exercício de avaliação. | ||
9 | 4 Nov | JSP | Verificação de programas funcionais com Why3. |
10 | 11 No | JSP | Desenvolvimento de módulos com estado em Why3. Verificação de invariantes. |
11 | 18 Nov | JSP | Especificação e verificação de “software concepts” em Why3. Implementação funcional. |
12 | 25 Nov | JSP | Refinamento de módulos em Why3 e extração de código WhyML correcto. Implementação imperativa de “software concepts”. |
13 | 2 Dez | (apenas aulas TP) | |
6 Dez | Entrega do 4º exercício de avaliação. | ||
14 Dez | TESTE | ||
20 Jan | EXAME |
Exercícios de avaliação
# | Tópico | Deadline |
---|---|---|
1 | Modelação em PL. | 27 Set |
2 | Modelação estrutural em Alloy. | 18 Out |
3 | Modelação comportamental em Alloy. | 1 Nov |
4 | Desenvolvimento e verificação de sistemas com estado em Why3. | 29 Nov |
Material
Slides das aulas teóricas
- Apresentação da UC
- Propositional Logic
- First Order Logic
- Structural Design with Alloy
- Mastering Alloy
- Behavioral Design with Alloy
- Why3: Logic
- Why3: Verification of Functional Programs
- Why3: State-based Development
- Why3: Abstract Specifications and Ghost Code
- Why3: Refinement and Extraction
Exemplos das aulas teóricas
- Aula 1
- Aula 2
- Aula 3
- Aula 4
- Aula 5
- Aula 6
- Aula 7
- Aula 8
- Aula 9
- Aula 10
- Reservations software concept in WhyML
- Aula 11
- Trash, functional, lists: WhyML, OCaml, OCaml main
- Trash, imperative, arrays: WhyML, OCaml, OCaml main
Exercícios das aulas teórico-práticas
- Aula 1
- Survey (existem 11 variantes)
- Aula 2
- Distribuição de gabinetes (existem 36 distribuições possíveis)
- Alocação de aulas (existem 224 alocações possíveis)
- Aula 3
- Aula 4
- Photo sharing social network with Alloy (a possible solution)
- Aula 5
- Aula 6
- Specify and validate the actions of the Reservation and Notification concepts.
- Aula 7
- Specify the scenarios and operational principles of the Reservation and Notification concepts (a possible solution).
- Aula 9
- Complete the Why3 formalization of the Courses domain model. As an extra, consider producing an alternative formalization using functions. Which associations does it make sense to model as functions?
- Aula 10
- List delete function
- Merge Sort. Solution
- Aulas 11 e 12
- Labels software concept in WhyML. Solution
- Notifications software concept in WhyML. Solution
Testes
Bibliografia
- Logic in Computer Science: Modelling and Reasoning About Systems. Michael Huth & Mark Ryan. Cambridge University Press; 2nd edition (2004).
- The Calculus of Computation: Decision Procedures with Applications to Verification. Aaron R. Bradley & Zohar Manna. Springer (2007).
- Rigorous Software Development: An Introduction to Program Verification. J.B. Almeida & M.J. Frade & J.S. Pinto & S.M. de Sousa. Springer (2011).
- Software Abstractions: Logic, Language, and Analysis (revised edition). Daniel Jackson. MIT Press (2012).
- The Essence of Software: Why Concepts Matter for Great Design. Daniel Jackson. Princeton University Press (2021)
- Formal Software Design with Alloy 6. Julien Brunel, David Chemouil, Alcino Cunha, and Nuno Macedo (2021).
Outras leituras recomendadas
- D. Jackson. Alloy: a language and tool for exploring software designs. Commun. ACM 62(9): 66-76 (2019). Também existe um vídeo sobre este artigo que pode ser visto aqui.
- Leslie Lamport. If You’re Not Writing a Program, Don’t Use a Programming Language. Bulletin of the EATCS 125 (2018)
- David Benavides, Sergio Segura, Antonio Ruiz Cortés: Automated analysis of feature models 20 years later: A literature review. Inf. Syst. 35(6): 615-636 (2010)
Ferramentas
- SAT solvers
- SMT solvers (SMT-LIB - The Satisfiability Modulo Theories Library)
- Alloy
- Why3