Uma Abordagem para Extração de Especificação CSP a partir de uma Implementação em Linguagem C Farley Millano ( [email_addr...
Agenda <ul><li>Contexto </li></ul><ul><ul><li>Sistema real de um metrô: Controlador de Portas  </li></ul></ul><ul><li>Brev...
Metrô Santiago, Chile :  Controladora Geral de Portas
Metrô: Controladora Geral de Portas <ul><li>“ O software, que é um componente da CGP (Controladora Geral de Portas), defin...
PROBLEMA!
Contexto - Problema <ul><li>Requisitos  ≠  Implementação </li></ul><ul><ul><li>Elevação de custos $$$! </li></ul></ul><ul>...
Contexto <ul><li>Conjunto de trabalhos </li></ul>Documento de Requisitos Modelagem CSP inicial Geração automática Implemen...
CSP <ul><li>Communicating Sequential Processes </li></ul><ul><ul><li>Desenvolvida na década de 70 por C. A. Hoare </li></u...
CSP <ul><li>Construtor geral de processos: </li></ul>
Linguagem C <ul><li>Surgiu dentro dos laboratórios da AT&T Bell Labs entre 1969 e 1973, por Dennis Ritchie </li></ul><ul><...
Solução...
Desenvolvimento da solução <ul><li>Solução voltada para o domínio da aplicação do estudo de caso </li></ul><ul><li>Análise...
Desenvolvimento da solução <ul><li>Análise sintática </li></ul><ul><ul><li>Refatoração </li></ul></ul><ul><ul><ul><li>Defi...
Desenvolvimento da solução <ul><li>Definição de padrões para extração </li></ul><ul><ul><li>Avaliação de estruturas sintát...
Desenvolvimento da solução <ul><li>Exemplo: </li></ul>AvaliaPrograma[ int Teclado_enviarValor_Calculadora; int Tela_enviar...
Resultado:Exemplo <ul><li>channel Teclado_enviarValor_Calculadora:Int </li></ul><ul><li>channel Tela_enviarImagem_Teclado:...
Código CGP em C 5 - Atribuições às variáveis globais.  4 – Condições externas de comandos ou notificações 2 - Escolha de e...
Trechos da extração - CGP  <ul><li>AvaliaListConst[ </li></ul><ul><li>const   int  CNT_COUNT3 = 7; </li></ul><ul><li>const...
<ul><li>AvaliaListDefinicaoVariaveis[ </li></ul><ul><li>int  CGP_informaEstadoInicialRepouso_MEMORIA; </li></ul><ul><li>.....
<ul><li>CNT_COUNT3 = 7 </li></ul><ul><li>CNT_COUNT2 = 7 </li></ul><ul><li>channel CGP_informaEstadoInicialRepouso_MEMORIA:...
<ul><li>Proc_ChaveLadoDir = </li></ul><ul><li>MEMORIA_informaChaveSeletoraLadoDireito_CGP?informouLadoDir -> </li></ul><ul...
Verificação de propriedades <ul><li>Deadlock, livelock, determinismo... </li></ul>
Verificação de propriedades <ul><li>Alcançabilidade </li></ul>Estado 6 inalcançável
Conclusão e Trabalhos futuros...
Conclusão <ul><li>Identificação de pontos de modularização no sistema </li></ul><ul><ul><li>Trechos grandes de código faze...
Trabalhos futuros <ul><li>Extensão para todo o sistema da CGP </li></ul><ul><li>Ampliação e verificação das regras para ou...
Uma Abordagem para Extração de Especificação CSP a partir de uma Implementação em Linguagem C Farley Millano ( [email_addr...
Próximos SlideShares
Carregando em…5
×

Converting an implementation using the C language to CSP modelling

505 visualizações

Publicada em

This was my presentation about my conclusion work I wrote at Centro de Informática - UFPE. It describes a case study that show an application of a mapping between the C language and CSP language.

Publicada em: Tecnologia, Negócios
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
505
No SlideShare
0
A partir de incorporações
0
Número de incorporações
31
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Converting an implementation using the C language to CSP modelling

  1. 1. Uma Abordagem para Extração de Especificação CSP a partir de uma Implementação em Linguagem C Farley Millano ( [email_address] ) Orientador: Alexandre Mota ( [email_address] )
  2. 2. Agenda <ul><li>Contexto </li></ul><ul><ul><li>Sistema real de um metrô: Controlador de Portas </li></ul></ul><ul><li>Breve descrição de CSP </li></ul><ul><li>Linguagem C </li></ul><ul><li>Mapeamento de C em CSP e Aplicação no Estudo de Caso </li></ul><ul><li>Conclusões e Trabalhos futuros </li></ul>
  3. 3. Metrô Santiago, Chile : Controladora Geral de Portas
  4. 4. Metrô: Controladora Geral de Portas <ul><li>“ O software, que é um componente da CGP (Controladora Geral de Portas), define a partir das entradas existentes, a possibilidade de abertura das portas (momento e lado de abertura) e comando de periféricos do trem, além de intertravamentos de segurança com outros equipamentos. Além do trabalho mecânico de abrir / fechar portas, o sistema também será responsável por emitir sinalizações (sonoras e luminosas) para seus operadores. A intenção é que o sistema entre em operação no projeto Santiago Linha 2, Chile. ” </li></ul><ul><li>Casos de uso escolhidos: </li></ul><ul><ul><li>Abrir porta em CML (comando manual) </li></ul></ul><ul><ul><li>Fechar porta em CML </li></ul></ul>
  5. 5. PROBLEMA!
  6. 6. Contexto - Problema <ul><li>Requisitos ≠ Implementação </li></ul><ul><ul><li>Elevação de custos $$$! </li></ul></ul><ul><ul><li>Custo/defeito só aumenta ao longo do tempo </li></ul></ul><ul><li>Como verificar? </li></ul><ul><ul><li>Formulação de “contrato” entre etapas anteriores e posteriores do ciclo de desenvolvimento </li></ul></ul><ul><li>Contrato = Especificação CSP </li></ul><ul><ul><li>Análise de propriedades: Deadlock, Livelock, Determinismo, Alcançabilidade... </li></ul></ul>
  7. 7. Contexto <ul><li>Conjunto de trabalhos </li></ul>Documento de Requisitos Modelagem CSP inicial Geração automática Implementação (Código fonte) Extração de modelo Modelagem CSP final Análise de propriedades Análise na FDR (Model Checker)
  8. 8. CSP <ul><li>Communicating Sequential Processes </li></ul><ul><ul><li>Desenvolvida na década de 70 por C. A. Hoare </li></ul></ul><ul><li>Modelagem de processos </li></ul><ul><ul><li>Comportamentos, interações e paralelismo </li></ul></ul><ul><li>Possui um bom suporte ferramental </li></ul><ul><ul><li>JCSP, C++CSP2, FDR, ProBE... </li></ul></ul>
  9. 9. CSP <ul><li>Construtor geral de processos: </li></ul>
  10. 10. Linguagem C <ul><li>Surgiu dentro dos laboratórios da AT&T Bell Labs entre 1969 e 1973, por Dennis Ritchie </li></ul><ul><li>Evolução: K&R C, C ANSI, C ISO, C99... </li></ul><ul><li>Tipos de dados usados pelo sistema: tipo inteiro int , booleano bool , enum Comando {ABRE, FECHA, PAUSA, SINALIZA} </li></ul><ul><li>Desvios condicionais usados pelo sistema: if-else e switch </li></ul>
  11. 11. Solução...
  12. 12. Desenvolvimento da solução <ul><li>Solução voltada para o domínio da aplicação do estudo de caso </li></ul><ul><li>Análise semântica </li></ul><ul><ul><li>Leitura documento de requisitos </li></ul></ul><ul><ul><li>Estudo da implementação em C </li></ul></ul><ul><ul><ul><li>Documentação do código </li></ul></ul></ul><ul><li>Objetivo: Esboço geral da extração da modelagem em CSP </li></ul>
  13. 13. Desenvolvimento da solução <ul><li>Análise sintática </li></ul><ul><ul><li>Refatoração </li></ul></ul><ul><ul><ul><li>Definição de padrão de nomenclatura </li></ul></ul></ul><ul><ul><ul><ul><li>ProcOrigem_ident_ProcDestino </li></ul></ul></ul></ul><ul><ul><ul><li>Mudança do nome da função para o nome do processo extraído: CGP_CML </li></ul></ul></ul><ul><ul><ul><li>Declaração explícita das variáveis contidas na função </li></ul></ul></ul><ul><li>Criação do processo MEMORIA </li></ul><ul><ul><li>Acesso a variáveis globais </li></ul></ul>
  14. 14. Desenvolvimento da solução <ul><li>Definição de padrões para extração </li></ul><ul><ul><li>Avaliação de estruturas sintáticas presentes no código </li></ul></ul><ul><ul><li>Definição de regras: </li></ul></ul><ul><ul><ul><li>AvaliaPrograma </li></ul></ul></ul><ul><ul><ul><li>AvaliaAtribuicao </li></ul></ul></ul><ul><ul><ul><li>AvaliaIfElse </li></ul></ul></ul><ul><ul><ul><li>AvaliaValor </li></ul></ul></ul><ul><ul><ul><li>AvaliaFuncao </li></ul></ul></ul><ul><ul><ul><li>AvaliaBloco </li></ul></ul></ul><ul><ul><ul><li>... </li></ul></ul></ul>AvaliaPrograma [ programa ] ~> AvaliaListaConst[listConst] AvaliaListaDefinicaoVariaveis[listVar] AvaliaListaFuncoes[listFunc]
  15. 15. Desenvolvimento da solução <ul><li>Exemplo: </li></ul>AvaliaPrograma[ int Teclado_enviarValor_Calculadora; int Tela_enviarImagem_Teclado; void Teclado (void){ Teclado_enviarValor_Calculadora = 1; Teclado_enviarImagem_Tela = 1; } ] Canais Processo Comunicações
  16. 16. Resultado:Exemplo <ul><li>channel Teclado_enviarValor_Calculadora:Int </li></ul><ul><li>channel Tela_enviarImagem_Teclado:Int </li></ul><ul><li>Teclado = </li></ul><ul><li>Teclado_enviarValor_Calculadora.1-> </li></ul><ul><li>Teclado_enviarImagem_Tela.1->SKIP </li></ul>
  17. 17. Código CGP em C 5 - Atribuições às variáveis globais. 4 – Condições externas de comandos ou notificações 2 - Escolha de estado do lado das portas 3 – Ações de acordo com cada estado 1 - Verificações iniciais
  18. 18. Trechos da extração - CGP <ul><li>AvaliaListConst[ </li></ul><ul><li>const int CNT_COUNT3 = 7; </li></ul><ul><li>const int CNT_COUNT2 = 7; </li></ul><ul><li>] </li></ul><ul><li>~> </li></ul><ul><li>AvaliaConst[ const int CNT_COUNT3 = 7;] </li></ul><ul><li>AvaliaListConst[ const int CNT_COUNT2 = 7;] </li></ul><ul><li>~> </li></ul><ul><li>CNT_COUNT3 = AvaliaValor [7;] </li></ul><ul><li>CNT_COUNT2 = AvaliaValor [7;] </li></ul><ul><li>~> </li></ul><ul><li>CNT_COUNT3 = 7 </li></ul><ul><li>CNT_COUNT2 = 7 </li></ul>
  19. 19. <ul><li>AvaliaListDefinicaoVariaveis[ </li></ul><ul><li>int CGP_informaEstadoInicialRepouso_MEMORIA; </li></ul><ul><li>... </li></ul><ul><li>bool MEMORIA_informaChaveKLOANSelecionada_CGP;] </li></ul><ul><li>~> </li></ul><ul><li>AvaliaDefinicaoVariavel[ int CGP_informaEstadoInicialRepouso_MEMORIA;] </li></ul><ul><li>... </li></ul><ul><li>AvaliaDefinicaoVariavel[ bool MEMORIA_informaChaveKLOANSelecionada_CGP;] </li></ul><ul><li>~> </li></ul><ul><li>channel CGP_informaEstadoInicialRepouso_MEMORIA: AvaliaTipo[int] </li></ul><ul><li>... </li></ul><ul><li>channel MEMORIA_informaChaveKLOANSelecionada_CGP: AvaliaTipo[bool] </li></ul><ul><li>~> </li></ul><ul><li>channel CGP_informaEstadoInicialRepouso_MEMORIA: Int </li></ul><ul><li>... </li></ul><ul><li>channel MEMORIA_informaChaveKLOANSelecionada_CGP: Bool </li></ul>
  20. 20. <ul><li>CNT_COUNT3 = 7 </li></ul><ul><li>CNT_COUNT2 = 7 </li></ul><ul><li>channel CGP_informaEstadoInicialRepouso_MEMORIA: Int </li></ul><ul><li>... </li></ul><ul><li>channel MEMORIA_informaChaveKLOANSelecionada_CGP: Bool </li></ul><ul><li>Datatype Comando = ABRE | FECHA | SINALIZA | PAUSA </li></ul><ul><li>channel CGP_receberComandoDireito_MEMORIA: Comando </li></ul><ul><li>channel CGP_receberComandoEsquerdo_MEMORIA: Comando </li></ul><ul><li>CGP_CML = </li></ul><ul><li>MEMORIA_informaVelocidadeMenorQueTres_CGP?informouVel  </li></ul><ul><li>if( informouVel == true ) then </li></ul><ul><li>Proc_ChaveLadoDir; Proc_ChaveLadoEsq </li></ul><ul><li>else </li></ul><ul><li>CGP_receberComandoDireito_MEMORIA.FECHA  </li></ul><ul><li>CGP_receberComandoEsquerdo_MEMORIA.FECHA  </li></ul><ul><li>CGP_informarProximoEstadoDireita_MEMORIA.0  </li></ul><ul><li>CGP_informarProximoEstadoEsquerda_MEMORIA.0  SKIP </li></ul>Canais E Constantes AvaliaFuncao[ void CGP_CML( void ) ... ] AvaliaIfElse[ if(MEMORIA_informaVelocidadeMenorQueTres_CGP == TRUE ){... ] AvaliaIfElse[ if(MEMORIA_informaChaveSeletoraLadoDireito_CGP == TRUE ) {... ]... Próximo slide => AvaliaListAtribuicao[ CGP_receberComandoDireito_MEMORIA = FECHA; CGP_receberComandoEsquerdo_MEMORIA = FECHA; CGP_informarProximoEstadoDireita_MEMORIA = 0; CGP_informarProximoEstadoEsquerda_MEMORIA = 0; ]
  21. 21. <ul><li>Proc_ChaveLadoDir = </li></ul><ul><li>MEMORIA_informaChaveSeletoraLadoDireito_CGP?informouLadoDir -> </li></ul><ul><li>If(informouLadoDir == true) then </li></ul><ul><li>CGP_informarProximoEstadoDireita_MEMORIA.0 -> </li></ul><ul><li>MEMORIA_informaChaveKLOANSelecionada_CGP?informouChave-> </li></ul><ul><li>MEMORIA_informaBotaoFechamentoDireitoConsole_CGP?informouBotaoCon-> </li></ul><ul><li>MEMORIA_informaBotaoFechamentoDireitoLateral_CGP?informouBotaoLat-> </li></ul><ul><li>If(informouChave == true and informouBotaoCon == false and informouBotaoLat == false ) then </li></ul><ul><li>CGP_estadoInicialPortasFechadasCMLDireita_MEMORIA.true-> </li></ul><ul><li>CGP_estadoInicialPortasFechadas_MEMORIA.true-> </li></ul><ul><li>CGP_receberComandoDireito_MEMORIA.ABRE-> </li></ul><ul><li>CGP_executarComandoGongo_MEMORIA.false-> </li></ul><ul><li>CGP_informarProximoEstadoDireita_MEMORIA.1->SKIP </li></ul><ul><li>else </li></ul><ul><li>CGP_informarProximoEstadoDireita_MEMORIA.0->SKIP </li></ul><ul><li> </li></ul><ul><li>[ ] </li></ul><ul><li>- - demais estados do lado direito </li></ul><ul><li>else </li></ul><ul><li>CGP_informarProximoEstadoDireita_MEMORIA?informouEstDir -> </li></ul><ul><li>MEMORIA_informaChaveSeletoraLadoEsquerdo_CGP?informouChaveLadoEsq-> </li></ul><ul><li>KISOL?k -> </li></ul><ul><li>If(informouEstDir != 0 and informouChaveLadoEsq == true and k == false ) then </li></ul><ul><li>CGP_executarComandoGongo_MEMORIA.false -> </li></ul><ul><li>CGP_habilitarSinalizacaoInicioFechamento_MEMORIA.false -> </li></ul><ul><ul><ul><ul><ul><li>CGP_zerarContadorGongo_MEMORIA.false-> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CGP_zerarTemporizador_MEMORIA.false-> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CGP_receberComandoDireito_MEMORIA.FECHA-> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>MEMORIA_informaChaveKLOANSelecionada_CGP.false-> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CGP_informaEstadoInicialRepouso_MEMORIA.0-> </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CGP_informarProximoEstadoDireita_MEMORIA.0->SKIP </li></ul></ul></ul></ul></ul><ul><li>else </li></ul><ul><li>SKIP </li></ul><ul><li>Proc_ChaveLadoEsq = </li></ul><ul><li>Proc_ChaveLadoDir [e1Dir <- e1Esq, ... ,eNDir <- eNEsq] </li></ul><ul><li>AvaliaSwitch[ </li></ul><ul><li>switch( CGP_informarProximoEstadoDireita_MEMORIA ) { </li></ul><ul><li>case 0: </li></ul><ul><ul><li>if( (CGP_informaChaveKLOANSelecionada_MEMORIA == TRUE ) && </li></ul></ul><ul><ul><li>(MEMORIA_informaBotaoFechamentoDireitoConsole_CGP == FALSE ) && </li></ul></ul><ul><ul><li>(MEMORIA_informaBotaoFechamentoDireitoLateral_CGP == FALSE ) ) {... </li></ul></ul><ul><ul><li>] </li></ul></ul>
  22. 22. Verificação de propriedades <ul><li>Deadlock, livelock, determinismo... </li></ul>
  23. 23. Verificação de propriedades <ul><li>Alcançabilidade </li></ul>Estado 6 inalcançável
  24. 24. Conclusão e Trabalhos futuros...
  25. 25. Conclusão <ul><li>Identificação de pontos de modularização no sistema </li></ul><ul><ul><li>Trechos grandes de código fazendo o mesmo trabalho </li></ul></ul><ul><ul><ul><li>Construção de sub-processo e renomeação nos canais diferentes </li></ul></ul></ul><ul><li>Definição de um conjunto de regras de mapeamentos de C para CSP </li></ul><ul><ul><li>Geração da especificação da CGP em CSP </li></ul></ul><ul><li>Avaliação de propriedades: Deadlock, Livelock, Determinismo e... Alcançabilidade </li></ul>
  26. 26. Trabalhos futuros <ul><li>Extensão para todo o sistema da CGP </li></ul><ul><li>Ampliação e verificação das regras para outras estruturas de C </li></ul><ul><li>Compatibilização deste trabalho com outros relacionados </li></ul><ul><ul><li>Refinamentos: Requisitos e Implementação </li></ul></ul><ul><li>Automatização via plugin para uma IDE como Eclipse </li></ul><ul><ul><li>“ Check-up” a cada marco do ciclo de desenvolvimento </li></ul></ul>
  27. 27. Uma Abordagem para Extração de Especificação CSP a partir de uma Implementação em Linguagem C Farley Millano ( [email_address] ) Orientador: Alexandre Mota ( [email_address] )

×