Métodos Formais em Engenharia de Software

Mestrado Integrado em Engenharia Informática - MFES 2018/2019

Tópicos

Avisos

14 Jun - VF: tinynew.gif O exame de VF realiza-se no dia 19 de Junho (4ª feira), às 14:00, na sala CP2 1.12. Os alunos deverão trazer os seus computadores pessoais com o software utilizado nas aulas instalado. É permitida a consulta da documentação na parte laboratorial do exame.

14 Jun - VF: tinynew.gif As notas dos projecto e notas finais foram lançadas no Blackboard.

11 Jun - VF: As notas do 2º teste foram lançadas no Blackboard.

3 Jun - VF: A apresentação dos projectos realiza-se no dia 12 de Junho (4º feira), às 9:00, na sala 1.10 do DI. As apresentações são de 15 min. + 5 min. para perguntas. Todos os alunos deverão estar presentes na sessão. Os relatórios deverão ser entregues por email até ao dia 10 de Junho.

27 Mai - VF: O 2º teste de VF realiza-se na próxima 5ª feira, 30 de Maio, às 14:00, na sala E7 1.10. Os alunos deverão trazer os seus computadores pessoais com o sistemas Frama-C e CBMC instalados. É permitida a consulta da documentação.

16 Abr - VF: As notas do 1º teste foram lançadas no Blackboard.

16 Abr - VF: A distribuição dos projectos por grupos já está disponível na página de VF.

4 Abr - VF: Os temas dos projectos estão disponíveis. Por favor, comuniquem as vossas escolhas dos projectos a mjf@di.uminho.pt até 15-Abr.

26 Fev - A Workshop ClearSy terá lugar 4ª-feira 6-Mar, às 14h30. Estejam atentos a mais informações. Até lá, recomenda-se que vejam este video.

10 Fev - LEI: a quem estiver interessado - por favor comuniquem as vossas escolhas dos projectos em LEI a jno@di.uminho.pt até 21-Fev.

10 Fev - CSI: as notas após o exame de recurso foram lançadas na página de CSI.

31 Jan - VF: As aulas de Verificação Formal começam a 14-Fev.

29 Jan - Informa-se que o exame de recurso de CSI foi adiado para dia 6-Fev, às 15h00, na sala 0.05 do DI.

29 Jan - EM: as notas do exame foram lançadas no blackboard da disciplina.

28 Jan - O enunciado do teste de CSI tem agora a correcção proposta.

28 Jan - A Workshop ClearSy de que se falou nas aulas está prevista para 6-Mar (em não Fevereiro como arradamente se referiu). Será conduzida por Thierry Lecomte, especialista em uso de MFs na indústria dos transportes.

27 Jan - CSI: as notas à data do teste foram lançadas na página de CSI.

22 Jan - EM: as notas finais da época normal foram lançadas no blackboard da disciplina. (correção parcial na wiki)

16 Jan - CSI: o teste de CSI de amanhã decorrerá na sala 0.05 do DI.

15 Jan - EM: as notas do segundo teste foram lançadas no blackboard da disciplina.

11 Jan - CSI: as notas do mini-teste foram lançadas na página de CSI.

9 Jan - EM: o teste de EM decorrerá na sala 0.05 do DI.

30 Dec - EM: as notas do TP1 e do primeiro mini-teste foram lançadas no blackboard da disciplina.

21 Dec - EM: foi lançado o enunciado do TP2 sobre Alloy na página EM. A data limite da entrega é 20-Jan.

13 Dez - O segundo teste de EM decorrerá no dia 10-Jan às 9h00 (sala a indicar). O segundo teste de CSI decorrerá no dia 17-Jan (sala e hora a confirmar).

8 Dez - Lista recente e actualizada de empresas que usam métodos formais na indústria.

28 Nov - CSI: haverá hoje uma aula de dúvidas às 16h00, na sala 1.16.

24 Nov - CSI: já está disponível o formulário na página de CSI, bem como algumas FAQs.

24 Nov - CSI: o mini-teste decorrerá às 14h00 de 29-Nov, na sala das aulas. Os alunos podem consultar (apenas) informação escrita ou impressa.

14 Nov - EM: o primeiro teste decorrerá às 9h00 na sala das aulas. Podem usar os portáteis para testar execuções no NuSMV.

8 Nov - CSI: em casa, completar os invariantes I3 e I4 do modelo Alloy do problema Plano de Estudos do MEI saído da aula de hoje material pedagógico na página CSI.

5 Nov - CSI: há novo material pedagógico na página CSI.

25 Out - EM: foi lançado o enunciado do TP1 sobre NuSMV na página EM. A data limite da entrega é 11-Nov.

21 Out - CSI: ver exemplos Alloy das aulas na página CSI.

02 Out - CSI: preparação para as aulas: ver sumários previstos e seguir as respectivas indicações nos apontamentos fornecidos na bibliografia. (Em CSI segue-se o método 'Flipped Classroom')

15 Set - Início das aulas: 20-Set, 9h00, sala E7 1.10.

UC3 - Verificação Formal

Programa Resumido

  • Lógica e Sistemas de Prova
    • Sistemas de prova automática:
      • lógica proposicional; SAT solvers;
      • lógica de 1ª ordem; teorias de 1ª ordem; SMT solvers.
    • Sistemas de prova assistida:
      • lógica de ordem superior; the Coq proof assistant.

  • Verificação de Software
    • Verificação dedutiva de programas:
      • lógica de Hoare; VCGen; safety verification; functional verification;
      • a plataforma Why3 para verificação dedutiva de programas;
      • anotações em ACSL; o plug-in WP da ferramenta Frama-C.
    • Verificação automática de programas:
      • bounded model checking of software; CBMC.

Material de Apoio

Slides

Guiões

Ferramentas

Uma parte substancial do software listado é desenvolvido em Ocaml, uma linguagem funcional da família ML, e pode ser compilado localmente. Recomenda-se a instalação do package manager OPAM (disponível em Homebrew para Max OSX).

Máquina virtual com todas as ferramentas instaladas. tinynew.gif

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)
  • Interactive Theorem Proving and Program Development Coq’Art: The Calculus of Inductive Constructions. Yves Bertot & Pierre Casteran. Springer (2004)

Funcionamento

Docente / Horário

Docente Foto Horário Sala
Maria João Frade mjf 5a-feira, 14h-17h Sala E7 1.10

NB: poderá haver trocas de horário entre VF e AC de acordo com necessidades de serviço dos docentes das duas disciplinas.

Avaliação

  • 2 testes, com nota mínima (agregada) de 8 valores (70%)
  • 1 trabalho desenvolvido em grupo, envolvendo o estudo de um tópico (diferente para cada grupo), e possivelmente algum desenvolvimento. O trabalho deverá dar origem a um artigo a entregar no final do semestre, bem como a uma apresentação feita por todo o grupo (30%)

  • Datas
    • 1º teste: 4 de Abril (9:00)
    • 2º teste: 30 de Maio (14:00)
    • Projecto
      • Relatório: 10 de Junho
      • Apresentação: 12 de Junho (9:00)
    • Exame de recurso: 19 Junho (14:00)

Projectos

Lean

Lean is an open source theorem prover and programming language being developed at Microsoft Research. Lean aims to bridge the gap between interactive and automated theorem proving, by situating automated tools and methods in a framework that supports user interaction and the construction of fully specified axiomatic proofs.”
Tratando-se de uma ferramenta de prova inovadora, e não de um verificador de programas, espera-se:

  • uma descrição geral da ferramenta e princípios subjacentes;
  • referência às vantagens que possa oferecer relativamente à utilização das ferramentas existentes bem estabelecidas;
  • demonstração com base em exemplos abordados nesta UC, nomeadamente de provas com utilização de indução.

Isabelle

Isabelle is a generic proof assistant. It allows mathematical formulas to be expressed in a formal language and provides tools for proving those formulas in a logical calculus. The main application is the formalization of mathematical proofs and in particular formal verification, which includes proving the correctness of computer hardware or software and proving properties of computer languages and protocols.
Tratando-se de uma ferramenta de prova, e não de um verificador de programas, espera-se:

  • uma descrição geral da ferramenta e princípios subjacentes;
  • referência às vantagens que possa oferecer relativamente à utilização das ferramentas existentes bem estabelecidas;
  • demonstração com base em exemplos abordados nesta UC, nomeadamente de provas com utilização de indução.

Coq

"Coq is a formal proof management system. It provides a formal language to write mathematical definitions, executable algorithms and theorems together with an environment for semi-interactive development of machine-checked proofs." Tratando-se de uma ferramenta de prova que já foi abordada nesta UC, o que se pretende com este projecto é que o grupo vá mais longe na utilização desta ferramenta.
Espera-se:

  • desenvolvimento de um caso de estudo que envolva a formalização em Coq de um pequeno problema;
  • consideração de alguns tópicos avançados, não abordados nas aulas (por exemplo, definição de tácticas automáticas);
  • experimentação com a ferramenta QuickChick: Randomized Property-Based Testing Plugin for Coq.

Why3

"Why3 is a platform for deductive program verification. It provides a rich language for specification and programming, called WhyML, and relies on external theorem provers, both automated and interactive, to discharge verification conditions. Why3 comes with a standard library of logical theories and basic programming data structures. A user can write WhyML programs directly and get correct-by-construction OCaml programs through an automated extraction mechanism. WhyML is also used as an intermediate language for the verification of C, Java, or Ada programs. Why3 can be easily extended with support for new theorem provers. Why3 can be used as a software library, through an OCaml API." Tratando-se de uma ferramenta já abordada nesta UC, o que se pretende com este projecto é que o grupo vá mais longe na utilização desta ferramenta.
Espera-se:

  • desenvolvimento de um caso de estudo que envolva a formalização em Why3 de um pequeno problema (ver aqui);
  • comparação com as ferramentas similares;
  • consideração de tópicos avançados: linguagem lógica / tipos indutivos / ghost code.

Boogie

"Boogie is an intermediate verification language, intended as a layer on which to build program verifiers for other languages. Several program verifiers have been built in this way, including the VCC and HAVOC verifiers for C and the verifiers for Dafny, Chalice, and Spec#. Boogie is also the name of a tool. The tool accepts the Boogie language as input, optionally infers some invariants in the given Boogie program, and then generates verification conditions that are passed to an SMT solver. The default SMT solver is Z3. The Boogie research project is being developed at Microsoft Research."
Espera-se:

  • tutorial sobre a utilização da ferramenta;
  • comparação com a ferramenta Why3;
  • consideração de tópicos avançados: linguagem lógica / tipos indutivos / ghost code.

Dafny

Dafny é uma ferramenta da Microsoft Research baseada numa linguagem de programação dedicada para verificação dedutiva (tal como Why3), utilizando como VCGen uma outra ferramenta da Microsoft Research, chamada Boogie.
Espera-se:

  • tutorial sobre a utilização da ferramenta;
  • comparação com as ferramentas similares estudadas na UC (WP e Why3);
  • consideração de tópicos avançados: linguagem lógica / tipos indutivos / ghost code.

The KeY Project

O KeY é uma ferramenta de verificação dedutiva bem estabelecida que ganhou recentemente visibilidade acrescida, pelo facto de ter permitido identificar um bug em algoritmos de ordenação implementados em bibliotecas standard (Java, Python). A lógica de programas subjacente é uma lógica dinâmica, em vez da mais comum lógica de Hoare / WP calculus.
Espera-se:

  • tutorial sobre a utilização da ferramenta;
  • comparação com as ferramentas similares estudadas na UC (WP e Why3);
  • consideração de tópicos avançados: linguagem lógica / tipos indutivos / ghost code.

VeriFast

O VeriFast é uma ferramenta de verificação dedutiva tendo por base a lógica de programas conhecida como “separation logic”, o que, em teoria, lhe confere algumas vantagens sobre ferramentas baseadas em lógica de Hoare / WP calculus.
“VeriFast is a research prototype of a tool for modular formal verification of correctness properties of single-threaded and multithreaded C and Java programs annotated with preconditions and postconditions written in separation logic.”
Espera-se:

  • tutorial sobre a utilização da ferramenta;
  • comparação com as ferramentas similares estudadas na UC (WP e Why3);
  • identificação de aspectos em que a ferramenta suplanta as estudadas, graças à utilização de “separation logic”;
  • consideração de tópicos avançados: linguagem lógica / tipos indutivos / ghost code.

Viper

Viper (Verification Infrastructure for Permission-based Reasoning) is a suite of tools developed at ETH Zurich, providing an architecture on which new verification tools and prototypes can be developed simply and quickly. It comprises a novel intermediate verification language, also named Viper, and automatic verifiers for the language, as well as example front-end tools. The Viper toolset can be used to implement verification techniques for front-end programming languages, via translations into the Viper language.
The Viper toolchain is designed to make it easy to implement verification techniques for programs with persistent mutable state (including concurrent programs), providing native support for reasoning about the program state using method permissions or ownership, e.g. in the style of separation logic. New verification techniques can be implemented directly as translations to the Viper language, using either of the verifiers provided.”
Trata-se de uma proposta completa, baseada numa linguagem intermédia, front-ends e back-ends. São disponibilizados dois back-ends, um dos quais recorre ao Boogie.
Espera-se naturalmente uma descrição geral da toolset e princípios subjacentes, abordando:

  • uma comparação entre a linguagem intermédia dedicada Wiper e a linguagem WhyML do Why3;
  • comparação entre Viper e Why3, trabalhando directamente sobre as respectivas linguagens dedicadas;
  • possível demonstração da utilização do toolset, incluindo um front-end para uma qualquer linguagem real de alto nível.

SMACK

SMACK is both a modular software verification toolchain and a self-contained software verifier. It can be used to verify the assertions in its input programs. In its default mode, assertions are verified up to a given bound on loop iterations and recursion depth; it contains experimental support for unbounded verification as well. SMACK handles complicated feature of the C language, including dynamic memory allocation, pointer arithmetic, and bitwise operations.
(…) Currently, SMACK leverages the Boogie and Corral verifiers.”
Trata-se de uma ferramenta para a verificação de código C, mas que apenas traduz para BoogiePL, sendo depois necessário utilizar uma das ferramentas referidas como back-end. O grupo deve começar por escolher uma das ferramentas; o trabalho diz respeito ao toolset completo, compreendendo o SMACK e a ferramenta (VCGen) escolhida.
Espera-se:

  • uma descrição geral da toolset e princípios subjacentes;
  • referência às vantagens que possa oferecer relativamente à utilização de outras ferramentas existentes para a verificação de código C;
  • comparação com as ferramentas similares estudadas na UC (WP / Frama-C).

Distribuição dos projectos

Nome Número Projecto
Afonso Rafael Carvalho Sousa A74196 Viper
Jorge Fernando Alves da Cruz A78895 Viper
Alexandre Miguel Costa Dias A78425 SMACK
Gonçalo Medeiros São Pedro Raposo A77211 SMACK
Armando João Isaias Ferreira dos Santos A77628 Lean
Gonçalo Nuno Esteves Duarte A77508 Lean
Artur Jorge Gomes Queiroz PG38014 Coq
Nelson Santos Loureiro PG37020 Coq
Diogo Manuel Macedo e Silva A79021 Boogie
Tiago André Araújo Monteiro A78961 Boogie
Francisco Fernando Vilela Araújo A79821 Why3
Fábio Rafael Pereira Araújo A78508 Why3
Joana Fernandes Cunha PG38929 Isabelle
João Manuel da Silva Gomes Fernandes PG38930 Isabelle
José Carlos do Vale e Sousa A74678 Verifast
Patrícia Filipa Bouça Barreira A79007 Dafny
Pedro Henrique Moreira Gomes Fernandes A77377 Dafny
Pedro Faria Durães da Silva A78434 KeY
Pedro Miguel Gomes da Silva PG38935 KeY
Ricardo Guerra Leal A75411  

r52 - 07 May 2020 - 13:52:23 - MariaJoaoFrade
This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.
Syndicate this site RSSATOM