SlideShare a Scribd company logo
1 of 31
Download to read offline
Can we prevent re-use
bugs?
A. Lozano, K. Mens, and A. Kellens, “Usage contracts: offering immediate feed-
back on violations of structural source-code regularities”. (SciCo’15).
uContracts
Motivation (1/2)
• Evolving an application requires keeping the:	
• Design knowledge	
• Architectural integrity	
• They facilitate the introduction of substantial changes
without introducing bugs	
• BUT Design knowledge 	
• is not documented	
• initial developers move on	
• BUT Substantial changes may degrade the architectural integrity
uContracts
Motivation (1/2)
• Evolving an application requires keeping the:	
• Design knowledge	
• Architectural integrity	
• They facilitate the introduction of substantial changes
without introducing bugs	
• BUT Design knowledge 	
• is not documented	
• initial developers move on	
• BUT Substantial changes may degrade the architectural integrity
what is worthy of being documented?	
documenting is a loss of time!	
documenting disrupts my work flow!	
who will keep that up-to-date?
uContracts
Motivation (2/2)
• Programmers use recurrent uniformities of related code (idioms,
naming conventions, design patterns....) to:	
• preserve architectural constraints 	
• keep in a single artifact (source-code) all the information they need	
!
• Complying with them facilitate future changes:	
• because they convey assumptions (correctness)	
!
• It would be useful to document them (within the code) and validate
them (automatically).
uContracts
Idea behind: unitTesting for usage expectations
Provider
Consumer
uses
Usage
Contract
describes
expectations
of
should
comply
with
uContracts
Idea behind: unitTesting for usage expectations
copyFrom: anEntity within: aVisitor
copyFrom: anEntity within: aVisitor
super copyFrom: anEntity within: aVisitor
...
inherits
from
All overriders of
copyFrom:within:
should start with a
super call
describes
expectations
of
should
comply
with
uContracts
Idea behind: unitTesting for usage expectations
classesInFAMIXSourcedEntityHierarchy
copyFromWithinWithCorrectSuperCall
FAMIXSourcedEntityContract
EContract
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy:#FAMIXSourcedEntity>
copyFromWithinWithCorrectSuperCall
<selector:#copyFrom:within:>
contract
require:
condition beginsWith:
(condition doesSuperSend: #copyFrom:within:)
if: (condition isOverridden)
Liable
entity
Contract
term
Contract
conditions
copyFrom: anEntity within: aVisitor
copyFrom: anEntity within: aVisitor
super copyFrom: anEntity within: aVisitor
...
inherits
from
All overriders of
copyFrom:within:
should start with a
super call
describes
expectations
of
should
comply
with
uContracts
Idea behind: unitTesting for usage expectations
classesInFAMIXSourcedEntityHierarchy
copyFromWithinWithCorrectSuperCall
FAMIXSourcedEntityContract
EContract
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy:#FAMIXSourcedEntity>
copyFromWithinWithCorrectSuperCall
<selector:#copyFrom:within:>
contract
require:
condition beginsWith:
(condition doesSuperSend: #copyFrom:within:)
if: (condition isOverridden)
Liable
entity
Contract
term
Contract
conditions
Liable classes	
•liableClass: aRegExp / exceptClass: aRegExp
•liableHierarchy: aClassName / exceptHierarchy: aClassName
•liablePackage: aRegExp / exceptPackage: aRegExp
uContracts
Idea behind: unitTesting for usage expectations
classesInFAMIXSourcedEntityHierarchy
copyFromWithinWithCorrectSuperCall
FAMIXSourcedEntityContract
EContract
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy:#FAMIXSourcedEntity>
copyFromWithinWithCorrectSuperCall
<selector:#copyFrom:within:>
contract
require:
condition beginsWith:
(condition doesSuperSend: #copyFrom:within:)
if: (condition isOverridden)
Liable
entity
Contract
term
Contract
conditions
Liable classes	
•liableClass
•liableHierarchy
•liablePackage
Liable methods	
•selector: aRegExp / exceptSelector: aRegExp
•protocol: aRegExp / exceptProtocol: aRegExp
•/ exceptClass: aClassName selector: aSelector
uContracts
Idea behind: unitTesting for usage expectations
classesInFAMIXSourcedEntityHierarchy
copyFromWithinWithCorrectSuperCall
FAMIXSourcedEntityContract
EContract
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy:#FAMIXSourcedEntity>
copyFromWithinWithCorrectSuperCall
<selector:#copyFrom:within:>
contract
require:
condition beginsWith:
(condition doesSuperSend: #copyFrom:within:)
if: (condition isOverridden)
Liable
entity
Contract
term
Contract
conditions
Liable classes	
•liableClass
•liableHierarchy
•liablePackage
Liable methods	
•selector
•protocol
•/ exceptClass
Contract terms	
•require: aCondition
•suggest: aCondition
•require: aCondition if:anotherCondition
•suggest: aCondition if:anotherCondition
uContracts
Idea behind: unitTesting for usage expectations
classesInFAMIXSourcedEntityHierarchy
copyFromWithinWithCorrectSuperCall
FAMIXSourcedEntityContract
EContract
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy:#FAMIXSourcedEntity>
copyFromWithinWithCorrectSuperCall
<selector:#copyFrom:within:>
contract
require:
condition beginsWith:
(condition doesSuperSend: #copyFrom:within:)
if: (condition isOverridden)
Liable
entity
Contract
term
Contract
conditions
Liable classes	
•liableClass
•liableHierarchy
•liablePackage
Liable methods	
•selector
•protocol
•/ exceptClass
Contract terms	
•require
•suggest
•require
•suggest
Contract conditions	
•assigns: aRegExp
•calls: aRegExp
•references: aRegExp
•returns: anExpression
•doesSuperSend: aRegExp
•doesSelfSend: aRegExp
•inProtocol: aRegExp
•isOverridden: aSelector
•isOverridden
•isImplemented: aSel
•custom: aVisitor
uContracts
Idea behind: unitTesting for usage expectations
classesInFAMIXSourcedEntityHierarchy
copyFromWithinWithCorrectSuperCall
FAMIXSourcedEntityContract
EContract
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy:#FAMIXSourcedEntity>
copyFromWithinWithCorrectSuperCall
<selector:#copyFrom:within:>
contract
require:
condition beginsWith:
(condition doesSuperSend: #copyFrom:within:)
if: (condition isOverridden)
Liable
entity
Contract
term
Contract
conditions
Liable classes	
•liableClass
•liableHierarchy
•liablePackage
Liable methods	
•selector
•protocol
•/ exceptClass
Contract terms	
•require
•suggest
•require
•suggest
Contract conditions	
•assigns
•calls
•references
•returns
•doesSuperSend
•doesSelfSend
•inProtocol
•isOverridden
•isOverridden
•isImplemented
•custom
Contract conditions	
•and: aCond1 with: aCond2
•or: aCond1 with: aCond2
•not: aCond
!
•beginsWith: aCond
•endsWith: aCond
•does: aCond after: aCond2
•does: aCond before: aCond2
uContracts
Validation with an Industrial Application
• Interactive web application for event & resource planning	
• developed in Pharo Smalltalk	
• uses the Seaside web development framework.	
• Medium size	
• Packages: 45 	
• Classes: 827 	
• Methods: 11777 	
• LOCs: 94151
Certain methods should not be called directly	
• Certain methods should not be called directly
from within interface code
uContracts
Validation with an Industrial Application
liable classes
contract
Marking dirty objects	
• State changes must mark model objects as
dirty
uContracts
Validation with an Industrial Application
liable classes
contract
Initialization via database	
• Requires super call
uContracts
Validation with an Industrial Application
liable classes
contract
Call ordering within cascade	
• Certain messages need to be sent at the end
of a method
uContracts
Validation with an Industrial Application
liable classes
Call ordering within cascade	
• Certain messages need to be sent at the end
of a method
uContracts
Validation with an Industrial Application
liable classes
contract
Call ordering within cascade	
• Certain messages need to be sent at the end
of a method
uContracts
Validation with an Industrial Application
liable classes
contract
contract	
WithInCascadeVisitor extends CustomConditionVisitor
uContracts
Screenshots
uContracts
Validation with an Industrial Application
• 13 contracts defined in less than 2 days	
• 5 for model entities -> 3c found errors (88)	
• 214 liable classes	
• 2 for persistent entities -> 2c found errors (2)	
• 75 liable classes	
• 6 for interface code -> 4c found errors (11)	
• 598 liable classes
uContracts
Validation with an Industrial Application
Contract
Liable
Methods
Except. Errors-Dic Errors-Mar
Certain methods
should not be
called directly
7410 0 3 2
Marking dirty
objects 333 5 7 2
Initialization via
database 44 0 1 0
Call ordering
within cascade 531 0 0 0
uContracts
Reduce inhibitors to document design rationale!
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
uContracts
Reduce inhibitors to document design rationale!
What is valuable documentation?
Why should I do it?
What about true-but-harmless
violations?
That disrupts my work flow!
What else should I keep up-to-date?
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
uContracts
Reduce inhibitors to document design rationale!
What is valuable documentation? document when you find violations
Why should I do it?
What about true-but-harmless
violations?
That disrupts my work flow!
What else should I keep up-to-date?
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
uContracts
Reduce inhibitors to document design rationale!
What is valuable documentation? document when you find violations
Why should I do it? violation are reported 'on the fly'	
within the IDE and by priority
What about true-but-harmless
violations?
That disrupts my work flow!
What else should I keep up-to-date?
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
uContracts
Reduce inhibitors to document design rationale!
What is valuable documentation? document when you find violations
Why should I do it? violation are reported 'on the fly'	
within the IDE and by priority
document the importance of a condition 	
'turn-off' harmless violations
What about true-but-harmless
violations?
That disrupts my work flow!
What else should I keep up-to-date?
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
uContracts
Reduce inhibitors to document design rationale!
What is valuable documentation? document when you find violations
Why should I do it? violation are reported 'on the fly'	
within the IDE and by priority
document the importance of a condition 	
'turn-off' harmless violations
What about true-but-harmless
violations?
contract definition is done during  development	
uContracts is SmallTalk: an internal DSL
seamlessly integrated with Pharo.
That disrupts my work flow!
What else should I keep up-to-date?
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
uContracts
Reduce inhibitors to document design rationale!
What is valuable documentation? document when you find violations
Why should I do it? violation are reported 'on the fly'	
within the IDE and by priority
document the importance of a condition 	
'turn-off' harmless violations
What about true-but-harmless
violations?
contract definition is done during  development	
uContracts is SmallTalk: an internal DSL
seamlessly integrated with Pharo.
That disrupts my work flow!
nothing!What else should I keep up-to-date?
Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code
regularities”. (SciCo’15).
Conclusions
• It is possible to:	
• reduce inhibitors to document design
rationale	
• prevent reuse bugs 	
• 2 days for 101 errors fixed	
• these errors will not occur again (validated
on the fly)
Questions?
Angela Lozano	
alozano@soft.vub.ac.be	
F.10.733

More Related Content

Viewers also liked

5 Best Practices for Application-aware Network Performance Management (AANPM)...
5 Best Practices for Application-aware Network Performance Management (AANPM)...5 Best Practices for Application-aware Network Performance Management (AANPM)...
5 Best Practices for Application-aware Network Performance Management (AANPM)...Enterprise Management Associates
 
Garage30 + coworking
Garage30 + coworkingGarage30 + coworking
Garage30 + coworkingraul andres
 
Rowan Waste Disposal manual rev 7-14-2014 (1)
Rowan Waste Disposal manual rev 7-14-2014 (1)Rowan Waste Disposal manual rev 7-14-2014 (1)
Rowan Waste Disposal manual rev 7-14-2014 (1)Nicole Rudolph
 
Desktop Virtualization: Emerging Requirements and Solutions
Desktop Virtualization: Emerging Requirements and SolutionsDesktop Virtualization: Emerging Requirements and Solutions
Desktop Virtualization: Emerging Requirements and SolutionsEnterprise Management Associates
 
Los misterios del rosario
Los misterios del rosarioLos misterios del rosario
Los misterios del rosarioPablo Apellidos
 
Comment augmenter son volume d'admission dans les écoles privés ?
Comment augmenter son volume d'admission dans les écoles privés ?Comment augmenter son volume d'admission dans les écoles privés ?
Comment augmenter son volume d'admission dans les écoles privés ?Thibaut Bourgon
 

Viewers also liked (12)

Infographic: Stopping Attacks at the Identity Perimeter
Infographic: Stopping Attacks at the Identity PerimeterInfographic: Stopping Attacks at the Identity Perimeter
Infographic: Stopping Attacks at the Identity Perimeter
 
IS252_PAA
IS252_PAAIS252_PAA
IS252_PAA
 
5 Best Practices for Application-aware Network Performance Management (AANPM)...
5 Best Practices for Application-aware Network Performance Management (AANPM)...5 Best Practices for Application-aware Network Performance Management (AANPM)...
5 Best Practices for Application-aware Network Performance Management (AANPM)...
 
Garage30 + coworking
Garage30 + coworkingGarage30 + coworking
Garage30 + coworking
 
Implementacion de niif para pymes
Implementacion de niif para pymesImplementacion de niif para pymes
Implementacion de niif para pymes
 
Rowan Waste Disposal manual rev 7-14-2014 (1)
Rowan Waste Disposal manual rev 7-14-2014 (1)Rowan Waste Disposal manual rev 7-14-2014 (1)
Rowan Waste Disposal manual rev 7-14-2014 (1)
 
Medikonda_CRM_PM
Medikonda_CRM_PMMedikonda_CRM_PM
Medikonda_CRM_PM
 
Verdadero como la vida misma
Verdadero como la vida mismaVerdadero como la vida misma
Verdadero como la vida misma
 
PBC Marketing Presentation
PBC Marketing Presentation  PBC Marketing Presentation
PBC Marketing Presentation
 
Desktop Virtualization: Emerging Requirements and Solutions
Desktop Virtualization: Emerging Requirements and SolutionsDesktop Virtualization: Emerging Requirements and Solutions
Desktop Virtualization: Emerging Requirements and Solutions
 
Los misterios del rosario
Los misterios del rosarioLos misterios del rosario
Los misterios del rosario
 
Comment augmenter son volume d'admission dans les écoles privés ?
Comment augmenter son volume d'admission dans les écoles privés ?Comment augmenter son volume d'admission dans les écoles privés ?
Comment augmenter son volume d'admission dans les écoles privés ?
 

Similar to Prevent re-use bugs with uContracts

Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)
Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)
Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)kim.mens
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsAraf Karsh Hamid
 
CAST Architecture Checker
CAST Architecture CheckerCAST Architecture Checker
CAST Architecture CheckerCAST
 
Incremental Model Queries for Model-Dirven Software Engineering
Incremental Model Queries for Model-Dirven Software EngineeringIncremental Model Queries for Model-Dirven Software Engineering
Incremental Model Queries for Model-Dirven Software EngineeringÁkos Horváth
 
Fasten Industry Meeting with GitHub about Dependancy Management
Fasten Industry Meeting with GitHub about Dependancy ManagementFasten Industry Meeting with GitHub about Dependancy Management
Fasten Industry Meeting with GitHub about Dependancy ManagementFasten Project
 
How-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your Code
How-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your CodeHow-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your Code
How-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your CodeDevOps.com
 
Refactoring: Gold from a Monolithic Legacy
Refactoring: Gold from a Monolithic LegacyRefactoring: Gold from a Monolithic Legacy
Refactoring: Gold from a Monolithic LegacyDodzidenu Dzakuma
 
Incremental Queries and Transformations for Engineering Critical Systems
Incremental Queries and Transformations for Engineering Critical SystemsIncremental Queries and Transformations for Engineering Critical Systems
Incremental Queries and Transformations for Engineering Critical SystemsÁkos Horváth
 
Architecting C Sharp for Cross Cutting Concerns
Architecting C Sharp for Cross Cutting ConcernsArchitecting C Sharp for Cross Cutting Concerns
Architecting C Sharp for Cross Cutting ConcernsMike Byrne
 
Agile Software Architecture
Agile Software ArchitectureAgile Software Architecture
Agile Software ArchitectureChris F Carroll
 
20141210 - Microservice Container
20141210 - Microservice Container20141210 - Microservice Container
20141210 - Microservice ContainerJamie (Taka) Wang
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineersPawel Szulc
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineersPawel Szulc
 
Resilience Engineering: A field of study, a community, and some perspective s...
Resilience Engineering: A field of study, a community, and some perspective s...Resilience Engineering: A field of study, a community, and some perspective s...
Resilience Engineering: A field of study, a community, and some perspective s...John Allspaw
 
VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...
VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...
VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...Stefano Dalla Palma
 
Application security meetup k8_s security with zero trust_29072021
Application security meetup k8_s security with zero trust_29072021Application security meetup k8_s security with zero trust_29072021
Application security meetup k8_s security with zero trust_29072021lior mazor
 

Similar to Prevent re-use bugs with uContracts (20)

Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)
Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)
Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 
CAST Architecture Checker
CAST Architecture CheckerCAST Architecture Checker
CAST Architecture Checker
 
Incremental Model Queries for Model-Dirven Software Engineering
Incremental Model Queries for Model-Dirven Software EngineeringIncremental Model Queries for Model-Dirven Software Engineering
Incremental Model Queries for Model-Dirven Software Engineering
 
Fasten Industry Meeting with GitHub about Dependancy Management
Fasten Industry Meeting with GitHub about Dependancy ManagementFasten Industry Meeting with GitHub about Dependancy Management
Fasten Industry Meeting with GitHub about Dependancy Management
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Design For Testability
Design For TestabilityDesign For Testability
Design For Testability
 
How-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your Code
How-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your CodeHow-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your Code
How-To Find Malicious Backdoors and Business Logic Vulnerabilities in Your Code
 
Marc perillo
Marc perilloMarc perillo
Marc perillo
 
Refactoring: Gold from a Monolithic Legacy
Refactoring: Gold from a Monolithic LegacyRefactoring: Gold from a Monolithic Legacy
Refactoring: Gold from a Monolithic Legacy
 
Incremental Queries and Transformations for Engineering Critical Systems
Incremental Queries and Transformations for Engineering Critical SystemsIncremental Queries and Transformations for Engineering Critical Systems
Incremental Queries and Transformations for Engineering Critical Systems
 
Architecting C Sharp for Cross Cutting Concerns
Architecting C Sharp for Cross Cutting ConcernsArchitecting C Sharp for Cross Cutting Concerns
Architecting C Sharp for Cross Cutting Concerns
 
Agile Software Architecture
Agile Software ArchitectureAgile Software Architecture
Agile Software Architecture
 
20141210 - Microservice Container
20141210 - Microservice Container20141210 - Microservice Container
20141210 - Microservice Container
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineers
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineers
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
Resilience Engineering: A field of study, a community, and some perspective s...
Resilience Engineering: A field of study, a community, and some perspective s...Resilience Engineering: A field of study, a community, and some perspective s...
Resilience Engineering: A field of study, a community, and some perspective s...
 
VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...
VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...
VCCFinder: Finding Potential Vulnerabilities in Open-Source Projects to Assis...
 
Application security meetup k8_s security with zero trust_29072021
Application security meetup k8_s security with zero trust_29072021Application security meetup k8_s security with zero trust_29072021
Application security meetup k8_s security with zero trust_29072021
 

More from Angela Lozano

An overview of techniques for detecting software variability concepts in sour...
An overview of techniques for detecting software variability concepts in sour...An overview of techniques for detecting software variability concepts in sour...
An overview of techniques for detecting software variability concepts in sour...Angela Lozano
 
Analyzing Code Evolution to Uncover Relations between Bad Smells
Analyzing Code Evolution to Uncover Relations between Bad SmellsAnalyzing Code Evolution to Uncover Relations between Bad Smells
Analyzing Code Evolution to Uncover Relations between Bad SmellsAngela Lozano
 
Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)
Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)
Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)Angela Lozano
 
Clones & Macro-Co-Changes
Clones & Macro-Co-ChangesClones & Macro-Co-Changes
Clones & Macro-Co-ChangesAngela Lozano
 
Explaining why methods change together
Explaining why methods change togetherExplaining why methods change together
Explaining why methods change togetherAngela Lozano
 
Words Associated with Questions about Macros in Tex
Words Associated with Questions about Macros in TexWords Associated with Questions about Macros in Tex
Words Associated with Questions about Macros in TexAngela Lozano
 
Co occurring code critics
Co occurring code criticsCo occurring code critics
Co occurring code criticsAngela Lozano
 

More from Angela Lozano (7)

An overview of techniques for detecting software variability concepts in sour...
An overview of techniques for detecting software variability concepts in sour...An overview of techniques for detecting software variability concepts in sour...
An overview of techniques for detecting software variability concepts in sour...
 
Analyzing Code Evolution to Uncover Relations between Bad Smells
Analyzing Code Evolution to Uncover Relations between Bad SmellsAnalyzing Code Evolution to Uncover Relations between Bad Smells
Analyzing Code Evolution to Uncover Relations between Bad Smells
 
Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)
Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)
Matraca industrial evaluation (Cha-Q tool demo event Dec 2016)
 
Clones & Macro-Co-Changes
Clones & Macro-Co-ChangesClones & Macro-Co-Changes
Clones & Macro-Co-Changes
 
Explaining why methods change together
Explaining why methods change togetherExplaining why methods change together
Explaining why methods change together
 
Words Associated with Questions about Macros in Tex
Words Associated with Questions about Macros in TexWords Associated with Questions about Macros in Tex
Words Associated with Questions about Macros in Tex
 
Co occurring code critics
Co occurring code criticsCo occurring code critics
Co occurring code critics
 

Recently uploaded

software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxnada99848
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 

Recently uploaded (20)

software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptx
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 

Prevent re-use bugs with uContracts

  • 1. Can we prevent re-use bugs? A. Lozano, K. Mens, and A. Kellens, “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 2. uContracts Motivation (1/2) • Evolving an application requires keeping the: • Design knowledge • Architectural integrity • They facilitate the introduction of substantial changes without introducing bugs • BUT Design knowledge • is not documented • initial developers move on • BUT Substantial changes may degrade the architectural integrity
  • 3. uContracts Motivation (1/2) • Evolving an application requires keeping the: • Design knowledge • Architectural integrity • They facilitate the introduction of substantial changes without introducing bugs • BUT Design knowledge • is not documented • initial developers move on • BUT Substantial changes may degrade the architectural integrity what is worthy of being documented? documenting is a loss of time! documenting disrupts my work flow! who will keep that up-to-date?
  • 4. uContracts Motivation (2/2) • Programmers use recurrent uniformities of related code (idioms, naming conventions, design patterns....) to: • preserve architectural constraints • keep in a single artifact (source-code) all the information they need ! • Complying with them facilitate future changes: • because they convey assumptions (correctness) ! • It would be useful to document them (within the code) and validate them (automatically).
  • 5. uContracts Idea behind: unitTesting for usage expectations Provider Consumer uses Usage Contract describes expectations of should comply with
  • 6. uContracts Idea behind: unitTesting for usage expectations copyFrom: anEntity within: aVisitor copyFrom: anEntity within: aVisitor super copyFrom: anEntity within: aVisitor ... inherits from All overriders of copyFrom:within: should start with a super call describes expectations of should comply with
  • 7. uContracts Idea behind: unitTesting for usage expectations classesInFAMIXSourcedEntityHierarchy copyFromWithinWithCorrectSuperCall FAMIXSourcedEntityContract EContract classesInFAMIXSourcedEntityHierarchy <liableHierarchy:#FAMIXSourcedEntity> copyFromWithinWithCorrectSuperCall <selector:#copyFrom:within:> contract require: condition beginsWith: (condition doesSuperSend: #copyFrom:within:) if: (condition isOverridden) Liable entity Contract term Contract conditions copyFrom: anEntity within: aVisitor copyFrom: anEntity within: aVisitor super copyFrom: anEntity within: aVisitor ... inherits from All overriders of copyFrom:within: should start with a super call describes expectations of should comply with
  • 8. uContracts Idea behind: unitTesting for usage expectations classesInFAMIXSourcedEntityHierarchy copyFromWithinWithCorrectSuperCall FAMIXSourcedEntityContract EContract classesInFAMIXSourcedEntityHierarchy <liableHierarchy:#FAMIXSourcedEntity> copyFromWithinWithCorrectSuperCall <selector:#copyFrom:within:> contract require: condition beginsWith: (condition doesSuperSend: #copyFrom:within:) if: (condition isOverridden) Liable entity Contract term Contract conditions Liable classes •liableClass: aRegExp / exceptClass: aRegExp •liableHierarchy: aClassName / exceptHierarchy: aClassName •liablePackage: aRegExp / exceptPackage: aRegExp
  • 9. uContracts Idea behind: unitTesting for usage expectations classesInFAMIXSourcedEntityHierarchy copyFromWithinWithCorrectSuperCall FAMIXSourcedEntityContract EContract classesInFAMIXSourcedEntityHierarchy <liableHierarchy:#FAMIXSourcedEntity> copyFromWithinWithCorrectSuperCall <selector:#copyFrom:within:> contract require: condition beginsWith: (condition doesSuperSend: #copyFrom:within:) if: (condition isOverridden) Liable entity Contract term Contract conditions Liable classes •liableClass •liableHierarchy •liablePackage Liable methods •selector: aRegExp / exceptSelector: aRegExp •protocol: aRegExp / exceptProtocol: aRegExp •/ exceptClass: aClassName selector: aSelector
  • 10. uContracts Idea behind: unitTesting for usage expectations classesInFAMIXSourcedEntityHierarchy copyFromWithinWithCorrectSuperCall FAMIXSourcedEntityContract EContract classesInFAMIXSourcedEntityHierarchy <liableHierarchy:#FAMIXSourcedEntity> copyFromWithinWithCorrectSuperCall <selector:#copyFrom:within:> contract require: condition beginsWith: (condition doesSuperSend: #copyFrom:within:) if: (condition isOverridden) Liable entity Contract term Contract conditions Liable classes •liableClass •liableHierarchy •liablePackage Liable methods •selector •protocol •/ exceptClass Contract terms •require: aCondition •suggest: aCondition •require: aCondition if:anotherCondition •suggest: aCondition if:anotherCondition
  • 11. uContracts Idea behind: unitTesting for usage expectations classesInFAMIXSourcedEntityHierarchy copyFromWithinWithCorrectSuperCall FAMIXSourcedEntityContract EContract classesInFAMIXSourcedEntityHierarchy <liableHierarchy:#FAMIXSourcedEntity> copyFromWithinWithCorrectSuperCall <selector:#copyFrom:within:> contract require: condition beginsWith: (condition doesSuperSend: #copyFrom:within:) if: (condition isOverridden) Liable entity Contract term Contract conditions Liable classes •liableClass •liableHierarchy •liablePackage Liable methods •selector •protocol •/ exceptClass Contract terms •require •suggest •require •suggest Contract conditions •assigns: aRegExp •calls: aRegExp •references: aRegExp •returns: anExpression •doesSuperSend: aRegExp •doesSelfSend: aRegExp •inProtocol: aRegExp •isOverridden: aSelector •isOverridden •isImplemented: aSel •custom: aVisitor
  • 12. uContracts Idea behind: unitTesting for usage expectations classesInFAMIXSourcedEntityHierarchy copyFromWithinWithCorrectSuperCall FAMIXSourcedEntityContract EContract classesInFAMIXSourcedEntityHierarchy <liableHierarchy:#FAMIXSourcedEntity> copyFromWithinWithCorrectSuperCall <selector:#copyFrom:within:> contract require: condition beginsWith: (condition doesSuperSend: #copyFrom:within:) if: (condition isOverridden) Liable entity Contract term Contract conditions Liable classes •liableClass •liableHierarchy •liablePackage Liable methods •selector •protocol •/ exceptClass Contract terms •require •suggest •require •suggest Contract conditions •assigns •calls •references •returns •doesSuperSend •doesSelfSend •inProtocol •isOverridden •isOverridden •isImplemented •custom Contract conditions •and: aCond1 with: aCond2 •or: aCond1 with: aCond2 •not: aCond ! •beginsWith: aCond •endsWith: aCond •does: aCond after: aCond2 •does: aCond before: aCond2
  • 13. uContracts Validation with an Industrial Application • Interactive web application for event & resource planning • developed in Pharo Smalltalk • uses the Seaside web development framework. • Medium size • Packages: 45 • Classes: 827 • Methods: 11777 • LOCs: 94151
  • 14. Certain methods should not be called directly • Certain methods should not be called directly from within interface code uContracts Validation with an Industrial Application liable classes contract
  • 15. Marking dirty objects • State changes must mark model objects as dirty uContracts Validation with an Industrial Application liable classes contract
  • 16. Initialization via database • Requires super call uContracts Validation with an Industrial Application liable classes contract
  • 17. Call ordering within cascade • Certain messages need to be sent at the end of a method uContracts Validation with an Industrial Application liable classes
  • 18. Call ordering within cascade • Certain messages need to be sent at the end of a method uContracts Validation with an Industrial Application liable classes contract
  • 19. Call ordering within cascade • Certain messages need to be sent at the end of a method uContracts Validation with an Industrial Application liable classes contract contract WithInCascadeVisitor extends CustomConditionVisitor
  • 21. uContracts Validation with an Industrial Application • 13 contracts defined in less than 2 days • 5 for model entities -> 3c found errors (88) • 214 liable classes • 2 for persistent entities -> 2c found errors (2) • 75 liable classes • 6 for interface code -> 4c found errors (11) • 598 liable classes
  • 22. uContracts Validation with an Industrial Application Contract Liable Methods Except. Errors-Dic Errors-Mar Certain methods should not be called directly 7410 0 3 2 Marking dirty objects 333 5 7 2 Initialization via database 44 0 1 0 Call ordering within cascade 531 0 0 0
  • 23. uContracts Reduce inhibitors to document design rationale! Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 24. uContracts Reduce inhibitors to document design rationale! What is valuable documentation? Why should I do it? What about true-but-harmless violations? That disrupts my work flow! What else should I keep up-to-date? Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 25. uContracts Reduce inhibitors to document design rationale! What is valuable documentation? document when you find violations Why should I do it? What about true-but-harmless violations? That disrupts my work flow! What else should I keep up-to-date? Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 26. uContracts Reduce inhibitors to document design rationale! What is valuable documentation? document when you find violations Why should I do it? violation are reported 'on the fly' within the IDE and by priority What about true-but-harmless violations? That disrupts my work flow! What else should I keep up-to-date? Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 27. uContracts Reduce inhibitors to document design rationale! What is valuable documentation? document when you find violations Why should I do it? violation are reported 'on the fly' within the IDE and by priority document the importance of a condition 'turn-off' harmless violations What about true-but-harmless violations? That disrupts my work flow! What else should I keep up-to-date? Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 28. uContracts Reduce inhibitors to document design rationale! What is valuable documentation? document when you find violations Why should I do it? violation are reported 'on the fly' within the IDE and by priority document the importance of a condition 'turn-off' harmless violations What about true-but-harmless violations? contract definition is done during  development uContracts is SmallTalk: an internal DSL seamlessly integrated with Pharo. That disrupts my work flow! What else should I keep up-to-date? Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 29. uContracts Reduce inhibitors to document design rationale! What is valuable documentation? document when you find violations Why should I do it? violation are reported 'on the fly' within the IDE and by priority document the importance of a condition 'turn-off' harmless violations What about true-but-harmless violations? contract definition is done during  development uContracts is SmallTalk: an internal DSL seamlessly integrated with Pharo. That disrupts my work flow! nothing!What else should I keep up-to-date? Lozano, A., Kellens, A., and Mens, K. “Usage contracts: offering immediate feed- back on violations of structural source-code regularities”. (SciCo’15).
  • 30. Conclusions • It is possible to: • reduce inhibitors to document design rationale • prevent reuse bugs • 2 days for 101 errors fixed • these errors will not occur again (validated on the fly)