Métodos Formais
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 1
Métodos Formais
São técnicas baseadas em formalismos
matemáticos para a especificação,
desenvolvimento e verificação dos sistemas de
softwares e hardwares.
Na Ciência da Computação...
... o termo método formal foi restrito para o uso de
notação formal para representar modelos de
©Ian Sommerville - Software Engineering
– TraduçãoProf
Pedro Fernandes -o
Métodos
Formais, 6o Períodode
Slide 2
sistemas
durante
processo
Métodos Formais

Não se tornaram as principais técnicas de
desenvolvimento de software
•
•
•
•
•
Outras técnicas foram utilizadas que resultou em melhorias na
qualidade do software.
O time-to-market é preferível.
O escopo de métodos formais é limitado.
A formalização é bem sucedida em domínios restritos ou
organizados.
No desenvolvimento de software não se pode validar
resultados apenas provando teoremas.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 3
Benefícios de Métodos Formais






Usados para reduzir o número de erros do
sistema.
Reduz tempo de desenvolvimento.
Proporciona melhor documentação.
Melhora a comunicação (entre equipe com o
usuário).
Facilita manutenção.
Ajuda a organizar as atividades durante o ciclo
de vida.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 4
Métodos Formais



Especificação Formal.
Análise e prova da especificação.
Verificação do programa.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 5
Especificação Formal
É uma especificação expressa em uma
determinada linguagem cujo vocabulário, sintaxe
e semântica são formalmente definidos e rígidos.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 6
Especificação Formal

Especificação vs. Implementação
–

O quê? vs. Como?
Especificações formais vs. especificações
informais
–
Formais: A notação utilizada possui uma sintaxe e uma
semântica totalmente precisa
–
Informal: Escritas em linguagem natural
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 7
Especificação Formal

Uma especificação formal provê:




Uma notação (domínio sintático);
Um universo de objetos (domínio semântico);
Regra precisa que define que objetos satisfazem cada
especificação.
Uma especificação é uma sentença escrita em
termos de elementos do domínio sintático.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 8
Especificação Formal

Uma linguagem de especificação é uma tripla
<Sin, Sem, Sat>:



Sin e Sem são conjuntos.
Sat é uma relação entre Sin e Sem.
Se Sat(sin, sem), então sin é uma especificação de sem, e
sem é um especificando de sin.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 9
Domínio Sintático

Definido em termos de:




um conjunto de símbolos (por exemplo, constantes,
variáveis e conectores lógicos).
Um conjunto de regras gramaticais para combinar esses
símbolos.
Necessidade de sentenças bem formadas.
O domínio sintático não se restringe a um
formato textual. Pode-se usar elementos
gráficos.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 10
Domínio Semântico


As linguagens de especificação diferem na
escolha do domínio semântico.
Exemplos:



Linguagens de especificação de tipos abstratos de dados.
Linguagens de especificação de sistemas distribuídos e
concorrentes.
Linguagens de programação.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 11
Propriedades de uma
Especificação

Não ambigüidade:


Consistente:


Deve ter uma interpretação semântica significativa.
Completa:


Cada especificação é mapeada em exatamente um
especificando.
A coleção de propriedades especificadas deve ser
suficiente para estabelecer compatibilidade com
especificações de mais alto nível.
Mínima
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 12
Especificação no Processo de
Software
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 13
Custo do Processo de Software
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 14
Técnicas de Especificação

Algébrica
–

O sistema é descrito em termos de operações e
relacionamentos entre elas.
Baseada em modelo
–
Um modelo do sistema é construído usando construções
matemáticas tais como conjuntos e seqüências e as
operações são definidas em termos de como elas alteram o
estado do sistema.
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 15
Linguagens de Especificação
Formal
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 16
Estrutura de uma Especificação
Algébrica
< Nome da Especificação>
sort
< nome >
imports
< LISTA DE NOMES DA ESPECIFICAÇÃO>
Descrição informal do sort e de suas operações
Assinaturas de operação, que estabelecem os nomes e os
tipos de parâmetros às operações definidas sobre o sort
Axiomas que definem as operções sobre o sort
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 17
Componentes da Especificação

Introdução
–

Descrição
–

Descreve informalmente as operações
Assinatura
–

Define o sort (o nome do tipo) e declara outras
especificações que são usadas
Define a sintaxe e seus parâmetros
Axioma
–
Define a semântica das operações
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 18
Especificação algébrica
sistemática






Estruturação da especificação
Nomeação da especificação
Seleção da operação
Especificação informal de operação
Definição da sintaxe
Definição dos axiomas
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 19
Especificação de uma Lista
LISTA( Elem )
sort Lista
imports
INTEIRO
Define uma lista em que elementos são adicionados ao seu final e
removidos de seu início. As operações são CREATE, que busca uma
lista vazia; CONS, que cria uma nova lista com a adição de um membro;
Length, que avalia o tamanho da lista; HEAD, que avalia o primeiro
elemento da lista; eTAIL, que cria uma lista removendo o HEAD de sua
lista de entrada. UNDEFINED representa um valor indefinido do tipo Elem.
Create → List
Cons(List,Elem) → List
Head(List) → Elem
Length(List) → Inteiro
Tail(List) → List
Head(Create) = Undefined exception (empty List)
Head(Cons(L,v)) = if L=Create then v else Head(L)
Length(Create) = 0
Length(Cons(L,v)) = Length(L) + 1
Tail(Create) = Create
Tail(Cons(L,v)) = if L=Create then Create else Cons(Tail(L),v)
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 20
Especificações recursivas


Operações são frequentemente especificadas
recursivamente
Tail (Cons (L, v)) = if L = Create then Create
else Cons (Tail (L), v)
•
•
Cons ([5, 7], 9) = [5, 7, 9]
Tail ([5, 7, 9]) =
•
•
•
•
•
•
•
Tail (Cons ( [5, 7], 9)) =
Cons (Tail ([5, 7]), 9) =
Cons (Tail (Cons ([5], 7)), 9) =
Cons (Cons (Tail ([5]), 7), 9) =
Cons (Cons (Tail (Cons ([], 5)), 7), 9) =
Cons (Cons ([Create], 7), 9) =
Cons ([7], 9) = [7, 9]
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 21
Especificações recursivas
(*Funcao adiciona um item na lista,
ListDadoTempo*)
fun adic(item,[]) = [item]
| adic(item,item1::lista) =
[item]^^([item1]^^lista);
(*Funcao adiciona um item na lista,
ListDadoTempoS*)
fun adic1((item,tsr,s),[]) = [(item,agora(),s)]
|
©Ian Sommerville
- Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 22
adic1((item,tsr,s),(item1,tsr1,sn)::ListdadotempoS
Especificações recursivas
(*Funcao retira um item da lista, ListDadoTempoS*)
fun retira([]) = 0 |
retira((S1,item1,tsr)::lis) =
item1;
fun retira1([]) = 0 |
retira1((item1,tsr,s)::lis) =
Tsr;
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 23
Especificações recursivas
(*Funcao que define a capacidade maxima de
armazenamento do sensor*)
(*A lista eh invertida (rev), depois eh retirado o 1o
elemento dela (tl) e depois ela eh invertida mais
uma vez pra voltar a ordem original*)
fun
memoria(list:ListDadoTempoS):ListDadoTempoS
=
if length(list) > 8
then rev(tl(rev(list)))
else
list;
©Ian Sommerville - Software Engineering – TraduçãoProf Pedro Fernandes - Métodos Formais, 6o Período
Slide 24
Download

Slides sobre métodos formais e especificação algébrica.