Verificação de Códigos Lua Utilizando BMCLua

Slides:



Advertisements
Apresentações semelhantes
INTRODUÇÃO A COMPUTAÇÃO ENG. CIVIL
Advertisements

Soluções Iterativas com Laços
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
Augusto NevesJoão CarlosRodrigo Paula Linguagem de Programação C++ Componentes do Grupo.
Um programa em C Bibliotecas Variáveis globais
Capítulo II – Algoritmos e Programas
Linguagem de Programação IV
Algoritmos e Programação Linguagens de Programação Teoria Aula 7 (19/05) Universidade Federal do Vale do São.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Teste de Software Parte 3.
Linguagens de Programação Orientadas a Objetos
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Algoritmos e Programação Estruturada Conceitos básicos
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
Tiago Salmito SystemC Tiago Salmito
INTRODUÇÃO À PROGRAMAÇÃO
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Capítulo 3 - Russell e Norvig
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Cronograma de SCII - 2o. Ano de STPD - Profs. Fátima e Paulo
Estruturas de Repetição
e comunicação entre Processos
Com pós condição Comandos de desvio
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
João Lucas de Oliveira Torres
Ada.
PIC16F877A Linguagem C e Assembly
PIC16F877A - Parte IV Jadsonlee da Silva Sá
Introdução a linguagem Python
Universidade Federal do Amazonas
PROGRAMAÇÃO I UNIDADE 1.
A Linguagem de Programação LUA
Análise léxica e sintática
Aula prática 4 Laços Monitoria de Introdução à Programação
Python: Exceções, Iteradores e Geradores
Heap Sort TPA – Prof. Mateus Costa
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
Estruturas de Dados Módulo 3 – Controle de Fluxo
PCI- Introdução a linguagem C
Linguagem de programação
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Augusto Sampaio e Paulo Borba Centro de Informática
Análise léxica e sintática
Algoritmo e Programação
Java Bytecode Software Básico Mitsuo Takaki.
Tratamento de Exceções
Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação II
Revisão Luis Antonio Tavares
Caio Neves Leila Soriano
PCS - Departamento de Engenharia de Computação e Sistemas Digitais Projeto de Formatura – Turmas 2010 Integrantes: Professor Orientador: Co-orientador:
Recursividade Profs. De Prog2 e Lab2.
Profa. Maria Augusta Constante Puget
Influencias sobre o Projeto da Linguagem
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
ALGORITMOS Profº Antonio Carlos Marcelino de Paula 1.
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
Lua – O simples é tudo Aluno: Flávio Henrique Schuindt da Silva Características das Linguagens de Programação.
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Transcrição da apresentação:

Verificação de Códigos Lua Utilizando BMCLua 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

Verificação de Modelo Limitada Checa a negação de uma propriedade em uma dada profundidade 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.

O Verificador ESBMC Realiza a verificação de códigos ANSI-C e C++ usando solucionadores das teorias do módulo da satisfatibilidade Código Fonte C Parser C Checagem de tipo C Conversor em goto Execução Simbólica Soluciona-dor Código Fonte C++ Parser C++ Checagem de tipo C++ Valida programas sequencias ou multi-tarefas Deadlocks Estouro aritmético Divisão por zero – Limites de array – Corrida de dados – Atomicidade

A Linguagem Lua (1) 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 Linguagem de extensão utilizada por outras linguagens Interpretada, compacta e rápida, usada em diversos dispositivos – C/C++ – NCL – JAVA – Mobile – Set-Top Box

A Linguagem Lua (2) Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento

A Linguagem Lua (2) Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento 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 event.register(handler)

A Linguagem Lua (2) Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento 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 event.register(handler) OverFlow Aritmético

A Linguagem Lua (2) Defeitos em aplicações interativas para set-top box não detectados em outras fases do desenvolvimento 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 event.register(handler) OverFlow Aritmético Impacto negativo na execução das aplicações interativas, como travamentos, etc.

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 Implementar a metodologia BMCLua: Desenvolver um Ambiente de Desenvolvimento Integrado Incorporar um interpretador Lua Incorporar o verificador de modelos ESBMC

A Metodologia BMCLua Composta basicamente de um tradutor e o verificador ESBMC

A Metodologia BMCLua Composta basicamente de um tradutor e o verificador ESBMC Traduz o código Lua para ANSI-C

A Metodologia BMCLua Composta basicamente de um tradutor e o verificador ESBMC Traduz o código Lua para ANSI-C

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 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

Validação das propriedades para um 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. Validação das propriedades para um 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 Contra-exemplo da validação. Correção do código Lua Validação das propriedades para um limite M

Tradução e Verificação no BMCLua 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 n != 0 VERIFICATION FAILED 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

Tradução e Verificação no BMCLua 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 n != 0 VERIFICATION FAILED 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

Tradução e Verificação no BMCLua 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; } Verificação Violated property: file /home/BMCLua/BMCLuaC.c division by zero n != 0 VERIFICATION FAILED 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

Tradução e Verificação no BMCLua 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; } Verificação Violated property: file /home/BMCLua/BMCLuaC.c division by zero n != 0 VERIFICATION FAILED Correçã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

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

Resultados Experimentais (1) Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9

Total de elementos do array Resultados Experimentais (1) Total de elementos do array Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9

Total de elementos do array Total de linhas de código traduzido Resultados Experimentais (1) Total de elementos do array Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9 Total de linhas de código traduzido

Resultados Experimentais (1) Total de elementos do array Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9 Total de linhas de código traduzido Limite de iterações de loops realizada

Resultados Experimentais (1) Total de elementos do array Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9 Total de linhas de código traduzido Limite de iterações de loops realizada Total de propriedades verificadas

Resultados Experimentais (1) Tempo (seg) de processamento no BMCLua Total de elementos do array Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9 Total de linhas de código traduzido Limite de iterações de loops realizada Total de propriedades verificadas

Resultados Experimentais (1) Tempo (seg) de processamento no BMCLua Total de elementos do array Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9 Total de linhas de código traduzido Tempo (seg) de processamento no ESBMC Limite de iterações de loops realizada Total de propriedades verificadas

Resultados Experimentais (2) Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9

Os tempos são equivalentes do programa Lua e o C original Resultados Experimentais (2) Algoritmo E L B P TL TE Bellman-Ford 5 40 6 1 < 1 10 11 15 16 20 21 Prim 4 61 7 8 9 Os tempos são equivalentes do programa Lua e o C original

Resultados Experimentais (3) Algoritmo E L B P TL TE BubbleSort 12 28 13 1 < 1 35 36 2 50 51 5 70 71 10 140 141 56 52 200 201 203 163 SelectioSort 31 4 39 25 175 89

Resultados Experimentais (3) Algoritmo E L B P TL TE BubbleSort 12 28 13 1 < 1 35 36 2 50 51 5 70 71 10 140 141 56 52 200 201 203 163 SelectioSort 31 4 39 25 175 89

Maior o tempo de processamento Resultados Experimentais (3) Algoritmo E L B P TL TE BubbleSort 12 28 13 1 < 1 35 36 2 50 51 5 70 71 10 140 141 56 52 200 201 203 163 SelectioSort 31 4 39 25 175 89 Maior número de variáveis Maior o tempo de processamento

Conclusões Trabalhos Futuros 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 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