Apresentação
1 Contexto
1.1 Sobre Métodos Formais
1.1.1 Essência
Métodos formais são técnicas, embasadas na matemática, que visam verificar que algum hardware/software faz o que se propõe.
As técnicas incluem dois componentes:
- Uma linguagem de especificação
- Um sistema de verificação
1.1.2 Histórico da disciplina
- Lá por 2015~2017, ensinava-se uma linguagem chamada Z
- Em ~2018, ensinava-se Redes de Petri
- Em 2019, o prof Cristiano assumiu a disciplina ensinando Coq
- Em 2024/1, eu assumi a disciplina ensinando TLA+ (Temporal Logic of Actions+) e Quint
1.2 Sobre Mim
1.2.1 Sobre Mim
Academia:
- Ciência da Computação - UDESC - 2015-2019
- TCC: Tradução automática de especificação formal
modelada em TLA+ para linguagem de programação
- TCC: Tradução automática de especificação formal
modelada em TLA+ para linguagem de programação
- Computação Aplicada - UDESC - 2020-2022
- Dissertação: Test Generation From TLA+ Specifications
Indústria:
- Magrathea Labs (agora Trusted Health) - 2018-2021
- Estágio (5 meses) + Engenheira de Software
- Estágio (5 meses) + Engenheira de Software
- Informal Systems - 2021-presente
- Engenheira de Pesquisa
1.2.2 Meu envolvimento com Métodos Formais
- Aprendi TLA+ na graduação para fazer meu TCC, e continuei estudando
TLA+ no mestrado
Entrei na Informal Systems devido à pesquisa ativa (minha e deles) em TLA+
- Muitos engenheiros com dificuldade em aprender e usar TLA+
Tinham a proposta de uma nova syntaxe para TLA+, que chamamos hoje de Quint
- Sou a principal desenvolvedora dessa linguagem desde o início de 2022
- Muitos engenheiros com dificuldade em aprender e usar TLA+
2 Plano de Ensino
2.0.1 Vamos aprender TLA+ e Quint?
Sim, mas vocês vão escolher em qual das duas fazer o primeiro trabalho
- Na prova, sempre que houver exemplo de código, haverá versões nas duas linguagens
Os exemplos em aula poderão ser em qualquer uma das linguagens.
Minha expectativa é que vocês consigam entender especificações em ambas as linguagens, já que toda a base lógica para elas é a mesma - e a base lógica é a parte mais importante da disciplina.
2.0.2 Vamos aprender TLA+ e Quint? - Continuação
TLA+ é uma linguagem de especificação bem estabelecida, e será nossa principal fundamentação teórica da disciplina
- Alguns assuntos mais avançados vamos abordar somente em TLA+
Quint é opcional, vocês podem escolher fazer tudo em TLA+ se quiserem.
- A linguagem e o ferramental de Quint pode facilitar bastante a vida
de vocês.
- O trabalho final será em Quint, mas vocês vão receber a
especificação pronta.
- Será necessário rodar comandos no terminal, então todos terão que
instalar o Quint.
- Será necessário rodar comandos no terminal, então todos terão que
instalar o Quint.
- Vamos conversar mais sobre isso no decorrer das aulas.
2.1 Conteúdo
2.1.1 Plano de ensino
Disponível no SIGA (assim que for aprovado). Vamos ver juntos agora.
Objetivo Geral
Desenvolver habilidades para reconhecimento de cenários, em sistemas computacionais, onde o uso de métodos formais é apropriado; e para aplicação de métodos formais.
Objetivo Específico
- Estimular o senso de necessidade de técnicas que
auxiliem a garantir comportamentos em sistemas computacionais.
- Desenvolver a capacidade de abstração ao descrever
comportamentos de sistemas em linguagens de especificação formal.
- Trabalhar técnicas de testes baseados em modelos para conectar especificações com implementações.
- Estimular o senso de necessidade de técnicas que
auxiliem a garantir comportamentos em sistemas computacionais.
2.1.2 Conteúdo programático
- Introdução: Programação e matemática não são a mesma coisa
- Estruturas de Kripke
- Lógica Temporal
- Exemplo com semáforos
- Motivação para o uso de métodos formais
- Linguagens de especificação formal
- Lógica Temporal de Ações: TLA+ e Quint
- Exemplo com Jogo da Velha
- Formulas temporais em TLA+ e Quint
- Métodos formais no design de protocolos
- Especificações para sistemas distribuídos
- Exemplo sobre a efetivação em duas fases (two phase commit)
- Verificação vs testes
- Testes baseados em modelos
- Outros métodos formais
- Métodos formais no ciclo de desenvolvimento de software
- Model checking
- Refinamento
- Model values e conjuntos de simetria
2.1.3 Metodologia
A disciplina será desenvolvida através de aulas expositivo-dialogadas, com exercícios e trabalhos práticos, e seminários. O conteúdo da disciplina poderá ser ministrado na modalidade de ensino a distância em até 20% do total de sua Carga Horária (MEC PORTARIA No 4.059, DE 10 DE DEZEMBRO DE 2004 publicado no DOU de 13/12/2004, Seção 1, p. 34).
2.2 Sistema de avaliação
2.2.1 Do desempenho do aluno
A qualidade do desempenho do aluno será avaliada com base em:
a) Uma prova individual (P) - 30%
b) Dois trabalhos práticos (T1 e T2) - 25% cada
c) Um seminário (S) - 10%
d) Exercícios (E) - 10%
Assim, a Média Semestral (MS) será calculada pela fórmula
MS = (30 * P + 25 * T1 + 25 * T2 + 10 * S + 10 * E)/100
2.2.3 Exame
Caso o discente não obtenha média MS igual ou superior a 7,0, um exame escrito será aplicado objetivando aferir o conhecimento teórico do estudante. Não há recuperação das provas por não comparecimento, exceto nos casos previstos no regulamento da UDESC na resolução 0392015 - CONSEPE.
2.2.4 Do desempenho da disciplina e da professora
Os estudantes terão, igualmente, a oportunidade de fazer uma avaliação do desempenho da professora e da disciplina. As informações sobre esta atividade serão fornecidas pelo coordenador do curso.
2.3 Bibliografia
2.3.1 Bibliografia básica
(BAIER; KATOEN, 2008; LAMPORT, 2002; MONIN; HINCHEY, 2001)
2.3.2 Bibliografia complementar
(KONNOV; KUKOVEC, 2022; LAMPORT, 2024; TEAM, 2024)
3 Recursos
3.0.1 Recursos
- Aulas em HTML no meu site: bugarela.com/mfo
- Todo o conteúdo dos slides
- Todo o conteúdo dos slides
- Toda a bibliografia tem disponível online gratuitamente
- Páginas web relevantes