Métodos Formais em Engenharia de Software - 2008/09 | |
---|---|
[ DI/UM ] |
Docentes convidados:
Data | Descrição | Ficheiro(s) |
---|---|---|
2008.10.01 | Dependable Software by Design (Daniel Jackson, Scientific American, Junho de 2006, 8 págs). | Dependable_Software_by_Design.pdf |
2008.10.15 | Data type invariants: starting where (static) type checking stops (J.N. Oliveira) | invariants.pdf (21 slides). |
2008.10.15 | Pre / post-conditions -- starting where (pure) functions stop (J.N. Oliveira) | prepost.pdf (29 slides). |
2008.11.12 | Design by Contract and JML: concepts and tools (J.C. Bacelar) | JML-1-0809.pdf (13 slides). |
2008.12.04 | JML: beyond the basics (J.C. Bacelar) | JML-2-0809.pdf (14 slides). |
2008.12.05 | Exemplos Alloy da aula CSI de 20 de Novembro, incluindo biblioteca RelCalc.als | csi.Alloy.zip |
2008.12.05 | Unit-testing with JML (J.C. Bacelar) | JML-3-0809.pdf (8 slides). |
2008.12.23 | Documentação das aulas sobre VDM (O.M. Pacheco) | VDM.zip |
2009.01.15 | Documentação das aulas sobre Spec# (Ana Paiva) | MBT.zip |
2009.01.15 | An introduction to Alloy (M.A. Cunha) | Alloy.pdf (56 slides). |
2009.01.22 | ``Theorems for free'': a (calculational) introduction | tffsl.pdf (26 slides). |
2009.01.28 | Software Analysis and Testing (Joost Visser) | 2009-01-Lecture-SIG-UM-MFES.pdf.zip |
2009.01.05 | Formulário do cálculo relacional | relcalc.pdf |
2009.03.19 | Documentação extra da aula CSI de 12-Mar, incluindo exemplo PTree.hs e vídeos da ferramenta 2LT | csi.2lt.zip |
2009.03.05 | Formal Methods and Program Verification (M.J. Frade e J.S. Pinto) | VFS-1-Introduction.pdf (13 slides) |
2009.03.12 | Hoare Logic (J.S. Pinto) | VFS-2-HoareLogic.pdf (33 slides) |
2009.03.19 | Formal Logic and Deduction Systems (M.J. Frade) | SFV-Logic-Intro.pdf (9 slides) |
2009.03.19 | Classical Propositional Logic (M.J. Frade) | SFV-PL.pdf (29 slides) |
2009.03.19 | Classical First-Order Logic (M.J. Frade) | SFV-FOL.pdf (31 slides) |
2009.03.19 | Verification Conditions (J.S. Pinto) | VFS-3-VCGen.pdf (31 slides) |
2009.03.26 | Verification of C programs: ACSL and Frama-c (J.S. Pinto) | VFS-4-ACSL.pdf (21 slides) |
2009.04.02 | Beyond First-Order Logic (M.J. Frade) | SFV-BeyondFOL.pdf (37 slides) |
2009.04.02 | Language Extensions (J.S. Pinto) | VFS-5-Extensions.pdf (26 slides) |
2009.04.23 | Calculus of Inductive Constructions (M.J. Frade) | SFV-CIC.pdf (36 slides) |
2009.04.30 | More About Coq (M.J. Frade) | SFV-MoreAboutCoq.pdf (47 slides) |
2009.04.30 | The Curry-Howard Isomorphism (M.J. Frade) | SFV-CurryHoward..pdf (30 slides) |
2009.04.30 | Exemplos Coq das aulas (M.J. Frade) | sfv.Coq.zip |
2009.05.06 | Introdução ao UPPAAL (Simão Melo de Sousa, Joel Carvalho) | ModelChecking_UPPAAL.pdf (98 slides) |
2009.05.21 | Reo paradigm: concepts, semantics and applications (David Costa) | lecture-di-may'09.pdf (15 slides) |
2009.05.28 | Security Properties (J.S. Pinto) | VFS-6-Topics.pdf (23 slides) |
2009.05.28 | Ficheiros ACSL utilizados nas aulas (J.S. Pinto) | Frama-c-MFES.zip |
2009.07.13 | Software composition, interaction and architecture (L.S. Barbosa) | PASlecture1.pdf (63 slides) |
2009.07.13 | Systems, behaviours and coinduction (I) (L.S. Barbosa) | PASlecture2.pdf (53 slides) |
2009.07.13 | Systems, behaviours and coinduction (II) (L.S. Barbosa) | PASlecture3.pdf (70 slides) |
2009.07.13 | Architecture as coordination: the Orc perspective (L.S. Barbosa) | PASlecture4.pdf (41 slides) |
Prova | Módulo | Data | Hora | Salas | Inscritos | Enunciado |
---|---|---|---|---|---|---|
Milestone PI-1.1 | PI | 5.ª-feira, 13-Nov | 13h00 | DI 1.08 | ||
Milestone PI-1.2 | PI | 5.ª-feira, 18-Dez | 09h00 | DI 1.08 | ||
Milestone PI-1.3 | PI | 5.ª-feira, 12-Fev | 09h00 | DI 1.08 | ||
Teste de frequência | AMT | 5.ª-feira, 19-Fev | 09h00 | DI 1.08 | ||
Teste de frequência | CSI | 5.ª-feira, 26-Fev | 09h00 | DI 1.08 | ||
Milestone PI-2.1 | PI | 5.ª-feira, 26-Mar | 09h00 | DI 1.08 | ||
Milestone PI-2.2 | PI | 5.ª-feira, 30-Abr | 09h00 | DI 1.08 | ||
Milestone PI-2.3 | PI | 5.ª-feira, 18-Jun | 09h00 | DI 1.08 | ||
Teste de frequência | VFS | 5.ª-feira, 09-Jul | 09h00 | DI 1.08 | ||
Milestone PI-2.4 | PI | 6.ª-feira, 10-Jul | 11h00 | DI (Aquário do 2.º andar) | ||
Milestone PI-2.4 | PI | 3.ª-feira, 21-Jul | 14h30 | DI (Sala de reuniões) | ||
Exame | CSI | 5.ª-feira, 23-Jul | 09h30 | DI 1.08 | ||
Exame | AMT | 5.ª-feira, 23-Jul | 14h30 | DI 1.08 | ||
Milestone PI-2.4 | PI | 2.ª-feira, 27-Jul | 16h00 | DI (Sala de reuniões) | ||
Milestone PI-2.4 | PI | 2.ª-feira, 27-Jul | 17h00 | DI (Sala de reuniões) | ||
Exame | VFS | 5.ª-feira, 30-Jul | 09h00 | DI 1.08 |
c) na definição de uma metodologia que permita analisar código open source,
d) na definição de uma metodologia que permita auditar código fonte comercial.
Note-se que neste momento não é possível discernir se b), c) e d) farão parte de uma mesma metodologia global ou se será necessário metodologias específicas para cada um dos
casos.
Descrição das tarefas:
1 - Familiarização e estudo das ferramentas existentes de análise de código fonte Java, incluindo ferramentas que analisem código fonte escrito "em cima" de application servers
como o JBoss e Tomcat
2 - Identificar as métricas obtidas com cada uma dessas ferramentas, e o significado das mesmas. Para cada métrica deverá ser estabelecido o intervalo médio e os intervalos de
falha de critério da métrica.
3 - Utilizando as ferramentas estudadas, desenvolver casos de estudo com diferente código fonte (por exemplo, open source e obtido junto de software houses).
4 - Identificar aspectos em que as ferramentas possam ser melhoradas e contribuir eventualmente para essa melhoria.
5 - Definir/propor metodologia(s) que possa(m) ser utilizada para analisar código fonte Java, nas perspectivas identificadas em b), c) e d).
6 - Implementar uma ferramenta que permita gerar relatórios automáticos, baseado na(s) metodologia(s) definida(s) no ponto anterior.
Nota: A auditoria de código fonte deverá consistir na avaliação do código fonte, de modo a obter um relatório (o mais automático possível) que nos possa indicar como se posiciona
o código avaliado perante as várias métricas das ferramentas de análise utilizadas, no que respeita a legibilidade, qualidade, reutilização, manutenção, segurança, safety,
performance, entre outras. Essa relatório será depois passível de ser utilizado pelo auditor, como evidência para propor melhorias ao código fonte.
Recently, we have proposed a validation framework to check the consistency of such programming rules, for the particular case of the Java programming language: first, the Java meta-model used by Semmle is encoded in the formal modeling language Alloy; this formal meta-model is then enriched with facts capturing the semantic details of Java; the .QL queries are then translated into Alloy predicates and the Alloy SAT-based analyzer is used to check their consistency or other relevant properties.
The objective of this MSc thesis is to make this framework fully
operational:
- The formal Java meta-model is still very incomplete: it must be
enriched with facts that capture most of the details of the Java
language specification.
- The existing translator between .QL and Alloy is a mere prototype
that must be extended to cover most of the query language.
- The Alloy instances can be quite difficult to understand: it is
necessary to develop a pretty printer that shows them as actual Java
code.
- All these components should be deployed in a user friendly Eclipse
plug-in fully integrated with Semmle.
Although Alloy is reaching a mature state as a modeling language, considerable work is still needed to unleash its full potential. One of the problems is that the Alloy analyzer only performs verification within a bounded scope. This is acceptable for most applications, since errors often have small counter-examples. However, if we expect to benefit from Alloy in the development of safety-critical systems, we need to complement this lightweight approach with other formal verification methods.
The research team where this project will be developed has a large expertise in reasoning about formal models using the point-free relational calculus. Since Alloy also shares this "everything is a relation" lemma, we believe this is the ideal semantic framework for reasoning about its logic properties. We are currently in the process of developing an Extended Static Checking (ESC) tool for automatic reasoning about point-free relational models. The objctive of this MSc thesis is presiselly to finish the development of this tool, and tailor it to the specifics of Alloy: a translator from (pointwise) logic formulae with quantifiers to the point-free relational algebra must be developed, together with proof tactics for dealing with typical Alloy specification patterns.
The objective of this MSc thesis is to make this framework fully operational. First, we need to extend the fragment of Alloy covered by the aforementioned database constraints. Second, we need to automate the generation of the object-relational mapping code that links the application layer to the underlying database. Third, we must settle on a strategy to translate the pre- and post-conditions that specify the operations in Alloy. In principle this translation will relly on the design-by-contract methodology, with Java methods being annotated with the corresponding JML pre- and post-conditions.