79
05/12/22 Specification/Testing/OCL 1 A Specification Language UML: www.rational.com/uml Model architecture Object Constraint Language A part of UML 1.1

A Specification Language

  • Upload
    tiara

  • View
    62

  • Download
    0

Embed Size (px)

DESCRIPTION

A Specification Language. UML: www.rational.com/uml Model architecture Object Constraint Language A part of UML 1.1. Testing and OCL. A class model is not enough for a precise and unambiguous specification. Useful to express specifications, test requirements and test specifications - PowerPoint PPT Presentation

Citation preview

Page 1: A Specification Language

04/22/23 Specification/Testing/OCL 1

A Specification Language

UML: www.rational.com/umlModel architecture

Object Constraint LanguageA part of UML 1.1

Page 2: A Specification Language

04/22/23 Specification/Testing/OCL 2

Testing and OCL

• A class model is not enough for a precise and unambiguous specification.

• Useful to express specifications, test requirements and test specifications

• A useful notation to know: part of UML

Page 3: A Specification Language

04/22/23 Specification/Testing/OCL 3

Resource Allocation

<JobCategory> <Facility>reqs

<Job>when: TimeInterval <Resource>

0..*

type

allocated

provides 0..*

0..1

inv Job::allocated<>0 ==> allocated.provides->includesAll(type.reqs)--Any allocated resource must have the required facilitiesinv Resource::jo1, jo2: Job:: (schedule->includesAll({jo1,jo2}) ==> jo1.when.noOverlap(jo2.when)-- no double-booking of resources

schedule

0..*

Page 4: A Specification Language

04/22/23 Specification/Testing/OCL 4

Resource Allocation

JobDescription Skillreqs

Jobwhen: TimeInterval Plumber

0..*

type

allocated

provides 0..*

0..1

schedule

0..*

Resource Allocation

Facility

ResourceJob

JobCategory

Application of resource allocation to Pluming

Customer

Page 5: A Specification Language

04/22/23 Specification/Testing/OCL 5

Further examples

Person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id)

Company self. employee->select (p|p.age > 50)

Page 6: A Specification Language

04/22/23 Specification/Testing/OCL 6

The relative cost of correcting an error increases over SDLC

1

10

100

1000

10000

Definition Analysis Design Code Maint.

Cost

Page 7: A Specification Language

04/22/23 Specification/Testing/OCL 7

How to prevent defects?

• More precise specifications. OCL helps.• Start testing early, at design level: See

homework 2!!!• Use walkthroughs and inspections

Page 8: A Specification Language

04/22/23 Specification/Testing/OCL 8

UML language architecture• UML metamodel defines meaning of UML

models• Defined in a metacircular manner, using a

subset of UML to specify itself• UML metamodel bootstraps itself. Similar:

– compiler compiles itself– grammar defines itself– class dictionary defines itself

Page 9: A Specification Language

04/22/23 Specification/Testing/OCL 9

4 layer metamodel architecture

• UML metamodel one of the layers• Why four layers?• Proven architecture for complex models• Validates core constructs by using them to

define themselves

Page 10: A Specification Language

04/22/23 Specification/Testing/OCL 10

Four layer architecture

• meta-metamodel– language for specifying metamodels

• metamodel– language for specifying models

• model– language for specifying objects in some domain

• user objects

Page 11: A Specification Language

04/22/23 Specification/Testing/OCL 11

Four levels

• User Objects in running system– check run-time constraints

• Model of System under design– specify run-time constraints

• Meta-model– specify constraints on use of constructs in model

• Meta-metamodel– data interchange between modeling tools

Page 12: A Specification Language

04/22/23 Specification/Testing/OCL 12

Three layers

user objectOP

CL

CB

modelOL

metamodelOB

TP

TL

TB

classes

objects

textsentence

classdictionary

a class dictionaryfor class dictionaries

instance of

defines classes

B: metamodelL: modelP: user objects

Page 13: A Specification Language

04/22/23 Specification/Testing/OCL 13

UML OCL

• Object Constraint Language– allows you to define side effect-free constraints

for UML and other models– used in UML to defined well-formedness rules

of the UML meta model (invariants for meta model classes)

Page 14: A Specification Language

04/22/23 Specification/Testing/OCL 14

Why OCL

• It is a formal mathematical language• Tend to be hard to use by average modelers• OCL is intended for average modelers• Developed as business modeling language

within IBM insurance division (has roots in Syntropy method)

• OCL is a pure expression language (side effect free)

Page 15: A Specification Language

04/22/23 Specification/Testing/OCL 15

Companies behind OCL

• Rational Software, Microsoft, Hewlett-Packard, Oracle, Sterling Software, MCI Systemhouse, Unisys, ICON Computing, IntelliCorp, i-Logix, IBM, ObjecTime, Platinum Technology, Ptech, Taskon, Reich Technologies, Softeam

Page 16: A Specification Language

04/22/23 Specification/Testing/OCL 16

Where to use OCL?

• Specify invariants for classes and types• Specify pre- and post-conditions for

methods• As a navigation language• To specify constraints on operations• Test requirements and specifications

Page 17: A Specification Language

04/22/23 Specification/Testing/OCL 17

OCL properties

• LL(1) language– finally back to the Pascal days!– Grammar provided uses EBNF syntax

• Parser generated by JavaCC

Page 18: A Specification Language

04/22/23 Specification/Testing/OCL 18

What is OCL?

• Predicate calculus for objects• Traditional predicate calculus:

– individuals– variables, predicate and function symbols– terms (for all, Boolean connectives)– axioms and the theories they define (group theory,

number theory, etc.)• In OCL: individuals -> objects

Page 19: A Specification Language

04/22/23 Specification/Testing/OCL 19

Structured individuals

• some “structural” constraints imposed by UML class diagram; further constraints can be imposed by OCL expressions

• annotated UML class diagram defines textual representation

Page 20: A Specification Language

04/22/23 Specification/Testing/OCL 20

Connection to model• Self. Each OCL expression is written in the

context of an instance of a specific type. Company self.numberOfEmployees c : Company c.numberOfEmployees

Page 21: A Specification Language

04/22/23 Specification/Testing/OCL 21

Connection to model• Invariants of a type. An OCL expression

stereotyped with <<invariant>>. An invariant must be true for all instances of the type at any time.

Person self.age >= 0

Page 22: A Specification Language

04/22/23 Specification/Testing/OCL 22

Example: UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName

0..*

parts

Concrete Abstract

super

className

Note: we use a thick arrow todenoteinheritance.UML uses anopen arrow.

Page 23: A Specification Language

04/22/23 Specification/Testing/OCL 23

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

number of concrete classes

Page 24: A Specification Language

04/22/23 Specification/Testing/OCL 24

Example

• Number of concrete classes:– ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete)) ->size

-> collection opselect:subsetcollect:new set

Page 25: A Specification Language

04/22/23 Specification/Testing/OCL 25

Pre- and post-conditions

• constraints stereotyped with <<precondition>> and <<postcondition>>

for an operation or method. Example: Type::op(param1 : Type1 …): ReturnType pre: param1 … post: result = …

Page 26: A Specification Language

04/22/23 Specification/Testing/OCL 26

Pre- and post-conditions

• Example: Post condition for insert operation: person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id)

Page 27: A Specification Language

04/22/23 Specification/Testing/OCL 27

Basic values and types• Boolean true, false

– and or xor not implies if-then-else• Integer 1 2 3 subtype of Real

– * + - / abs• Real 3.14

– * + - / floor• String ‘To be or not to be’

– toUpper concat

Page 28: A Specification Language

04/22/23 Specification/Testing/OCL 28

Basic values and types• Collection

– Set subtype of Collection– Sequence subtype of Collection– Bag subtype of Collection

if element types conform to each other

Page 29: A Specification Language

04/22/23 Specification/Testing/OCL 29

Types from the UML Model

• Each OCL expression lives in the context of a UML model, a number of types/classes and their features and associations and their generalizations.

• All types/classes from the UML model are types in OCL.

Page 30: A Specification Language

04/22/23 Specification/Testing/OCL 30

Type Conformance

• OCL is typed• Type conformance rules for types in the

class diagram are simple:– each type conforms to its supertype– type conformance is transitive

Page 31: A Specification Language

04/22/23 Specification/Testing/OCL 31

Objects and properties

• The value of a property on an object that is defined in a class diagram is specified by a dot followed by the property name.

Atype self.property

Page 32: A Specification Language

04/22/23 Specification/Testing/OCL 32

Properties

• an attribute• an association end• an operation with isQuery true• a method with isQuery true

Page 33: A Specification Language

04/22/23 Specification/Testing/OCL 33

Properties

• an attribute Person self.age >= 0 self.employer->size• an association end Companyself.manager --type Personself.employee--type Set(Person)

Page 34: A Specification Language

04/22/23 Specification/Testing/OCL 34

Properties

• an operation with isQuery true Person self.income(aDate) Company self.stockPrice()

Page 35: A Specification Language

04/22/23 Specification/Testing/OCL 35

Missing role names

• Whenever a role name is missing at one of the ends of an association, the name of the type at the association end, starting with a lowercase character is used as role name. If this results in an ambiguity, the role name is mandatory

Page 36: A Specification Language

04/22/23 Specification/Testing/OCL 36

Navigation over associations

• Company self.manager object of type Person or Set(Person)

– used as Set(Person)

self.manager->size -- result 1– used as Person

self.manager.age

Page 37: A Specification Language

04/22/23 Specification/Testing/OCL 37

OclType and OclAny• All types in a UML model, or predefined within

UML have a type. This type is an instance of the OCL type called OclType.

• OclType: meta type of all types. OclAny supertype of all types.

• OclType : Class = OclAny : Object (analogy to Java)

• Features of OclType: good for meta programming.

Page 38: A Specification Language

04/22/23 Specification/Testing/OCL 38

Predefined OCL types

• OclType: type: instance of OclType– type.name : String– type.attributes:Set(String)– type.associationEnds:Set(String)– type.operations:Set(String)– type.supertypes:Set(OclType)– type.allSupertypes:Set(OclType)– type.allInstances:Set(type)

Page 39: A Specification Language

04/22/23 Specification/Testing/OCL 39

Similarity: java.lang.Class

• instances of class Class represent classes and interfaces in a way that can be read (but not modified) by a running Java program

public final class Class{ public String getName(); public Class getSuperClass(); public Class[] getInterfaces(); ...

Page 40: A Specification Language

04/22/23 Specification/Testing/OCL 40

Predefined OCL types

• OclAny: supertype of all types in the model. object: instance of OclAny– object=(object2:OclAny)– object<>(object2:OclAny):Boolean– object.oclType:OclType– object.oclIsKindOf(type:OclType): Boolean

Page 41: A Specification Language

04/22/23 Specification/Testing/OCL 41

Similarity: java.lang.Object

• All objects, including arrays, implement the methods of this class

public class Object { public final Class getClass(); public boolean equals(Object obj); ...

Page 42: A Specification Language

04/22/23 Specification/Testing/OCL 42

Predefined features on all objects (OclAny)

• Type of an objectoclType : OclType Feature oclType results in type of an object• Direct typeoclIsTypeOf(t:OclType):Boolean• Direct or super typeoclIsKindOf(t:OclType):Boolean

Page 43: A Specification Language

04/22/23 Specification/Testing/OCL 43

Examples

• Person self.oclType results in Person• Person self.oclIsTypeOf(Person)--true self.oclIsTypeOf(Company)--false

Page 44: A Specification Language

04/22/23 Specification/Testing/OCL 44

Predefined features on types

• Two kinds of properties – on instances of classes– on types/classes themselves

• Most important predefined feature on each type: allInstances

Person.allInstances -> forAll(p1, p2 | p1 <> p2 implies p1.id <> p2.id)

Page 45: A Specification Language

04/22/23 Specification/Testing/OCL 45

Collections

• Navigation will most often result in a collection.

• Collection predefined• Large number of predefined operations• Collection(X) : Set(X)|Sequence(X)|Bag(X).• Specifiable by a literal

Page 46: A Specification Language

04/22/23 Specification/Testing/OCL 46

Collection type conformance

• Collection(X) is a subtype of OclAny.• Rules (only 3. collection specific)

– T1 conforms to T2 if T1=T2.– T1 conforms to T2 when T1 is a subtype of T2.– Collection(T1) conforms to Collection(T2) if

T1 conforms to T2– conformance is transitive

Page 47: A Specification Language

04/22/23 Specification/Testing/OCL 47

Previous value in post-conditions

• Pre- and post-conditions on operations and methods– the value of a property at the start of the

operation or method– the value of a property upon completion of the

operation or method•Person::birthdayHappens() post: age = age@pre + 1

Page 48: A Specification Language

04/22/23 Specification/Testing/OCL 48

Collection Operations

• Select and reject operations– collection->select(boolean-expr) Company self.employee->select(age > 50)– collection->select (v|boolean-expr-with-v) Company self.employee->select (p|p.age > 50)

Page 49: A Specification Language

04/22/23 Specification/Testing/OCL 49

Collection Operations

• Select and reject operations– collection->select (v:Type|boolean-expr-with-v)Company self.employee->select (p:Person|p.age > 50)

Page 50: A Specification Language

04/22/23 Specification/Testing/OCL 50

Select syntax

• Define a subset– collection->select (v:Type|boolean-expr-with-v)– collection->select (v|boolean-expr-with-v)– collection->select (boolean-expr)

refer toparts

refer toentireobject

typeredundancy

Page 51: A Specification Language

04/22/23 Specification/Testing/OCL 51

Reject syntax

• Define a subset– collection->reject (v:Type|boolean-expr-with-v)– collection->reject (v|boolean-expr-with-v)– collection->reject (boolean-expr)

• Instead negate expression

Page 52: A Specification Language

04/22/23 Specification/Testing/OCL 52

Collect syntax

– collection->collect (v:Type|expr-with-v)– collection->collect (v|expr-with-v)– collection->collect (expr)

• Creates a bagself.empl->collect(bdate)->asSet

Build new collectionby applyingexpressionto elementsof oldcollection

Page 53: A Specification Language

04/22/23 Specification/Testing/OCL 53

Shorthand for Collect

• Because navigation through many objects is very common, there is a shorthand notation for collect that makes OCL expressions more readable. Both are correct:– self.employee -> collect(birthdate.year)

– self.employee.birthdate.year

Page 54: A Specification Language

04/22/23 Specification/Testing/OCL 54

ForAll operation

• All elements satisfy Boolean expression– collection->forAll (v:Type|boolean-expr-with-v)– collection->forAll (v|boolean-expr-with-v)– collection->forAll (boolean-expr)

Page 55: A Specification Language

04/22/23 Specification/Testing/OCL 55

Exists operation

• At least one element satisfies Boolean expression– collection->exists (v:Type|boolean-expr-with-v)– collection->exists (v|boolean-expr-with-v)– collection->exists (boolean-expr)

Page 56: A Specification Language

04/22/23 Specification/Testing/OCL 56

Predefined OCL types

• Integer, Real, String, Boolean• OclExpression, OclType, OclAny

• OclType– all types defined in a model have type OclType– allows access to the meta-level of the model

Page 57: A Specification Language

04/22/23 Specification/Testing/OCL 57

Predefined OCL types

• OclType: type: instance of OclType– type.name : String– type.attributes:Set(String)– type.associationEnds:Set(String)– type.operations:Set(String)– type.supertypes:Set(OclType)– type.allSupertypes:Set(OclType)– type.allInstances:Set(type)

Page 58: A Specification Language

04/22/23 Specification/Testing/OCL 58

Predefined OCL types

• OclAny: supertype of all types in the model. object: instance of OclAny– object=(object2:OclAny)– object<>(object2:OclAny):Boolean– object.oclType:OclType– object.oclIsKindOf(type:OclType): Boolean

Page 59: A Specification Language

04/22/23 Specification/Testing/OCL 59

Applications

• Number of class definitions:– ClassGraph self.entries->size wrong– ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))->size

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

Page 60: A Specification Language

04/22/23 Specification/Testing/OCL 60

Applications

• Number of class definitions: What about using strategies to define collections?– ClassGraph self.{to ClassDef} ->size

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

Page 61: A Specification Language

04/22/23 Specification/Testing/OCL 61

Improve OCL: make adaptive

• OCL stresses the importance of collections• Collections are best specified adaptively• A strategy SS = (S, B, s, t) with source s and

target set t and name map N for class graph G defines a collection of objects contained in a N(s)-object. The collection type CT is the union of N(t1) for t1 in t.

Page 62: A Specification Language

04/22/23 Specification/Testing/OCL 62

Improve OCL

• The collection consists of CT-objects reached during the traversal of the N(s) object following strategy SS.

Page 63: A Specification Language

04/22/23 Specification/Testing/OCL 63

Properties

• In OCL – an attribute– an association end– an operation with isQuery true– a method with isQuery true

• Add for adaptive OCL– a strategy { … } with a single source

Page 64: A Specification Language

04/22/23 Specification/Testing/OCL 64

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

ClassGraph -- concrete classes self.{to Concrete}->size

Page 65: A Specification Language

04/22/23 Specification/Testing/OCL 65

Applications

• Number of concrete classes:– ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete)) ->size

Page 66: A Specification Language

04/22/23 Specification/Testing/OCL 66

ClassGraph self.entries-> select(c:Entry|c. oclIsTypeOf(ClassDef))-> collect(body)-> select (b:Body|b. oclIsTypeOf(Concrete))->size -- count concrete classes

ClassGraph -- count concrete classes self.{to Concrete}->size

Which one is easier to write?

Page 67: A Specification Language

04/22/23 Specification/Testing/OCL 67

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 68: A Specification Language

04/22/23 Specification/Testing/OCL 68

Applications

• Terminal buffer ruleClassGraph self.{to ClassDef} ->forAll(r|r.termBProp())ClassDef Boolean termBProp(){ partCNs=self.{via Part to ClassName}; result=if (partCNs->size)>1 then (partCNs->intersection(predefCNs)) -> isEmpty else true endif}

Page 69: A Specification Language

04/22/23 Specification/Testing/OCL 69

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 70: A Specification Language

04/22/23 Specification/Testing/OCL 70

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 71: A Specification Language

04/22/23 Specification/Testing/OCL 71

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 72: A Specification Language

04/22/23 Specification/Testing/OCL 72

Applications

• Class graph is flatClassGraph self.{to Abstract}-> forAll(a|a.parts->size=0)

Page 73: A Specification Language

04/22/23 Specification/Testing/OCL 73

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 74: A Specification Language

04/22/23 Specification/Testing/OCL 74

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 75: A Specification Language

04/22/23 Specification/Testing/OCL 75

Applications• Abstract superclass ruleClassGraph superCls = self.{through->*,super,* to ClassName}; self.{to ClassDef}-> forAll(c| if (superCls->includes(c.className)) then c.{to Abstract}->size=1 else true endif)

Page 76: A Specification Language

04/22/23 Specification/Testing/OCL 76

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 77: A Specification Language

04/22/23 Specification/Testing/OCL 77

UML class diagram ClassGraph

ClassGraph

EParse

BParseClassDef

Entry0..*

entries

BodyPart

ClassName0..*

parts

Concrete Abstract

super

className

Page 78: A Specification Language

04/22/23 Specification/Testing/OCL 78

Conclusions

• OCL is a suitable language for expressing object properties, class invariants and method pre- and post-conditions. (needs capability to define functions and auxiliary variables).

• OCL is NOT a good language for navigation but can be made into one by adding strategies.

Page 79: A Specification Language

04/22/23 Specification/Testing/OCL 79

Further information

• www.rational.com contains latest information about UML, specifically OCL.

• www.ics.uci.edu/pub/arch/uml