• Nenhum resultado encontrado

Geração mecanizada de abstrações seguras para especificações CSP

N/A
N/A
Protected

Academic year: 2021

Share "Geração mecanizada de abstrações seguras para especificações CSP"

Copied!
106
0
0

Texto

(1)Universidade Federal de Pernambuco Centro de Inform´atica. P´os-gradua¸c˜ao em Ciˆencia da Computa¸c˜ao. ˜ MECANIZADA DE GERAC ¸ AO ˜ ABSTRAC ¸ OES SEGURAS PARA ˜ ESPECIFICAC ¸ OES CSP Adriana Carla Damasceno ˜ DE MESTRADO DISSERTAC ¸ AO. Recife 29 de maio de 2008.

(2)

(3) Universidade Federal de Pernambuco Centro de Inform´atica. Adriana Carla Damasceno ˜ MECANIZADA DE ABSTRAC ˜ GERAC ¸ AO ¸ OES SEGURAS PARA ˜ ESPECIFICAC ¸ OES CSP. Trabalho apresentado ao Programa de P´ os-gradua¸ c˜ ao em Ciˆ encia da Computa¸ c˜ ao do Centro de Inform´ atica da Universidade Federal de Pernambuco como requisito parcial para obten¸ c˜ ao do grau de. Mestre em Ciˆ encia da Com-. puta¸ c˜ ao.. Orientador: Prof. Dr. Alexandre Cabral Mota. Recife 29 de maio de 2008.

(4) Damasceno, Adriana Carla Geração mecanizada de abstrações seguras para especificações CSP / Adriana Carla Damasceno – Recife: O Autor, 2008. xix, 83 p. : il., fig., tab. Dissertação (mestrado) – Universidade Federal de Pernambuco. CIn. Ciência da Computação, 2008. Inclui bibliografia. 1. Engenharia de software. I. Título. 005.1. CDD (22.ed.). MEI2008-076.

(5) Aos meus pais, que sempre foram meu porto seguro..

(6)

(7) AGRADECIMENTOS Aos meus pais, Gloria e Damasceno, por me darem todo o suporte emocional e financeiro que puderam durante toda a minha vida. Ao meu irm˜ao Juan Damasceno, por me esclarecer d´ uvidas sobre a linguagem de programa¸c˜ao Java, necess´aria para elabora¸c˜ao de projetos das disciplinas, e por sempre me apoiar nos momentos de desafio. Aos amigos “velhos”de Jacum˜a, Luziene, Otac´ılio e aos “intrometidos”que sempre passam por l´a. Sem essas pessoas, n˜ao seria poss´ıvel minha fam´ılia ser t˜ao maravilhosa como ´e. ` familia Calumbi, que considero como meus “parentes de cora¸ca˜o”, por tanta bonA dade, preocupa¸ca˜o, aten¸ca˜o e desprendimento. ` Maria C´elia e Formiga, que sempre me mostraram o qu˜ao digno ´e o of´ıcio do ensino, A sendo em grande parte respons´aveis pela minha decis˜ao em cursar mestrado. ` colegas de apartamento Josilene Aires, e Roberta Queiroz, pelo companheirismo e As coopera¸ca˜o. Aos amigos do CIn, Marcos D´osea, Juliana Arruda, Rafael Duarte, M´arcio Ribeiro, Rodrigo Bonif´acio, Carlos Pontual e Leopoldo Motta pelo conv´ıvio di´ario, paciˆencia, aten¸c˜ao e amizade constantes. Finalmente, gostaria de agradecer a Alexandre Mota e Adalberto Farias, por tantos conselhos em rela¸c˜ao ao desenvolvimento e escrita da disserta¸ca˜o, assim como incentivo para que ela fosse conclu´ıda. Mais do que isso, gostaria de agradecer a Alexandre Mota por toda a paciˆencia e inje¸co˜es de ˆanimo ao longo da execu¸ca˜o desse projeto.. vii.

(8)

(9) A verdadeira medida de um homem n˜ ao ´ e como ele se comporta em momentos de conforto e conveniˆ encia, mas como ele se mant´ em em tempos de controv´ ersia e desafio. — MARTIN LUTHER KING JR.

(10)

(11) RESUMO Com a crescente demanda por diminui¸c˜ao de custos no desenvolvimento de software, h´a a necessidade de que os programas possam ser constru´ıdos de acordo com uma especifica¸ca˜o concordante com os requisitos do cliente. Nesse sentido, a especifica¸ca˜o formal pode ser utilizada para representar os requisitos do sistema. Uma vez que a especifica¸ca˜o formal foi desenvolvida, ela pode ser usada como base para investigar determinadas propriedades atrav´es de um verificador de modelos. Ele aceita modelos e propriedades que o sistema final deve satisfazer. Ent˜ao, a ferramenta gera uma resposta positiva se um dado modelo satisfaz uma dada especifica¸c˜ao ou um contra-exemplo, em caso negativo. O contra-exemplo detalha a situa¸ca˜o em que o modelo n˜ao foi satisfeito. Mas na maioria das vezes, problemas do mundo real n˜ao podem adotar essa abordagem porque usam dom´ınios infinitos (levando ao problema da explos˜ao de estados). Como forma de resolver essa quest˜ao, t´ecnicas de abstra¸c˜ao de dados s˜ao empregadas para gerar especifica¸co˜es abstratas finitas a partir de sistemas infinitos concretos. A linguagem de especifica¸c˜ao usada nesse trabalho ´e CSP (Communicating Sequential Processes). Ela ´e uma linguagem formal que ´e usada para descrever padr˜oes de intera¸c˜ao em sistemas concorrentes. Uma das t´ecnicas de abstra¸ca˜o para especifica¸c˜oes poss´ıveis para essa linguagem ´e a abstra¸ca˜o segura de dados. Essa abstra¸ca˜o visa gerar um modelo abstrato a partir de um equivalente concreto que conserve as propriedades do sistema com respeito ao comportamento (modelo de traces) atrav´es da escolha de um dado do dom´ınio abstrato para cada subconjunto do dom´ınio concreto. O objetivo desse trabalho ´e propor um algoritmo para gera¸ca˜o mecanizada de abstra¸c˜oes seguras para sistemas CSP seq¨ uenciais com recurs˜ao simples. A especifica¸ca˜o do algoritmo ´e apresentada usando o paradigma funcional e elementos da linguagem Z, com a introdu¸c˜ao da estrat´egia atrav´es de exemplos. No estudo de caso, o software Mathematica ´e usado para instanciar os valores das vari´aveis e realizar a simplifica¸ca˜o dos predicados constru´ıdos a partir desse algoritmo. Com esse trabalho, ´e poss´ıvel gerar abstra¸c˜oes seguras de forma mecˆanica, e por conseq¨ uˆencia verificar o comportamento de modelos infinitos. Ademais, a gera¸c˜ao de dados de testes autom´atica tamb´em ´e beneficiada, j´a que com o dom´ınio abstrato dos dados ´e poss´ıvel percorrer todos os caminhos do sistema, gerando 100% de cobertura do modelo. Esse esfor¸co ´e justificado pela importˆancia que a fase de testes tem para a qualidade do software. Estudos pr´evios mostraram que essa fase demanda mais de 50% do custo de seu desenvolvimento, e uma pesquisa detalhada realizada nos Estados Unidos quantifica os altos impactos econˆomicos de uma infra-estrutura de software inadequada. Palavras-chave: Abstra¸c˜ao de dados, gera¸ca˜o de dados de testes, CSP xi.

(12)

(13) ABSTRACT The need for minimizing costs in software development demands programs to be built according to a specification in agreement with costumer requirements. In this way, a formal specification can be used to represent system requirements. Once the formal specification is developed, it can be used to support the analysis of certain properties through a model checker. It accepts models and properties that the final system must fulfill. Therefore, this kind of tool generates a positive answer if a certain model fulfills a specification or a counter-example, if not. The counter-example details the situation in which the model was not satisfied. However, most of the times problems from real world cannot be adopted by this approach, as they use infinite domains (leading to state explosion problem). As a way of solving this issue, data abstraction techniques are employed to generate finite abstract specifications from concrete infinite systems. The specification language used in this work is CSP (Communicating Sequential Processes). It is a formal language used to describe interaction patterns in concurrent systems. One of the possible abstractions techniques for this language specification is safe abstraction. This type of abstraction generates an abstract model from its concrete one, preserving system properties at behavior level (traces model), through the selection of one element from the abstract domain for each partition in the concrete domain. The purpose of this work is to present an algorithm to mechanically generate safe abstractions for sequential CSP systems with simple recursion. The specification is presented using the functional paradigm and elements from the Z language, introducing the strategy with examples. In the case study, the Mathematica software is used to instantiate variable values and perform predicate simplifications built from this algorithm. With the results of this work, it is possible to generate safe abstractions mechanically, and consequently verify the behavior of infinite systems, as well as generating a data set which can be applied to a system, performing all its paths with 100% code coverage. This effort is needed because test phase has many influence in software quality. Recent studies show that this phase demands more than 50% of the total software cost development, and a detailed research performed in United States quantifies the high economic impacts of a unsuitable software infrastructure. Keywords: Data abstraction, data test generation, CSP. xiii.

(14)

(15) ´ SUMARIO. Cap´ıtulo 1—Introdu¸c˜ ao 1.1. 1. Organiza¸ca˜o da Disserta¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 2—CSP 2.1 2.2. 2.3. 2.4 2.5 2.6. 7. Introdu¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sintaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Express˜oes . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1.1 Identificadores . . . . . . . . . . . . . . . . 2.2.1.2 Inteiros . . . . . . . . . . . . . . . . . . . . 2.2.1.3 Booleanos . . . . . . . . . . . . . . . . . . . 2.2.1.4 Conjuntos . . . . . . . . . . . . . . . . . . . 2.2.1.5 Seq¨ uˆencias . . . . . . . . . . . . . . . . . . 2.2.1.6 Tuplas . . . . . . . . . . . . . . . . . . . . . 2.2.2 Canais e Eventos . . . . . . . . . . . . . . . . . . . . 2.2.2.1 Tipos de Comunica¸c˜ao . . . . . . . . . . . . 2.2.3 Casamento de Padr˜oes . . . . . . . . . . . . . . . . . 2.2.4 Processos . . . . . . . . . . . . . . . . . . . . . . . . Semˆantica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Semˆantica Alg´ebrica . . . . . . . . . . . . . . . . . . 2.3.2 Semˆantica Operacional . . . . . . . . . . . . . . . . . 2.3.2.1 LTS e Firing Rules . . . . . . . . . . . . . . 2.3.3 Semˆantica Denotacional . . . . . . . . . . . . . . . . 2.3.3.1 O Modelo de Traces . . . . . . . . . . . . . Refinamento . . . . . . . . . . . . . . . . . . . . . . . . . . . Verifica¸ca˜o de Modelos e Suporte a Ferramentas para CSPM Considera¸co˜es Finais . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 3—Abstra¸c˜ ao de Dados e Gera¸c˜ ao de Dados de Teste 3.1 3.2 3.3. 4. ´ Abstra¸co˜es Segura e Otima para CSP . . . . . . . . . . Independˆencia de Dados . . . . . . . . . . . . . . . . . Gera¸ca˜o de Dados de Testes . . . . . . . . . . . . . . . 3.3.1 Gera¸ca˜o de Dados de Teste Est´atica e Dinˆamica 3.3.2 T´ecnicas de Gera¸c˜ao de Dados de Testes . . . . 3.3.2.1 Software Mathematica . . . . . . . . . 3.3.3 Sele¸ca˜o de Caminhos . . . . . . . . . . . . . . . xv. . . . . . . .. . . . . . . .. 7 8 8 8 8 8 9 9 9 9 10 10 11 13 13 14 14 16 16 17 17 18 19. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. 19 22 24 26 28 29 31.

(16) ´ SUMARIO. xvi. 3.4. 3.3.4 Desafios em Gera¸ca˜o de Dados de Teste . . . . . . . . . . . . . . . Considera¸co˜es Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 4—Gera¸c˜ ao Autom´ atica de Abstra¸c˜ ao Segura de Dados 4.1 4.2 4.3 4.4. Abstra¸ca˜o Segura: Estrat´egia de Obten¸ca˜o Abstra¸ca˜o Segura: Algoritmo . . . . . . . Abstra¸ca˜o Segura × Cobertura de Testes . Considera¸co˜es Finais . . . . . . . . . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. 37 . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. Cap´ıtulo 5—Estudo de Caso 5.1 5.2 5.3 5.4. Apresenta¸c˜ao do Problema . . . . . Especifica¸ca˜o do Problema . . . . . Aplica¸ca˜o da Estrat´egia . . . . . . 5.3.1 Passo-a-passo do Algoritmo Considera¸co˜es Finais . . . . . . . .. 37 55 60 61 63. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. Cap´ıtulo 6—Conclus˜ oes 6.1 6.2. 33 34. Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 63 64 65 65 71 73 74 75.

(17) LISTA DE FIGURAS. 2.1. Exemplos de LTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 15. 3.1 3.2 3.3 3.4 3.5 3.6 3.7. Arquitetura de um sistema de gera¸ca˜o de dados de teste [Edv99] C´odigo que troca dois inteiros e sua ´arvore de execu¸ca˜o [VPK04] Abordagem dinˆamica de gera¸c˜ao de dados de teste [Kap04] . . . Ambiente do software Mathematica . . . . . . . . . . . . . . . . Uso das fun¸c˜oes FindInstance e Reduce . . . . . . . . . . . . . Combina¸c˜ao de predicados para Branch coverage . . . . . . . . Hierarquia de crit´erios de controle de fluxo [VB06] . . . . . . . .. . . . . . . .. 25 27 28 30 31 33 34. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11. Fluxo para o Exemplo 4.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . LTSs para o Exemplo 4.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . Fluxos para o Exemplo 4.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . LTS para o Exemplo 4.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . Grafo de fluxos para o Exemplo 4.1.3 . . . . . . . . . . . . . . . . . . . . Mapeamento entre os dom´ınios concreto e abstrato para o exemplo 4.1.3 LTS para o Exemplo 4.1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . Grafo de fluxos para o Exemplo 4.1.4 . . . . . . . . . . . . . . . . . . . . LTS para o Exemplo 4.1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . Grafo de fluxos para o Exemplo 4.1.5 . . . . . . . . . . . . . . . . . . . . LTS para o Exemplo 4.1.5 . . . . . . . . . . . . . . . . . . . . . . . . . .. 38 40 41 42 43 45 46 47 50 51 55. 5.1. Grafo de fluxos para o processo Potencia’ . . . . . . . . . . . . . . . . .. 66. xvii. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . ..

(18)

(19) LISTA DE TABELAS. 3.1. Correspondˆencia entre operadores l´ogico-relacionais de CSP e Mathematica 30. 4.1 4.2 4.3 4.4. Combina¸c˜ao das guardas para o Exemplo 4.1.3 . . . . . . . . . . . . . . Combina¸c˜ao de predicados para o Caminho 1 no Exemplo 4.1.3 . . . . . Combina¸c˜ao de predicados para o Caminho 2 no Exemplo 4.1.3 . . . . . Combina¸c˜ao das guardas para descobrir parti¸co˜es no dom´ınio concreto do Exemplo 4.1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Combina¸c˜ao de predicados para o Caminho 1 no Exemplo 4.1.4 . . . . . 4.6 Combina¸c˜ao de predicados para os Caminhos 2 e 3 no Exemplo 4.1.4 . 4.7 Combina¸c˜ao das guardas para descobrir parti¸co˜es do dom´ınio concreto no Exemplo 4.1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8 Combina¸c˜ao de predicados para os Caminhos 2 e 3 no Exemplo 4.1.5 (parti¸c˜ao 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9 Combina¸c˜ao de predicados para o Caminho 1 no Exemplo 4.1.5 (parti¸c˜ao 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10 Combina¸ca˜o de predicados para os Caminhos 1 e 2 no Exemplo 4.1.5 (parti¸c˜oes 3 e 4) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 43 44 45. 5.1 5.2. 67. Combina¸c˜ao de guardas compat´ıveis para o processo Potencia’ . . . . . Combina¸c˜ao de guardas e resolu¸c˜ao de predicados usado o Mathematica para o processo Potencia’ . . . . . . . . . . . . . . . . . . . . . . . . . .. xix. 47 47 48 51 52 52 54. 68.

(20)

(21) CAP´ITULO 1. ˜ INTRODUC ¸ AO Com a crescente demanda por diminui¸c˜ao de custos no desenvolvimento de software, h´a a necessidade de que os programas possam ser constru´ıdos de acordo com uma especifica¸ca˜o concordante com os requisitos do cliente [vL00]. Al´em disso, a clareza e consistˆencia da especifica¸ca˜o devem ser atingidas como forma de reduzir os gastos oriundos de se encontrar erros em fases posteriores de um projeto. Nesse sentido, a especifica¸ca˜o formal pode ser utilizada para representar os requisitos do sistema. Ela ´e uma descri¸ca˜o matem´atica de software ou hardware que pode ser usada para desenvolver uma implementa¸ca˜o, descrevendo procedimentos e objetivos para as a¸co˜es do sistema [vL00]. O uso de formalismo durante a especifica¸ca˜o permite a elimina¸c˜ao de ambig¨ uidades, isto ´e, inconsistˆencias que apenas seriam detectadas mais tarde durante fases de implementa¸ca˜o e testes do ciclo de desenvolvimento de um sistema. Uma vez que a especifica¸ca˜o formal foi desenvolvida, ela pode ser usada como base para verificar determinadas propriedades. Essa verifica¸ca˜o pode ser realizada atrav´es do ser humano (provas matem´aticas) ou automatizadas (verificador de modelos e provador de teoremas). Um provador de teoremas ´e uma ferramenta que tenta produzir uma prova formal para um dado teorema a partir da descri¸c˜ao de um sistema, um conjunto de axiomas l´ogicos e um conjunto de regras de inferˆencia. Em geral, apesar de realizar muitas tarefas de forma autom´atica, este requer interven¸ca˜o humana em algumas delas. J´a o verificador de modelos investiga certas propriedades atrav´es da procura exaustiva em todos os poss´ıveis estados que o sistema pode assumir durante sua execu¸c˜ao [HJMS03]. Ele aceita modelos e propriedades que o sistema final deve satisfazer. Ent˜ao, a ferramenta gera uma resposta positiva se um dado modelo satisfaz uma dada especifica¸c˜ao ou um contra-exemplo, em caso negativo. O contra-exemplo detalha a situa¸ca˜o em que o modelo n˜ao foi satisfeito. Apesar de serem completamente autom´aticos, os verificadores de modelos necessitam de uma especifica¸c˜ao que gere um modelo finito a ser analisado. Por isso, muitos problemas do mundo real n˜ao podem ser usados, j´a que s˜ao baseados em dom´ınios infinitos (inteiros, por exemplo). Esse problema ´e conhecido como explos˜ao de estados e pode ser contornado atrav´es de diversas abordagens [CGJ+ 01]: • Algoritmos simb´olicos evitam a constru¸c˜ao de grafos para m´aquinas de estados finitos, representando-os atrav´es de l´ogica proposicional. O uso de BDDs (Binary Decision Diagrams — t´ecnica de redu¸ca˜o de uma tabela-verdade) [Bry92] tamb´em ´e contextualizado nesse cen´ario. • Limita¸ca˜o do verificador de modelos para expandir a m´aquina de estados criada at´e um n´ umero x de passos, verificando se um contra-exemplo ´e encontrado [McM03]. O 1.

(22) 2. ˜ INTRODUC ¸ AO. processo ´e repetido com valores maiores de x a cada itera¸ca˜o at´e todas as viola¸c˜oes poss´ıveis terem sido listadas. • Redu¸co˜es sim´etricas que induzem uma rela¸ca˜o equivalente no espa¸co de estados enquanto realizam a an´alise do espa¸co de estados em que seja poss´ıvel descartar um estado se o seu equivalente j´a foi explorado. • A abstra¸ca˜o de dados objetiva provar propriedades de um sistema observando apenas algumas de suas propriedades. O sistema abstrato passa a conservar algumas das propriedades do seu equivalente original. • Refinamentos de abstra¸co˜es guiadas a contra-exemplos come¸cam com uma abstra¸ca˜o imprecisa que ´e refinada iterativamente. Quando um contra-exemplo ´e encontrado, a ferramenta verifica se a abstra¸c˜ao ´e incompleta ou se esse ´e o resultado de um erro da especifica¸ca˜o. Se a abstra¸c˜ao for incompleta, isso ´e reportado ao usu´ario; caso contr´ario, o erro encontrado ´e usado para refinar a abstra¸c˜ao e o processo come¸ca novamente. • Independˆencia de dados [Wol86] permite que os dom´ınios de dados dos processos a serem analisados pelo verificador de modelos possam ser reduzidos, de forma a torn´a-los finitos. No entanto, condi¸co˜es sobre esses processos devem ser observadas, de forma a garantir a poss´ıvel redu¸ca˜o. Dentre essas abordagens, o uso de independˆencia de dados e algoritmos de abstra¸c˜ao baseados na teoria de interpreta¸ca˜o abstrata tˆem recebido muita aten¸ca˜o da comunidade acadˆemica relacionada `a verifica¸c˜ao de modelos [VHB+ 03]. A interpreta¸c˜ao abstrata [CC04] pode gerar especifica¸co˜es abstratas que conservem determinadas propriedades de sua especifica¸ca˜o concreta original. A id´eia b´asica ´e o uso de mapeamentos de elementos do dom´ınio concreto (dom´ınio real de um sistema) para seus equivalentes no dom´ınio abstrato. O verificador de modelos ent˜ao gera automaticamente o grafo de estados sobre os dados abstratos. A linguagem usada para especifica¸c˜ao neste trabalho ´e CSP (Communicating Sequential Processes) [Ros98]. Ela foi projetada para descrever padr˜oes de intera¸c˜oes em sistemas concorrentes. Decidiu-se usar CSP nesse trabalho por ser uma linguagem madura em sua ´area de atua¸ca˜o [Hoa78], possuir ferramentas de verifica¸c˜ao para propriedades de concorrˆencia, APIs Java que podem implementar sua especifica¸ca˜o [WM00] e esfor¸cos de sua combina¸c˜ao com v´arias outras linguagens formais, dando origem a Circus [WC02], CSP-OZ [Fis97] e CSP-Z [MS98], entre outras linguagens. A independˆencia de dados para CSP foi inicialmente proposta em [Laz98]. Este trabalho diz que um processo ´e independente de dados em rela¸ca˜o a um tipo quando as opera¸co˜es que ele pode realizar com seus valores nesse conjunto s˜ao entrada, c´opia e armazenamento, sa´ıda e testes de igualdade/desigualdade (Se¸c˜ao 3.2). Os tipos envolvidos nos processos a serem analisados s˜ao reduzidos a um dom´ınio finito de valores e ainda assim garantem que a propriedade a ser verificada no dom´ınio finito tenha o mesmo resultado que nos processos originais. Especificamente neste trabalho, a independˆencia de.

(23) ˜ INTRODUC ¸ AO. 3. dados ´e usada para justificar a substitui¸c˜ao de dom´ınios de vari´aveis que n˜ao influem no comportamento do sistema em um valor do dom´ınio concreto. Como qualquer outra linguagem de especifica¸ca˜o, CSP tamb´em pode modelar sistemas que possuem o problema da explos˜ao de estados. Dentre as abstra¸co˜es poss´ıveis para CSP, este trabalho usa a abstra¸c˜ao segura, apresentada em [FMS08]. A abstra¸c˜ao segura preserva o que o sistema pode fazer (modelo de traces), enquanto que a abstra¸ca˜o ´otima preserva tamb´em as recusas (modelos de falhas), detalhados na pr´oxima se¸ca˜o. No entanto, para situa¸c˜oes onde somente a seq¨ uˆencia de eventos que pode ser realizada ´e suficiente, a abstra¸ca˜o segura se torna uma alternativa bastante atraente. Ela conserva o sistema concreto sob o ponto de vista destes eventos. Portanto, todas as seq¨ uˆencias de a¸c˜oes que pertencem ao grafo simbolizador do sistema concreto tamb´em devem ser encontradas no grafo representante do dom´ınio abstrato. Diante deste panorama, o objetivo deste trabalho ´e propor um algoritmo para gera¸ca˜o mecanizada de abstra¸c˜oes seguras para sistemas CSP seq¨ uenciais com recurs˜ao simples. O algoritmo recebe o sistema de acordo com algumas restri¸c˜oes a serem explicadas no Cap´ıtulo 4 e retorna a rela¸ca˜o de abstra¸c˜ao resultante para as vari´aveis de comunica¸ca˜o e de dados presentes, assim como o sistema abstrato. A rela¸c˜ao que um sistema concreto tem com a sua vers˜ao abstrata segura tem forte rela¸c˜ao com testes de software. Uma vez que seja poss´ıvel analisar um sistema abstrato finito que conserve certas propriedades de seu equivalente concreto e infinito, as propriedades desse sistema podem ser observadas atrav´es do verificador de modelos. Al´em disso, os dados obtidos para as vari´aveis na abstra¸ca˜o sempre permitem que a ocorrˆencia de todas as seq¨ uˆencias de traces do sistema concreto do sistema sejam conservadas no sistema abstrato. Sendo assim, se esses dados forem inseridos no sistema, todos os caminhos podem ser exercitados, de forma a proporcionar 100% de cobertura de c´odigo em rela¸ca˜o a um dos crit´erios de cobertura descritos na literatura, conforme mostrado na Se¸ca˜o 4.3. O esfor¸co para encontrar dados de teste para cobertura de c´odigo ´e justificado pela importˆancia que a fase de testes tem para a qualidade do software. Estudos pr´evios mostraram que essa fase demanda mais de 50% do custo de seu desenvolvimento [Bei90], e uma pesquisa detalhada realizada nos Estados Unidos [Tas02] quantifica os altos impactos econˆomicos de uma infra-estrutura de software inadequada. Essa fase demanda muito esfor¸co, e ainda assim n˜ao ´e o bastante para provar a ausˆencia de falhas porque os testes s˜ao criados por humanos e a qualidade dos testes gerados como um todo depende da experiˆencia deles. Como se n˜ao bastasse, n˜ao ´e poss´ıvel atestar que um software est´a livre de erros [Mye04], pois n˜ao h´a como garantir que todos os cen´arios poss´ıveis foram testados. Com a gera¸ca˜o autom´atica dos dados de teste, a automa¸c˜ao de execu¸ca˜o de testes se torna uma alternativa bastante atraente para esse panorama, j´a que os testes autom´aticos podem ser executados com interven¸c˜ao humana muito menor do que em testes manuais. Isso evita que novos erros sejam introduzidos em documentos e execu¸co˜es de procedimentos de testes, por exemplo. Ademais, o custo demandando para dar suporte a um processo de testes se torna elevado, ent˜ao a automa¸c˜ao desse processo seria uma economia tanto de custo quanto de tempo. Podem ser citadas as seguintes contribui¸c˜oes realizadas por esse trabalho:.

(24) ˜ INTRODUC ¸ AO. 4. Adapta¸ c˜ ao da defini¸c˜ ao de abstra¸c˜ ao segura Uma adapta¸ca˜o defini¸ca˜o de abstra¸ca˜o segura, baseada na defini¸ca˜o apresentada no Cap´ıtulo 3, ´e apresentada, de forma a viabilizar a gera¸ca˜o de dados mecanizada. Estrat´ egia de obten¸c˜ ao de abstra¸co ˜es seguras Uma estrat´egia para obten¸ca˜o de abstra¸ca˜o segura baseada em satisfatibilidade de predicados ´e apresentada (Se¸ca˜o 4.1). Elabora¸c˜ ao de um algoritmo para gera¸c˜ ao de abstra¸co ˜es seguras Um algoritmo ´e proposto no Cap´ıtulo 4 com exemplos introdut´orios da estrat´egia (Se¸c˜ao 4.1) e sua especifica¸ca˜o em linguagem funcional ´e apresentada na Se¸ca˜o 4.2. Fornecimento de dados de testes para cobertura de 100% de modelo O conjunto abstrato definido para a abstra¸ca˜o segura pode ser usado como um conjunto de dados de testes que, se aplicados ao sistema, gera 100% de cobertura de modelo, como mostra a Se¸ca˜o 4.3. 1.1. ˜ DA DISSERTAC ˜ ORGANIZAC ¸ AO ¸ AO. O Cap´ıtulo 2 fornece uma introdu¸ca˜o `a linguagem CSP. A sintaxe da linguagem ´e explicada, mostrando seus tipos b´asicos, casamento de padr˜oes, conceito de processos e seus operadores b´asicos. A seguir, a semˆantica de CSP ´e discutida na Se¸c˜ao 2.3, atrav´es da caracteriza¸c˜ao de LTSs (Labelled Transition Systems) e o modelo de traces. Ent˜ao, as rela¸c˜oes de refinamento entre processos s˜ao discutidas na Se¸c˜ao 2.4 e um panorama geral de verifica¸ca˜o de modelos e suporte de ferramentas para essa linguagem ´e fornecido na Se¸c˜ao 2.5. O Cap´ıtulo 3 exibe a teoria de abstra¸c˜ao segura de dados sobre a qual este trabalho est´a fundamentado, com seu conceito e implica¸c˜oes (Se¸c˜ao 3.1). Ent˜ao, a independˆencia de dados ´e citada como forma de justificar o tratamento especial dado a determinadas vari´aveis durante a computa¸c˜ao do algoritmo (Se¸ca˜o 3.2). Na seq¨ uˆencia, alguns trabalhos que formam o estado da arte de gera¸ca˜o autom´atica de dados de testes s˜ao apresentados (Se¸c˜ao 3.3). O Cap´ıtulo 4 concentra a maior parte das contribui¸co˜es dadas por esse trabalho. Uma id´eia geral do algoritmo ´e criada atrav´es de exemplos que retratam diversas situa¸c˜oes a serem tratadas na Se¸c˜ao 4.1. A seguir, uma formaliza¸ca˜o do algoritmo em linguagem funcional ´e descrita (Se¸c˜ao 4.2) com estruturas de dados sendo definidas para que sejam manipuladas por ele. A teoria de independˆencia de dados mostrada no Cap´ıtulo 3 tamb´em ´e situada nesse contexto e uma nova defini¸c˜ao de abstra¸c˜ao segura ´e criada. O Cap´ıtulo 5 apresenta o estudo de caso para a estrat´egia mostrada no Cap´ıtulo 4. O problema da potencia¸ca˜o ´e codificado no paradigma imperativo e ent˜ao em CSP (Se¸c˜ao 5.2), e uma equivalˆencia entre as duas implementa¸co˜es ´e estabelecida. Depois, o algoritmo descrito no Cap´ıtulo 4 ´e usado para a gera¸ca˜o da abstra¸ca˜o segura desse problema (Se¸ca˜o 5.3.1), exibindo o resultado de cada fun¸c˜ao ao longo de sua execu¸c˜ao. Uma discuss˜ao sobre a rela¸ca˜o entre cobertura de modelo e abstra¸ca˜o segura tamb´em ´e lan¸cada na Se¸c˜ao 4.3..

(25) ˜ DA DISSERTAC ˜ 1.1 ORGANIZAC ¸ AO ¸ AO. 5. Finalmente, o Cap´ıtulo 6 mostra as considera¸co˜es finais da disserta¸ca˜o e apresenta os trabalhos relacionados e futuros (Se¸co˜es 6.1 e 6.2)..

(26)

(27) CAP´ITULO 2. CSP Este cap´ıtulo trata da introdu¸c˜ao `a nota¸c˜ao CSP (Se¸c˜ao 2.1), explicando sua sintaxe (Se¸c˜ao 2.2) e semˆantica (Se¸ca˜o 2.3). Al´em disso, ser´a dada a no¸c˜ao de refinamento na Se¸c˜ao 2.4 e uma introdu¸ca˜o a t´ecnica de verifica¸c˜ao de modelos (refinamentos) e ferramentas para seu suporte (Se¸ca˜o 2.5). 2.1. ˜ INTRODUC ¸ AO. CSP (Communicating Sequential Processes) ´e uma nota¸ca˜o para descrever sistemas concorrentes cujos processos componentes interagem entre si atrav´es de comunica¸c˜oes [Ros98]. A dificuldade no entendimento dessas intera¸c˜oes surge devido a diferentes componentes estarem em estados diferentes e independentes em um c´odigo paralelo, porque esse n´ umero cresce exponencialmente com o n´ umero de componentes e n˜ao linearmente como no c´odigo seq¨ uencial [Ros98]. Os processos s˜ao usados para capturar comportamento e s˜ao compostos por eventos, operadores e outros processos. Os processos s˜ao entidades auto-contidas com interfaces particulares e ´e atrav´es delas que h´a intera¸c˜ao com o ambiente (observador externo). Essa ´e uma vis˜ao composicional, j´a que se dois processos formam um sistema maior, esse ´e novamente uma entidade auto-contida. Um evento descreve um tipo particular de a¸c˜ao atˆomica que pode ser sofrida pelo processo. Descrita pela primeira vez em 1978 por C. R. Hoare [Hoa78], a nota¸ca˜o CSP evoluiu desde ent˜ao em certos aspectos. Roscoe [Ros98] propˆos ajustes `a teoria de CSP, particularmente no que diz respeito `a teoria de refinamento de processos e no suporte de ferramentas. A partir das adapta¸c˜oes propostas por Roscoe, surgiu a linguagem CSPM , que ´e a vers˜ao ASCII de CSP usada pelo verificador de modelos FDR [Sys05]. Em particular, esse cap´ıtulo trabalho introduz e usa CSPM ao inv´es de CSP. Essa nota¸c˜ao tem sido aplicada na ind´ ustria como uma ferramenta para especificar e verificar aspectos concorrentes de uma variedade de sistemas, como o processador T9000 [Bar95], sistemas de e-commerce seguros [HC02] e protocolos [BR02], sistemas em tempo real, seguran¸ca de computadores, protocolos de comunica¸c˜ao, tolerˆancia a falhas entre outros [Ros98]. Algumas propriedades cl´assicas de sistemas concorrentes s˜ao analisadas em sistemas CSP, como o deadlock, livelock e n˜ao-determinismo. Um sistema ´e n˜ao-determin´ıstico se ele pode se comportar de mais de uma maneira dado a mesma entrada. Determinado sistema est´a em deadlock se seus componentes n˜ao podem realizar qualquer progresso, geralmente porque um est´a esperando o outro. O livelock ´e similar ao anterior, exceto pelo fato de que os estados dos processos envolvidos no livelock sempre mudam em rela¸ca˜o aos outros, mas mesmo assim n˜ao progridem. Ent˜ao a situa¸ca˜o ´e tamb´em chamada de divergˆencia e ´e parecida com o que acontece em loops infinitos, onde n˜ao h´a intera¸c˜ao 7.

(28) 8. CSP. exterior com o ambiente. Assim, em um comportamento divergente, um processo realiza uma seq¨ uˆencia infinita de a¸co˜es internas que n˜ao podem ser vistas pelo ambiente. Nas se¸co˜es a seguir, apresentamos a linguagem CSPM em mais detalhes, iniciando por sua sintaxe. 2.2. SINTAXE. A nota¸ca˜o CSPM ´e a vers˜ao ASCII de CSP adaptada para interpreta¸c˜ao de m´aquina que analisa especifica¸co˜es dessa linguagem. CSPM pode ser vista como a integra¸ca˜o entre uma linguagem para capturar comportamentos e uma linguagem funcional (para modelar estruturas de dados). A parte funcional foi a grande contribui¸c˜ao de CSPM `a CSP. A sintaxe dessa linguagem ´e composta por express˜oes, tipos definidos pelo usu´ario e primitivos, identificadores, canais e eventos, assim como os processos e seus operadores. As express˜oes ser˜ao abordadas primeiro por se tratar da parte mais b´asica da nota¸ca˜o. 2.2.1. Express˜ oes. As express˜oes CSPM s˜ao compostas por identificadores e os tipos que operam com eles, como n´ umeros, seq¨ uˆencias, conjuntos, tuplas entre outros, vistos a seguir. Devido a limita¸c˜oes operacionais, CSPM n˜ao suporta Strings e n´ umeros de ponto flutuante [Ros98]. 2.2.1.1 Identificadores Identificadores em CSPM come¸cam com um caractere alfab´etico e s˜ao seguidos por caractereres alfanum´ericos ou sublinha, sendo seguidos opcionalmente por qualquer caractere. N˜ao existe limite no tamanho dos identificadores. Apesar deste cap´ıtulo usar identificadores com nomes simples, muitas vezes de apenas um caractere (por exemplo: S, P ou x), especifica¸c˜oes reais devem ter nomes significativos, uma vez que a legibilidade ´e fator relevante para qualquer tipo de documenta¸ca˜o, especificamente a formal. 2.2.1.2 Inteiros N´ umeros inteiros s˜ao introduzidos pela palavra reservada int. Dados dois n´ umeros p e q, os operadores s˜ao: p + q (soma), p - q (diferen¸ca bin´aria), - p (diferen¸ca un´aria), m * n (produto), p / q (quociente) e p % q (resto). 2.2.1.3 Booleanos Tipos booleanos s˜ao v´alidos e usados como em qualquer linguagem de programa¸ca˜o convencional. Dados dois operandos booleanos a e b e dois n´ umeros x1 e x2 , as opera¸co˜es b´asicas sobre o tipo booleano s˜ao: • a and b: A conjun¸ca˜o entre as vari´aveis a e b, isto ´e, a ∧ b; • a or b: A disjun¸ca˜o entre as vari´aveis a e b, isto ´e, a ∨ b, • x1 == x2 , x1 != x2 : As rela¸c˜oes de igualdade/desigualdade entre os operandos x1 e x2 ;.

(29) 9. 2.2 SINTAXE. • not a: A nega¸ca˜o de a, isto ´e ¬ a; • x1 > x2 , x1 < x2 , x1 >= x2 , x1 <= x2 : As opera¸c˜oes de ordem sobre os n´ umeros; • if a then P else Q: A express˜ao condicional que resulta no processo P se a for verdadeiro, ou em Q, se este for falso. 2.2.1.4 Conjuntos Tipo derivado diretamente do suporte funcional [BW88] de CSPM . Considerando dois conjuntos c1 e c2 , s uma seq¨ uˆencia e x um elemento de um conjunto, as opera¸co˜es em CSPM para conjuntos s˜ao: • union(c1 , c2 ): c1 ∪ c2 ; • inter(c1 , c2 ): • diff(c1 , c2 ):. c 1 ∩ c2 ; c 1 \ c2 ;. • member(x, c1 ): x ∈ c1 ; • set(s): Converte uma seq¨ uˆencia s em um conjunto. 2.2.1.5 Seq¨ uˆ encias Tipo tamb´em derivado diretamente do suporte funcional [BW88] de CSPM . Os elementos podem ser repetidos e a ordem deles ´e conservada ao longo da existˆencia desse tipo. Todos os elementos devem ser do mesmo tipo. Sendo assim, uma seq¨ uˆencia de literais pode ser definida na forma <6,4,5>, por exemplo. A fun¸c˜ao lenght(s) ou #s d´a o comprimento de uma seq¨ uˆencia, enquanto que s^t retorna a concatena¸ca˜o de duas seq¨ uˆencias s e t. J´a elem(x,s) testa se o elemento x ocorre na seq¨ uˆencia s, enquanto que head(s) retorna o primeiro elemento da seq¨ uˆencia s (a qual n˜ao pode ser vazia). A fun¸c˜ao tail(s) retorna s sem o primeiro elemento e null(s) retorna verdadeiro se a seq¨ uˆencia s for vazia. ´ um tipo composto formado por dois ou mais tipos j´a pr´e-definidos. 2.2.1.6 Tuplas E Ent˜ao, (6,4) e ({},<>) s˜ao duas tuplas, sendo que a primeira ´e formada por dois elementos inteiros e a segunda por um conjunto e uma seq¨ uˆencia vazios. 2.2.2. Canais e Eventos. Em CSPM , sistemas s˜ao modelados em termos de eventos que acontecem em canais de ´ atrav´es de eventos que valores de um determinado tipo s˜ao comunicados. comunica¸c˜ao. E Pode-se dizer ent˜ao que canais s˜ao tags que formam a base para os eventos. Um canal se torna um evento quando valores s˜ao suficientes para complet´a-lo. Esses eventos s˜ao observados pelo ambiente e ´e somente assim que os processos se comunicam com ele. A intera¸c˜ao entre o ambiente e os processos ocorre da mesma forma que entre os processos: os eventos s´o acontecem quando ambos os lados concordam. A seguinte declara¸ca˜o corresponde `a declara¸ca˜o do canal in do tipo inteiro e do evento out:.

(30) 10. CSP. channel out channel in:int. 2.2.2.1 Tipos de Comunica¸ c˜ ao Tamb´em ´e poss´ıvel a comunica¸ca˜o ao longo de canais. A sa´ıda c!v est´a apta a comunicar no canal c a sa´ıda da express˜ao (neste caso um simples identificador) v. Similarmente, a entrada c?x:T pode aceitar qualquer entrada restrita ao tipo T ao longo do canal c e armazen´a-la no identificador x. Da mesma forma, c.x transmite ao longo do canal c o valor x sem caracterizar entrada ou sa´ıda de dados. 2.2.3. Casamento de Padr˜ oes. V´arios exemplos desse trabalho usam casamento de padr˜oes para decompor valores. Por exemplo, a fun¸c˜ao reverse a seguir retorna o inverso da seq¨ uˆencia fornecida como entrada. Nesta defini¸ca˜o, usa-se casamento de padr˜oes para dois prop´ositos: (1) Lidar com o caso base (seq¨ uˆencia vazia) e o caso mais geral; (2) No caso geral, capturar o primeiro elemento da seq¨ uˆencia e seu resto.. reverse(<>) = <> reverse(<x>^s) = reverse(s) ^ <x>. A defini¸ca˜o anterior ´e equivalente a. reverse(s) = if null(s) then <> else reverse(tail(s)) ^ head(s). Os padr˜oes podem ocorrer de v´arias formas em CSPM [Sys05]. No exemplo do processo reverse definido anteriormente, a chamada da fun¸ca˜o contendo uma seq¨ uˆencia vazia ´e um padr˜ao de valor simples. Sempre que reverse recebe esse valor como parˆametro, o retorno oferecido ´e uma seq¨ uˆencia vazia. Para outros casos, a segunda chamada da fun¸c˜ao ´e aplicada e <x>^s se tornam padr˜oes de vari´aveis que casam quaisquer valores `as mesmas, fazendo com que estes possam ser usados ao longo da defini¸ca˜o da fun¸ca˜o em substitui¸c˜ao `as vari´aveis. O casamento de padr˜oes tamb´em pode ocorrer atrav´es de defini¸c˜oes diretas, como por exemplo em (x, y) = (7, 2). Uma liga¸c˜ao entre a vari´avel x e o valor 7 ´e realizada, assim como entre y e 2. J´a para o caso de compreens˜oes sobre conjuntos, o exemplo dado ´e { x + y|(x,y) <{(1,2),(2,3)}}, onde o operador <- significa que (x,y) pertence ao conjunto {(1,2),(2,3)}..

(31) 2.2 SINTAXE. 11. H´a uma filtragem dos valores, de forma que somente os valores que casam os padr˜oes determinados sejam selecionados. Como nesse exemplo todos os casamentos s˜ao verdadeiros, o conjunto resultante ´e {3,5}. H´a tamb´em o caso de casamentos de padr˜oes sobre comunica¸c˜oes de vari´aveis. O trecho d?(x,y) -> c!x+y -> STOP realiza o casamento dos valores recebidos como entrada `as vari´aveis x e y, retornando o resultado da express˜ao x+y como sa´ıda do canal c. 2.2.4. Processos. Processos s˜ao as entidades descritas por express˜oes CSPM em termos de poss´ıveis eventos e canais. Sendo assim, tornam-se unidades b´asicas para captar comportamento. Em geral, s˜ao usados para garantir o conceito de modularidade. Nesse trabalho, assume-se que cada processo tem um alfabeto espec´ıfico dado por αP , tal que αP ⊆ Σ. Σ ´e denominado de alfabeto da especifica¸c˜ao (ou do sistema). Em CSPM , cada processo ´e definido por uma equa¸ca˜o do tipo P = Proc onde P ´e o nome do processo que est´a sendo definido e Proc ´e o corpo do processo, o qual deve obedecer `a seguinte gram´atica, onde e ´e um evento, X ´e um conjunto de processos, b ´e uma express˜ao booleana e a ´e um conjunto de eventos. Proc ::= STOP | SKIP | e -> Proc | Proc [ ] Proc | Proc |∼| Proc | Proc ||| Proc | Proc \ X | Proc [|a|] Proc | Proc; Proc | if b then Proc else Proc | b & Proc A sintaxe acima omite o processo div, que representa divergˆencia, assim como v´arios operadores como o paralelismo alfabetizado, piping, escolhas indexadas, timeout e interrup¸c˜ao [Ros98]. Informalmente, esses processos de CSPM se comportam como segue. STOP ´e um processo terminal, portanto depois dele nenhuma comunica¸ca˜o ´e permitida. Ele ´e usado para denotar funcionalidades defeituosas e quando aparece num processo, significa que h´a uma situa¸c˜ao de deadlock. SKIP ´e um processo terminal, mas sua ocorrˆencia significa termina¸c˜ao com sucesso. O processo e -> P oferece o evento e ao ambiente e aguarda indefinidamente por sua aceita¸c˜ao. Se o evento e for aceito, este processo passa a se comportar como P..

(32) 12. CSP. O processo P [ ] Q (pronunciado P escolha externa Q) est´a inicialmente disposto a se comportar como P ou Q, onde a escolha ´e resolvida pelo ambiente desses dois processos. O processo P |∼| Q (pronunciado P escolha interna Q) pode se comportar como P ou Q, sendo que o ambiente n˜ao tem autonomia sobre essa decis˜ao, caracterizando n˜ao-determinismo. O processo P \ X, que usa o operador hiding, se comporta como P, mas com todos os eventos de X sendo comunicados somente para o processo P. O processo b & P indica que se a guarda booleana b for verdadeira, se comporta como P, caso contr´ario, se comporta como STOP. Essa ´e uma abrevia¸ca˜o para if b then P else STOP. Os processos podem ser compostos em paralelo. Se a ´e um conjunto de eventos, ent˜ao o processo P |[a]| Q se comporta como P e Q agindo concorrentemente, com a condi¸c˜ao de que eles tˆem que sincronizar em qualquer evento do conjunto a. Assim, eventos que n˜ao est˜ao em a s˜ao realizados pelos processos de forma independente dos outros. Os processos tamb´em podem ser definidos recursivamente atrav´es de equa¸co˜es. Por exemplo, BUFFER = in?x:T -> out!x -> BUFFER aceita um valor no canal in e ent˜ao gera uma sa´ıda no canal out repetidamente. Os parˆametros de um processo representam seu estado. Devido ao car´ater funcional da linguagem CSPM , n˜ao h´a o conceito de atribui¸ca˜o. Portanto, atualiza¸ca˜o do estado se d´a atrav´es de recurs˜ao. Um processo parametrizado pode ter qualquer n´ umero fixo de parˆametros. Considere o seguinte processo em CSPM : Rec(x) = in!x -> Rec(x + 1) Este processo possui apenas um parˆametro x (o tipo de x n˜ao ´e apresentado, j´a que ele ´e determinado pelo seu uso em express˜oes no corpo do processo), o qual ´e comunicado atrav´es do canal in e depois ocorre a chamada recursiva Rec(x+1), onde o valor inicial de x ´e incrementado de 1. Em particular, este processo tem o problema do dom´ınio de dados da vari´avel x ter estados infinitos pois os poss´ıveis valores que x poder´a assumir n˜ao s˜ao restringidos. Al´em dos operadores apresentados, h´a tamb´em outros que n˜ao ser˜ao extensamente utilizados nesse trabalho, mas que tamb´em s˜ao muito importantes na constitui¸c˜ao da nota¸c˜ao CSPM . S˜ao eles: P;Q A composi¸c˜ao seq¨ uencial dos processos P e Q. Este processo se comporta como P at´e que ele termine com sucesso e depois se comporta como Q. P[[a <- b]] O processo de renomea¸ca˜o mapeia todos os eventos a em eventos b. P|||Q Os processos P e Q est˜ao rodando em paralelo, sem sincroniza¸ca˜o de eventos. P[a||a’] Os processos P e Q est˜ao sendo executados em paralelo, sendo que o conjunto de intersec¸c˜ao de a e a’ obriga a sincroniza¸c˜ao desses processos. ;x:s@P A composi¸ca˜o seq¨ uencial replicada executa o processo P para cada elemento em s seq¨ uencialmente. Cada ocorrˆencia de x em P ´e trocada pelo elemento atual de s..

(33) ˆ 2.3 SEMANTICA. 13. []x:s@P A escolha externa replicada oferece os eventos iniciais para todos os processos P, nos quais x ´e trocado por um elemento de s. |∼|x:s@P A escolha interna replicada oferece os eventos iniciais de um processo P, onde x ´e trocado por um elemento de s, desde que esse n˜ao esteja vazio. |||x:s@P O interleave replicado roda todos os processos em paralelo sem sincroniza¸c˜ao sobre quaisquer eventos, onde cada ocorrˆencia de x em P ´e trocada por um elemento de s. [|a|]x:s@P O paralelismo replicado compartilhado roda todos os processos P em paralelo, onde cada ocorrˆencia de x em P ´e trocada por um elemento de s e a sincroniza¸ca˜o ´e obrigat´oria nos eventos pertencentes a a. Depois de introduzir a sintaxe de CSPM , sua semˆantica ´e considerada na pr´oxima se¸c˜ao. 2.3. ˆ SEMANTICA. Apesar de CSPM tamb´em ter uma semˆantica, nesta se¸ca˜o a semˆantica de CSP ´e usada por ser mais simples e abstrata. Isso n˜ao introduz grandes problemas pois a semˆantica de CSPM simplesmente adiciona detalhes `a de CSP sobre como a parte funcional interage com a parte comportamental. Existem trˆes formas de entender o significado da sintaxe de CSP, atrav´es de semˆantica. S˜ao elas a denotacional, operacional e alg´ebrica. A semˆantica operacional interpreta programas como diagramas de transi¸ca˜o, com a¸c˜oes vis´ıveis e invis´ıveis para que haja o movimento entre os v´arios estados do programa (Se¸c˜ao 2.3.2). Ela ´e, como o pr´oprio nome sugere, muito pr´oxima `a implementa¸ca˜o. Assim, pode-se definir a semˆantica operacional como uma formaliza¸c˜ao matem´atica de alguma estrat´egia de implementa¸ca˜o [Ros98]. A semˆantica denotacional mapeia uma linguagem de programa¸ca˜o em modelos abstratos de forma que o significado de qualquer componente do programa seja determinado diretamente pelos significados de seus constituintes (composicionalidade). Existem v´arias semˆanticas denotacionais em CSP (Se¸ca˜o 2.3.3), todas baseadas em itens como traces, falhas e divergˆencias. O significado delas em qualquer programa depende da combina¸ca˜o desses conjuntos. A semˆantica alg´ebrica ´e definida por um conjunto determinado de leis alg´ebricas. Em vez de construir um modelo matem´atico expl´ıcito, como na semˆantica denotacional, as leis s˜ao os axiomas b´asicos de uma semˆantica alg´ebrica, e a equivalˆencia de processos ´e definida em termos de que igualdades podem ser provadas usando-as. Algumas leis ser˜ao apresentadas como forma de introduzir essa abordagem na Se¸c˜ao 2.3.1. 2.3.1. Semˆ antica Alg´ ebrica. Uma forma de definir o comportamento dos operadores de CSP ´e o uso de step laws. Essas regras permitem definir o primeiro passo do comportamento de um operador (isto.

(34) 14. CSP. ´e, a sele¸ca˜o das a¸c˜oes iniciais adicionado aos processos que sucedem cada a¸ca˜o) dentro do sistema em que ele est´a envolvido. Por exemplo, sejam P = c?x:A -> P’ e Q = c?x:B -> Q’. A step law para o processo P ||| Q ´e a seguinte: P ||| Q = c?x:A ∪ B -> if (x ∈ A ∩ B) then (P’ ||| Q) |~| (P ||| Q’) else if (x ∈ A) then (P’ ||| Q) else (P ||| Q’) Sendo assim, se o pr´oximo evento pertence `a intercess˜ao dos processo P e Q, uma escolha n˜ao-determin´ıstica ser´a realizada. Caso contr´ario, o processo ao qual o evento corrente pertence ser´a evolu´ıdo. Analogamente, para o processo P [|X|] Q, onde X ´e um conjunto de eventos, tem-se: P [|X|] Q = c?x:C -> if (x ∈ X) then (P’ [|X|] Q’) else if (x ∈ A ∩ B) then (P’ [|X|] Q) |~| (P [|X|] Q’) else if (x ∈ A) then (P’ [|X|] Q) else (P [|X|] Q’) A step law ´e u ´til como um pr´e-processamento para uma semˆantica operacional (Se¸ca˜o 2.3.2), mas a sua natureza ´e puramente alg´ebrica. 2.3.2. Semˆ antica Operacional. A semˆantica operacional de CSP ´e composta por firing rules e Labelled Transition Systems (Se¸c˜ao 2.3.2.1), uma representa¸ca˜o gr´afica do comportamento do sistema ao n´ıvel de estados e eventos. Firing rules [Ros98] s˜ao um conjunto de regras de transi¸c˜ao, sendo cada uma aplicada a um operador da nota¸ca˜o CSP. Nesta se¸ca˜o, o objetivo ´e mostrar como processos CSP s˜ao representados como grafos, mas sem apresentar detalhadamente as firing rules. 2.3.2.1 LTS e Firing Rules Um LTS (Labelled Transition Systems) ´e uma tupla S = (Q, A, T, q0 ) onde Q ´e um conjunto finito de estados, A ´e um conjunto finito de r´otulos, T ´e uma rela¸ca˜o de transi¸ca˜o (Q × A × Q), e q0 ´e o estado inicial (q0 ∈ Q). Os poss´ıveis r´otulos a serem usados em um LTS provˆem do conjunto Σ (o conjunto de eventos do sistema ou alfabeto da especifica¸c˜ao) e os eventos especiais τ e X. As a¸co˜es em Σ s˜ao vis´ıveis ao ambiente externo, e podem apenas acontecer com a coopera¸ca˜o dele. A a¸ca˜o τ n˜ao pode ser vista de fora do processo e acontece automaticamente, representando transi¸co˜es n˜ao-determin´ısticas. A a¸ca˜o especial X representa uma termina¸ca˜o com.

(35) ˆ 2.3 SEMANTICA. 15. sucesso. Ela ´e diferente dos outros eventos porque ´e sempre o u ´ltimo evento que acontece e ´e vis´ıvel ao ambiente. Sendo assim, ´e melhor pensar nela como n˜ao requerendo coopera¸ca˜o do ambiente. Tamb´em existe o estado especial Ω, que indica que o processo foi terminado. Depois de se chegar a ele, n˜ao ´e poss´ıvel instanciar o processo novamente. Um LTS pode ser finito ou infinito (em termos de conjunto de estados), e apenas as transi¸c˜oes de um estado n que podem ser alcan¸ca´veis s˜ao relevantes quando se descreve o comportamento de n. Um processo ´e dito de estados finitos se ele pode ser representado por um LTS finito. A Figura 2.1 mostra dois LTSs, um finito (a) e outro infinito (b). O LTS (a) ´e o finito porque ele possui dois estados. A cada execu¸ca˜o do processo que ele representa, o evento a ´e oferecido ao ambiente e ele volta ao estado -70. Analogamente, em (b) temos um LTS que representa um processo infinito, em que o evento a ´e sempre oferecido ao ambiente, mas o n´ umero de estados que o processo assume cresce infinitamente.. Figura 2.1 (a)Um LTS finito (b)Um LTS infinito. Os LTSs s˜ao constru´ıdos com base na semˆantica dos operadores CSP e de seus operandos e eventos. Como forma de exemplificar os eventos especiais de X e Ω, a firing rule para o processo SKIP ´e mostrada, como definido a seguir[Ros98]. √. (.). SKIP −→ Ω. N˜ao existe nada sobre a linha horizontal porque n˜ao h´a restri¸co˜es para a a¸ca˜o especificada. Ent˜ao, quando o processo SKIP ´e oferecido ao ambiente, a a¸c˜ao X ´e comunicada ao mesmo e este assume o estado Ω, isto ´e, termina¸ca˜o do sistema. O Processo STOP n˜ao tem a¸co˜es, ent˜ao n˜ao h´a firing rule para ele. N˜ao h´a a¸c˜oes na semˆantica operacional porque n˜ao existe possibilidade de provar que ele tenha alguma..

(36) 16. CSP. 2.3.3. Semˆ antica Denotacional. CSP tem v´arios modelos de semˆantica denotacional, principalmente baseada em conjuntos de comportamentos como traces, falhas e divergˆencias. Os traces de um processo P, traces(P), s˜ao definidos como o conjunto de seq¨ uˆencias finitas de eventos de Σ que P pode realizar [Ros98] (Se¸ca˜o 2.3.3.1). As falhas (F) de um processo P s˜ao definidas como o conjunto failures(P), que cont´em pares de traces e rejei¸c˜oes de um processo em um determinado contexto. Assim, uma falha (s, X) significa que depois de realizar os eventos do trace s, o processo rejeita os eventos do conjunto X. J´a as divergˆencias [Ros98] (D) de um processo P, divergences(P), s˜ao os traces que podem levar P a realizar uma seq¨ uˆencia infinita de eventos invis´ıveis ao ambiente, isto ´e, livelock [Ros98, Hoa78]. O modelo (FD) de falhas/divergˆencias de um processo P ´e composto pelo par (failures(P), divergences(P)) [Hoa78]. Este trabalho se concentra em achar uma abstra¸ca˜o segura para um determinado sistema, utilizando somente o modelo de traces, e por isso esses outros modelos n˜ao ser˜ao detalhados. 2.3.3.1 O Modelo de Traces Para qualquer processo P, os traces(P) s˜ao definidos como o conjunto de todos os traces finitos membros do conjunto Σ∗ , uma seq¨ uˆencia finita de eventos. Por exemplo: • traces(STOP) = {hi} — O u ´nico trace que pode ser realizado ´e o trace vazio. • traces(a → b → STOP) = {hi, h a i, h a,b i} — Este processo pode comunicar nada, realizar o evento a apenas, ou a e b. • traces((a → STOP) [ ] (b → STOP)) = {hi, h a i, h b i} — Pode-se escolher um evento, ent˜ao existe mais de um trace dispon´ıvel de comprimento um. • traces((a → P) [] (b → STOP)) = {h a in , h a in _ h b i | n ∈ N} — Este processo pode realizar quantos a’s o ambiente quiser, seguidos por b e depois disso n˜ao pode haver comunica¸c˜ao. As regras para constru¸ca˜o de conjuntos de traces para alguns operadores s˜ao dadas a seguir: • traces(SKIP) = {hi, hXi} • traces(a → P) = {hi}∪{h a i _ s | s ∈ traces (P)} — Este processo n˜ao faz nada ou seu primeiro evento ´e a seguido pelo trace de P. • traces(?x : A → P) = {hi}∪{h a i _s | a ∈ A ∧ s ∈ traces(P[a/x])} — Similar ao anterior exceto pelo fato do evento inicial ser agora escolhido do conjunto A e o comportamento subsequente depende do que ´e oferecido pelo ambiente. P[a/x] significa a substitui¸ca˜o de x por todas as ocorrˆencias de a. • traces(c?x : A → P) = {hi}∪{h c.a i _s| a ∈ A ∧ s ∈ traces(P[a/x])} — O mesmo que o anterior, exceto pelo uso do nome do canal..

(37) 2.4 REFINAMENTO. 17. • traces(P [ ] Q) = traces(P) ∪ traces(Q) — J´a que o processo se comporta como P ou Q, os traces s˜ao os traces de P e Q. • traces(P |∼| Q) = traces(P) ∪ traces(Q) — Este processo oferece os traces de P e Q. S • traces(|∼|x:s@P) = {traces(P)|P ∈ s} para qualquer conjunto n˜ao vazio s de processos. • traces(if b then P else Q) = traces(P) se ele evolui para verdadeiro ou traces(Q) se ele evolui para falso. O conjunto traces(P) de um processo P n˜ao serve somente para entender seu comportamento. Ele tamb´em pode ser comparado com os traces de outro processo de forma a comparar esses dois conjuntos. Isso ´e feito atrav´es das rela¸co˜es de refinamento, apresentadas a seguir. 2.4. REFINAMENTO. Para caracterizar a preserva¸ca˜o do comportamento original de um processo, com a eventual adi¸ca˜o de um novo comportamento, emprega-se a rela¸ca˜o de refinamento. Assim, P v Q significa que Q ´e melhor que (refina) P em algum sentido. No modelo de traces, a rela¸c˜ao de refinamento ´e definida em termos da rela¸ca˜o de inclus˜ao entre conjuntos, ou seja, P vT Q ⇔ traces(Q) ⊆ traces(P) Um resultado mais forte ainda ´e a no¸ca˜o de equivalˆencia: P ≡T Q ⇔ traces(P)⊆traces(Q)∧traces(Q)⊆traces(P) isto ´e, para que um processo P seja equivalente a um processo Q ao n´ıvel do modelo de traces, ´e necess´ario que o conjunto de traces de P esteja contido no conjunto de traces de Q e que o inverso tamb´em seja verdadeiro. Assim como as rela¸co˜es de refinamento s˜ao poss´ıveis para o conjunto de traces, elas tamb´em operam sobre os conjuntos de falhas e de falhas/divergˆencias. Embora os traces sejam muito u ´teis, em alguns casos em que se quer ver al´em do comportamento do sistema, observando tamb´em livelocks e n˜ao-determinismos, somente o conjunto de falhas/divergˆencias seria o bastante. Como o escopo desse trabalho est´a concentrado nos traces do sistema, essas outras rela¸co˜es de refinamento n˜ao ser˜ao alvo de discuss˜ao. 2.5. ˜ DE MODELOS E SUPORTE A FERRAMENTAS PARA CSPM VERIFICAC ¸ AO. Verifica¸ca˜o de modelos ´e uma t´ecnica para analisar automaticamente propriedades de sistemas concorrentes de estados finitos [Edv99]. Sua vers˜ao cl´assica usa propriedades sobre o sistema que s˜ao expressas como f´ormulas l´ogico-temporais e algoritmos simb´olicos eficientes s˜ao usados para analisar se a especifica¸c˜ao ´e ou n˜ao concordante..

(38) 18. CSP. A classe de verificadores de modelos a ser estudada nesse trabalho ´e a baseada em refinamentos. O resultado dessa classe ´e a confirma¸ca˜o de que a propriedade ´e verdadeira ou h´a o fornecimento de um contra-exemplo falsificando a propriedade. A princ´ıpio, verifica¸c˜ao de modelos ´e um procedimento de decis˜ao. Ele sistematicamente diz “sim”ou “n˜ao”`as propriedades do sistema. Entretanto, isso pode ser inalcan¸ca´vel devido `a manipula¸c˜ao de dom´ınios de dados infinitos, por exemplo. Apesar de verifica¸c˜ao de modelos poder ser altamente automatizada, ela ´e restrita ao tamanho e tipo de sistemas para os quais ela pode ser aplicada e tamb´em ´e afetada pelo problema da explos˜ao de estados. Por essa raz˜ao, foi proposto limitar o verificador de modelos para expandir a m´aquina de estados criada at´e um n´ umero x de passos [McM03]. Tamb´em ´e comum aplicar verifica¸ca˜o de modelos a instˆancias de sistemas pequenos. O verificador de modelos mais usado para CSPM ´e o FDR [Sys05]. Este fornece suporte a todos os recursos mencionados, mas n˜ao deixa o usu´ario interagir com o processo, exceto pela inser¸c˜ao de assertivas que comparam propriedades entre esses processos. Sendo assim, ele explora todas os estados dos processos envolvidos para retornar se a assertiva ´e verdadeira ou falsa. Por exemplo, a assertiva assert spec [T= imp retorna se spec ´e refinado por imp no modelo de traces ou n˜ao. Os LTSs dos processos envolvidos precisam ser finitos para que todas as situa¸co˜es que envolvam a assertiva possam ser verificadas. Outra ferramenta bastante interessante ´e o animador ProBE [Sys05], onde o usu´ario consegue visualizar os eventos de um processo que levam a outros estados. Ele usa uma lista hier´arquica para mostrar as a¸co˜es poss´ıveis e estados de um processo. Seu objetivo ´e mostrar a intera¸c˜ao entre os v´arios processos de um sistema de forma intuitiva. 2.6. ˜ CONSIDERAC ¸ OES FINAIS. Nesse cap´ıtulo, a nota¸ca˜o CSPM foi introduzida. Foram explicados conceitos b´asicos da linguagem, tipos de dados suportados, como ´e realizada a cria¸ca˜o de novos tipos e sua sintaxe, incluindo seus operadores b´asicos e casamento de padr˜oes. Al´em disso, a semˆantica tamb´em foi alvo de estudo, com o uso de LTSs, modelos de traces e no¸c˜oes de refinamento. Finalmente, uma introdu¸ca˜o `a verifica¸ca˜o de modelos foi realizada, mostrando que existem duas ferramentas muito usadas para aux´ılio a an´alise de especifica¸c˜oes CSPM : FDR e ProBE..

(39) CAP´ITULO 3. ˜ DE DADOS E GERAC ˜ DE DADOS ABSTRAC ¸ AO ¸ AO DE TESTE O segredo da vida ´e abstrair. Autor desconhecido. Especifica¸co˜es CSP podem resultar em sistemas com dom´ınio de dados infinitos para an´alise. Assim, o dom´ınio desses processos torna-se muito grande para ser processado por um verificador de modelos. T´ecnicas de abstra¸c˜ao de dados podem ser usadas para criar sistemas abstratos finitos equivalentes sob determinado aspecto a sistemas infinitos concretos. Portanto, um verificador de modelos pode ser usado para descobrir propriedades desses sistemas abstratos e conseq¨ uentemente dos sistemas concretos. Com a descoberta dos modelos fornecidos por essas ferramentas, todos os estados do sistema podem ser explorados, de forma a extrair o comportamento dele no n´ıvel de traces, por exemplo. Esse tipo de modelo informa os eventos oferecidos ao ambiente, e conseq¨ uentemente a sua intera¸ca˜o com agentes externos. Sendo assim, todas as possibilidades de testes podem ser realizadas a partir desse tipo de abordagem e os dom´ınios abstratos descobertos podem ser usados como dados de teste para o sistema. Esse cap´ıtulo apresenta a teoria de abstra¸ca˜o de dados em que esse trabalho ´e fundamentado (Se¸c˜ao 3.1), al´em de exibir a teoria sobre independˆencia de dados usada (Se¸ca˜o 3.2) e alguns trabalhos sobre a gera¸ca˜o autom´atica de dados de testes (Se¸ca˜o 3.3) 3.1. ˜ ´ ABSTRAC ¸ OES SEGURA E OTIMA PARA CSP. A interpreta¸ca˜o abstrata ´e uma forma de mapear semˆanticas e pode ser usada para abstrair dados [CC04]. A sua id´eia ´e interpretar um programa em um dom´ınio abstrato usando opera¸c˜oes abstratas. A principal vantagem ´e que o programa concreto n˜ao precisa ser executado completamente, apesar de ser poss´ıvel obter informa¸c˜oes sobre sua execu¸c˜ao real. Por exemplo, supondo que se queira saber o sinal resultante da express˜ao 5 * -3, esta pode ser observada como pos e ∗ neg = neg, onde pos representa um n´ umero positivo, neg um n´ umero negativo e e ∗ a nova vers˜ao do operador de multiplica¸ca˜o onde s´o os sinais s˜ao observados. Portanto, n˜ao ´e necess´ario avaliar a express˜ao para que o sinal resultante seja descoberto. Para verifica¸c˜ao formal, o princ´ıpio b´asico da interpreta¸ca˜o abstrata ´e construir um modelo abstrato da especifica¸ca˜o no qual as propriedades abstratas possam ser provadas e revelar informa¸co˜es sobre o processo concreto. Dessa forma, o problema da explos˜ao de estados pode ser contornado atrav´es do uso de um modelo abstrato e menos preciso (com menos informa¸ca˜o), mas que seja relevante para a(s) propriedade(s) que se deseja provar. 19.

(40) 20. ˜ DE DADOS E GERAC ˜ DE DADOS DE TESTE ABSTRAC ¸ AO ¸ AO. Sendo assim, o sistema abstrato deve refletir o comportamento do sistema concreto do ponto de vista das propriedades que se deseja conservar. Para garantir isso, condi¸co˜es sobre as interpreta¸co˜es abstratas devem ser impostas. Por isso, as interpreta¸co˜es segura e ´otima foram idealizadas [Weh00]. A primeira conserva o modelo de traces do sistema e demanda menos esfor¸co computacional que a segunda, sendo suficiente para refletir o comportamento de um sistema no n´ıvel de testes. J´a a abstra¸ca˜o ´otima conserva o modelo de falhas e divergˆencias, refletindo mais fidedignamente o comportamento da especifica¸ca˜o, capturando tamb´em livelock e n˜ao-determinismo (Se¸c˜ao 2.3.3). As abstra¸c˜oes segura e ´otima de dados s˜ao baseadas em interpreta¸ca˜o abstrata de programas e podem ser vistas como um complemento a outras t´ecnicas existentes. A id´eia geral de ambas ´e determinar parti¸c˜oes do dom´ınio concreto e escolher um dado para representar cada parti¸c˜ao no dom´ınio abstrato. Dessa forma, para um conjunto de parti¸co˜es do dom´ınio concreto, existem conjuntos de dados eleg´ıveis e finitos que representar˜ao o dom´ınio abstrato. Originalmente, essas abstra¸c˜oes foram definidas para CSP-OZ [Fis97], uma combina¸c˜ao das nota¸co˜es CSP e Object-Z. Nesse contexto, CSP ´e o respons´avel pelos aspectos dinˆamicos do sistema, ao passo que Object-Z permite a descri¸ca˜o de seus aspectos est´aticos. Os dom´ınios de dados a serem abstra´ıdos s˜ao os associados `as vari´aveis de estado: D1 , ..., Dn para as vari´aveis v1 , ..., vn , e os dom´ınios associados aos canais: M1 , ..., Mk para os canais ch1 , ..., chk (mensagens). Infelizmente o trabalho reportado em [Weh00] possui algumas limita¸co˜es, j´a que ´e fundamentado em fun¸co˜es de abstra¸c˜ao, o que faz com que sistemas que possuam um dado no dom´ınio concreto com mais de um correspondente no dom´ınio abstrato n˜ao possam ser expressos com essa nota¸ca˜o. O trabalho apresentado em [FMS08] estende a classe de problemas a ser tratada. Sistemas que possuem estados no dom´ınio concreto com mais de um equivalente no dom´ınio abstrato n˜ao podem utilizar fun¸co˜es e sim rela¸co˜es. Para isso, s˜ao usados dom´ınios de dados abstratos DiA e MiA e as rela¸co˜es αin e αout que representam as rela¸co˜es de abstra¸c˜ao para os canais de entrada e sa´ıda do sistema concreto para o abstrato, respectivamente e a rela¸ca˜o de abstra¸ca˜o αs para uma vari´avel de dado (estado), conforme segue: αs : (D1 × . . . × Dn ) ↔ (D1A × . . . × DnA ) αin : (M1in × . . . × Mkin ) ↔ (M1in,A × . . . × Mkin,A ) αout : (M1out × . . . × Mjout ) ↔ (M1out,A × . . . × Mjout,A ) As defini¸c˜oes de abstra¸ca˜o segura e ´otima utilizam as fun¸co˜es e opera¸co˜es de abstra¸c˜ao, cada uma definida por uma habilita¸ca˜o (pr´e-condi¸c˜ao) e efeito (p´os-condi¸ca˜o). A semˆantica de uma opera¸ca˜o ´e dada por: [[enableop ]] : (D1 × . . . × Dn ) × (M1in × . . . × Mkin ) → B [[effectop ]] : (D1 × . . . × Dn ) × (M1in × . . . × Mkin ) → (D1 × . . . × Dn ) ↔ (M1out × . . . × Mjout ) A Defini¸ca˜o 3.1.1 conceitua a abstra¸c˜ao segura formalmente. Defini¸ c˜ ao 3.1.1 (Abstra¸c˜ ao Segura). Uma interpreta¸ca˜o abstrata [[op]]S de predicados enable e effect de uma opera¸ca˜o ´e segura com respeito a rela¸co˜es αS , αin e αout se e somente se ∀ d ∈ D, in ∈ M in • ∃ d A ∈ D A , in A ∈ M in,A | (d , d A ) ∈ αs ∧ (in, in A ) ∈ αin • [[enableop ]]S (d A , in A ) ⇔ [[enableop ]](d , in).

Referências

Documentos relacionados

2º A SIPAD tem como missão propor, fortalecer e concretizar políticas de promoção de igualdade e da defesa de Direitos Humanos, visando o desenvolvimento de

Chora Peito Chora Joao Bosco e Vinicius 000 / 001.. Chão De Giz Camila e

A principal forma de avaliar os fios multifilamentos con- tínuos é mediante o ensaio de tração, que deve ser realizado em equipamento próprio para ensaio de fios têxteis, o qual

Com novo fluxo de processo, é necessário criar documentação para apresentação dos funcionários Coordenadores das áreas: recepção, triagem e médica e administradora

Segundo a Pesquisa Nacional por Amostra de Domicílios (PNAD) de 2008, 83% da população brasileira localiza-se em centros urbanos (IBGE; 2010). Devido a essa situação, que tende a

Para Balacheff (1992) a explicação é um discurso que oferece uma ou várias razões para tornar compreensível uma afirmação e pode ser analisada em duas categorias: provas

Disciplinas CIÊNCIA POLÍTICA E TEORIA GERAL DO ESTADO I51 DIREITO CIVIL I51 ECONOMIA34 FILOSOFIA GERAL I34 FUNDAMENTOS DO DIREITO PÚBLICO I51 INTRODUÇÃO AO ESTUDO DO DIREITO