+ All Categories
Home > Software > When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valuable Rules] (iwst2016)

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

Date post: 14-Apr-2017
Category:
Upload: yuriy-tymchuk
View: 48 times
Download: 1 times
Share this document with a friend
73
@yuriy_tymchuk When QualityAssistant Meets Pharo Enforced Code Critiques Motivate More Valuable Rules , Mohammad Ghafari, Oscar Nierstrasz Software Composition Group @ University of Bern
Transcript
Page 1: When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valuable Rules] (iwst2016)

@yuriy_tymchuk

When QualityAssistant Meets Pharo Enforced Code Critiques Motivate

More Valuable Rules

, Mohammad Ghafari, Oscar Nierstrasz Software Composition Group @ University of Bern

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

The Concept

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

The Concept

Rule

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

The Concept

Rule

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

The Concept

Rule Critique

produces

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

The Concept

Rule Critique

produces

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

The Concept

Rule Critique

[|]Code

produces

improves

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

The Concept

Rule Critique

[|]Code

produces

improves (feedback)

improves

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

The Concept

Rule Critique

[|]Code

produces

improves (feedback)

improves

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

The Concept

Rule Critique

[|]Code

produces

improves

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

The Concept

Rule Critique

[|]Code

produces

improves

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

The Existing CriticBrowser

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

Newly Introduced QualityAssistant

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

SmallLint Issues per Milestone

0

10

20

30

40

50

Pharo 3 Pharo 4 Pharo 5 Pharo 6*

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

Changes in Rules

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

Changes in Rules

Fixed

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

Changes in Rules

Fixed Removed

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

Added

Changes in Rules

Fixed Removed

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

Fixed

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

Fixed

(Collection>>#add:) protocol #adding

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

Fixed

(Collection>>#add:) protocol

(ArrayedCollection>>#add:) protocol #adding

#adding

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

Fixed

(Collection>>#add:) protocol

(ArrayedCollection>>#add:) protocol #adding

#accessing

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

Fixed

(Collection>>#add:) protocol

(ArrayedCollection>>#add:) protocol #adding

#accessing

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

Fixed

(Collection>>#add:) protocol#'as yet unclassified'

(ArrayedCollection>>#add:) protocol #adding

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

Fixed

(Collection>>#add:) protocol#'as yet unclassified'

(ArrayedCollection>>#add:) protocol #adding

Trivial Bug

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

Fixed

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

Fixed

RBModi!esCollectionRule

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

Fixed

RBModi!esCollectionRule

Horrible Bug

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

Removed

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

Removed

Probably missing ‘; yourself’

Non-blocks in special messages

References an abstract class

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

Removed

Probably missing ‘; yourself’

Non-blocks in special messages

References an abstract classsize = 1 ifTrue: ’:’ ifFalse: ’s:’

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

Removed

Probably missing ‘; yourself’

Non-blocks in special messages

References an abstract classString new

size = 1 ifTrue: ’:’ ifFalse: ’s:’

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

Removed

Probably missing ‘; yourself’

Non-blocks in special messages

References an abstract classString new

size = 1 ifTrue: ’:’ ifFalse: ’s:’

Educational

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

Added

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

Added

assert: a = b

ifNotNilDo: ifNotNil:

Smalltalk at: Smalltalk globals at:

assert: a equals: b

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

Added

assert: a = b

ifNotNilDo: ifNotNil:

Smalltalk at: Smalltalk globals at:

assert: a equals: b

Migration

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

Added

assert: a = b

ifNotNilDo: ifNotNil:

Smalltalk at: Smalltalk globals at:

assert: a equals: b

Migration

Recipe: use rewrite rules

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

Added

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

Added

BoxedFloat64 reference to

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

Added

BoxedFloat64 reference to

Private Access

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

Added

BoxedFloat64 reference to

Recipe: annotate/maintain a collection of system classes/methods

Private Access

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

Added

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

Added

b := RTMondrian new. b edges connectFrom: #superclass. b nodes: RTShape withAllSubclasses.

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

Added

b := RTMondrian new. b edges connectFrom: #superclass. b nodes: RTShape withAllSubclasses.

b := RTMondrian new. b edges connectFrom: #superclass. b nodes: RTShape withAllSubclasses.

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

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.

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

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.

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

Added

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

Added

ReAbstractRule class >> #checksPackage; >> #checksClass; >> #checksMethod; >> #checksNode

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

Added

ReAbstractRule class >> #checksPackage; >> #checksClass; >> #checksMethod; >> #checksNode

true?

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

Added

ReAbstractRule class >> #checksPackage; >> #checksClass; >> #checksMethod; >> #checksNode

true?

Class Structure

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

Added

ReAbstractRule class >> #checksPackage; >> #checksClass; >> #checksMethod; >> #checksNode

true?

Recipe:(aClass inheritsFrom: ReAbstractRule) and: [ selectors anySatisfy: [ :s | aClass perform: s ] ]

Class Structure

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

Added

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

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} ]

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

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} ]

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

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} ]

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

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} ]

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

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} ]

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

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 ]

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

Feedback

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

Feedback

http://renraku.inf.usi.ch/rules

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

Feedbackhttp://renraku.inf.usi.ch/rules

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

Feedbackhttp://renraku.inf.usi.ch/rules

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

Feedbackhttp://renraku.inf.usi.ch/rules

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

Feedbackhttp://renraku.inf.usi.ch/rules

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

@yuriy_tymchuk

When QualityAssistant Meets Pharo Enforced Code Critiques Motivate

More Valuable Rules

, Mohammad Ghafari, Oscar Nierstrasz Software Composition Group @ University of Bern

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

@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

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

@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

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

@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

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

@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

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

@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

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

@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

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

@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

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

@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


Recommended