A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em modelos alloy Ronaldo Rodrigues Ferreira Laboratório de Sistemas.

Apresentações semelhantes


Apresentação em tema: "Uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em modelos alloy Ronaldo Rodrigues Ferreira Laboratório de Sistemas."— Transcrição da apresentação:

1 uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em modelos alloy Ronaldo Rodrigues Ferreira Laboratório de Sistemas Embarcados Instituto de Informática - UFRGS Trabalho submetido ao SBES 2008 juntamente com Emilena Specht, Lisane Brisolara, Julio Mattos, Érika Cota e Luigi Carro

2 2Seminário PPGInf - 27 de Maio - UCPEL

3 3 convergência )heterogeneidade Complexidade SW Comunicação

4 4Seminário PPGInf - 27 de Maio - UCPEL valor agregado está no software )hardware é commodity

5 5Seminário PPGInf - 27 de Maio - UCPEL tempo de projeto rentabilidade qualidade software hardware bateria restrições físicas

6 6Seminário PPGInf - 27 de Maio - UCPEL desenvolvimento embarcado

7 )agenda Estado atual do SW embarcado Show me where I can spend some dollars Alloy o Má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 - UCPEL7

8 )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 - UCPEL8

9 9

10 10 )abordagens comerciais Mathwork Simulink Esterel SCADE

11 )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 - UCPEL11 Completeness threshold

12 Seminário PPGInf - 27 de Maio - UCPEL12 open util/ordering[Estado] as ord abstract 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 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 }

13 )nossa proposta Seminário PPGInf - 27 de Maio - UCPEL13 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(4 k ) 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.

14 code generation process step by step classes and attributes methods inheritance and polymorphism state machine open util/ordering[State] as ord abstract 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 drinkStorage; protected LinkedList coinStorage; public VendingMachine() { this.drinkStorage = new LinkedList (); this.coinStorage = new LinkedList (); }... Here is where the generation process takes advantages on the amount of generated lines of code

15 code generation process step by step classes and attributes methods 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 within the Main class generate all possible methods in order to simplify the state machine branching process

16 code generation process step by step methods state machine run addCoin run buyDrink run { 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 all code generation process treatment of I/O based on each formal parameter list Untimed MoC only

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

18 )linhas de código Seminário PPGInf - 27 de Maio - UCPEL18 Ganhos de até 6.2x!!!!!

19 Seminário PPGInf - 27 de Maio - UCPEL19 )trabalhos relacionados Berkeley Ptolemy II Suporte a 18 modelos de computação Geração de código C para alguns

20 )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 - UCPEL20

21 )pessoas Seminário PPGInf - 27 de Maio - UCPEL21 Érika Cota Emilena Specht Luigi Carro Lisane Brisolara Ronaldo Ferreira Julio Mattos

22 22Seminário PPGInf - 27 de Maio - UCPEL Trabalho Financiado através de uma bolsa do programa PIBIC/CNPq/UFRGS


Carregar ppt "Uma abordagem para síntese de software embarcado e exploração de espaço de projeto baseada em modelos alloy Ronaldo Rodrigues Ferreira Laboratório de Sistemas."

Apresentações semelhantes


Anúncios Google