responder às questões do nível anterior. Esta informação pode ser objetiva, se depender apenas do objeto que está a ser medido; ou subjetiva, se depender do objeto e também do ponto de vista do stakeholder.
Objetivo 1 Objetivo 2 ConceptualNível
Q1 Q2 Q3 Q4 Q5 OperacionalNível M1 M2 M3 M4 M5 M6 QuantitativoNível De fini çã o Interpre taç ão
Figura 2.9: Estrutura do modelo QGM
A possibilidade de definir questões abstratas e responder com o auxílio de métricas, a fim de avaliar a qualidade, é relevante para a presente dissertação, uma vez que esta pretende controlar alguns atributos de qualidade, como a complexidade, a completude e a correção.
2.5
Especificação Formal de Métricas
No contexto desta dissertação, torna-se importante especificar as métricas propostas para a avaliação da qualidade dos modelos i*. Essa especificação, como referido anteri- ormente, é feita tanto em linguagem natural como em linguagem formal.
Uma linguagem natural, ou seja, uma linguagem desenvolvida naturalmente pelo ser humano, é mais simples e fácil de compreender do que uma linguagem formal. No entanto, é mais propensa a ambiguidades e omissões, fomentando implementações in- consistentes. Por sua vez, uma especificação formal é uma descrição matemática de soft- wareou de hardware que pode ser utilizada para desenvolver uma implementação dos mesmos. Assim, uma linguagem formal permite evitar eventuais ambiguidades que po- deriam resultar em implementações inconsistentes das métricas propostas [Shu+02], e possibilita a automatização do processo de identificação de métricas. A linguagem for- mal a ser utilizada para a especificação formal de métricas é a OCL.
A OCL (do inglês Object Constraint Language) [Obj14a], ou Linguagem para Especi- ficação de Restrições em Objetos, é uma linguagem declarativa utilizada para descrever expressões em modelos UML (do inglês Unified Modelling Language [Obj14b]). Essas ex- pressões normalmente especificam condições invariantes que devem ser garantidas no sistema a ser modelado, ou consultas sobre objetos descritos no modelo. Quando as ex- pressões em OCL são avaliadas, não têm qualquer efeito, ou seja, a sua avaliação não pode alterar o estado do sistema onde estão a ser executadas. No entanto, expressões
2. ENQUADRAMENTO 2.5. Especificação Formal de Métricas
em OCL podem ser utilizadas para especificar operações/ações que, quando executadas, alteram o estado do sistema [Obj14a].
Esta linguagem é uma linguagem de texto, precisa, que oferece expressões livres das ambiguidades das linguagens naturais, e que possibilita a expressão de restrições em um modelo orientado a objetos que não possam ser especificadas através dos diagramas. Pode ser utilizada com diferentes propósitos, tais como para especificar invariantes em classes e tipos no modelo da classe, para descrever pré e pós condições em operações e métodos, para especificar restrições em operações, entre outros. Apresenta as seguintes vantagens:
• Melhor documentação– restrições adicionam informações sobre os elementos dos modelos e as suas relações com os modelos UML;
• Maior precisão– restrições em OCL têm uma semântica formal, utilizada para re- duzir ambiguidades nos modelos UML;
• Comunicação sem mal-entendidos– utilizando restrições em OCL, os modelado- res (modelers) podem comunicar sem ambiguidades.
A OCL tem 4 (quatro) tipos primitivos de dados: booleanos, inteiros, reais e strings. Adicionalmente, tem operadores lógicos (>, <, =, >= e <=) e as declarações são construí- das em 4 (quatro) partes, sendo elas:
• Contexto– define a situação limita em que a afirmação é válida;
• Propriedade – representa algumas características do contexto (por exemplo, se o contexto é uma classe, a propriedade pode ser um atributo);
• Operação– podendo ser aritmética ou orientada a conjuntos, manipula ou qualifica uma propriedade;
• Palavras-chave – são utilizadas para especificar expressões condicionais (if, then, else, and, or, not, implies).
Para melhor se compreender estes conceitos, a figura 2.10ilustra um diagrama de classes, com as classes Person, Company, Job e Marriage.
2. ENQUADRAMENTO 2.5. Especificação Formal de Métricas
A este diagrama pretende-se acrescentar as seguintes restrições e operações: (i) o número de empregados na empresa tem que ser maior do que 50, (ii) o número de em- pregrados num determinados trabalho tem que ser maior do que 1 e a sua idade tem que ser superior a 18 anos, (iii) pretende-se saber quem é a mulher de determinada pessoa, e (iv) se uma pessoa estiver desempregada, o seu salário é inferior a 100, caso contrário é igual ou superior a 100.
A listagem2.1apresenta o código na linguagem OCL para a especificação das restri- ções e operações anteriores, pela ordem respetiva.
Listagem 2.1: Exemplo de linguagem OCL, adaptado de [WK99]
1 context Company inv: self.numberOfEmployees > 50 3 context Job 5 inv: self.employer.numberOfEmployees >= 1 inv: self.employee.age >= 18 7
context Person::getCurrentWife() : Person
9 pre: self.isMarried = true and self.gender = male
post: result = self.marriage.wife
11
context Person inv:
13 let income : Integer = self.job.salary -> sum() in
if isUnemployed then
15 income < 100
else
17 income >= 100
endif
Para além das vantagens apresentadas anteriormente, a OCL foi escolhida como a lin- guagem formal a ser utilizada nesta dissertação por diversas razões. A primeira prende- se com o facto de que é uma linguagem que oferece formalidade sem sacrificar a compre- ensão, uma vez que foi desenvolvida tendo em vista a usabilidade para os profissionais de UML. Para além da sua boa ligação com a UML, o facto de as definições serem execu- táveis, faz com que se evitem problemas de fidelidade na implementação das métricas, que ocorrem frequentemente com outras abordagens [Gou08]. Adicionalmente, é uma abordagem flexível, sendo que para adicionar uma nova métrica, é apenas necessária a definição de uma nova regra OCL que especifica como a métrica deve ser calculada. Por fim, conduz a uma integração direta com o meta-modelo, facilitando o processo de defini- ção de métricas [Abr01;BBA02], e permitindo recolher informação sobre o meta-modelo enquanto se navega sobre o mesmo.