1 / 22

Método Formal B

Método Formal B. Alunos: Eduardo Akira Yonekura Rogério Esteves Salustiano. Tópicos abordados. Histórico Introdução Notação Aplicação ao Estudo de Caso B-Toolkit Conclusões Desvantagens Vantagens Referências Bibliográficas. Histórico. Desenvolvido por J.R. Abrial em 1985.

otylia
Download Presentation

Método Formal B

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Método Formal B Alunos: Eduardo Akira Yonekura Rogério Esteves Salustiano

  2. Tópicos abordados • Histórico • Introdução • Notação • Aplicação ao Estudo de Caso • B-Toolkit • Conclusões • Desvantagens • Vantagens • Referências Bibliográficas

  3. Histórico • Desenvolvido por J.R. Abrial em 1985. • Uma “extensão” com melhorias de VDM e Z. • Aceitação na indústria a partir de 1992, a partir de estudos de casos bem sucedidos. • O método B foi utilizado no projeto do controle dos trens do metrô de Paris (1998)

  4. Introdução • B utiliza o conceito de Máquinas Abstratas (Abstract Machines), que encapsulam: estados: que consistem de variáveis restringidas por invariantes (tipos das variáveis). operações: que modificam o estado das variáveis, porém sem alterar os invariantes. • As MACHINEs podem ser vistas como Classes, porém com um nível de detalhamento muito mais rigoroso. • As MACHINEs trabalham com o conceito de substituição: a única maneira de fazer a máquina ter progresso é alterar (substituir) o valor do seu estado.

  5. Notação – cláusulas de uma máquina MACHINEdefine o nome da máquina abstrata EXTENDSpermiteimportar instâncias de outras máquinas SEES outras máquinas que serão utilizadas dentro desta SETS especifica os conjuntos que são manipulados CONSTANTS define todas as constantes que são manipuladas PROPERTIES expressões lógicas que são satisfeitas pelas constantes VARIABLES define as variáveis utilizadas na máquina DEFINITIONS uma série de definições utilizadas na máquina INVARIANT propriedade dos atributos definidos nas VARIABLES INITIALIZATION atribuição de valores iniciais às VARIABLES OPERATIONS define todas as operações (procedimentos e funções) da máquina; deve ser a última cláusula a ser declarada END fim da máquina abstrata

  6. Notação – exemplo MACHINE machine_name VARIABLES var1, var2 ... SEES machine1, machine2, ... INVARIANT var1  tipo1, var2  tipo2, ... INITIALIZATION var1 := val1, var2 := var2 ... OPERATIONS operação_1(var_aux1, var_aux2, ...) PRE var_aux1  tipo1, var_aux2  tipo2, ... THEN <executa substituição de var1, var2, ...> END; ret_value  operação_2 BEGIN <atribui valor ao ret_value> END; ... END

  7. Diagrama de Classes do Sistema de Elevadores

  8. Notação • MACHINE • Ex: MACHINE Elevador • SETS • Ex: DIREC = {sobe,desce}; P_STATUS = {aberta,fechada}; BOTAO_ESTADO = {botao_on,botao_off}; ELEV_ESTADO = {pronto,em_mov,em_visita} • PROPERTIES • Ex: terreo : NAT & ultimo : NAT

  9. Notação • VARIABLES • Ex: elev, dir, andar_dest, por_stat, est_elev • INVARIANT • Ex: elev <: ELEVADOR & botao <: BOTAO ultimo > terreo

  10. Notação • OPERATIONS chama_elevador(ll,fl) = PRE ll : elev & fl : ANDAR THEN ... WHEN est_elev(ll) = pronto & fl > andar_dest(ll) THEN andar_dest(ll):= fl || dir(ll) := sobe || est_elev(ll) := em_mov

  11. Ferramenta B-Toolkit

  12. Ferramenta B-Toolkit

  13. Especificação B para o sistema de elevadores

  14. Vantagens e Desvantagens • Desvantagens • Alto grau de complexidade. • Não é trivial encontrar bons invariantes. • Poucas ferramentas disponíveis (Atelier-B e B-Toolkit). • Vantagens • Métodos de prova “exatos” (gerados automaticamente ou pelo usuário). • As especificações são geradas utilizando uma abordagem incremental, o que facilita a especificação de um sistema complexo. • Boa interação com UML e Statecharts. • Extensa bibliografia com estudos de casos complexos. • Boa aceitação na indústria.

  15. Referências Bibliográficas • Using the B formal approach for incremental specification design of interactive systems. Yamine Ait-Ameur, et. al. • Supplementing a UML development process with B. Helen Treharne. FME 2002. • Using B formal specifications for analysis and verification of UML/OCL models. R. Marcano. UML 2002, Model Engineering, Concepts and Tools. Workshop on Consistency Problems in UML-based Software Development. • B Toolkit - User´s manual

  16. Sistema de elevadores  MACHINE Types MACHINE Types SETS OBJECTS; DIREC = {sobe,desce}; P_STATUS = {aberta,fechada}; BOTAO_ESTADO = {botao_on,botao_off}; ELEV_ESTADO = {pronto,em_mov,em_visita} CONSTANTS terreo, ultimo, ELEVADOR, BOTAO PROPERTIES terreo : NAT & ultimo : NAT & terreo < ultimo & ELEVADOR <: OBJECTS & BOTAO <: OBJECTS END

  17. Sistema de elevadores  MACHINE Elevador MACHINE Elevador SEES Types VARIABLES elev, dir, andar_dest, por_stat, est_elev INVARIANT elev <: ELEVADOR & dir : elev-->DIREC & andar_dest : elev-->ANDAR & por_stat : elev-->P_STATUS & est_elev : elev-->ELEV_ESTADO INITIALISATION ANY ll WHERE ll <: ELEVADOR & ll /= {} THEN elev := ll /* || */ /* dir := ll * {dir_sobe} /* || */ /* andar_dest := ll * {terreo} || */ /* por_stat := ll * {p_fechado} || */ /* est_elev := ll * {pronto} */ END DEFINITIONS ANDAR == {terreo,ultimo} OPERATIONS elevador_desce(ll) = PRE ll : elev THEN dir(ll) := desce END; elevador_sobe(ll) = PRE ll : elev THEN dir(ll) := sobe END; elevador_setdestino(ll,fl) = PRE ll : elev & fl : ANDAR THEN andar_dest(ll) := fl END; fl <-- elevador_getDestino(ll) = PRE ll : elev THEN fl := andar_dest(ll) END;

  18. Sistema de elevadores  MACHINE Elevador (cont.) elevador_fechport(ll) = PRE ll : elev THEN por_stat(ll) := p_fechado END; elevador_abrport(ll) = PRE ll : elev THEN por_stat(ll) := p_aberta END END

  19. Sistema de elevadores  MACHINE Botão MACHINE Botao SEES Types USES Elevador VARIABLES botao, botao_andar, botao_estado, elev_botao INVARIANT botao <: BOTAO & botao_andar : botao --> ANDAR & ran(botao_andar) = ANDAR & botao_estado : botao --> BOTAO_ESTADO & elev_botao : botao --> elev & ran(botao_elev) = elev & !(ll,fl).(ll:elev & fl : ANDAR => card(botao_elev~[{ll}]/\botao_andar~[{fl}] ) = 2 ) INITIALISATION ANY bb, ff, lb WHERE bb <: BOTAO & ff : bb --> ANDAR & ran(ff) = ANDAR & lb : bb -->elev & !(ll,fl).(ll:elev & fl : ANDAR => card(lb~[{ll}]/\ff~[{fl}] ) = 2 ) THEN botao := bb || botao_andar := ff || botao_estado := bb * {botao_off} || elev_botao := lb END DEFINITIONS ANDAR == (terreo...ultimo) OPERATIONS fl <-- botao_getAndar(bt) = PRE bt : botao THEN fl := botao_andar(bt) END; botao_mudaOffOn(bt) = PRE bt : botao & botao_estado(bt) = botao_off THEN botao_estado(bt) := botao_on END;

  20. Sistema de elevadores  MACHINE Botão (cont.) botao_mudaOnOff(bt) = PRE bt: botao & botao_estado(bt) = botao_on THEN botao_estado(bt) := botao_off END; bt1,bt2 <-- getBotao(ll,fl) = PRE ll : elev & fl : ANDAR THEN ANY b1,b2 WHERE b1 : botao & b2 : botao & (b1,b2) = botao_elev~[{ll}] /\ botao_andar~[{fl}] THEN bt1 := b1 || bt2 := b2 END END; ll <-- getElevador(bt) = PRE bt : botao THEN ll := elev_botao(bt) END END

  21. Sistema de Elevadores  MACHINE Controle MACHINE Controle SEES Types VARIABLES elev, dir, andar_dest, por_stat, est_elev, botao, botao_andar, botao_estado, elev_botao INVARIANT elev <: ELEVADOR & dir : elev --> DIREC & andar_dest : elev--> ANDAR & por_stat : P_STATUS & est_elev : elev --> ELEV_ESTADO & botao <: BOTAO & botao_andar : botao --> ANDAR & /* ran(botao_andar) : botao --> ANDAR & */ botao_estado : botao --> BOTAO_ESTADO elev_botao : botao --> elev /* & */ /* ran(elev_botao) = elev /* & */ /* !(ll,fl).(ll:elev & fl : ANDAR => card(botao_elev~[{ll}]/\botao_andar~[{fl}] ) = 2 ) */ INITIALISATION ANY ll,bb,ff,lb WHERE ll <: ELEVADOR & ll /= {} & bb <: BOTAO & ff : bb --> ANDAR & ran(ff) = ANDAR & lb : bb --> ll & /* ran(lb) = ll & */ /* !(li,fl).(li:elev & fl : ANDAR => card(lb~[{li}]/\ff~[{fl}] ) = 2 ) */ THEN elev := ll || dir := ll * {sobe} || andar_dest := ll * {terreo} || por_stat := ll * {} || est_elev := ll * {pronto} || botao := bb || botao_andar := ff || botao_estado := bb * {botao_off} || elev_botao := lb END DEFINITIONS ANDAR == {terreo..ultimo}

  22. Sistema de Elevadores  MACHINE Controle (cont.) OPERATIONS elevador_ocupado(ll) = PRE ll : elev THEN SELECT est_elev(ll) = em_visita THEN por_stat(ll) := fechada || est_elev(ll) := pronto ELSE skip END END; chama_elevador(ll,fl) = PRE ll : elev & fl : ANDAR THEN SELECT est_elev(ll) = em_visita & fl = andar_dest(ll) THEN por_stat(ll) := aberta || est_elev(ll) := em_visita WHEN est_elev(ll) = pronto & fl > andar_dest(ll) THEN andar_dest(ll):= fl || dir(ll) := sobe || est_elev(ll) := em_mov ELSE skip END END; elevador_chega(ll,fl) = PRE ll : elev & fl : ANDAR THEN SELECT est_elev(ll) = em_mov & fl = andar_dest(ll) THEN ANY b1,b2 WHERE b1 : botao & b2 : botao & (b1,b2) = elev_botao~[{ll}] /\ botao_andar~[{fl}] THEN botao_estado := botao_estado<+{b1|->botao_off,b2|->botao_off} END || est_elev(ll) := em_visita || por_stat(ll) := aberta ELSE skip END END; aperta_botao(bt) = PRE bt : botao THEN SELECT botao_estado(bt) = botao_off THEN botao_estado(bt) := botao_on ELSE skip END END END

More Related