Through the Looking Glass Applying Analytics to Development Michael - - PowerPoint PPT Presentation

through the looking glass
SMART_READER_LITE
LIVE PREVIEW

Through the Looking Glass Applying Analytics to Development Michael - - PowerPoint PPT Presentation

Through the Looking Glass Applying Analytics to Development Michael Feathers Independent Consultant Wednesday, November 7, 2012 How Much Do We Know? Wednesday, November 7, 2012 Wednesday, November 7, 2012 Wednesday, November 7, 2012


slide-1
SLIDE 1

“Through the Looking Glass”

Applying Analytics to Development

Michael Feathers

Independent Consultant

Wednesday, November 7, 2012

slide-2
SLIDE 2

How Much Do We Know?

Wednesday, November 7, 2012

slide-3
SLIDE 3

Wednesday, November 7, 2012

slide-4
SLIDE 4

Wednesday, November 7, 2012

slide-5
SLIDE 5

Wednesday, November 7, 2012

slide-6
SLIDE 6

Rationalistic Bias

Wednesday, November 7, 2012

slide-7
SLIDE 7

Version Control History

Wednesday, November 7, 2012

slide-8
SLIDE 8

Source Control Change Events as Data

Wednesday, November 7, 2012

slide-9
SLIDE 9

Git

Wednesday, November 7, 2012

slide-10
SLIDE 10

Git

Commit

Wednesday, November 7, 2012

slide-11
SLIDE 11

Git

Commit

commit hash (sha1) time/date stamp committer files actual change

Wednesday, November 7, 2012

slide-12
SLIDE 12

Git

Commit

commit hash (sha1) time/date stamp committer files actual change commit hash (sha1) time/date stamp committer method name method body add/change/delete

Method Event

Wednesday, November 7, 2012

slide-13
SLIDE 13

The Open/Closed Principle

"software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification"

  • Bertrand Meyer

Wednesday, November 7, 2012

slide-14
SLIDE 14

100 200 300 400 files

Clojure

# of commits

Wednesday, November 7, 2012

slide-15
SLIDE 15

75 150 225 300 files

Fitnesse

# of commits

Wednesday, November 7, 2012

slide-16
SLIDE 16

17.5 35.0 52.5 70.0 files

JUnit

# of commits

Wednesday, November 7, 2012

slide-17
SLIDE 17

Wednesday, November 7, 2012

slide-18
SLIDE 18

Wednesday, November 7, 2012

slide-19
SLIDE 19

Wednesday, November 7, 2012

slide-20
SLIDE 20

Wednesday, November 7, 2012

slide-21
SLIDE 21

Wednesday, November 7, 2012

slide-22
SLIDE 22

7.5 15.0 22.5 30.0 time

A Method Lifeline

Wednesday, November 7, 2012

slide-23
SLIDE 23

1 2 3 4 time

Another Method

Wednesday, November 7, 2012

slide-24
SLIDE 24

Wednesday, November 7, 2012

slide-25
SLIDE 25

Wednesday, November 7, 2012

slide-26
SLIDE 26

http://www.physorg.com/news/2011-04-early-lunch.html

Wednesday, November 7, 2012

slide-27
SLIDE 27

Wednesday, November 7, 2012

slide-28
SLIDE 28

Wednesday, November 7, 2012

slide-29
SLIDE 29

Wednesday, November 7, 2012

slide-30
SLIDE 30

Wednesday, November 7, 2012

slide-31
SLIDE 31

Commits per minute of each hour

repo.commits.map {|_,d| d.min }.freq

Wednesday, November 7, 2012

slide-32
SLIDE 32

repo.commits.map {|c,_| repo.commit(c).added_complexity.to_i }

Added Complexity Over Time

Wednesday, November 7, 2012

slide-33
SLIDE 33

Amount of Complexity Added by Hour of Day

Wednesday, November 7, 2012

slide-34
SLIDE 34

Normalized by Commits

Wednesday, November 7, 2012

slide-35
SLIDE 35

A Lifeline

repo.methods.select {|m| m.full_name == "FeelingsController#create" }.first.life_line

Wednesday, November 7, 2012

slide-36
SLIDE 36

Number of Files Touched Per Commit

repo.events.group_by(&:commit).map { |sha, events| events.map(&:file_name).uniq.count }.freq

Wednesday, November 7, 2012

slide-37
SLIDE 37

The Trending View

Wednesday, November 7, 2012

slide-38
SLIDE 38

Methods Ascending

Wednesday, November 7, 2012

slide-39
SLIDE 39

Trending Methods

Wednesday, November 7, 2012

slide-40
SLIDE 40

Static Views

Wednesday, November 7, 2012

slide-41
SLIDE 41

Classes By Closure Date

[["DummiesController", 2008-04-21 13:03:08 -0700], ["Core::ActiveRecord::AttributeDefaults::ClassMethods", 2008-04-22 16:02:54 -0700], ["Legacy::Database", 2008-04-24 15:37:51 -0700], ["Core::ActiveRecord::AttributeDelegation::ClassMethods", 2008-04-24 20:46:58 -0700], ["Core::ActiveRecord::SkipValidationForHasOnes", 2008-04-29 21:54:32 -0700]]

Wednesday, November 7, 2012

slide-42
SLIDE 42

Classes By Closure Date

Wednesday, November 7, 2012

slide-43
SLIDE 43

Temporal Correlation of Class Changes

[[["App", "Inventory"], 277], [["Inventory", "Object"], 216], [["Admin", "Inventory"], 195], [["Inventory", "User"], 188], [["Inventory", "Users"], 171], [["Inventory", "Deals"], 167], [["App", "Object"], 159], [["App", "InventoryController"], 152], [["Inventory", "Order"], 149], [["User", "Users"], 149], [["App", "User"], 143], [["Inventory", "InventoryController"], 143], [["Api", "Inventory"], 141], [["Admin", "App"], 136], [["Campaign", "Orders"], 134]]

Wednesday, November 7, 2012

slide-44
SLIDE 44

Temporal Correlation of Class Changes

Wednesday, November 7, 2012

slide-45
SLIDE 45

Temporal Correlation of Class Changes

Wednesday, November 7, 2012

slide-46
SLIDE 46

Enki - A Rails Blogging Platform

5 Unique Committers ["Xavier", "Jason", "Zach", "Pedro", "Gaelian"] 637 method events Spec to method ratios by committer: [0.09245283018867924, "Xavier"], [0.05084745762711865, "Jason"], [0.0, "Zach"], [0.6666666666666666, "Pedro"], [0.0, "Gaelian"]] Number of Method Modifications: Zach => 6 Xavier=> 167 Jason => 10 Pedro => 1

Wednesday, November 7, 2012

slide-47
SLIDE 47

Enki - CommentController Class

Wednesday, November 7, 2012

slide-48
SLIDE 48

Enki - Post Class

Wednesday, November 7, 2012

slide-49
SLIDE 49

Enki - Ownership Effect

Wednesday, November 7, 2012

slide-50
SLIDE 50

Enki - Average Lines Per Commit By Month

Wednesday, November 7, 2012

slide-51
SLIDE 51

Enki - Spec Lifelines

Wednesday, November 7, 2012

slide-52
SLIDE 52

Enki - Hour Profile

Wednesday, November 7, 2012

slide-53
SLIDE 53

MercuryApp

5 Unique Committers ["Sarah", "coreyhaines", "Cory", "Spencer", "sarah"] 7788 method events Spec to method ratios by committer: [0.40381791483113066, "Sarah"], [0.5220038748962081, "coreyhaines"], [0.0, "Cory"], [0.0, "Spencer"], [0.5171062009978618, "sarah"] Number of Method Modifications: Cory => 629 Sarah=> 739 Spencer => 2

Wednesday, November 7, 2012

slide-54
SLIDE 54

MercuryApp - User Class

Wednesday, November 7, 2012

slide-55
SLIDE 55

MercuryApp - FeelingsController Class

Wednesday, November 7, 2012

slide-56
SLIDE 56

MercuryApp - Ownership Effect

Wednesday, November 7, 2012

slide-57
SLIDE 57

MercuryApp - Average Lines Per Commit By Month

Wednesday, November 7, 2012

slide-58
SLIDE 58

MercuryApp - Hour Profile

Wednesday, November 7, 2012

slide-59
SLIDE 59

Wednesday, November 7, 2012

slide-60
SLIDE 60

Frequency of Inter-commit Intervals

Wednesday, November 7, 2012

slide-61
SLIDE 61

Frequency of Inter-commit Intervals

Wednesday, November 7, 2012

slide-62
SLIDE 62

Frequency of Inter-commit Intervals Rhythm

Wednesday, November 7, 2012

slide-63
SLIDE 63

Frequency of Inter-commit Intervals

Wednesday, November 7, 2012

slide-64
SLIDE 64

Average Lines of Code Per Commit By Week

Wednesday, November 7, 2012

slide-65
SLIDE 65

Complexity Tolerance (Developer A)

Wednesday, November 7, 2012

slide-66
SLIDE 66

Complexity Tolerance (Developer B)

Wednesday, November 7, 2012

slide-67
SLIDE 67

Ownership Effect (all methods)

Wednesday, November 7, 2012

slide-68
SLIDE 68

Code Mining Issues

Wednesday, November 7, 2012

slide-69
SLIDE 69

The Commit Problem

Wednesday, November 7, 2012

slide-70
SLIDE 70

The Social Environment Problem

Wednesday, November 7, 2012

slide-71
SLIDE 71

Blame

Wednesday, November 7, 2012

slide-72
SLIDE 72

Dangerous Knowledge

Wednesday, November 7, 2012

slide-73
SLIDE 73

Best Practice may be ‘Per Product Analysis’

Wednesday, November 7, 2012

slide-74
SLIDE 74

Metrics

Wednesday, November 7, 2012

slide-75
SLIDE 75

“Laws” of Metrics

Wednesday, November 7, 2012

slide-76
SLIDE 76

“Laws” of Metrics

  • 1. Distance Causes Misunderstanding

Wednesday, November 7, 2012

slide-77
SLIDE 77

“Laws” of Metrics

  • 1. Distance Causes Misunderstanding
  • 2. Highlighting Leads to Focus

Wednesday, November 7, 2012

slide-78
SLIDE 78

“Laws” of Metrics

  • 1. Distance Causes Misunderstanding
  • 2. Highlighting Leads to Focus
  • 3. Focus Leads to Action

Wednesday, November 7, 2012

slide-79
SLIDE 79

“Laws” of Metrics

  • 1. Distance Causes Misunderstanding
  • 2. Highlighting Leads to Focus
  • 3. Focus Leads to Action
  • 4. Focus Leads to Side-Effects

Wednesday, November 7, 2012

slide-80
SLIDE 80

“Laws” of Metrics

  • 1. Distance Causes Misunderstanding
  • 2. Highlighting Leads to Focus
  • 3. Focus Leads to Action
  • 4. Focus Leads to Side-Effects
  • 5. Knowledge Defines Normality

Wednesday, November 7, 2012

slide-81
SLIDE 81

Things to Look For

Wednesday, November 7, 2012

slide-82
SLIDE 82

Things to Look For

  • Relationship between the presence of tests and

refactoring

Wednesday, November 7, 2012

slide-83
SLIDE 83

Things to Look For

  • Reasons behind high churn in classes and methods

(beyond the runaways)

Wednesday, November 7, 2012

slide-84
SLIDE 84

Things to Look For

  • Identification Patterns for Good Programming Episodes

Wednesday, November 7, 2012

slide-85
SLIDE 85

Future Work

  • Automated commits for full picture of development

Wednesday, November 7, 2012

slide-86
SLIDE 86

Future Work

  • Analysis of changes for developer improvement

Wednesday, November 7, 2012

slide-87
SLIDE 87

Future Work

  • Catalog of norms for good development

Wednesday, November 7, 2012

slide-88
SLIDE 88

Future Work

  • Integration with bug fix data

Wednesday, November 7, 2012