SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie Domain-Specific Program Checking

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-StreamsPublicis Sapient Engineering
 
.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011Fabio Akita
 
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 railsDNAD
 
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.0Cosimo Streppone
 
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 2012Alexandre 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 fulljsAlexandre Morgaut
 
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 AppleRodrigo Leite
 
Cldc Hotspot Architecture
Cldc Hotspot ArchitectureCldc Hotspot Architecture
Cldc Hotspot Architecturezdmilan
 
State of GeoServer 2012
State of GeoServer 2012State of GeoServer 2012
State of GeoServer 2012Jody Garnett
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVMJohn Lee
 
Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Robert Lemke
 
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 Adrien Blind
 
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 - NantesJSAlexandre Morgaut
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitAriya Hidayat
 
[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 WanCODE BLUE
 
Seaside - Past, Present and Future
Seaside - Past, Present and FutureSeaside - Past, Present and Future
Seaside - Past, Present and FutureLukas Renggli
 

Ähnlich wie 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
 

Mehr von Lukas Renggli

Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParserLukas Renggli
 
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 ToolsLukas Renggli
 
The Dynamic Language is not Enough
The Dynamic Language is not EnoughThe Dynamic Language is not Enough
The Dynamic Language is not EnoughLukas 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 SupportLukas Renggli
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software DevelopmentLukas Renggli
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status MessageLukas Renggli
 
Seaside - On not getting bogged down
Seaside - On not getting bogged downSeaside - On not getting bogged down
Seaside - On not getting bogged downLukas Renggli
 
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 UsersLukas Renggli
 
Transactional Memory for Smalltalk
Transactional Memory for SmalltalkTransactional Memory for Smalltalk
Transactional Memory for SmalltalkLukas Renggli
 
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 ItLukas Renggli
 
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 SeasideLukas Renggli
 

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

Kürzlich hochgeladen

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
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...apidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
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...apidays
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
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 REVIEWERMadyBayot
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
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)Zilliz
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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...Jeffrey Haguewood
 

Kürzlich hochgeladen (20)

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
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...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
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...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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)
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.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...
 

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