
bb5ee0ce3f8123597cb53bad0f425193.ppt
- Количество слайдов: 43
Métodos Formais em Engenharia de Software Introdução João Pascoal Faria jpf@fe. up. pt www. fe. up. pt/~jpf Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 1
Índice n O que são métodos formais n Especificação, refinamento, implementação e verificação n n n Importância e aplicabilidade dos métodos formais no desenvolvimento de software Métodos Formais e Engenharia de Software Modelos de ciclo de vida e processos de desenvolvimento de software incorporando métodos formais n Relação com UML: modelos visuais, formais, executáveis e traduzíveis n Classificação de métodos formais n Exemplos de especificação formal n Exemplos de verificação formal n Model-checking n Teste baseado em especificações / modelos formais Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 2
O que são métodos formais n Mathematically based development methods Software Engineering Body of Knowledge, IEEE Computer Society, 2001 n Mathematically-based development languages, techniques, and tools for specifying and verifying software and hardware systems Formal Methods: State of the Art and Future Directions, Edmund M. Clarke, Jeannette M. Wing (Carnegie Mellon University), ACM Computing Surveys, 1996 n Approaches to software design and construction that employ mathematics to achieve higher levels of quality Computing Curricula – Software Engineering, ACM + IEEE Computer Society, n Collection of techniques based on mathematical representation and analysis of software Ian Sommerville, Software Engineering Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 3
O que são métodos formais n n Método Formal (MF) = Linguagem de Especificação Formal + Raciocínio Formal As técnicas são suportadas por • Matemática precisa • Ferramentas de análise poderosas (p/ raciocínio / verificação formal) n Constituem um mecanismo rigoroso e efectivo para modelação, síntese e análise de sistemas modelação síntese Especificação Implementação Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 4
Especificação, refinamento, implementação e verificação Necessidades, expectativas, requisitos informais validação Especificação 1 verificação refinamento Especificação 2 verificação … refinamento Especificação N verificação tradução Onde acaba um e começa outro? Implementação 1 verificação … refinamento Implementação M Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 5
Importância e aplicabilidade dos métodos formais Porque é que os métodos formais são necessários? n "TYPICAL RATIONALE: Software is bad (P 1). Software differs from physical systems in at least two ways (P 2): software is discontinuous (P 3), and software is complex (P 4). Software is complex (P 4), and complexity results in design flaws (P 5); therefore, software has design flaws (P 6). Design flaws must be handled (P 7). The three ways to handle design flaws are testing, design diversity, and fault avoidance (P 8). Because software is discontinuous (P 3), testing is inadequate (P 9). Also, because software is discontinuous (P 3), design diversity is inadequate (P 10). Because there are only three ways to handle design flaws (P 8), and the other two are inadequate (P 9, P 10), fault avoidance must be used to handle design flaws (P 11). Because formal methods are the most rigorous fault avoidance method (P 12), and the greater the rigor, the more promising the method (P 13), formal methods are the most promising fault avoidance method (P 14). Because software has design flaws (P 6), and design flaws must be handled (P 7), and fault avoidance methods must be used to handle design flaws (P 11), and formal methods are the most promising of these methods (P 14), software engineers should use appropriate formal methods (P 15). " Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 6
Importância e aplicabilidade dos métodos formais Porque é que os métodos formais são necessários? n "REVISED RATIONALE: Software engineers strive to be true engineers (Q 1); true engineers use appropriate mathematics (Q 2); therefore, software engineers should use appropriate mathematics (Q 3). Thus, given that formal methods is the mathematics of software (Q 4), software engineers should use appropriate formal methods (Q 5). " In C. Michael Holloway, Why Engineers Should Consider Formal Methods, 16 th AIAA/IEEE Digital Avionics Systems Conference, Irvine, California , October, 1997 (http: //techreports. larc. nasa. gov/ltrs/PDF/1997/mtg/NASA 97 -16 dasc-cmh. pdf) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 7
Importância e aplicabilidade dos métodos formais n n "The principal benefits of formal methods are in reducing the number of errors in systems so their main area of applicability is critical systems" (Ian Sommerville) Types of critical systems: • Safety–critical system – a system whose failure may result in injury, loss of life or major environment damage - e. g. an insulin delivery system • Mission-critical system – a system whose failure may result in the failure of some goal-directed activity - e. g. a navigational system for a space aircraft • Business-critical system – a system whose failure may result in the failure of the business using the system - e. g. a customer account system in a bank - Exemplo: Colocação de Professores (Ian Sommerville) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 8
Importância e aplicabilidade dos métodos formais n "A major goal of software engineering is to enable developers to construct systems that operate reliably despite its complexity. One way of achieving this goal is by using formal methods. (…) Use of formal methods does not a priori guarantee correctness. However, they can greatly increase our understanding of a system by revealing inconsistencies, ambiguities and incompletenesses that might otherwise go undetected. " (Edmund M. Clarke, Jeannette M. Wing) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 9
Importância e aplicabilidade dos métodos formais Expectations about formal methods n n The rigour and detailed analysis that are an essential part of formal methods are expected to lead to programs with fewer errors and that are more suited to user’s needs Formal specifications are precise and unambiguous. They remove areas of doubt in a specification Formal specification forces an analysis of the system requirements at an early stage. Incompleteness and inconsistencies can be discovered and resolved. This reduces requirements errors. Correcting errors at this stage is cheaper than modifying a delivered system. (Ian Sommerville) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 10
Importância e aplicabilidade dos métodos formais "Lightweight" formal methods n Traditionally, formal (i. e. , mathematical) software development methods have been promoted as the only approach that can guarantee the absence of certain classes of errors. By specifying software behavior formally, rigorous proofs of its properties can be developed. But the great expense of these methods has confined their use to a handful of high-security or safety critical systems. “Lightweight” methods may involve both greater automation of formal analysis, and more focused application of formal techniques. As a result they can be cost effective for a broad range of problems. • Practical Application of Formal Methods in Modeling and Simulation, D. Richard Kuhn, National Institute of Standards and Technology (USA), Dan Craigen, Mark Saaltink, ORA Canada Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 11
Importância e aplicabilidade dos métodos formais "Lightweight" formal methods n Métodos formais pesados: • provas formais • refinamento n Métodos formais leves: • especificação formal • model-checking • testes baseados em especificações formais n Em vez de querer provar que o software está correcto (o que em geral não é cost-effective), focar na prevenção de defeitos através da escrita de especificações formais que ajudam a detectar e resolver ambiguidades, omissões e inconsistências desde cedo, e na utilização de técnicas de verificação mais automáticas, ainda que de âmbito limitado (model-checking, teste) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 12
Importância e aplicabilidade dos métodos formais Casos de aplicação Exemplo português: colocação de professores. http: //www. atxsoftware. com/? se c=article&id=680 Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 13
Métodos Formais e Engenharia de Software Engineering Body of Knowledge (SWEBOK) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 14
Métodos Formais e Engenharia de Software Engineering Body of Knowledge (SWEBOK) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 15
Métodos Formais e Engenharia de Software SWEBOK: Software Methods n A. Heuristic methods - Includes: • • n Structured methods Data-oriented methods Object-oriented methods Domain-specific methods (specialized methods for developing systems that involve real-time, safety or security aspects) B. Formal methods - Mathematically based development methods. Topics to address: • Specification languages & notations - specification languages are commonly classified as model-oriented, property-oriented or behavior-oriented • Refinement - deals with how the method refines (or transforms) the specification into a form that is closer to the desired final form of an executable program • Verification/proving properties - covers the verification properties that are specific to the formal approach and covers both theorem proving and model checking. n C. Prototyping methods - Methods involving software prototyping. Topics to address: • Styles - The topic of prototyping styles identifies the different approaches: throwaway, evolutionary and the executable specification. • Prototyping target - Example targets of a prototyping method may be requirements, architectural design or the user interface. • Evaluation techniques - This topic covers how the results of a prototype exercise are used. Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 16
Métodos Formais e Engenharia de Software Computing Curriculum - Software Engineering, 2004 n Disciplina "core": n SE 313 Formal Methods in Software Engineering: n n Course Description: Review of mathematical foundations formal methods. Formal languages and techniques for specification and design (formal modeling), including specifying syntax using grammars and finite state machines. Analysis and verification of specifications and designs. Use of assertions and proofs. Automated program and design transformation. Learning objectives: Upon completion of this course, students will have the ability to: • Create mathematically precise specifications and designs using languages such as OCL, Z, etc. • Analyze the properties of formal specifications and designs • Use tools to transform specifications and design Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 17
Modelos de ciclo de vida e processos de desenvolvimento de software incorporando métodos formais Modelo mais extremo. . . (refinements) (formal verification) Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 18
Modelos visuais, formais, executáveis e traduzíveis Modelos visuais (semi-formais) n Consensual e prática cada vez mais corrente: • modelação visual (semi-formal) com diagramas UML durante as fases de análise e especificação de requisitos, desenho de alto nível (arquitectura) e desenho detalhado • geração de algum código (Java, C#, SQL, XSD, etc. ) a partir de UML e vice-versa - normalmente esqueletos de código, e não código completamente funcional n Modelos visuais são muito úteis para compreender e visualizar um sistema Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 19
Modelos visuais, formais, executáveis e traduzíveis Dos modelos visuais aos modelos formais n É possível enriquecer os modelos visuais (semi-formais) com especificações formais de - restrições (por invariantes) - semântica de operações (por pré e pós-condições) - aspectos de concorrência n n n Obtém-se um modelo formal que funciona como especificação completa, rigorosa (sem ambiguidades nem inconsistências) e verificável Formal não quer dizer executável Modelos formais são importantes porque a análise detalhada e o rigor necessários à sua construção permitem prevenir e detectar problemas mais cedo, quando a sua correcção é menos dispendiosa Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 20
Modelos visuais, formais, executáveis e traduzíveis Dos modelos visuais aos modelos executáveis n n É possível enriquecer os modelos visuais com especificações do corpo algorítmico de operações (e actividades) em linguagens de acções de alto nível Obtém-se um modelo executável (com a ajuda de ferramentas) Modelos executáveis são importantes para efeito de teste e validação precoce do sistema (ainda na forma de modelo) Executável não quer dizer optimizado Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 21
Modelos visuais, formais, executáveis e traduzíveis Dos modelos visuais aos modelos traduzíveis n n n É de esperar que os modelos executáveis sejam também traduzíveis (com a ajuda de ferramentas) para uma linguagem de implementação-alvo (Java, C++, C#, . . . ) Geração automática de código completamente funcional e não só esqueletos de classes a partir de modelos de alto nível Particularidades das linguagens, tecnologias e plataformas-alvo são embebidas nos geradores (MDA-Model-Driven-Architecture) n Aumento de produtividade n Acabam-se os programadores? n Não! Apenas se programa a um nível mais abstracto, e separa-se melhor o domínio do problema das tecnologias de implementação! Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 22
Modelos visuais, formais, executáveis e traduzíveis n n n Que solução integrada? Em torno de UML têm surgido linguagens que permitem criar modelos formais - caso de OCL (Object Constraint Language) - e modelos executáveis e traduzíveis - caso de XTUML - mas ainda não de forma perfeitamente integrada Em contrapartida, o VDM++ é uma linguagem de especificação formal orientada por objectos que permite criar modelos formais, executáveis e traduzíveis, sendo suportada por ferramentas (VDMTools) que permitem sincronizar com Rational Rose (modelação visual em UML), executar os modelos e gerar código Java e C++ Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 23
Classificação de métodos formais n Orientados a Modelos • Sistema especificado em termos de um modelo de dados/estado, que é construído usando construções matemáticas como conjuntos e sequências, e de operações sobre esse estado/dados • VDM, Z, VDM++, Object Z, . . . • Particularmente adequadas para especificar sistemas de informação n Orientados a Propriedades • Sistema especificado em termos das suas operações e das relações entre essas operações • Algébricas – definem operações através de uma colecção de relações de equivalência (axiomas equacionais) - Obj, Larch, . . . • Axiomáticas – definem operações através de predicados da lógica de primeira ordem - Larch, . . . • Particularmente adequadas para especificar tipos de dados abstractos n Orientados a Comportamento • Sistema especificado em termos de sequências possíveis de estados em vez de tipos de dados - Petri Nets, CSP, autómatos de input/output, statecharts, lógica temporal. . . • Particularmente adequadas para especificar sistemas concorrentes Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 24
Exemplo de especificação formal em OBJ Spec: Stack; Extend Nat by Sorts: Stack; Operations: newstack: Stack push: Nat Stack pop: Stack top: Stack Nat Variables: s: Stack; n: Nat Axioms: pop(newstack) = newstack; top(newstack) = zero; pop(push(n, s)) = s; top(push(n, s)) = n; Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 25
Exemplo de especificação formal em OBJ n n Uma stack é sempre representada por uma expressão de construção push(3, push(2, push(1, newstack))) Axiomas permitem simplificar/avaliar expressões, top(push(2, push(1, newstack)))) = = top(push(1, newstack)) =1 Mais abstracta: especifica semântica de operações por axiomas, sem necessidade de escolher uma representação de dados/estado interna (cf. noção de ADT) Mas é mais difícil saber quando é que a especificação está completa! Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 26
Exemplo de especificação formal em VDM++ class Stack instance variables elems : seq of int : = []; operations Stack () Operações definidas implicitamente por précondições e póscondições. Versão mais abstracta, mas não executável (neste caso seria trivial, mas ver caso de quicksort)! post elems = []; Push (i: int) post stack = [i] ^ ~elems; Pop () pre elems <> [] post elems = tl ~elems; Top () res: int pre elems <> [] post res = hd elems; end Stack Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 27
Exemplo de especificação formal em VDM++ instance variables elems : seq of int : = []; Escolhe-se uma representação (modelo) do estado baseada em construções matemáticas como conjuntos e sequências Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 28
Exemplo de especificação formal em VDM++ Pop () Pré-condição: condição nos argumentos de chamada e estado inicial do objecto a que tem de obedecer qualquer chamada válida. pre elems <> [] especificam semântica post elems = tl ~elems; tail Pós-condição: relaciona resultado da operação e estado final do objecto com argumentos de chamada e estado inicial Valor antigo da variável de instância Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 29
Exemplo de especificação formal em VDM++ Stack de capacidade limitada, para ilustrar invariantes. . . class FStack instance variables elems : seq of int : = []; capacity: nat; inv len elems <= capacity; Indica variáveis de instância modificadas (útil para prova) operations FStack (c: nat) post elems = [] and capacity = c; Push (i: int) ext wr elems pre len elems < capacity post elems = [i] ^ ~elems; Pop () pre elems <> [] post elems = tl ~elems; Top () res : int pre elems <> [] post res = hd elems; end Stack Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 30
Exemplo de especificação formal em VDM++ inv len elems <= capacity; Invariante: - restringe os estados válidos das variáveis de instância - inicialização e pós-condições devem estabelecer/preservar invariante Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 31
Exemplo de especificação formal em VDM++ (OO) Acrescenta corpo algorítmico (neste caso trivial) para obter especificação executável! Versão mais concreta! class Stack instance variables elems : seq of int : = []; operations Stack () == elems : = [] post elems = []; Push (i: int) == elems : = [i] ^ elems post stack = [i] ^ ~elems; Pop () == elems : = tl elems pre elems <> [] post elems = tl ~elems; Top () res: int == return hd elems pre elems <> [] post res = hd elems; end Stack Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 32
Exemplo de especificação formal em VDM++ Necessário para executar functions quicksort(s: seq of nat) res: seq of nat == cases s: [] -> [], [x] -> [x], Corpo [x, y] -> if x < y then [x, y] else [y, x], algorítmico -^[x]^- -> quicksort ([y | y in set elems s & y < x]) ^ [x] ^ quicksort ([y | y in set elems s & y > x]) end Pré-condição pre no_dups(s) Pós-condição post sorted(res) and same_elems(s, res); sorted(s: seq of nat) res : bool == forall i, j in set inds s & i < j => s[i] <= s[j]; Não é suficiente same_elems(s: seq of nat, t: seq of nat) res : bool == elems s = elems t; para executar, mas é suficiente no_dups(s: seq of nat) res: bool == forall i, j in set inds s & i <> j => s[i] <> s[j]; para especificar objectivo Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 33
Exemplo de especificação formal em OCL n OCL – Object Constraint Language, faz parte da norma UML Diagrama de classes (semi-formal): FStack - elems: Seq(Integer) - capacity: Integer + + FStack(c: Integer) Push(x: Integer) Pop() Top(): Integer Definição de invariantes, pré-condições e pós-condições em OCL (formal): context FStack inv: elems->size() <= capacity; -- a capacidade não pode ser negativa context FStack inv: informal capacity >= 0; -- coloca um elemento no topo da stack context FStack: : Push(x : Integer) pre: elems->size() < capacity post: elems = elems@pre->prepend(x) OCL permite especificar mas não executar as operações, mas a norma UML inclui também uma linguagem de acções de alto nível que pode ser usada para exprimir o corpo algorítmico Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 34
Exemplo de especificação formal em VDM-SL ou VDM++ com tipos e funções types Stack = seq of int; functions new. Stack () res: Stack = []; Push (i: int, s: Stack) res : Stack == [i] ^ s; Pop (s: Stack) res: Stack == tl s pre s <> [] Top (s: Stack) res: int == hd s pre s <> []; Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 35
Exemplo de especificação formal em CSP envia a mensagem "Empty. Stack. Expression" pelo canal "top" e depois comporta-se como Empty. Stack = Empty. Stack processos Empty. Stack = top! Empty. Stack. Exception Empty. Stack push? x One. Elem. Stack(x); Empty. Stack "ou" Mais operacional! pop top push One. Elem. Stack(x) = top! x One. Elem. Stack(x) pop! x Skip push? y One. Elem. Stack(y); One. Elem. Stack(x) recebe um valor (mensagem) para x pelo canal "push" e depois comporta-se como a composição sequencial dos processos One. Elem. Stack(x) e Empty. Stack Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 36
Exemplo de verificação formal n A especificação funcional da Stack em VDM++ ou VDM-SL satisfaz os axiomas expressos em OBJ? • s: Stack, i Z, pop(push(i, s)) = s • s: Stack, i Z, pop([i] ^ s) = s (pela definição de push) • s: Stack, i Z, tl ([i] ^ s) = s (pela definição de pop, aplicável sempre porque pré-condição é satisfeita, i. e. , [i] ^ s <> []) • s: Stack, i Z, s = s (pelas propriedades de operações com sequências) • true n Ou para outras propriedades de alto nível. . . Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 37
Exemplo de verificação formal n As operações preservam os invariantes (ex: FStack. Push)? • inv(s 1) pre_Push(s 1, x) post_Push(s 1, s 2, x) inv(s 2) • (len s 1. elems <= s 1. capacity) (len s 1. elems < s 1. capacity) (s 2. elems = [x] ^ s 1. elems) (len s 2. elems <= s 2. capacity) (substituindo) • (len s 1. elems < s 1. capacity) (s 2. elems = [x] ^ s 1. elems) (len s 2. elems <= s 2. capacity) (eliminado termo implicado por outro na conjunção) • (len s 1. elems < s 1. capacity) (s 2. elems = [x] ^ s 1. elems) (len s 2. elems <= s 1. capacity) (sabendo-se que FStack só modifica elems e não capacity) • (len s 1. elems < s 1. capacity) (len ([x] ^ s 1. elems) <= s 1. capacity) (substituindo) • (len s 1. elems < s 1. capacity) (len s 1. elems + 1 <= s 1. capacity) (aplicando propriedades de operações com sequências) • (len s 1. elems < s 1. capacity) • true n Os construtores estabelecem os invariantes (ex: FStack)? • post_FStack(c, s) inv(s)? n "Proof obligations" : garantem consistência interna do modelo Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 38
Exemplo de verificação formal n O algoritmo está correcto, isto é, termina e garante a pós-condição, supondo que a pré-condição se verifica? n Mesmo que provar que programa está correcto n Triplo de Hoare: {Pre} Prog {Post} n Método • 1º) Anda-se da pós-condição para trás, obtendo-se a pré-condição mais fraca (weakest pre-condition) wp(Prog, Post) • 2º) Verifica-se que Pre wp(Prog, Post) n Exemplo para Push: • wp(elems : = [x] ^ elems, elems = [x] ^ ~elems) = [x] ^ ~elems (usando regra para a atribuição wp(a: =E, Post(a, b, c)) = Post(E, b, c)) = true • len elems < capacity true é sempre verdade Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 39
Model-checking Uma técnica automática que, dados um modelo de estados finito de um sistema e uma propriedade lógica (normalmente expressa em lógica temporal), verifica sistematicamente se a propriedade se verifica naquele modelo. S⊨P Construção do modelo que descreve o sistema, S. Formulação das propriedades, P. Verificar a especificação através de cálculo/algoritmo. Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 40
Teste baseado em especificações / modelos formais Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 41
Teste baseado em especificações / modelos formais Model Provides expected results for Generates User Info Test Cases Are run by Test Oracle Pass Fail Provides actual results for Implementation Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 42
Referências e leituras adicionais n n n "Formal Methods: State of the Art and Future Directions", Edmund M. Clarke, Jeannette M. Wing (Carnegie Mellon University), ACM Computing Surveys, vol. 28, no. 4, dec. 1996 (http: //www. cs. cmu. edu/afs/cs/project/calder/www/acm. html) Software Engineering, Ian Sommerville, 6ª edição, capítulo 9 D. Jackson and J. Wing, "Lightweight formal methods, " IEEE Computer, Apr. 1996. n http: //www. swebok. org/ n http: //shemesh. larc. nasa. gov/fm/index. html n http: //vl. fmnet. info/ (Formal methods virtual library) n www. uml. org – especificações e recursos sobre UML, OCL, etc. Métodos Formais em Engenharia de Software, João Pascoal Faria, 2005 43