ocl
TRANSCRIPT
Enhancing the Understandability of OCL Specifications
1
SBES 2007XXI Simpósio Brasileiro de Engenharia de Software
Alexandre Correa, Cláudia WernerCOPPE/UFRJ – Universidade Federal do Rio de Janeiro(UFRJ)
Márcio BarrosUNIRIOTEC – Universidade Federal do Estado do Rio de Janeiro(UNIRIO)
Seminário de Metodologia de Desenvolvimento de SoftwareAluna: Gislene dos Santos Carvalho
OCL(Object Constraint Language) Linguagem padronizada pelo OMG para a especificação precisa de restrições
associadas a modelos compatíveis com o MOF(Meta Object Facility); Especificação precisa de elementos aonde as notações gráficas da UML não são
capazes de representar, como, por exemplo, restrições, expressões associadas a atributos derivados, expressões de consulta e definições contratuais de operações.
Problemas OCL Smells.
Soluções OCL Refactorings; Estudo experimental.
2
Resumo
Objetivos deste seminário
3
Introdução
• Características da linguagem OCL: Linguagem declarativa, precisa e tipada; Construções semelhantes as encontradas em POO; MDA/padrão OMG QVT - ajuda a remover os potenciais problemas de
ambiguidade que pode estar presente nas especificações da linguagem natural, como aconteceu com o primeiro padrão UML primeiro.
• Problemas e Soluções: Code Smells: OCL Smells -> Problema; Refactorings: OCL Refactorings -> Solução; Estudo Experimental -> avaliação da usabilidade e potencial da
solução.
Introdução
4
Code Smells e Refactoring
Code Smell São certas estruturas presentes no
código de um software que sugerem a necessidade de uma reestruturação (FOWLER, 1999);
Duplicação de código, implementação de métodos grandes e complexos, encadeamento de mensagens são alguns exemplos;
Afeta negativamente a legibilidade e manutenibilidade do código.
Refactoring Corresponde a alterações feitas para a
estrutura interna de um software, preservando a sua semântica comportamental, que visa melhorar os fatores de qualidade como modularidade compreensibilidade, e extensibilidade [Homens e Tourwe 2004].
Outras melhorias: reusabilidade, manutenibilidade, eficiência.
Facilita a evolução do software.
5
OCL
OCL é uma linguagem tipada. Toda expressão tem um tipo que define oas operações que podem ser aplicadas para o seu resultado.
Todas instâncias do tipo Account não pode
ter saldo negativo. A operação select resulta em subgrupo de contas de um determinado cliente(self) tendo a operação isGold é a avaliada como verdadeira. A operação size indica o tamanho do
subconjunto resultante.
6
OCL Smells e Refactorings
A Figura 4 é utilizado como um exemplo, que até mesmo regras simples pode resultar em expressões OCL difíceis de ler e compreender.Essa restrição, no entanto, poderia ter sido definida com uma expressão tão simples como:
self.allConnections-> isUnique(name).
Essa expressão da figura é conhecida como Expressão Prolixa.
UML 1.3 (OMG 1999)
7
OCL Smells
À primeira vista, a complexidade é devido a várias chamadas para oclIsKindOf e operações oclAsType [Vaziri e Jackson 2002].
Uma análise mais aprofundada revela, porém, que a falta de um supertipo para ClassifierRole e tipos AssociationRole resultou em expressões complexas e muito semelhantes separadas somente pelo operador and.
UML 1.3 (OMG 1999)
8
OCL Smell: Cadeias de Implicações
• O OCL Smell Cadeia de Implicações corresponde a expressões que possuam a estrutura T implies E. A gramática abaixo determina que a configuração mínima para este OCL Smell corresponde a uma expressão da forma A implies B implies C, ou seja, uma expressão contendo pelo menos duas implicações em sequência.
ImpliesChainSmell ::= T implies E T ::= OCLExpression //expressão OCL do tipo Boolean E ::= Left_par T ‘implies’ (T | E) Right_par Left_par ::= ‘(‘ Right_par ::= ‘)’
9
Exemplo
Toda transição em uma máquina de transição de estados (statemachine) que tiver como origem (source) um pseudo-estado do tipo fork, deve ter como destino (target) um elemento do tipo State.
10
Refactoring – Substituir Cadeia de Implicações por uma Única Implicação
• a => (b => c) ≡ (a and b) => c;• Se a expressão resultante é um conjunto complexo de forma a b1 e b2 e b3 ...
e bn, deve-se refatorar esta expressão para extrair a definição de propriedades auxiliares ou operações de partes desse conjunto. A definição de propriedades auxiliares ou operações de uma expressão OCL corresponde as refatorações seguintes: Adicionar definição de operação e substituir expressão pela chamada da operação: promover o encapsulamento e reuso através de uma especificação. evitar a duplicação de expressões que são utilizadas em várias partes de uma
especificação; Adicionar definição de propriedade e substituir expressão por chamada de
propriedade: Criação e utilização de operações auxiliares em OCL.
11
Exemplo refatorado
As seguintes refatorações foram efetuadas: Substituir as cadeias de implicações por um única implicação que substituiu duas implicações, por uma conjunção; Adicionar definição de propriedade, que acrescentou a propriedade sourceIsFork para a classe de Transição; e Substituir expressão por chamada de propriedade que substituiu o antecedente da
restrição pela expressão self.sourceIsFork..
12
OCL Smell: Expressão Prolixa
• Este OCL smell ocorre em expressões OCL definidas de forma mais extensa que o necessário.
• Duas formas usuais de expressões prolixas são as seguintes: Expressões que contém mais chamadas de operação do que o necessário: estas
expressões podem ser abreviados pela simplificação das chamadas de operação, que consiste em reescrever uma expressão OCL de formar a utilizar menos chamadas de operação.
Invariantes definidas de maneira errada: uma invariante pode ser descrita de muitas maneiras, dependendo da sua classe de contexto, anexando uma invariante para o contexto errado geralmente torna mais difícil de especificar e manter. Uma refatoração é a mudança de contexto, ou seja, reescrever uma invariante utilizando um contexto diferente.
13
Exemplos
14
OCL Smell: Cadeias ForAll
• Cadeias ForAll é um caso especial de expressão prolixa que corresponde a expressões contendo a seguinte estrutura:
X -> forAll (a1 | a1.B-> forAll (b1 | b1.C-> forAll (c1 | P (c1)))),
Suponha-se que X é um grupo de elementos de tipo A, e existe uma associação entre as classes A e B, e entre as classes B e C.
• Refatoração: aplicar um sistema de navegação, de A à C, ou seja, XBC -> forAll (c1 | P1 (c1)). Tal modificação correspondente à aplicação da substituição de cadeia de quantificadores universais por navegações.
15
OCL Smell: Downcasting
• Downcasting é uma construção bastante conhecida na comunidade de programação orientada a objetos.
• Em OCL, esta construção se manifesta através da utilização de expressões
contendo a estrutura x.oclAsType(Y).z, normalmente precedidas por uma expressão com o formato x.oclIsKindOf(Y). O objetivo desse tipo de construção é tornar possível a referência a uma propriedade z definida em um tipo Y, dada uma expressão x de um tipo X do qual Y é uma especialização.• Exemplo:
16
OCL Smell: Expressões Condicionais Relacionadas a Tipos
• Este OCL Smell corresponde a expressões if-then-else-endif que possuam, na parte correspondente à condição da expressão, chamadas a operações que verificam se um elemento é de um determinado tipo.
• A forma geral dessas expressões é dada por: if x.oclIsKindOf(A) then <exp1> else if x.oclIsKindOf(B) then <exp2> else … endif, ou seja, a expressão terá o valor determinado por <exp1>, se a classe de x for A ou alguma especialização de A, <exp2> se a classe de x for B ou alguma especialização de B, e assim por diante para outras eventuais ocorrências desse tipo de condição.
• Resultam em especificações mais complexas e menos legíveis, além de indicar a possível ausência de uma estrutura de generalização no modelo.
• Refatoração: introdução de polimorfismo.
17
Exemplo
[1] os pinos de entrada de uma ação de ligação (LinkAction) são os mesmos pinos associados aos dados de cada extremidade de uma ligação mais os pinos de inserção (insertAt).
18
OCL Smell: Downcasting
• Downcasting é uma construção bastante conhecida na comunidade de programação orientada a objetos.
• Em OCL, esta construção se manifesta através da utilização de expressões
contendo a estrutura x.oclAsType(Y).z, normalmente precedidas por uma expressão com o formato x.oclIsKindOf(Y). O objetivo desse tipo de construção é tornar possível a referência a uma propriedade z definida em um tipo Y, dada uma expressão x de um tipo X do qual Y é uma especialização.• Exemplo:
19
Refatoração: Introdução de polimorfismo
• Ao introduzir polimorfismo substitui-se expressões complexas if-then-else-endif que fazem uso considerável de operações, tais como oclIsKindOf, oclIsTypeOf, oclAsType, por uma combinação de operações genéricas e específicas definidas em uma hierarquia de classes. Outras refatorações utilizadas ao modelo subjacente: adicionar classe, adicionar generalização, Pull Up, Push Down, adicionar operações entre outros.
Figura 10
20
Um estudo experimental para avaliação de OCL Refactorings
• Definição do Estudo:
• Analisar o efeito da aplicação de refatorações em restrições especificadas em OCL que contenham OCL smells;
• Com o propósito de caracterizar a viabilidade do uso e da continuidade do desenvolvimento desses conceitos;
• Referente aos benefícios obtidos em relação ao entendimento de restrições especificadas em OCL;
• Do ponto de vista do pesquisador; • No contexto de 23 desenvolvedores de software graduados com 40 horas
de curso em UML/OCL oferecido pela UFRJ. Conhecimento restrito sintaxe e semântica básica em OCL.
21
Contexto e Material
Questão tipo S: questões de interpretação de restrições com a presença de OCL smells;Questão tipo R: questões de interpretação de restrições obtidas a partir de Refatorações aplicadas às expressões presentes nas questões do tipo S do questionário aplicado ao outro grupo.
22
Formulação das hipóteses
• A variável independente deste estudo é o tipo de expressões OCL presente em cada questão respondida. Com dois valores: S(presença de OCL smells) e R(restrições refatoradas).
• Impacto da variável independente sobre as variáveis dependentes:– Pontuação na questão(QS): um ponto para o sim / não parte da
resposta e um ponto para a parte justificação. As variáveis SS = soma de QS em questões tipo S e RS = soma de QS em questões tipo R;
– Tempo para responder as questões(QT): tempo em segundos gastos para responder completamente uma questão. ST e RT são definidas como a soma de QT em questões do tipo S e R;
• Hipótese Nula(H0): HO: μSS = μRS and μST = μRT -> não existe diferença de precisão e tempo para responder as perguntas do tipo S e R.
• Hipótese Alternativa(H1): H1: μSS < μRS or μST > μRT ->
23
Instrumentação
1. Tutorial: Cada sujeito foi dada duas semanas para estudar um tutorial de OCL;
2. Avaliação em OCL: indivíduos foram agrupados em dois blocos de 11 sujeitos cada(pontuações mais altas e mais baixas pontuação) de acordo com a mediana de seus pontos em um teste de 10 perguntas sobre OCL. Um sujeito foi alocado para testar a instrumentação.
3. Sessão principal: cada participante respondeu o conjunto de 10 perguntas atribuído ao seu grupo (SI ou SII). Cada indivíduo teve que responder plenamente uma pergunta para proceder para o próximo. Eles não foram autorizados a alterar as respostas das perguntas anteriores. Isto foi preciso para recolher o tempo gasto pelos sujeitos em cada pergunta. Não houve limite de tempo;
4. Avaliação subjetiva: classificar cada pergunta - o nível de dificuldade e a qualidade percebida das expressões OCL. Para a avaliação do nível de dificuldade cada pergunta, foi utilizada uma escala de Likert de 1 a 5 (1-muito fácil, 2-fácil, 3-médio, 4 - difícil, 5-muito difícil). A qualidade das expressões OCL presentes em cada questão foi avaliada de acordo com a seguinte escala nominal: 1 - restrição é mal escrito, 2 - não tenho certeza se a restrição é bem ou mal escrito, 3 - restrição é bem escrito.
24
Estudo Experimental: Resultados e ameaças à validade
• Análise dos instrumentos: Para esta avaliação, utilizamos o teste de análise de variância (ANOVA), com um
nível de significância (α) de 0.05 (WOHLIN et al., 2000), sobre o seguinte conjunto de dados:
1. Pontuação e tempo gasto em cada conjunto de perguntas;
2. Pontuação e tempo gasto em questões do mesmo tipo em cada conjunto de questões.
• Resultados: Os resultados não mostraram diferença significativa na pontuação e tempo para
responder entre os grupos. Assim, não há nenhuma evidência de que as diferenças ao longo dos instrumentos deve impor ameaças a outras análises.
25
Scores
Um teste de análise de variância (α = 0,05) foi aplicada para a contagem de cada tipo dequestão (μSS e μRS). Os resultados mostrados rejeitam a hipótese nula emfavor da hipótese alternativa: μSS <μRS, ou seja, a pontuação média em no tipo S de perguntas foi menor do que a média em tipo R de perguntas. Portanto, os resultadosindicam que, pelo menos na amostra analisada no estudo, a presença de OCL smells impacta negativamente a compreensão de restrições OCL.
26
Tempo de resposta
Um teste de análise de variância (α nível de significância = 0,05) foi aplicada para o tempo para responder a cada tipo de questão (μST e μRT). O resultado rejeita a hipótese nula em favor da hipótese alternativa: μST> μRT, ou seja, o tempo médio para resposta de tipo Squestões foi maior do que a média de tempo para responder a perguntas do tipo R. Portanto, oresultados indicam que, pelo menos na amostra analisada no estudo, a presença de OCLSmells pode impactar negativamente o tempo necessário para compreender os limites OCL.
27
Avaliação subjetiva
• Mais de 60% de perguntas do tipo R foram classificadas como fácil ou muito fácil, e apenas 10% das perguntas do tipo R foram julgadas como difícil ou muito difícil;
• Por outro lado, menos de 30% das perguntas do tipo S foram classificadas como fácil ou muito fácil, enquanto 30% deles foram julgadas como difícil ou muito difícil.
• Esta avaliação também mostrou que existe uma diferença significativa na percepção da qualidade das expressões presentes em perguntas do tipo S e do tipo R.
• Ao passo que apenas 4% das avaliações das perguntas do tipo R foram classificadas como de má qualidade, a porcentagem foi expressiva nas perguntas do tipo S: 36%.
• 80% das expressões do tipo R foram avaliadas como de boa qualidade. No entanto, um número significativo das avaliações (44%) das expressões contendo OCL smells(tipo S) foram avaliadas como de boa qualidade.
28
Conclusões
• Apesar da reduzida população deste estudo (22 participantes), os resultados dos testes estatísticos confirmam, no universo analisado, a estrutura das expressões OCL pode influenciar no desempenho dos participantes em relação à compreensão e ao tempo gasto para entender uma restrição OCL;
• OCL smells afeta negativamente a compreensão de restrição OCL;• Os resultados obtidos na avaliação subjetiva da qualidade das expressões presentes nas
questões refletem, de certo modo, a inexperiência dos participantes com a OCL.• O estudo apontou indícios de que a técnica de refatoração em expressões OCL pode ser
viável, mas é preciso repetição de estudo em outros contextos e com populações maiores.
• Necessidade de investimento em criação de ferramentas para identificação automática de OCL smells e de modelos de refatoração.
29
Referências
• Correa,A., Werner,C.,Barros,M.(2007),”Enhancing the Understandability the OCL Specifications”.In: XXI Simpósio Brasileiro de Engenharia de Software, In English.
• Correa, A. (2006), “Refactoring OCL Model Constraints Specifications”, Doctoral Thesis – COPPE/UFRJ, In Portuguese.
30
?¿?¿Perguntas?¿?¿
?¿?¿Dúvidas?¿?¿
Obrigada pela sua atenção!!!