150 likes | 223 Views
Verificando Propriedades de Programas Concorrentes em Java. Sérgio Soares. Flavers - FLow Analysis for VERification of Systems. Sistemas concorrentes como um grafo de fluxo Análise de fluxo de dados. Flavers - FLow Analysis for VERification of Systems. Inicialmente implementado para Ada
E N D
Verificando Propriedades de Programas Concorrentes em Java Sérgio Soares
Flavers - FLow Analysis for VERification of Systems • Sistemas concorrentes como um grafo de fluxo • Análise de fluxo de dados
Flavers - FLow Analysis for VERification of Systems • Inicialmente implementado para Ada • programas vistos como grafos de fluxo de traces (TFG) • componentes do programa vistos como grafos de fluxo de controle (CFG) • o TFG é a composição dos CFGs de cada componente do sistema
initial initial E E final final Criando CFGs task body T1 is begin p1; T2.E; end T1; task body T2 is begin p2; accept E; p3; end T2; p2 p1 p3
initial p1 p2 p3 E final Criando o TGF Fluxo de execução MIP (interleaving) rendezvous
p1 p3 1 2 3 4 p1 p1,p3 p3 p1,p3 Verificando propriedades • Propriedades descritas por FSA
Verificando propriedades • Uma propriedade se verifica para um programa se: • a projeção da linguagem do TFG no alfabeto da propriedade está contida na linguagem da propriedade • Data Flow analysis • verificar incrementalmente que autômatos verificam propriedades de cada nó de execução do TFG.
initial p1 p2 p3 E final Traces inválidos (infeasible paths ) Exemplo de trace inválido: initial, p1, E, final
Removendo traces inválidos • Definição de FSAs que modelem restrições semânticas na execução do programa, não contempladas pelo TFG • remover infeasible paths (traces não executáveis)
p2 E p3 E,p2 p2,p3 1 3 v 4 2 E,p2,p3 E,p3 E,p2,p3 Feasibility constraint
Flavers para Java • Modelos de comunicacao • baseados em monitores (Java) • rendezvous (Ada e CSP) • Feasibility constraints representam interações entre threads • interações entre componentes (threads) não estão representadas no TFG como em ADA
Criando TFGs para programas em Java • Um CFG para cada thread • Compor os CFGs com os possíveis interleavings formando o TFG • labels na forma: (object, method, thread) (*, method, thread) (object, *, thread) (object, method, *)
Referências Gleb Naumovich, George S. Avrunin, and Lori A. Clarke. Data Flow Analysis for Checking Properties of Concorrent Java Programs. In 21st International Conference on Software Engineering, pages 399-410. ACM press Los Angeles, California, USA, May 1999.