SlideShare a Scribd company logo
1 of 48
Download to read offline
Domain-Specific
Program Checking
 Lukas Renggli, Stéphane Ducasse,
   Tudor Gîrba, Oscar Nierstrasz
Web Application Framework
14000
                        16000
                                 18000
  Seaside 2.6



  Seaside 2.7



  Seaside 2.8



Seaside 2.8.1



Seaside 2.8.2



Seaside 2.8.3



Seaside 2.9a1



Seaside 2.9a2



Seaside 2.9a3
                           LOC
14000
                        16000
                                 18000
                                         1
                                             2
                                                 3
                                                            4


  Seaside 2.6



  Seaside 2.7



  Seaside 2.8



Seaside 2.8.1



Seaside 2.8.2



Seaside 2.8.3



Seaside 2.9a1



Seaside 2.9a2



Seaside 2.9a3
                                                     Lint




                           LOC
14000
                        16000
                                 18000
                                               1
                                                   2
                                                       3
                                                                  4


  Seaside 2.6



  Seaside 2.7



  Seaside 2.8



Seaside 2.8.1



Seaside 2.8.2



Seaside 2.8.3



Seaside 2.9a1



Seaside 2.9a2



Seaside 2.9a3
                                         ???
                                                           Lint




                           LOC
<a href="...">Remove Task 1</a> <br />
<a href="...">Remove Task 2</a> <br />
<a href="...">Remove Task 3</a> <br />
renderTasksOn: html
	   tasks do: [ :task |
	   	 html anchor
	   	 	 with: 'Remove Task ' , task number;
	   	 	 callback: [ tasks remove: task ].
	   	 html break ]
renderTasksOn: html
	   tasks do: [ :task |
	   	 html anchor
	   	 	 with: 'Remove Task ' , task number;
	   	 	 callback: [ tasks remove: task ].
	   	 html break ]

      Modifies collection while iterating over it
Internal Domain-
     Specific Languages

‣ HTML generation
‣ Javascript generation
‣ Composition definition
‣ Control flow
‣ Application configuration
14000
                        16000
                                 18000
                                               1
                                                   2
                                                       3
                                                                  4


  Seaside 2.6



  Seaside 2.7



  Seaside 2.8



Seaside 2.8.1



Seaside 2.8.2



Seaside 2.8.3



Seaside 2.9a1



Seaside 2.9a2



Seaside 2.9a3
                                         ???
                                                           Lint




                           LOC
Generic (Lint)
Program Checker
Architecture
    Checker




  Generic (Lint)
Program Checker
Architecture
    Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
30 Domain-Specific Rules


     ‣ Possible Bugs
     ‣ Bad Style
     ‣ Suboptimal Code
     ‣ Non-Portable Code
renderTasksOn: html
	   tasks do: [ :task |
	   	 html anchor
	   	 	 with: 'Remove Task ' , task number;
	   	 	 callback: [ tasks remove: task ].
	   	 html break ]

     #with: has to be last message in cascade
renderTasksOn: html
	   tasks do: [ :task |
	   	 html anchor
	   	 	 callback: [ tasks remove: task ];
	   	 	 with: 'Remove Task ' , task number.
	   	 html break ]
14000
                        16000
                                 18000
                                         1
                                             2
                                                 3
                                                            4


  Seaside 2.6



  Seaside 2.7



  Seaside 2.8



Seaside 2.8.1



Seaside 2.8.2



Seaside 2.8.3



Seaside 2.9a1



Seaside 2.9a2



Seaside 2.9a3
                                                     Lint




                           LOC
14000
                        16000
                                 18000
                                                 1
                                                     2
                                                         3
                                                                    4


  Seaside 2.6



  Seaside 2.7



  Seaside 2.8



Seaside 2.8.1



Seaside 2.8.2



Seaside 2.8.3



Seaside 2.9a1



Seaside 2.9a2



Seaside 2.9a3
                                                             Lint




                           LOC
                                         Slime
Designed for




Framework Development
Now used for




Application Development
69% developers state

  “Slime produces more
relevant results than Lint”
81% developers state

 “Slime helped me to
 detect critical bugs”
Architecture
    Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
Magritte Metamodel
* description
                               Description
      Person               accessor
username                 * label
birthday       description required
                           priority
model
                                    * description
                               Description
      Person               accessor
username                 * label
birthday       description required
                           priority
model
                                    * description
                               Description
      Person               accessor
username                 * label
birthday       description required
                           priority




                              metamodel
model
                                            * description
                                       Description
      Person                       accessor
username                         * label
birthday               description required
                                   priority


               <<described by>>

                                      metamodel
meta-metamodel

    model
                                            * description
                                       Description
      Person                       accessor
username                         * label
birthday               description required
                                   priority


               <<described by>>

                                      metamodel
meta-metamodel
                                                   <<described by>>

    model
                                            * description
                                       Description
      Person                       accessor
username                         * label
birthday               description required
                                   priority


               <<described by>>

                                      metamodel
Person class>>descriptionUsername

   
   ^ StringDescription new

   
   
 
 accessor: #username;
	   	   	 	 beRequired;
	   	   	 	 default: nil;
	   	   	 	 yourself
                                                        * description
                                                   Description
                          Person               accessor
                    username                 * label
                    birthday       description required
                                               priority
Description class>>descriptionLabel

   
   ^ StringDescription new

   
   
 
 accessor: #label;

   
   
 
 label: ‘Label’;
	   	   	 	 beRequired;
	   	   	 	 yourself
                                                         * description
                                                    Description
                           Person               accessor
                     username                 * label
                     birthday       description required
                                                priority
Architecture
    Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
Architecture     Domain-Specific
    Checker        Model Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
Person class>>descriptionUsername

   
   ^ StringDescription new

   
   
 
 accessor: #username;
	   	   	 	 beRequired;
	   	   	 	 default: nil;
	   	   	 	 yourself
                                                        * description
                                                   Description
                          Person               accessor
                    username                 * label
                    birthday       description required
                                               priority
Person class>>descriptionUsername

   
   ^ StringDescription new

   
   
 
 accessor: #username;

   
   
 
 label: ‘Username’;
	   	   	 	 beRequired;
	   	   	 	 default: nil;
	   	   	 	 yourself
                                                        * description
                                                   Description
                          Person               accessor
                    username                 * label
                    birthday       description required
                                               priority
Person class>>descriptionUsername
   
   
   ^ StringDescription new
   
   
   
 
 accessor: #username;
   
   
   
 
 label: ‘Username’;
   	   	   	 	 beRequired;
   	   	   	 	 default: nil;
   	   	   	 	 yourself
                                                             * description

#label is a required value
                                                        Description
                               Person               accessor
                         username                 * label
                         birthday       description required
                                                    priority
Person class>>descriptionUsername
  
   
   ^ StringDescription new
  
   
   
 
 accessor: #username;
  
   
   
 
 label: ‘Username’;
  	   	   	 	 beRequired;
  	   	   	 	 default: nil;
  	   	   	 	 yourself
                                                            * description
                                                       Description
                              Person
Invalid default value
                                                   accessor
                        username                 * label
                        birthday       description required
                                                   priority
70000 Lines of Code

   12000 Methods

    1100 Classes

300 Described Classes
70000 Lines of Code

   12000 Methods

    1100 Classes

300 Described Classes

 500 Magritte Issues
Implementation
Extends existing
Program-Checker
Parse Tree
Matching
scg.unibe.ch/research/helvetia
Declarative
Rule System
Domain-Specific
Program Checking

   Architecture     Domain-Specific
     Checker        Model Checker




   Generic (Lint)   Domain-Specific
 Program Checker    Program Checker

More Related Content

Similar to Domain-Specific Program Checking

State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012
Alexandre Morgaut
 
State of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljsState of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljs
Alexandre Morgaut
 
Cldc Hotspot Architecture
Cldc Hotspot ArchitectureCldc Hotspot Architecture
Cldc Hotspot Architecture
zdmilan
 
State of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJSState of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJS
Alexandre Morgaut
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
Ariya Hidayat
 

Similar to Domain-Specific Program Checking (20)

Cloud Native SDN
Cloud Native SDNCloud Native SDN
Cloud Native SDN
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
 
RKT
RKTRKT
RKT
 
.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011
 
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
 
NPW2009 - my.opera.com scalability v2.0
NPW2009 - my.opera.com scalability v2.0NPW2009 - my.opera.com scalability v2.0
NPW2009 - my.opera.com scalability v2.0
 
State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012
 
State of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljsState of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljs
 
The Developer Conference - CloudKit, entendendo a Cloud da Apple
The Developer Conference - CloudKit, entendendo a Cloud da AppleThe Developer Conference - CloudKit, entendendo a Cloud da Apple
The Developer Conference - CloudKit, entendendo a Cloud da Apple
 
Cldc Hotspot Architecture
Cldc Hotspot ArchitectureCldc Hotspot Architecture
Cldc Hotspot Architecture
 
State of GeoServer 2012
State of GeoServer 2012State of GeoServer 2012
State of GeoServer 2012
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
Rec2String
Rec2StringRec2String
Rec2String
 
Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)
 
When Docker Engine 1.12 features unleashes software architecture
When Docker Engine 1.12 features unleashes software architectureWhen Docker Engine 1.12 features unleashes software architecture
When Docker Engine 1.12 features unleashes software architecture
 
State of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJSState of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJS
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
20110709 - CM_Cocoa
20110709 - CM_Cocoa20110709 - CM_Cocoa
20110709 - CM_Cocoa
 
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
 
Seaside - Past, Present and Future
Seaside - Past, Present and FutureSeaside - Past, Present and Future
Seaside - Past, Present and Future
 

More from Lukas Renggli

Dynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool SupportDynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool Support
Lukas Renggli
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software Development
Lukas Renggli
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status Message
Lukas Renggli
 

More from Lukas Renggli (15)

Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParser
 
Natural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking ToolsNatural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking Tools
 
The Dynamic Language is not Enough
The Dynamic Language is not EnoughThe Dynamic Language is not Enough
The Dynamic Language is not Enough
 
Dynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool SupportDynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool Support
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software Development
 
Dynamic grammars
Dynamic grammarsDynamic grammars
Dynamic grammars
 
jQuery for Seaside
jQuery for SeasidejQuery for Seaside
jQuery for Seaside
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status Message
 
Magritte Blitz
Magritte BlitzMagritte Blitz
Magritte Blitz
 
Seaside - On not getting bogged down
Seaside - On not getting bogged downSeaside - On not getting bogged down
Seaside - On not getting bogged down
 
Magritte
MagritteMagritte
Magritte
 
Magritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End UsersMagritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End Users
 
Transactional Memory for Smalltalk
Transactional Memory for SmalltalkTransactional Memory for Smalltalk
Transactional Memory for Smalltalk
 
Seaside - Web Development As You Like It
Seaside - Web Development As You Like ItSeaside - Web Development As You Like It
Seaside - Web Development As You Like It
 
5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside
 

Recently uploaded

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 

Domain-Specific Program Checking

  • 1. Domain-Specific Program Checking Lukas Renggli, Stéphane Ducasse, Tudor Gîrba, Oscar Nierstrasz
  • 3. 14000 16000 18000 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
  • 4. 14000 16000 18000 1 2 3 4 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 Lint LOC
  • 5. 14000 16000 18000 1 2 3 4 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 ??? Lint LOC
  • 6. <a href="...">Remove Task 1</a> <br /> <a href="...">Remove Task 2</a> <br /> <a href="...">Remove Task 3</a> <br />
  • 7. renderTasksOn: html tasks do: [ :task | html anchor with: 'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ]
  • 8. renderTasksOn: html tasks do: [ :task | html anchor with: 'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] Modifies collection while iterating over it
  • 9. Internal Domain- Specific Languages ‣ HTML generation ‣ Javascript generation ‣ Composition definition ‣ Control flow ‣ Application configuration
  • 10. 14000 16000 18000 1 2 3 4 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 ??? Lint LOC
  • 12. Architecture Checker Generic (Lint) Program Checker
  • 13. Architecture Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 14. 30 Domain-Specific Rules ‣ Possible Bugs ‣ Bad Style ‣ Suboptimal Code ‣ Non-Portable Code
  • 15. renderTasksOn: html tasks do: [ :task | html anchor with: 'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] #with: has to be last message in cascade
  • 16. renderTasksOn: html tasks do: [ :task | html anchor callback: [ tasks remove: task ]; with: 'Remove Task ' , task number. html break ]
  • 17. 14000 16000 18000 1 2 3 4 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 Lint LOC
  • 18. 14000 16000 18000 1 2 3 4 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 Lint LOC Slime
  • 21. 69% developers state “Slime produces more relevant results than Lint”
  • 22. 81% developers state “Slime helped me to detect critical bugs”
  • 23.
  • 24. Architecture Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 26. * description Description Person accessor username * label birthday description required priority
  • 27. model * description Description Person accessor username * label birthday description required priority
  • 28. model * description Description Person accessor username * label birthday description required priority metamodel
  • 29. model * description Description Person accessor username * label birthday description required priority <<described by>> metamodel
  • 30. meta-metamodel model * description Description Person accessor username * label birthday description required priority <<described by>> metamodel
  • 31. meta-metamodel <<described by>> model * description Description Person accessor username * label birthday description required priority <<described by>> metamodel
  • 32. Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil; yourself * description Description Person accessor username * label birthday description required priority
  • 33. Description class>>descriptionLabel ^ StringDescription new accessor: #label; label: ‘Label’; beRequired; yourself * description Description Person accessor username * label birthday description required priority
  • 34. Architecture Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 35. Architecture Domain-Specific Checker Model Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 36. Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil; yourself * description Description Person accessor username * label birthday description required priority
  • 37. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired; default: nil; yourself * description Description Person accessor username * label birthday description required priority
  • 38. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired; default: nil; yourself * description #label is a required value Description Person accessor username * label birthday description required priority
  • 39. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired; default: nil; yourself * description Description Person Invalid default value accessor username * label birthday description required priority
  • 40. 70000 Lines of Code 12000 Methods 1100 Classes 300 Described Classes
  • 41. 70000 Lines of Code 12000 Methods 1100 Classes 300 Described Classes 500 Magritte Issues
  • 42.
  • 48. Domain-Specific Program Checking Architecture Domain-Specific Checker Model Checker Generic (Lint) Domain-Specific Program Checker Program Checker