@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
The Concept
The Concept
Rule
The Concept
Rule
The Concept
Rule Critique
produces
The Concept
Rule Critique
produces
The Concept
Rule Critique
[|]
Code
produces
improves
The Concept
Rule Critique
[|]
Code
produces
improves
(feedback)
improves
The Concept
Rule Critique
[|]
Code
produces
improves
(feedback)
improves
The Concept
Rule Critique
[|]
Code
produces
improves
The Concept
Rule Critique
[|]
Code
produces
improves
The Existing CriticBrowser
Newly Introduced QualityAssistant
SmallLint Issues per Milestone
0
10
20
30
40
50
Pharo 3 Pharo 4 Pharo 5 Pharo 6*
Changes in Rules
Changes in Rules
Fixed
Changes in Rules
Fixed Removed
Added
Changes in Rules
Fixed Removed
Fixed
Fixed
(Collection>>#add:) protocol #adding
Fixed
(Collection>>#add:) protocol
(ArrayedCollection>>#add:) protocol #adding
#adding
Fixed
(Collection>>#add:) protocol
(ArrayedCollection>>#add:) protocol #adding
#accessing
Fixed
(Collection>>#add:) protocol
(ArrayedCollection>>#add:) protocol #adding
#accessing
Fixed
(Collection>>#add:) protocol
#'as yet unclassified'
(ArrayedCollection>>#add:) protocol #adding
Fixed
(Collection>>#add:) protocol
#'as yet unclassified'
(ArrayedCollection>>#add:) protocol #adding
Trivial Bug
Fixed
Fixed
RBModi!esCollectionRule
Fixed
RBModi!esCollectionRule
Horrible Bug
Removed
Removed
Probably missing ‘; yourself’
Non-blocks in special messages
References an abstract class
Removed
Probably missing ‘; yourself’
Non-blocks in special messages
References an abstract class
size = 1 ifTrue: ’:’ ifFalse: ’s:’
Removed
Probably missing ‘; yourself’
Non-blocks in special messages
References an abstract class
String new
size = 1 ifTrue: ’:’ ifFalse: ’s:’
Removed
Probably missing ‘; yourself’
Non-blocks in special messages
References an abstract class
String new
size = 1 ifTrue: ’:’ ifFalse: ’s:’
Educational
Added
Added
assert: a = b
ifNotNilDo: ifNotNil:
Smalltalk at: Smalltalk globals at:
assert: a equals: b
Added
assert: a = b
ifNotNilDo: ifNotNil:
Smalltalk at: Smalltalk globals at:
assert: a equals: b
Migration
Added
assert: a = b
ifNotNilDo: ifNotNil:
Smalltalk at: Smalltalk globals at:
assert: a equals: b
Migration
Recipe: use rewrite rules
Added
Added
BoxedFloat64reference to
Added
BoxedFloat64reference to
Private Access
Added
BoxedFloat64reference to
Recipe: annotate/maintain a collection
of system classes/methods
Private Access
Added
Added
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
Added
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
Added
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
Invocation order
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
Added
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
Recipe:
initialize
super initialize.
self add: #edges requiresPreSend: #nodes:.
Invocation Order
b := RTMondrian new.
b edges connectFrom: #superclass.
b nodes: RTShape withAllSubclasses.
Added
Added
ReAbstractRule class
>> #checksPackage;
>> #checksClass;
>> #checksMethod;
>> #checksNode
Added
ReAbstractRule class
>> #checksPackage;
>> #checksClass;
>> #checksMethod;
>> #checksNode
true?
Added
ReAbstractRule class
>> #checksPackage;
>> #checksClass;
>> #checksMethod;
>> #checksNode
true?
Class Structure
Added
ReAbstractRule class
>> #checksPackage;
>> #checksClass;
>> #checksMethod;
>> #checksNode
true?
Recipe:
(aClass inheritsFrom: ReAbstractRule) and: [
selectors anySatisfy: [ :s | aClass perform: s ] ]
Class Structure
Added
Added
gtInspectorMethodsIn: composite
<gtInspectorPresentationOrder: 20>
| methods |
methods := (self methods collect: #asRingDefinition)
sorted: [ :x :y | x selector < y selector ]
composite list
title: 'Methods';
display: methods;
format: #selector;
tags: [ :each | {each methodClass name} ]
Added
gtInspectorMethodsIn: composite
<gtInspectorPresentationOrder: 20>
| methods |
methods := (self methods collect: #asRingDefinition)
sorted: [ :x :y | x selector < y selector ]
composite list
title: 'Methods';
display: methods;
format: #selector;
tags: [ :each | {each methodClass name} ]
Added
gtInspectorMethodsIn: composite
<gtInspectorPresentationOrder: 20>
composite list
title: 'Methods';
display: ((self methods collect: #asRingDefinition)
sorted: [ :x :y | x selector < y selector ]);
format: #selector;
tags: [ :each | {each methodClass name} ]
Added
gtInspectorMethodsIn: composite
<gtInspectorPresentationOrder: 20>
composite list
title: 'Methods';
display: [ (self methods collect: #asRingDefinition)
sorted: [ :x :y | x selector < y selector ] ];
format: #selector;
tags: [ :each | {each methodClass name} ]
Added Lazy evaluation
gtInspectorMethodsIn: composite
<gtInspectorPresentationOrder: 20>
composite list
title: 'Methods';
display: [ (self methods collect: #asRingDefinition)
sorted: [ :x :y | x selector < y selector ] ];
format: #selector;
tags: [ :each | {each methodClass name} ]
gtInspectorMethodsIn: composite
<gtInspectorPresentationOrder: 20>
composite list
title: 'Methods';
display: [ (self methods collect: #asRingDefinition)
sorted: [ :x :y | x selector < y selector ] ];
format: #selector;
tags: [ :each | {each methodClass name} ]
Added Lazy evaluation
Recipe:
presentation: aPresentation isTheLeftmostRecepientIn: aStatement
^ (aStatement isMessage or:
[ aStatement isCascade ]) and: [
aStatement leftmostChainReceiver = aPresentation ]
Feedback
Feedback
http://renraku.inf.usi.ch/rules
Feedback
http://renraku.inf.usi.ch/rules
Feedback
http://renraku.inf.usi.ch/rules
Feedback
http://renraku.inf.usi.ch/rules
Feedback
http://renraku.inf.usi.ch/rules
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
Domain Rules
Added
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
Domain Rules
Added
Migration
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
Domain Rules
Added
Migration
Private access
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
Domain Rules
Added
Migration
Private access
Invocation order
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
Domain Rules
Added
Migration
Private access
Invocation order
Class structure
@yuriy_tymchuk
When QualityAssistant Meets Pharo
Enforced Code Critiques Motivate
More Valuable Rules
, Mohammad Ghafari, Oscar Nierstrasz
Software Composition Group @ University of Bern
Important
Fixes
Educational
Rules Removed
Domain Rules
Added
Migration
Private access
Invocation order
Class structure
Lazy evaluation

More Related Content

PDF
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
PPTX
Testers guide to unit testing
PPT
Google mock for dummies
PDF
TDD CrashCourse Part3: TDD Techniques
PDF
Why Your Test Suite Sucks - PHPCon PL 2015
PPT
20111018 boost and gtest
KEY
Unit Test Your Database
PDF
Modern Python Testing
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
Testers guide to unit testing
Google mock for dummies
TDD CrashCourse Part3: TDD Techniques
Why Your Test Suite Sucks - PHPCon PL 2015
20111018 boost and gtest
Unit Test Your Database
Modern Python Testing

What's hot (18)

PDF
JAVASCRIPT Test Driven Development & Jasmine
ODP
New Ideas for Old Code - Greach
PPT
Google C++ Testing Framework in Visual Studio 2008
ODP
Python unit testing
PDF
Workshop quality assurance for php projects - phpdublin
PDF
Python unittest
PDF
Unit Testing - The Whys, Whens and Hows
PDF
Pharo Optimising JIT Internals
PDF
C++ Unit Test with Google Testing Framework
PDF
TDD, BDD and mocks
KEY
iOS Unit Testing
PPTX
Tdd & unit test
PDF
Auto testing!
PPTX
Unit testing patterns for concurrent code
PPT
Stopping the Rot - Putting Legacy C++ Under Test
PPT
Presentation_C++UnitTest
PDF
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT Test Driven Development & Jasmine
New Ideas for Old Code - Greach
Google C++ Testing Framework in Visual Studio 2008
Python unit testing
Workshop quality assurance for php projects - phpdublin
Python unittest
Unit Testing - The Whys, Whens and Hows
Pharo Optimising JIT Internals
C++ Unit Test with Google Testing Framework
TDD, BDD and mocks
iOS Unit Testing
Tdd & unit test
Auto testing!
Unit testing patterns for concurrent code
Stopping the Rot - Putting Legacy C++ Under Test
Presentation_C++UnitTest
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
Ad

Similar to When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valuable Rules] (iwst2016) (20)

PDF
Co occurring code critics
PDF
Refactoring Workshop (Rails Pacific 2014)
PDF
apidays LIVE Paris - The Augmented API Design Reviewer by Arnaud Lauret
PDF
Recommending refactoring operations in large software systems
PDF
Protege owl tutorialp3_v1_0
PDF
Stories About Renraku — the new Quality Model of Pharo (esug2016)
PDF
Stories About Renraku — the new Quality Model of Pharo
PPT
03 How to Keep Domain Requirements Models Reasonably Sized
PPT
07. Class Diagram.ppt
PDF
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
PDF
Mining Entities to Rules with MEntoR
PDF
Hidden Gems of Ruby 1.9
PDF
ScotRuby - Dark side of ruby
PDF
DC |> Elixir Meetup - Going off the Rails into Elixir - Dan Ivovich
PDF
Effective java
PDF
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
ZIP
Refatoração + Design Patterns em Ruby
PDF
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
PPTX
Refactoring Workflows & Techniques Presentation by Valentin Stantescu
PDF
DepMiner: Automatic Recommendation of Transformation Rules for Method Depreca...
Co occurring code critics
Refactoring Workshop (Rails Pacific 2014)
apidays LIVE Paris - The Augmented API Design Reviewer by Arnaud Lauret
Recommending refactoring operations in large software systems
Protege owl tutorialp3_v1_0
Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo
03 How to Keep Domain Requirements Models Reasonably Sized
07. Class Diagram.ppt
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
Mining Entities to Rules with MEntoR
Hidden Gems of Ruby 1.9
ScotRuby - Dark side of ruby
DC |> Elixir Meetup - Going off the Rails into Elixir - Dan Ivovich
Effective java
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
Refatoração + Design Patterns em Ruby
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Refactoring Workflows & Techniques Presentation by Valentin Stantescu
DepMiner: Automatic Recommendation of Transformation Rules for Method Depreca...
Ad

More from Yuriy Tymchuk (14)

PDF
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
PDF
Pharo Quality Engine: The Last Strokes (esug2017)
PDF
The False False Positives of Static Analysis (sattose2017)
PDF
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
PDF
What if Clippy Would Criticize Your Code? (benevol2015)
PDF
Beyond the Concept of Quality in Pharo (esug2015)
PDF
Code Review: Veni, ViDI, Vici (saner15)
PDF
ViDI - The Visual Design Inspector (fosdem2015)
PDF
Graphics and Visualization (Pharo Days 2015)
PDF
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
PDF
FAST Master's Defense (UA)
PDF
Signs of Caries at SmalltalkHub (mooseday13/2)
PDF
FAST Resolution (benevol13)
PDF
Modeling ASTs with FAST (mooseday13)
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
Pharo Quality Engine: The Last Strokes (esug2017)
The False False Positives of Static Analysis (sattose2017)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
What if Clippy Would Criticize Your Code? (benevol2015)
Beyond the Concept of Quality in Pharo (esug2015)
Code Review: Veni, ViDI, Vici (saner15)
ViDI - The Visual Design Inspector (fosdem2015)
Graphics and Visualization (Pharo Days 2015)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
FAST Master's Defense (UA)
Signs of Caries at SmalltalkHub (mooseday13/2)
FAST Resolution (benevol13)
Modeling ASTs with FAST (mooseday13)

Recently uploaded (20)

PPTX
Trending Python Topics for Data Visualization in 2025
PPTX
MLforCyber_MLDataSetsandFeatures_Presentation.pptx
PDF
How Tridens DevSecOps Ensures Compliance, Security, and Agility
PDF
Wondershare Recoverit Full Crack New Version (Latest 2025)
PDF
Workplace Software and Skills - OpenStax
PDF
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
PDF
AI Guide for Business Growth - Arna Softech
PDF
Guide to Food Delivery App Development.pdf
PDF
AI-Powered Fuzz Testing: The Future of QA
PDF
Visual explanation of Dijkstra's Algorithm using Python
PDF
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PDF
Topaz Photo AI Crack New Download (Latest 2025)
PDF
Type Class Derivation in Scala 3 - Jose Luis Pintado Barbero
PDF
novaPDF Pro 11.9.482 Crack + License Key [Latest 2025]
PDF
Introduction to Ragic - #1 No Code Tool For Digitalizing Your Business Proces...
PDF
DNT Brochure 2025 – ISV Solutions @ D365
PPTX
Lecture 5 Software Requirement Engineering
PDF
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
PDF
E-Commerce Website Development Companyin india
Trending Python Topics for Data Visualization in 2025
MLforCyber_MLDataSetsandFeatures_Presentation.pptx
How Tridens DevSecOps Ensures Compliance, Security, and Agility
Wondershare Recoverit Full Crack New Version (Latest 2025)
Workplace Software and Skills - OpenStax
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
AI Guide for Business Growth - Arna Softech
Guide to Food Delivery App Development.pdf
AI-Powered Fuzz Testing: The Future of QA
Visual explanation of Dijkstra's Algorithm using Python
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
Topaz Photo AI Crack New Download (Latest 2025)
Type Class Derivation in Scala 3 - Jose Luis Pintado Barbero
novaPDF Pro 11.9.482 Crack + License Key [Latest 2025]
Introduction to Ragic - #1 No Code Tool For Digitalizing Your Business Proces...
DNT Brochure 2025 – ISV Solutions @ D365
Lecture 5 Software Requirement Engineering
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
E-Commerce Website Development Companyin india

When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valuable Rules] (iwst2016)