Este projecto enquadra-se no tema da verificação de programas para sistemas críticos embebidos, em particular sistemas de tempo real, escritos na linguagem Ada. É inegável a importância crescente do desenvolvimento de técnicas de verificação de correcção e segurança (safety) para os sistemas críticos desta classe. Neste contexto a consideração da linguagem de programação Ada é incontornável, mas é reconhecidamente impossível em geral a verificação de propriedades de código Ada concorrente e com restrições temporais.
Têm sido seguidas duas abordagens à verificação de código deste género: (i) a utilização de um perfil de compilação restrito quanto ao modelo de concorrência utilizado, como o designado por RAVENSCAR, e (ii) a definição e utilização de uma sub-linguagem do Ada, como o Spark, onde o multi-tasking é proibido. O Spark é, mais do que um simples sub-conjunto sequencial do Ada, uma linguagem concebida com base nos princípios do design-by-contract, suportando verificação estática com base num VCGen e ferramenta de prova dedicadas. Na confluência destas duas abordagens, a linguagem Spark foi recentemente estendida com multitasking de acordo com o perfil RAVENSCAR.
Os objectivos deste trabalho são os seguintes:
Aluno: André Carvalho (March 2010 - August 2010). Sup.: JSP
Este projecto de investigação pretende estudar a integração de ferramentas de métodos formais no ciclo de desenvolvimento de software orientado ao modelo. Mais concretamente, pretende-se investigar a possibilidade de usar a linguagem de especificação formal Alloy para a validação e verificação de modelos UML, com ênfase nos perfis para especificação de arquitecturas (como, por exemplo, a Architecture Analysis & Design Language). A escolha do Alloy deve-se ao ser carácter “ligthweight” (sintaxe e semântica muito simples, combinada com ferramentas de verificação automática) que a torna particularmente apelativa para a comunidade de engenharia de software em geral.
Mais concretamente, os objectivos deste trabalho são os seguintes:
Aluno: Ana Garis (February 2011 - June 2011). Sup.: MAC
O plano de trabalho para esta bolsa visa desenvolver uma metodologia (incluindo a sua caracterização formal e desenvolvimento preliminar de um cálculo associado) para especificação, análise e transformação de padrões arquitecturais para sistemas complexos. Ênfase particular será dada:
Mais concretamente, os objectivos deste trabalho são os seguintes:
Aluno: Alejandro Sánchez (February 2011 - June 2011). Sup.: LSB
The aim of this project is to investigate advantages and drawbacks of using formal methods to capture the semantics of textual requirements, leading to the early detection of ambiguities and to the timely remedying of contradictions.
This research project will include the use of support tools such as model-checkers (Alloy, Uppaal) and text parsers. In model checking a system specification is expressed in temporal logic and a model is constructed by a state transition graph. A search procedure determines if the state transition graph satisfies or not the specification. Model checking is very used in hardware verification but as Daniel Jackson identifies in his book Software Abstractions (ISBN 0-262-10114-9), the conventional style of model checking is not suited for software. For this he developed a new language (Alloy) and a tool supporting such a language (the Alloy model checker.) Alloy promotes the most important ingredient of requirement analysis (abstraction), following a relational calculus approach and some ideas of object oriented programming, leading to a fully automatic analytical process. Uppaal is another tool able to do automatic verification of real-time systems modelled as networks of timed automata.
Models of the textual requirements will be created using these tools and then analysed, so that early feedback on the impact of inconsistencies is gained. We intend to use Uppaal wherever texts suggest time constraints in systems description, otherwise formal modelling will be carried out and checked through Alloy.
The project will proceed as follows:
Aluno: Daniel Cadete (November 2010 - April 2011). Sup.: JNO
Este projecto enquadra-se no tema da verificação de programas para sistemas críticos embebidos, em particular sistemas de tempo real, escritos na linguagem Ada. É inegável a importância crescente do desenvolvimento de técnicas de validação e de verificação de correcção e segurança (safety) para os sistemas críticos desta classe. Neste contexto a consideração da linguagem de programação Ada é incontornável, mas é reconhecidamente impossível em geral a verificação de propriedades de código Ada concorrente e com restrições temporais.
Têm sido seguidas duas abordagens à verificação de código deste género: (i) a utilização de um perfil de compilação restrito quanto ao modelo de concorrência utilizado, como o designado por RAVENSCAR, e (ii) a definição e utilização de uma sub-linguagem do Ada, como o Spark, onde o multi-tasking é proibido. O Spark é, mais do que um simples sub-conjunto sequencial do Ada, uma linguagem concebida com base nos princípios do design-by-contract, suportando verificação estática com base num VCGen e ferramenta de prova dedicadas. Na confluência destas duas abordagens, a linguagem Spark foi recentemente estendida com multitasking de acordo com o perfil RAVENSCAR.
No contexto da verificação de código fonte da linguagem C, a tecnologia CIL (C Intermediate Language) tem permitido um conjunto de avanços impressionantes, com aplicações por exemplo no desenvolvimento da ferramenta de verificação VCC.
Os objectivos deste trabalho são os seguintes:
Aluno: João Martins (January 2011 - June 2011). Sup.: JSP (co-supervisão: J.M. Faria, Critical)
Este projecto enquadra-se no tema da verificação de programas para sistemas críticos embebidos, em particular sistemas de tempo real, escritos na linguagem Ada. É inegável a importância crescente do desenvolvimento de técnicas de validação e de verificação de correcção e segurança (safety) para os sistemas críticos desta classe. Neste contexto a consideração da linguagem de programação Ada é incontornável, mas é reconhecidamente impossível em geral a verificação de propriedades de código Ada concorrente e com restrições temporais.
Têm sido seguidas duas abordagens à verificação de código deste género: (i) a utilização de um perfil de compilação restrito quanto ao modelo de concorrência utilizado, como o designado por RAVENSCAR, e (ii) a definição e utilização de uma sub-linguagem do Ada, como o Spark, onde o multi-tasking é proibido. O Spark é, mais do que um simples sub-conjunto sequencial do Ada, uma linguagem concebida com base nos princípios do design-by-contract, suportando verificação estática com base num VCGen e ferramenta de prova dedicadas. Na confluência destas duas abordagens, a linguagem Spark foi recentemente estendida com multitasking de acordo com o perfil RAVENSCAR.
No contexto da verificação de código fonte da linguagem C, a tecnologia CIL (C Intermediate Language) tem permitido um conjunto de avanços impressionantes, com aplicações por exemplo no desenvolvimento da ferramenta de verificação VCC.
Os objectivos deste trabalho são os seguintes:
Aluno: André Pedro (January 2011 - June 2011). Sup.: MJF, SM de Sousa