ocl

30
Enhancing the Understandability of OCL Specifications 1 SBES 2007 XXI Simpósio Brasileiro de Engenharia de Software Alexandre Correa, Cláudia Werner COPPE/UFRJ – Universidade Federal do Rio de Janeiro(UFRJ) Márcio Barros UNIRIOTEC – Universidade Federal do Estado do Rio de Janeiro(UNIRIO) Seminário de Metodologia de Desenvolvimento de Software Aluna: Gislene dos Santos Carvalho

Upload: gislene-carvalho

Post on 15-Jun-2015

453 views

Category:

Education


2 download

TRANSCRIPT

Page 1: OCL

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

Page 2: OCL

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

Page 3: OCL

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

Page 4: OCL

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.

Page 5: OCL

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.

Page 6: OCL

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)

Page 7: OCL

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)

Page 8: OCL

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 ::= ‘)’

Page 9: OCL

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.

Page 10: OCL

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.

Page 11: 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..

Page 12: OCL

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.

Page 13: OCL

13

Exemplos

Page 14: OCL

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.

Page 15: OCL

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:

Page 16: OCL

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.

Page 17: OCL

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).

Page 18: OCL

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:

Page 19: OCL

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

Page 20: OCL

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.

Page 21: 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.

Page 22: OCL

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 ->

Page 23: OCL

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.

Page 24: OCL

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.

Page 25: OCL

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.

Page 26: 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.

Page 27: 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.

Page 28: OCL

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.

Page 29: OCL

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.

Page 30: OCL

30

?¿?¿Perguntas?¿?¿

?¿?¿Dúvidas?¿?¿

Obrigada pela sua atenção!!!