SlideShare una empresa de Scribd logo
1 de 18
Initiating a Benchmark for
UML and OCL Analysis Tools
Martin Gogolla, Fabian Büttner, Jordi Cabot
University of Bremen, Germany
AtlanMod, Ecole des Mines de Nantes - INRIA, LINA, France
Context: Model-Based (Software) Engineering
here focus on UML and OCL
Model: UML class diagram + OCL constraints
Various tools for analyzing such models exist
- Test-oriented tools (USE, EMF2toCSP, mOdCL, ...)
- Proof-oriented tools (HOL-OCL, KeY, ...)
Tools offer various functionalities
- building valid/invalid object diagrams, manually or
automatically; valid: explicit and inherent constraints
- debugging invalid object diagrams by revealing
failing constraints, constraint parts or model elements
- prooving consequences from stated constraints
- revealing classes or associations which cannot be populated
- ...
Aim of planned benchmark (here 1st version)
- Compare tool functionality with an agreed set of
example models
- Include models and proposals from other tool builders
Benchmark (currently): 4 models, 11 functionalities/questions
- Civil Status
- Writes Reviews
- Disjoint Subclasses
- Objects As Integers
? Consistent Invariants
? Independence
? Consequences
? Large State
? Instantiate Nonempty Class
? Instantiate Nonempty Assoc
? Instantiate Invariant Ignore
? Instantiate Disjoint Inheritance
? Instantiate Multiple Inheritance
? Object Represents Integer
? Integer Represents Object
Model: Civil Status
Model: Civil Status
context Person
inv attributesDefined: name<>null and civstat<>null and
gender<>null
inv nameCapitalThenSmallLetters:
let small:Set(String)=
Set{'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z'} in
let capital:Set(String)=
Set{'A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} in
capital->includes(name.substring(1,1)) and
Set{2..name.size}->forAll(i |
small->includes(name.substring(i,i)))
inv nameIsUnique: Person.allInstances->forAll(self2|
self<>self2 implies self.name<>self2.name)
inv femaleHasNoWife: gender=#female implies wife->isEmpty
inv maleHasNoHusband: gender=#male implies husband->isEmpty
inv hasSpouse_EQ_civstatMarried: (spouse()<>null)=(civstat=#married)
Benchmark (currently): 4 models, 11 functionalities/questions
- Civil Status
- Writes Reviews
- Disjoint Subclasses
- Objects As Integers
? Consistent Invariants
? Independence
? Consequences
? Large State
? Instantiate Nonempty Class
? Instantiate Nonempty Assoc
? Instantiate Invariant Ignore
? Instantiate Disjoint Inheritance
? Instantiate Multiple Inheritance
? Object Represents Integer
? Integer Represents Object
Model: Writes Reviews
Model: Writes Reviews
context Researcher inv oneManuscript:
self.manuscript->size=1
context Researcher inv oneSubmission:
self.submission->size=1
context Researcher inv noSelfReviews:
self.submission->excludes(self.manuscript)
context Paper inv paperLength:
self.wordCount < 10000
context Paper inv authorsOfStudentPaper:
self.studentPaper=self.author->exists(x | x.isStudent)
context Paper inv noStudentReviewers:
self.referee->forAll(r | not r.isStudent)
context Paper inv limitsOnStudentPapers:
Paper.allInstances->exists(p | p.studentPaper) and
Paper.allInstances->select(p | p.studentPaper)->size < 5
Benchmark (currently): 4 models, 11 functionalities/questions
- Civil Status
- Writes Reviews
- Disjoint Subclasses
- Objects As Integers
? Consistent Invariants
? Independence
? Consequences
? Large State
? Instantiate Nonempty Class
? Instantiate Nonempty Assoc
? Instantiate Invariant Ignore
? Instantiate Disjoint Inheritance
? Instantiate Multiple Inheritance
? Object Represents Integer
? Integer Represents Object
Model: Disjoint Subclasses
context b:B inv disjointBC: C.allInstances->forAll(c|b<>c)
Benchmark (currently): 4 models, 11 functionalities/questions
- Civil Status
- Writes Reviews
- Disjoint Subclasses
- Objects As Integers
? Consistent Invariants
? Independence
? Consequences
? Large State
? Instantiate Nonempty Class
? Instantiate Nonempty Assoc
? Instantiate Invariant Ignore
? Instantiate Disjoint Inheritance
? Instantiate Multiple Inheritance
? Object Represents Integer
? Integer Represents Object
Model: Objects As Integers
Model: Objects As Integers
VALID
INVALID
context Int
inv acyclicPredSucc:
predPlus()->union(succPlus())->excludes(self)
context Zero
inv zeroNotLinkedToZero:
not predPlus()->union(succPlus())->exists(i|
i.oclIsTypeOf(Zero))
inv zeroNotLinkedToNegAndPos:
not predPlus()->union(succPlus())->exists(n,p|
n.oclIsTypeOf(Neg) and p.oclIsTypeOf(Pos))
context Neg
inv negNotLinkedToPos:
not predPlus()->union(succPlus())->exists(p|
p.oclIsTypeOf(Pos))
inv negLinkedToZeroBySucc:
succPlus()->exists(z|z.oclIsTypeOf(Zero))
context Pos
inv posNotLinkedToNeg:
not predPlus()->union(succPlus())->exists(n|
n.oclIsTypeOf(Neg))
inv posLinkedToZeroByPred:
predPlus()->exists(z|z.oclIsTypeOf(Zero))
Model: Objects As Integers
Benchmark (currently): 4 models, 11 functionalities/questions
- Civil Status
- Writes Reviews
- Disjoint Subclasses
- Objects As Integers
? Consistent Invariants
? Independence
? Consequences
? Large State
? Instantiate Nonempty Class
? Instantiate Nonempty Assoc
? Instantiate Invariant Ignore
? Instantiate Disjoint Inheritance
? Instantiate Multiple Inheritance
? Object Represents Integer
? Integer Represents Object
Possible topics to be emphasized in further models
- local constraints (single class constraints)
- global constraints (many classes involved)
- easy tractable constraints
- hard constraints (NP hard problems)
- symmetry problems
- integer arithmetic
- real arithmetic
- string calculations
- redundant constraints
- sparse models (few links)
- recursive operations
- null value and collection operations
- large models, large instances
Planned benchmark
- Currently 1st version
- Compare tool functionality with an agreed set of
example models
- Include models and proposals from other tool builders
emphasizing the strength of their tool
- Used as input for the remaining tool builders
... waiting for contributions ...
Thanks for your attention!

Más contenido relacionado

La actualidad más candente

Templates in C++
Templates in C++Templates in C++
Templates in C++
Tech_MX
 

La actualidad más candente (19)

Pure Future
Pure FuturePure Future
Pure Future
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
 
ZIO Queue
ZIO QueueZIO Queue
ZIO Queue
 
Teach Yourself some Functional Programming with Scala
Teach Yourself some Functional Programming with ScalaTeach Yourself some Functional Programming with Scala
Teach Yourself some Functional Programming with Scala
 
Print input-presentation
Print input-presentationPrint input-presentation
Print input-presentation
 
Scala best practices
Scala best practicesScala best practices
Scala best practices
 
C++ Template
C++ TemplateC++ Template
C++ Template
 
Zio from Home
Zio from Home Zio from Home
Zio from Home
 
Berlin meetup
Berlin meetupBerlin meetup
Berlin meetup
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional Swift
 
Flying Futures at the same sky can make the sun rise at midnight
Flying Futures at the same sky can make the sun rise at midnightFlying Futures at the same sky can make the sun rise at midnight
Flying Futures at the same sky can make the sun rise at midnight
 
Fiber supervision in ZIO
Fiber supervision in ZIOFiber supervision in ZIO
Fiber supervision in ZIO
 
Variables, expressions, standard types
 Variables, expressions, standard types  Variables, expressions, standard types
Variables, expressions, standard types
 
C Structure and Union in C
C Structure and Union in CC Structure and Union in C
C Structure and Union in C
 
Templates in C++
Templates in C++Templates in C++
Templates in C++
 
Custom LINQ Providers
Custom LINQ ProvidersCustom LINQ Providers
Custom LINQ Providers
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragment
 
Developer Experience i TypeScript. Najbardziej ikoniczne duo
Developer Experience i TypeScript. Najbardziej ikoniczne duoDeveloper Experience i TypeScript. Najbardziej ikoniczne duo
Developer Experience i TypeScript. Najbardziej ikoniczne duo
 

Destacado

Ecmfa2013
Ecmfa2013Ecmfa2013
Ecmfa2013
gogolla
 
Portfolio_Pankaj Sharma
Portfolio_Pankaj SharmaPortfolio_Pankaj Sharma
Portfolio_Pankaj Sharma
Pankaj Sharma
 
Deber de informatica dayane caiza y danny cushpa
Deber de informatica dayane caiza y danny cushpaDeber de informatica dayane caiza y danny cushpa
Deber de informatica dayane caiza y danny cushpa
Däŋny Cữsĥpä
 
Het Nieuwe Werken Sra (Nr)
Het Nieuwe Werken Sra (Nr)Het Nieuwe Werken Sra (Nr)
Het Nieuwe Werken Sra (Nr)
Fou-Khan Tsang
 

Destacado (18)

Ecmfa2013
Ecmfa2013Ecmfa2013
Ecmfa2013
 
Física General
Física GeneralFísica General
Física General
 
DNV Satish
DNV SatishDNV Satish
DNV Satish
 
Portfolio_Pankaj Sharma
Portfolio_Pankaj SharmaPortfolio_Pankaj Sharma
Portfolio_Pankaj Sharma
 
Gu a tur_stica_alejandro (1)
Gu a tur_stica_alejandro (1)Gu a tur_stica_alejandro (1)
Gu a tur_stica_alejandro (1)
 
Countus tulp over 2 jaar te koop
Countus tulp over 2 jaar te koopCountus tulp over 2 jaar te koop
Countus tulp over 2 jaar te koop
 
Data handling
Data handlingData handling
Data handling
 
Tarea 01 - Nuevos Ambientes de Aprendizaje
Tarea 01 - Nuevos Ambientes de AprendizajeTarea 01 - Nuevos Ambientes de Aprendizaje
Tarea 01 - Nuevos Ambientes de Aprendizaje
 
Tutorial de-busquedas-con-google
Tutorial de-busquedas-con-googleTutorial de-busquedas-con-google
Tutorial de-busquedas-con-google
 
Deber de informatica dayane caiza y danny cushpa
Deber de informatica dayane caiza y danny cushpaDeber de informatica dayane caiza y danny cushpa
Deber de informatica dayane caiza y danny cushpa
 
Pap2 3
Pap2 3Pap2 3
Pap2 3
 
Het Nieuwe Werken Sra (Nr)
Het Nieuwe Werken Sra (Nr)Het Nieuwe Werken Sra (Nr)
Het Nieuwe Werken Sra (Nr)
 
Cómo ayudar a su hijo a aprender ciencias
Cómo ayudar a su hijo a aprender cienciasCómo ayudar a su hijo a aprender ciencias
Cómo ayudar a su hijo a aprender ciencias
 
An Dewaele, Veranderingsmanagement: do's and dont's voor archiefteams
An Dewaele, Veranderingsmanagement: do's and dont's voor archiefteamsAn Dewaele, Veranderingsmanagement: do's and dont's voor archiefteams
An Dewaele, Veranderingsmanagement: do's and dont's voor archiefteams
 
lecturas de primer ciclo
lecturas de primer ciclolecturas de primer ciclo
lecturas de primer ciclo
 
Literatura en el Barroco ( S.XVII)
Literatura en el Barroco ( S.XVII)Literatura en el Barroco ( S.XVII)
Literatura en el Barroco ( S.XVII)
 
Parodoncijum
Parodoncijum Parodoncijum
Parodoncijum
 
Inteligencia Verbal Lingüistica
Inteligencia Verbal LingüisticaInteligencia Verbal Lingüistica
Inteligencia Verbal Lingüistica
 

Similar a Tap2013

Pointcuts and Analysis
Pointcuts and AnalysisPointcuts and Analysis
Pointcuts and Analysis
Wiwat Ruengmee
 
The Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unificationThe Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unification
Norman Richards
 

Similar a Tap2013 (20)

C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptx
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptx
 
Pointcuts and Analysis
Pointcuts and AnalysisPointcuts and Analysis
Pointcuts and Analysis
 
“Insulin” for Scala’s Syntactic Diabetes
“Insulin” for Scala’s Syntactic Diabetes“Insulin” for Scala’s Syntactic Diabetes
“Insulin” for Scala’s Syntactic Diabetes
 
Thinking In Swift
Thinking In SwiftThinking In Swift
Thinking In Swift
 
UML OCL : An Expression Language - Core -- 29
UML OCL : An Expression Language - Core -- 29UML OCL : An Expression Language - Core -- 29
UML OCL : An Expression Language - Core -- 29
 
Functional Programming
Functional ProgrammingFunctional Programming
Functional Programming
 
Einführung in TypeScript
Einführung in TypeScriptEinführung in TypeScript
Einführung in TypeScript
 
Cocoa Design Patterns in Swift
Cocoa Design Patterns in SwiftCocoa Design Patterns in Swift
Cocoa Design Patterns in Swift
 
The Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unificationThe Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unification
 
Types and Immutability: why you should care
Types and Immutability: why you should careTypes and Immutability: why you should care
Types and Immutability: why you should care
 
Robots in Swift
Robots in SwiftRobots in Swift
Robots in Swift
 
Dynamic Semantics
Dynamic SemanticsDynamic Semantics
Dynamic Semantics
 
Types Working for You, Not Against You
Types Working for You, Not Against YouTypes Working for You, Not Against You
Types Working for You, Not Against You
 
ppopoff
ppopoffppopoff
ppopoff
 
Declare Your Language: Dynamic Semantics
Declare Your Language: Dynamic SemanticsDeclare Your Language: Dynamic Semantics
Declare Your Language: Dynamic Semantics
 
Data structure manual
Data structure manualData structure manual
Data structure manual
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05c
 
Effective Object Oriented Design in Cpp
Effective Object Oriented Design in CppEffective Object Oriented Design in Cpp
Effective Object Oriented Design in Cpp
 
A la découverte de TypeScript
A la découverte de TypeScriptA la découverte de TypeScript
A la découverte de TypeScript
 

Último

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Último (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

Tap2013

  • 1. Initiating a Benchmark for UML and OCL Analysis Tools Martin Gogolla, Fabian Büttner, Jordi Cabot University of Bremen, Germany AtlanMod, Ecole des Mines de Nantes - INRIA, LINA, France
  • 2. Context: Model-Based (Software) Engineering here focus on UML and OCL Model: UML class diagram + OCL constraints Various tools for analyzing such models exist - Test-oriented tools (USE, EMF2toCSP, mOdCL, ...) - Proof-oriented tools (HOL-OCL, KeY, ...) Tools offer various functionalities - building valid/invalid object diagrams, manually or automatically; valid: explicit and inherent constraints - debugging invalid object diagrams by revealing failing constraints, constraint parts or model elements - prooving consequences from stated constraints - revealing classes or associations which cannot be populated - ... Aim of planned benchmark (here 1st version) - Compare tool functionality with an agreed set of example models - Include models and proposals from other tool builders
  • 3. Benchmark (currently): 4 models, 11 functionalities/questions - Civil Status - Writes Reviews - Disjoint Subclasses - Objects As Integers ? Consistent Invariants ? Independence ? Consequences ? Large State ? Instantiate Nonempty Class ? Instantiate Nonempty Assoc ? Instantiate Invariant Ignore ? Instantiate Disjoint Inheritance ? Instantiate Multiple Inheritance ? Object Represents Integer ? Integer Represents Object
  • 5. Model: Civil Status context Person inv attributesDefined: name<>null and civstat<>null and gender<>null inv nameCapitalThenSmallLetters: let small:Set(String)= Set{'a','b','c','d','e','f','g','h','i','j','k','l','m', 'n','o','p','q','r','s','t','u','v','w','x','y','z'} in let capital:Set(String)= Set{'A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} in capital->includes(name.substring(1,1)) and Set{2..name.size}->forAll(i | small->includes(name.substring(i,i))) inv nameIsUnique: Person.allInstances->forAll(self2| self<>self2 implies self.name<>self2.name) inv femaleHasNoWife: gender=#female implies wife->isEmpty inv maleHasNoHusband: gender=#male implies husband->isEmpty inv hasSpouse_EQ_civstatMarried: (spouse()<>null)=(civstat=#married)
  • 6. Benchmark (currently): 4 models, 11 functionalities/questions - Civil Status - Writes Reviews - Disjoint Subclasses - Objects As Integers ? Consistent Invariants ? Independence ? Consequences ? Large State ? Instantiate Nonempty Class ? Instantiate Nonempty Assoc ? Instantiate Invariant Ignore ? Instantiate Disjoint Inheritance ? Instantiate Multiple Inheritance ? Object Represents Integer ? Integer Represents Object
  • 8. Model: Writes Reviews context Researcher inv oneManuscript: self.manuscript->size=1 context Researcher inv oneSubmission: self.submission->size=1 context Researcher inv noSelfReviews: self.submission->excludes(self.manuscript) context Paper inv paperLength: self.wordCount < 10000 context Paper inv authorsOfStudentPaper: self.studentPaper=self.author->exists(x | x.isStudent) context Paper inv noStudentReviewers: self.referee->forAll(r | not r.isStudent) context Paper inv limitsOnStudentPapers: Paper.allInstances->exists(p | p.studentPaper) and Paper.allInstances->select(p | p.studentPaper)->size < 5
  • 9. Benchmark (currently): 4 models, 11 functionalities/questions - Civil Status - Writes Reviews - Disjoint Subclasses - Objects As Integers ? Consistent Invariants ? Independence ? Consequences ? Large State ? Instantiate Nonempty Class ? Instantiate Nonempty Assoc ? Instantiate Invariant Ignore ? Instantiate Disjoint Inheritance ? Instantiate Multiple Inheritance ? Object Represents Integer ? Integer Represents Object
  • 10. Model: Disjoint Subclasses context b:B inv disjointBC: C.allInstances->forAll(c|b<>c)
  • 11. Benchmark (currently): 4 models, 11 functionalities/questions - Civil Status - Writes Reviews - Disjoint Subclasses - Objects As Integers ? Consistent Invariants ? Independence ? Consequences ? Large State ? Instantiate Nonempty Class ? Instantiate Nonempty Assoc ? Instantiate Invariant Ignore ? Instantiate Disjoint Inheritance ? Instantiate Multiple Inheritance ? Object Represents Integer ? Integer Represents Object
  • 12. Model: Objects As Integers
  • 13. Model: Objects As Integers VALID INVALID
  • 14. context Int inv acyclicPredSucc: predPlus()->union(succPlus())->excludes(self) context Zero inv zeroNotLinkedToZero: not predPlus()->union(succPlus())->exists(i| i.oclIsTypeOf(Zero)) inv zeroNotLinkedToNegAndPos: not predPlus()->union(succPlus())->exists(n,p| n.oclIsTypeOf(Neg) and p.oclIsTypeOf(Pos)) context Neg inv negNotLinkedToPos: not predPlus()->union(succPlus())->exists(p| p.oclIsTypeOf(Pos)) inv negLinkedToZeroBySucc: succPlus()->exists(z|z.oclIsTypeOf(Zero)) context Pos inv posNotLinkedToNeg: not predPlus()->union(succPlus())->exists(n| n.oclIsTypeOf(Neg)) inv posLinkedToZeroByPred: predPlus()->exists(z|z.oclIsTypeOf(Zero)) Model: Objects As Integers
  • 15. Benchmark (currently): 4 models, 11 functionalities/questions - Civil Status - Writes Reviews - Disjoint Subclasses - Objects As Integers ? Consistent Invariants ? Independence ? Consequences ? Large State ? Instantiate Nonempty Class ? Instantiate Nonempty Assoc ? Instantiate Invariant Ignore ? Instantiate Disjoint Inheritance ? Instantiate Multiple Inheritance ? Object Represents Integer ? Integer Represents Object
  • 16. Possible topics to be emphasized in further models - local constraints (single class constraints) - global constraints (many classes involved) - easy tractable constraints - hard constraints (NP hard problems) - symmetry problems - integer arithmetic - real arithmetic - string calculations - redundant constraints - sparse models (few links) - recursive operations - null value and collection operations - large models, large instances
  • 17. Planned benchmark - Currently 1st version - Compare tool functionality with an agreed set of example models - Include models and proposals from other tool builders emphasizing the strength of their tool - Used as input for the remaining tool builders
  • 18. ... waiting for contributions ... Thanks for your attention!