Uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em...

Post on 17-Apr-2015

110 views 2 download

Transcript of Uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em...

uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em modelos alloy

Ronaldo Rodrigues FerreiraLaboratório de Sistemas Embarcados

Instituto de Informática - UFRGS

Trabalho submetido ao SBES 2008 juntamente comEmilena Specht, Lisane Brisolara, Julio Mattos, Érika Cota e Luigi Carro

2Seminário PPGInf - 27 de Maio - UCPEL

3Seminário PPGInf - 27 de Maio - UCPEL

convergência)heterogeneidade

Complexidade SWComplexidade SW

ComunicaçãoComunicação

4Seminário PPGInf - 27 de Maio - UCPEL

valor agregado está no software)hardware é commodity

5Seminário PPGInf - 27 de Maio - UCPEL

tempo de projeto

rentabilidade

qualidade

softwarehardware

bateria

restrições físicas

6Seminário PPGInf - 27 de Maio - UCPEL

desenvolvimento embarcado

)agenda

• Estado atual do SW embarcado• Show me where I can spend some dollars• Alloy

oMáquina de Vendas de Bebidas• Nossa proposta

o Exploração do espaço de projeto• O que tem por aí• O que pretendemos

Seminário PPGInf - 27 de Maio - UCPEL 7

)estado atual SW embarcado

• SW não é o produto, mas parte dele• Pouca automação• Práticas generalistas de Engenharia de SW• UML somente casos de uso• 60% a 90% dos projetos são similares• SW é usado como “cola”• Métodos formais...

Seminário PPGInf - 27 de Maio - UCPEL 8

Seminário PPGInf - 27 de Maio - UCPEL 9

Seminário PPGInf - 27 de Maio - UCPEL 10

)abordagens comerciais

Delayinserted

Mathwork Simulink

Esterel SCADE

)alloy

• Linguagem de modelagem• Declarativa• Sintaxe OO, semântica relacional

o Tudo é relação• Alloy analyzer• Small scope hypothesis

o Teste vs. Escopo Completo• Bounded model checking• SAT

Seminário PPGInf - 27 de Maio - UCPEL 11

Completeness threshold

Seminário PPGInf - 27 de Maio - UCPEL 12

open util/ordering[Estado] as ordabstract sig Bebida { preco: Int }sig Agua extends Bebida {}sig Refrigerante extends Bebida {}sig Cha extends Bebida {}sig Ficha {}sig MaquinaVendas{ fichas: set Ficha, bebidas: set Bebida}sig Estado { maquina: MaquinaVendas }

)alloy

fact EstadoInicial { let s0 = ord/first.maquina | no s0.fichas let s0 = ord/first.maquina | all d:Bebida | d in s0.bebidas some Cha and some Agua and some Refrigerante}fact CompraBebidas { all s: Estado, s': ord/next[s] | some d: Bebida | some c: Ficha | d.preco <= #s.maquina.fichas => compraBebida[s.maquina,s'.maquina,d] else adicionaFicha[s.maquina,s'.maquina,c]}fact Precos { all w: Agua | w.preco = 1 all s: Refrigerante | s.preco = 2 all t: Cha | t.preco = 3}fact QuantidadeMaximaFichas { #Ficha = (sum d : Bebida | d.preco) }fact SempreFazAlgo{ all s:Estado,s': s.ord/next | s.maquina.fichas != s'.maquina.fichas }fact TodasMaquinasEmAlgumEstado{ all m:MaquinaVendas | some s: Estado | m in s.maquina }

pred compraBebida[m, m': MaquinaVenda, d: Bebida] { m'.bebidas = m.bebidas - d #m'.fichas = #m.fichas - d.preco}pred adicionaFicha[m, m': MaquinaVenda, c: Ficha] { m'.fichas = m.fichas + c m'.bebidas = m.bebidas}

)nossa propostaSeminário PPGInf - 27 de Maio - UCPEL 13

Requisitos da Aplicação

Modelo AlloyAlloy Analyzer

Tradutor de Código

Código Java

Anotações Alloy

Repositório Java

Requisitos Funcionais

Código Legado

Verificação do Modelo

Estimador e Avaliador

Requisitos Não-Funcionais

FemtoJavaPipeline

FemtoJavaMulticycle

FemtoJavaVLIW

Plataforma Alvo + SW Bytecode

Exploração do Espaço de

Projeto

Usa a Alloy Annotation Language (espécie de JML) para anotar o código Java.

Oferece reuso e verificação formal.

Geração automática do modelo Alloy correspondente.Implementa a JVM em hardware.

Desenvolvido por nosso grupo.

Não implementa ainda toda a biblioteca padrão do Java.

A tradução está pronta para classes, métodos, herança, polimorfismo.

Somente o modelo de computação untimed.

É gerado O(4k) versões do código Java, onde o 4 é o # de estruturas da Javolution e k é a quantidade de relações n-árias de multiplicidade set no modelo.Ferramenta DESEJOS.

Avalia propriedades físicas: memória ocupada, potência, energia, número de ciclos.

Código deve ser inteiramente Java.

code generation process step by step

classes and attributes

methods

inheritance and polymorphism

state machine

open util/ordering[State] as ordabstract sig Drink { price: Int }sig Water extends Drink{}sig Softdrink extends Drink{}sig Tea extends Drink{}sig Coin {}sig VendingMachine{ coinStorage: set Coin, drinkStorage: set Drink}sig State{ machine: VendingMachine}

public class VendingMachine { protected LinkedList<Drink> drinkStorage; protected LinkedList<String> coinStorage; public VendingMachine() { this.drinkStorage = new LinkedList<Drink>(); this.coinStorage = new LinkedList<String>(); } ...

Here is where the generation processtakes advantages on the amount of generated lines of code

code generation process step by stepclasses and attributesmethods

pred buyDrink[m, m': VendingMachine, d: Drink] { m'.drinkStorage= m.drinkStorage - d #m'.coinStorage = #m.coinStorage - d.price}pred addCoin[m, m': VendingMachine, c: Coin] { m'.coinStorage = m.coinStorage + c m'.drinkStorage = m.drinkStorage}

public class VendingMachine {… public void addCoin(String c) { AlloyOperations.alloyUnion(this.coinStorage,c); } public void buyDrink_Water(Water d) { AlloyOperations.alloySubtraction(this.drinkStorage,new Water(d)); } public void buyDrink_Softdrink(Softdrink d) { AlloyOperations.alloySubtraction(this.drinkStorage,new Softdrink(d)); }public void buyDrink_Tea(Tea d) { AlloyOperations.alloySubtraction(this.drinkStorage,new Tea(d)); }}

if inference is impossible,generate as static withinthe Main class

generate all possiblemethods in order tosimplify the statemachine branchingprocess

code generation process step by stepmethodsstate machinerun addCoin

run buyDrinkrun { no ord/last.machine.drinkStorage and no ord/last.machine.drinkStorage } for 14

public class Main { public static void main(String[] args) { VendingMachine machine = new VendingMachine(); Menu menu_enum = Menu.done; InputStreamReader stdin = new InputStreamReader(System.in); BufferedReader console = new BufferedReader(stdin); try { while(true){ if(menu_enum.ordinal()==Menu.addcoin.ordinal()) { try { System.out.println("Enter Coin:"); String c = console.readLine(); machine.addCoin(c); } catch (IOException e) { e.printStackTrace(); } finally { menu_enum = Menu.done; } }...

only manual step in allcode generation process

treatment of I/O based oneach formal parameter list

Untimed MoC only

exploração do espaço de projeto )nossa proposta

• Uso da ferramenta DESEJOS, desenvolvida no grupo

• Estima memória ocupada, desempenho (ciclos), energia consumida e potência média

• FemtoJava (por isso a Javolution para EDs)• Oferecer seleção automática da solução para

os RNFs da aplicação

Seminário PPGInf - 27 de Maio - UCPEL 17

)linhas de códigoSeminário PPGInf - 27 de Maio - UCPEL 18

Ganhos de até

6.2x!!!!!

Seminário PPGInf - 27 de Maio - UCPEL 19

)trabalhos relacionados

UC @ BerkeleyPtolemy II

•Suporte a 18 modelos de computação•Geração de código C para alguns

)trabalhos futuros

• Suporte ao modelo de computação Synchronous Data Flow

• Codificação do repositório Java e de anotações AAL

• Melhorar o tratamento de E/S• DSE automática• Utilizar a fórmula booleana produzida (BMC)

para a síntese da máquina de estados

Seminário PPGInf - 27 de Maio - UCPEL 20

)pessoasSeminário PPGInf - 27 de Maio - UCPEL 21

Érika CotaEmilena SpechtLuigi Carro

Lisane BrisolaraRonaldo Ferreira Julio Mattos

22Seminário PPGInf - 27 de Maio - UCPEL

Trabalho Financiado através de uma bolsa do programa PIBIC/CNPq/UFRGS

rrferreira@inf.ufrgs.br

http://www.inf.ufrgs.br/~rrferreira

http://www.inf.ufrgs.br/~lse