• Nenhum resultado encontrado

Verificação de Códigos Lua Utilizando BMCLua

N/A
N/A
Protected

Academic year: 2022

Share "Verificação de Códigos Lua Utilizando BMCLua"

Copied!
34
0
0

Texto

(1)

Verificação de Códigos Lua

Universidade Federal do Amazonas

Programa de Pós-Graduação em Engenharia Elétrica

Verificação de Códigos Lua Utilizando BMCLua

Francisco Januário, Lucas Cordeiro e Eddie Filho

franciscojanuario@ufam.edu.br, lucascordeiro@ufam.edu.br, eddie@ctpim.org.br

(2)

• Checa a negação de uma propriedade em uma dada profundidade

Verificação de Modelo Limitada

• Sistema de transição M com profundidade de k

─ Estado: contador de programa e valor de variáveis.

• Traduzido em uma condição de verificação ψψψψ tal que:

ψ ψ ψ

ψ é satisfatível se, e se somente se, houver um contra exemplo de profundidade máxima k.

(3)

• Realiza a verificação de códigos ANSI-C e C++ usando solucionadores das teorias do módulo da satisfatibilidade

O Verificador ESBMC

Código Fonte C

Parser C

Checagem de tipo C

Conversor em goto

Execução Simbólica

Soluciona- dor

Parser C++

Checagem de tipo C++

Código Fonte C++

• Valida programas sequencias ou multi-tarefas

─ Deadlocks

─ Estouro aritmético

─ Divisão por zero

– Limites de array – Corrida de dados – Atomicidade

(4)

• Utilizada em diversas aplicações, desde jogos até aplicações para TV Digital

─ Adobe’s Photoshop Lightroom

─ Middleware Ginga

─ World of Warcraft e Angry Birds

A Linguagem Lua (1)

– C/C++

– NCL – JAVA

Linguagem de extensão utilizada por outras linguagens

– Mobile

– Set-Top Box

Interpretada, compacta e rápida, usada em diversos dispositivos

(5)

• Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento

A Linguagem Lua (2)

(6)

• Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento

A Linguagem Lua (2)

local counter = 0

local dx, dy = canvas:attrSize() function handler (evt)

if evt.class=='ncl' then while dx ~= dy do

counter = counter + 1

canvas:drawText(10,10,'Progresso: '..counter) end

end end

event.register(handler)

(7)

• Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento

A Linguagem Lua (2)

local counter = 0

local dx, dy = canvas:attrSize() function handler (evt)

if evt.class=='ncl' then

OverFlow Aritmético

while dx ~= dy do

counter = counter + 1

canvas:drawText(10,10,'Progresso: '..counter) end

end end

event.register(handler)

(8)

• Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento

A Linguagem Lua (2)

local counter = 0

local dx, dy = canvas:attrSize() function handler (evt)

if evt.class=='ncl' then

OverFlow Aritmético

while dx ~= dy do

counter = counter + 1

canvas:drawText(10,10,'Progresso: '..counter) end

end end

event.register(handler)

• Impacto negativo na execução das aplicações interativas, como travamentos, etc.

(9)

Objetivos

• Estender os benefícios da verificação de modelos limitada para códigos da linguagem Lua:

─ Traduzir códigos Lua para uma linguagem modelo (ANSI-C)

─ Realizar a validação de códigos Lua através do verificador de modelos limitado ESBMC

verificador de modelos limitado ESBMC

• Implementar a metodologia BMCLua:

─ Desenvolver um Ambiente de Desenvolvimento Integrado

─ Incorporar um interpretador Lua

─ Incorporar o verificador de modelos ESBMC

(10)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

(11)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

Traduz o código Lua para ANSI-C

(12)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

Traduz o código Lua para ANSI-C

(13)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

Traduz o código Lua para ANSI-C

Verifica o código ANSI-C

(14)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

Traduz o código Lua para ANSI-C

Verifica o código ANSI-C

Validação das

propriedades para um limite M

(15)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

Traduz o código Lua para ANSI-C

Verifica o código ANSI-C

Validação das

propriedades para um limite M

(16)

A Metodologia BMCLua

• Composta basicamente de um tradutor e o verificador ESBMC

Traduz o código Lua para ANSI-C

Verifica o código ANSI-C

Validação das

propriedades para um limite M

Contra-exemplo da validação.

Correção do código Lua

(17)

Tradução e Verificação no BMCLua

n = 5

while n >= 0 do print(4/n) n = n - 1 end

#include <stdio.h>

void main(void){

int n = 5;

while(n >= 0){

printf("%f",4/n);

n = n – 1;

}

Violated property:

file /home/BMCLua/BMCLuaC.c division by zero

• A versão atual traduz apenas um subconjunto de comandos da linguagem Lua.

– print – break – return

– if ... else ... end – while ... do ... end – for … do … end

– repeat ... until – do ... end

} }

division by zero n != 0

VERIFICATION FAILED

(18)

Tradução e Verificação no BMCLua

n = 5

while n >= 0 do print(4/n) n = n - 1 end

#include <stdio.h>

void main(void){

int n = 5;

while(n >= 0){

printf("%f",4/n);

n = n – 1;

}

Violated property:

file /home/BMCLua/BMCLuaC.c division by zero

Tradução

• A versão atual traduz apenas um subconjunto de comandos da linguagem Lua.

– print – break – return

– if ... else ... end – while ... do ... end – for … do … end

– repeat ... until – do ... end

} }

division by zero n != 0

VERIFICATION FAILED

(19)

Tradução e Verificação no BMCLua

n = 5

while n >= 0 do print(4/n) n = n - 1 end

#include <stdio.h>

void main(void){

int n = 5;

while(n >= 0){

printf("%f",4/n);

n = n – 1;

}

Violated property:

file /home/BMCLua/BMCLuaC.c division by zero

Verificação Tradução

• A versão atual traduz apenas um subconjunto de comandos da linguagem Lua.

– print – break – return

– if ... else ... end – while ... do ... end – for … do … end

– repeat ... until – do ... end

} }

division by zero n != 0

VERIFICATION FAILED

(20)

Tradução e Verificação no BMCLua

n = 5

while n >= 0 do print(4/n) n = n - 1 end

#include <stdio.h>

void main(void){

int n = 5;

while(n >= 0){

printf("%f",4/n);

n = n – 1;

}

Violated property:

file /home/BMCLua/BMCLuaC.c division by zero

Verificação Tradução

• A versão atual traduz apenas um subconjunto de comandos da linguagem Lua.

– print – break – return

– if ... else ... end – while ... do ... end – for … do … end

– repeat ... until – do ... end

} }

division by zero n != 0

VERIFICATION FAILED

Correção

(21)

Configuração e Benchmarks

• Ambiente:

─ Intel Core i3 2.5 GHz com 2 GB de RAM na plataforma Linux Ubuntu 32-bits

─ ESBMC v1.21 com solucionador z3 v3.2

• Utilizado benchmarks para testes de desempenho e precisão:

─ Bellman-Ford

─ Prim

─ BubbleSort

─ SelectionSort

(22)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

(23)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Total de elementos do array

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

(24)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Total de elementos do array

Total de linhas de código traduzido

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

(25)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Total de elementos do array

Total de linhas de código traduzido

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

Limite de iterações de loops realizada

(26)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Total de elementos do array

Total de linhas de código traduzido

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

Limite de iterações de loops realizada

Total de propriedades

verificadas

(27)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Total de elementos do array

Total de linhas de código traduzido

Tempo (seg) de processamento no

BMCLua

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

Limite de iterações de loops realizada

Total de propriedades

verificadas

(28)

Resultados Experimentais (1)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Total de elementos do array

Total de linhas de código traduzido

Tempo (seg) de processamento no

BMCLua

Tempo (seg) de processamento no

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

Limite de iterações de loops realizada

Total de propriedades

verificadas

processamento no ESBMC

(29)

Resultados Experimentais (2)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

(30)

Resultados Experimentais (2)

Algoritmo E L B P TL TE

Bellman-Ford

5 40 6 1 < 1 < 1

10 40 11 1 < 1 < 1

15 40 16 1 < 1 < 1

Os tempos são

equivalentes do programa Lua e o C original

20 40 21 1 < 1 < 1

Prim

4 61 5 1 < 1 < 1

5 61 6 1 < 1 < 1

6 61 7 1 < 1 < 1

7 61 8 1 < 1 < 1

8 61 9 1 < 1 < 1

(31)

Resultados Experimentais (3)

Algoritmo E L B P TL TE

BubbleSort

12 28 13 1 < 1 < 1

35 28 36 1 2 2

50 28 51 1 5 5

70 28 71 1 10 10

140 28 141 1 56 52

200 28 201 1 203 163

SelectioSort

12 31 13 1 < 1 < 1

35 31 36 1 1 1

50 31 51 1 2 2

70 31 71 1 5 4

140 31 141 1 39 25

200 31 201 1 175 89

(32)

Resultados Experimentais (3)

Algoritmo E L B P TL TE

BubbleSort

12 28 13 1 < 1 < 1

35 28 36 1 2 2

50 28 51 1 5 5

70 28 71 1 10 10

140 28 141 1 56 52

200 28 201 1 203 163

SelectioSort

12 31 13 1 < 1 < 1

35 31 36 1 1 1

50 31 51 1 2 2

70 31 71 1 5 4

140 31 141 1 39 25

200 31 201 1 175 89

(33)

Resultados Experimentais (3)

Algoritmo E L B P TL TE

BubbleSort

12 28 13 1 < 1 < 1

35 28 36 1 2 2

50 28 51 1 5 5

70 28 71 1 10 10

Maior número de variáveis

Maior o tempo de

140 28 141 1 56 52

200 28 201 1 203 163

SelectioSort

12 31 13 1 < 1 < 1

35 31 36 1 1 1

50 31 51 1 2 2

70 31 71 1 5 4

140 31 141 1 39 25

200 31 201 1 175 89

Maior o tempo de processamento

(34)

• O IDE BMCLua foi capaz de verificar violações de propriedades em códigos Lua

• Falta o tradutor do BMCLua incorporar outras estruturas e funcionalidades da linguagem Lua / NCLua

Conclusões

Trabalhos Futuros

• Adicionar uma gramática formal para analisadores (parser e lexer) de trechos de códigos com o ANTLR

• Incorporar ao middleware Ginga e implementar um plug-in para o IDE Eclipse

Referências

Documentos relacionados

Assim, mesmo que a sentença condenatória transitada em julgado tenha determinado que os juros e correção monetária iriam incidir até a data do efetivo pagamento, quando este crédito

A Tabela 4 apresenta o número total de leitos de Unidades de Terapia Intensiva do Sistema Único de Saúde, incluindo os adultos, neonatais e pediátricos, e o número de

(2016), selecionando genótipos de tomateiro para processamento com alto teor de zingibereno, concluíram que a seleção indireta de plantas com alto teor de zingibereno é eficiente

[r]

Ambas as diretrizes recomendam o tratamento com levotiroxina a pacientes com níveis séricos de TSH &gt; 10 mU/L, mas o nível de recomendação é maior na diretriz da LATS (A), contra

Ao longo desse período, o aumento no preço das tarifas foi absorvido com diferentes intensidades pela demanda de passageiros pagantes, podendo-se destacar dois períodos: o

Além disso, é apresentada uma metodologia de cálculo das emissões relativas de gases de efeito estufa com base nas emissões unitárias médias dos veículos

E tendo em vista este fato, pelo presente edital, com o prazo de 30 (trinta) dias, que será publicado na forma da lei e afixado no lugar de costume, na sede deste Juízo, sito à