Upload
internet
View
106
Download
2
Embed Size (px)
Citation preview
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
http://www.inf.ufrgs.br/~rrferreira
http://www.inf.ufrgs.br/~lse