SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Measuring & Analyzing
           Things That Matter
           When You Have Too
          Many Things To Keep
               Track Of*                                                                (chocolate salmon)




                                                    by @chadfowler

                            * this title easily understood by 13-15 year old students
Thursday, February 23, 12
Thursday, February 23, 12
How does this happen?




Thursday, February 23, 12
How do we fix it?

                     • code reviews are hard
                     • code reviews are time consuming
                     • there are too many commits to review
                     • bulleted lists are awesome

Thursday, February 23, 12
information radiator
                            “Coined around 2000 while standing in a Thoughtworks
                            office looking at all the paper on the walls around me,
                            “information radiator” refers to a publicly posted display
                            that shows people walking by what is going on.
                            Information radiators are best when they are big, very
                            easy to see (e.g. not online, generally), and change often
                            enough to be worth revisiting.”




                             http://alistair.cockburn.us/Information+radiator




Thursday, February 23, 12
“Chart what you care about, what you worry about,
                       what you want other people to know.”




                            http://xprogramming.com/articles/bigvisiblecharts/
Thursday, February 23, 12
http://www.exampler.com/old-blog/2005/04/02/
Thursday, February 23, 12
1/2 Marathon Training




Thursday, February 23, 12
What Should We
                              Measure?
                     • Project progress
                     • Code complexity
                     • Developer “productivity”
                     • Business “key performance indicators”
                     • Bug/error rates
                     • Everything important
Thursday, February 23, 12
Code “Quality”



Thursday, February 23, 12
Rudolph Flesch




Thursday, February 23, 12
Flesch-Kincaid Reading Ease
                            Score                           Notes

                            90-100   easily understood by an average 11-year-old student




                            60-70    easily understood by 13- to 15-year-old students




                             0-30    best understood by university graduates




Thursday, February 23, 12
competing algorithms

                     • SMOG
                     • Gunning-Fog

             http://www.editcentral.com/gwt1/EditCentral.html


Thursday, February 23, 12
Maurice Halstead
                             “Software Science”




                            http://en.wikipedia.org/wiki/Halstead_complexity_measures

Thursday, February 23, 12
Measure units of human
                               thought used!!!
      “Stroud’s (1955, 1967) original proposal, which is
     usually called a discrete-moment model, claims that
           all incoming information is processed in
     nonoverlapping (i.e., temporarily discrete) samples
       or scans and that the temporal order of stimuli
                 within a scan is not preserved.”


                T ' = ( n1N2( n1log2n1 +
                n2log2n2) log2n) / 2n2S




       http://yunus.hacettepe.edu.tr/~sencer/complexity.html
Thursday, February 23, 12
abc

   Assignment – an explicit transfer of data into a variable
   Branch – an explicit forward program branch out of scope
              Condition – a logical/Boolean test

                            |ABC| = sqrt((A*A)+(B*B)+(C*C))




           http://www.softwarerenovation.com/ABCMetric.pdf
Thursday, February 23, 12
Cyclomatic Complexity
                  M = E − N + 2P



            E = the number of edges of the graph
            N = the number of nodes of the graph
            P = the number of connected components




Thursday, February 23, 12
Basis Path Testing




  http://users.csc.calpoly.edu/~jdalbey/206/Lectures/BasisPathTutorial/index.html

Thursday, February 23, 12
Complexity
                                      Conservation
                              “One of McCabe's original applications was to limit the complexity of
                              routines during program development; he recommended that
                              programmers should count the complexity of the modules they are
                              developing, and split them into smaller modules whenever the
                              cyclomatic complexity of the module exceeded 10.”



 NO MORE THAN TEN GALLONS OF CYCLOMATIC
        COMPLEXITY PER MODULE!!!!!

                        http://en.wikipedia.org/wiki/Cyclomatic_complexity#cite_note-mccabe76-2


Thursday, February 23, 12
Complexity &
                             Cohesion
         “Our results support the idea that there is a relationship
         between complexity and cohesion, basically that a lack of
               cohesion is associated with high complexity”




Exploring the Relationship between Cohesion and Complexity - Stein, Cox, Etzkorn
                                    - 2005

Thursday, February 23, 12
saikuro




                            http://saikuro.rubyforge.org/
Thursday, February 23, 12
yup




Thursday, February 23, 12
flog

                     • Written by Ryan Davis
                     • opinionated
                     • ruby specific


Thursday, February 23, 12
Thursday, February 23, 12
Thursday, February 23, 12
Flog Method Reading Ease *
                            Score                          Notes
                             1-2    easily understood by an average Visual Basic developer




                            3-10    easily understood by PHP developers




                            10-20   best understood by Perl, Smalltalk, or Lisp developers




                            20+     rich hickey




                                            * all totally contrived


Thursday, February 23, 12
flogtime

      Not quite done, but a
        fun quick hack




                            https://github.com/chad/flogtime
Thursday, February 23, 12
code coverage




                            https://github.com/colszowka/simplecov
Thursday, February 23, 12
code coverage

                     • C0 - every line executed
                     • C1 - every branch executed
                     • C2 - every code path across lines executed

         It doesn’t matter which one. Only direction matters.
Thursday, February 23, 12
metric-fu
 roodi
 flog
 flay
 churn
 stats
 rails_best_practices
 reek
 saikuro
 coverage




                            http://metric-fu.rubyforge.org/
Thursday, February 23, 12
Ward’s Signature
                                Survey




                             http://c2.com/doc/SignatureSurvey/
Thursday, February 23, 12
something stupid




Thursday, February 23, 12
Thursday, February 23, 12
Bug Prediction at
                                Google
                            “Here at Google, we have thousands of
                            engineers working on our code base every
                            day. In fact, as previously noted, 50% of the
                            Google code base changes every month.”




      http://google-engtools.blogspot.com/2011/12/bug-prediction-at-google.html




Thursday, February 23, 12
Bug Prediction at Google




                            https://github.com/igrigorik/bugspots



Thursday, February 23, 12
$> cd /your/git/repo
                       $>   git bugspots -d 500

                            .. example output ..


                              Scanning /git/eventmachine repo
                              Found 31 bugfix commits, with 23 hotspots:


                              Fixes:
                                  - Revert "Write maximum of 16KB of data to an SSL connection per tick (fixes #233)" for #273
                                  - Do not close attached sockets (fixes #200)
                                  - Write maximum of 16KB of data to an SSL connection per tick (fixes #233)
                                  - Merge branch 'master' into close_schedule_fix
                                  - Remove dependency on readbytes.rb for ruby 1.9 (fixes #167, #234)
                                  - Fix compilation on MSVC2008 (fixes #253)
                                  - EM::Deferrable#(callback|errback|timeout) now return self so you can chain them (closes #177)
                                  - Make EventMachine::Connection#get_peername and #get_sockname valid for IPv6 (closes #132)
                                  - reconnect DNS socket if closed
                                  - Use String#bytesize in EM::Connection#send_datagram for 1.9 (closes #153)




Thursday, February 23, 12
Hotspots:
                                   0.9723 - ext/ed.cpp
                                   0.3311 - ext/ed.h
                                   0.3271 - ext/em.cpp
                                   0.3034 - lib/eventmachine.rb
                                   0.2433 - lib/em/protocols/postgres3.rb
                                   0.2403 - ext/project.h
                                   0.0431 - lib/em/deferrable.rb
                                   0.029 - ext/cmain.cpp
                                   0.0278 - ext/rubymain.cpp
                                   0.0277 - ext/eventmachine.h
                                   0.0241 - lib/em/resolver.rb
                                   0.0241 - tests/test_resolver.rb
                                   0.0225 - lib/em/connection.rb
                                   0.0013 - lib/em/protocols/smtpserver.rb
                                   0.0003 - ext/extconf.rb
                                   0.0002 - tests/test_basic.rb
                                   0.0001 - ext/em.h
                                   0.0001 - ext/cplusplus.cpp




Thursday, February 23, 12
turbulence
 http://www.stickyminds.com/sitewide.asp?Function=edetail&ObjectType=COL&ObjectId=16679&tth=DYN&tt=siteemail&iDyn=2




                            https://github.com/chad/turbulence
Thursday, February 23, 12
highest complexity
                            turbulence   highest turbulence




Thursday, February 23, 12
gitstats




                            http://gitstats.sourceforge.net/
Thursday, February 23, 12
gitstats




Thursday, February 23, 12
The Church of Graphs




Thursday, February 23, 12
graphite

                            Highly scalable open source real time
                                       graphing engine.




                                http://graphite.wikidot.com/
Thursday, February 23, 12
statsd
                              Open source node-based daemon for
                            stats aggregation. UDP front-end for fault-
                                            tolerance*.

                              Pushes aggregated stats into graphite.



                                  https://github.com/etsy/statsd


Thursday, February 23, 12
statsd gem




Thursday, February 23, 12
Resque failures




Thursday, February 23, 12
Error rates that matter




Thursday, February 23, 12
various key stats overlaid




Thursday, February 23, 12
looking at pictures only
                                gets you so far




Thursday, February 23, 12
Shewhart Charts




                            Measure process stability
Thursday, February 23, 12
doesn’t work for data like this though




Thursday, February 23, 12
Double Exponential
                            Smoothing (Holt-Winters)




     http://www.it.iitb.ac.in/~praj/acads/seminar/04329008_ExponentialSmoothing.pdf


Thursday, February 23, 12
Thursday, February 23, 12
What is QA?




                            50 releases per day redefines “QA”
Thursday, February 23, 12
Thanks!




Thursday, February 23, 12

Contenu connexe

Similaire à Measuring

The Web Designers Toolkit
The Web Designers ToolkitThe Web Designers Toolkit
The Web Designers ToolkitR/GA
 
Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013Max Klymyshyn
 
Building Data Driven Products With Ruby - RubyConf 2012
Building Data Driven Products With Ruby - RubyConf 2012Building Data Driven Products With Ruby - RubyConf 2012
Building Data Driven Products With Ruby - RubyConf 2012Ryan Weald
 
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"Daniel Bryant
 
Thesispresentatie maart
Thesispresentatie maartThesispresentatie maart
Thesispresentatie maartRobin De Croon
 
apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...
apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...
apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...apidays
 
State of Puppet - Puppet Camp Barcelona 2013
State of Puppet - Puppet Camp Barcelona 2013State of Puppet - Puppet Camp Barcelona 2013
State of Puppet - Puppet Camp Barcelona 2013Puppet
 
Monitoring and observability
Monitoring and observabilityMonitoring and observability
Monitoring and observabilityTheo Schlossnagle
 
Big Data - architectural concerns for the new age
Big Data - architectural concerns for the new ageBig Data - architectural concerns for the new age
Big Data - architectural concerns for the new ageDebasish Ghosh
 
Drupal 8 Preview for Site Builders
Drupal 8 Preview for Site BuildersDrupal 8 Preview for Site Builders
Drupal 8 Preview for Site BuildersAcquia
 
PuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That WasPuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That WasWalter Heck
 
PuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That WasPuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That WasOlinData
 
Responsive design presentation
Responsive design presentationResponsive design presentation
Responsive design presentationMario Noble
 
GitHub Notable OSS Project
GitHub  Notable OSS ProjectGitHub  Notable OSS Project
GitHub Notable OSS Projectroumia
 
LJCConf 2013 "Chuck Norris Doesn't Need DevOps"
LJCConf 2013 "Chuck Norris Doesn't Need DevOps"LJCConf 2013 "Chuck Norris Doesn't Need DevOps"
LJCConf 2013 "Chuck Norris Doesn't Need DevOps"Daniel Bryant
 
Creating visualizations using Linked Data
Creating visualizations using Linked DataCreating visualizations using Linked Data
Creating visualizations using Linked DataAlvaro Graves
 

Similaire à Measuring (20)

The Web Designers Toolkit
The Web Designers ToolkitThe Web Designers Toolkit
The Web Designers Toolkit
 
20120223keystone
20120223keystone20120223keystone
20120223keystone
 
Aegir
AegirAegir
Aegir
 
Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013
 
Building Data Driven Products With Ruby - RubyConf 2012
Building Data Driven Products With Ruby - RubyConf 2012Building Data Driven Products With Ruby - RubyConf 2012
Building Data Driven Products With Ruby - RubyConf 2012
 
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"
Devoxx US 2017 "The Seven (More) Deadly Sins of Microservices"
 
Thesispresentatie maart
Thesispresentatie maartThesispresentatie maart
Thesispresentatie maart
 
apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...
apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...
apidays LIVE Paris 2021 - Measuring environmental impact reductions by Gregor...
 
State of Puppet - Puppet Camp Barcelona 2013
State of Puppet - Puppet Camp Barcelona 2013State of Puppet - Puppet Camp Barcelona 2013
State of Puppet - Puppet Camp Barcelona 2013
 
Monitoring and observability
Monitoring and observabilityMonitoring and observability
Monitoring and observability
 
Big Data - architectural concerns for the new age
Big Data - architectural concerns for the new ageBig Data - architectural concerns for the new age
Big Data - architectural concerns for the new age
 
Drupal 8 Preview for Site Builders
Drupal 8 Preview for Site BuildersDrupal 8 Preview for Site Builders
Drupal 8 Preview for Site Builders
 
PuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That WasPuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
 
PuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That WasPuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
PuppetCamp SEA @ Blk 71 - Puppet: The Year That Was
 
Responsive design presentation
Responsive design presentationResponsive design presentation
Responsive design presentation
 
The Design of Everyday Things
The Design of Everyday ThingsThe Design of Everyday Things
The Design of Everyday Things
 
Grails 2.0 Update
Grails 2.0 UpdateGrails 2.0 Update
Grails 2.0 Update
 
GitHub Notable OSS Project
GitHub  Notable OSS ProjectGitHub  Notable OSS Project
GitHub Notable OSS Project
 
LJCConf 2013 "Chuck Norris Doesn't Need DevOps"
LJCConf 2013 "Chuck Norris Doesn't Need DevOps"LJCConf 2013 "Chuck Norris Doesn't Need DevOps"
LJCConf 2013 "Chuck Norris Doesn't Need DevOps"
 
Creating visualizations using Linked Data
Creating visualizations using Linked DataCreating visualizations using Linked Data
Creating visualizations using Linked Data
 

Dernier

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 

Dernier (20)

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 

Measuring

  • 1. Measuring & Analyzing Things That Matter When You Have Too Many Things To Keep Track Of* (chocolate salmon) by @chadfowler * this title easily understood by 13-15 year old students Thursday, February 23, 12
  • 3. How does this happen? Thursday, February 23, 12
  • 4. How do we fix it? • code reviews are hard • code reviews are time consuming • there are too many commits to review • bulleted lists are awesome Thursday, February 23, 12
  • 5. information radiator “Coined around 2000 while standing in a Thoughtworks office looking at all the paper on the walls around me, “information radiator” refers to a publicly posted display that shows people walking by what is going on. Information radiators are best when they are big, very easy to see (e.g. not online, generally), and change often enough to be worth revisiting.” http://alistair.cockburn.us/Information+radiator Thursday, February 23, 12
  • 6. “Chart what you care about, what you worry about, what you want other people to know.” http://xprogramming.com/articles/bigvisiblecharts/ Thursday, February 23, 12
  • 9. What Should We Measure? • Project progress • Code complexity • Developer “productivity” • Business “key performance indicators” • Bug/error rates • Everything important Thursday, February 23, 12
  • 12. Flesch-Kincaid Reading Ease Score Notes 90-100 easily understood by an average 11-year-old student 60-70 easily understood by 13- to 15-year-old students 0-30 best understood by university graduates Thursday, February 23, 12
  • 13. competing algorithms • SMOG • Gunning-Fog http://www.editcentral.com/gwt1/EditCentral.html Thursday, February 23, 12
  • 14. Maurice Halstead “Software Science” http://en.wikipedia.org/wiki/Halstead_complexity_measures Thursday, February 23, 12
  • 15. Measure units of human thought used!!! “Stroud’s (1955, 1967) original proposal, which is usually called a discrete-moment model, claims that all incoming information is processed in nonoverlapping (i.e., temporarily discrete) samples or scans and that the temporal order of stimuli within a scan is not preserved.” T ' = ( n1N2( n1log2n1 + n2log2n2) log2n) / 2n2S http://yunus.hacettepe.edu.tr/~sencer/complexity.html Thursday, February 23, 12
  • 16. abc Assignment – an explicit transfer of data into a variable Branch – an explicit forward program branch out of scope Condition – a logical/Boolean test |ABC| = sqrt((A*A)+(B*B)+(C*C)) http://www.softwarerenovation.com/ABCMetric.pdf Thursday, February 23, 12
  • 17. Cyclomatic Complexity M = E − N + 2P E = the number of edges of the graph N = the number of nodes of the graph P = the number of connected components Thursday, February 23, 12
  • 18. Basis Path Testing http://users.csc.calpoly.edu/~jdalbey/206/Lectures/BasisPathTutorial/index.html Thursday, February 23, 12
  • 19. Complexity Conservation “One of McCabe's original applications was to limit the complexity of routines during program development; he recommended that programmers should count the complexity of the modules they are developing, and split them into smaller modules whenever the cyclomatic complexity of the module exceeded 10.” NO MORE THAN TEN GALLONS OF CYCLOMATIC COMPLEXITY PER MODULE!!!!! http://en.wikipedia.org/wiki/Cyclomatic_complexity#cite_note-mccabe76-2 Thursday, February 23, 12
  • 20. Complexity & Cohesion “Our results support the idea that there is a relationship between complexity and cohesion, basically that a lack of cohesion is associated with high complexity” Exploring the Relationship between Cohesion and Complexity - Stein, Cox, Etzkorn - 2005 Thursday, February 23, 12
  • 21. saikuro http://saikuro.rubyforge.org/ Thursday, February 23, 12
  • 23. flog • Written by Ryan Davis • opinionated • ruby specific Thursday, February 23, 12
  • 26. Flog Method Reading Ease * Score Notes 1-2 easily understood by an average Visual Basic developer 3-10 easily understood by PHP developers 10-20 best understood by Perl, Smalltalk, or Lisp developers 20+ rich hickey * all totally contrived Thursday, February 23, 12
  • 27. flogtime Not quite done, but a fun quick hack https://github.com/chad/flogtime Thursday, February 23, 12
  • 28. code coverage https://github.com/colszowka/simplecov Thursday, February 23, 12
  • 29. code coverage • C0 - every line executed • C1 - every branch executed • C2 - every code path across lines executed It doesn’t matter which one. Only direction matters. Thursday, February 23, 12
  • 30. metric-fu roodi flog flay churn stats rails_best_practices reek saikuro coverage http://metric-fu.rubyforge.org/ Thursday, February 23, 12
  • 31. Ward’s Signature Survey http://c2.com/doc/SignatureSurvey/ Thursday, February 23, 12
  • 34. Bug Prediction at Google “Here at Google, we have thousands of engineers working on our code base every day. In fact, as previously noted, 50% of the Google code base changes every month.” http://google-engtools.blogspot.com/2011/12/bug-prediction-at-google.html Thursday, February 23, 12
  • 35. Bug Prediction at Google https://github.com/igrigorik/bugspots Thursday, February 23, 12
  • 36. $> cd /your/git/repo $> git bugspots -d 500 .. example output .. Scanning /git/eventmachine repo Found 31 bugfix commits, with 23 hotspots: Fixes: - Revert "Write maximum of 16KB of data to an SSL connection per tick (fixes #233)" for #273 - Do not close attached sockets (fixes #200) - Write maximum of 16KB of data to an SSL connection per tick (fixes #233) - Merge branch 'master' into close_schedule_fix - Remove dependency on readbytes.rb for ruby 1.9 (fixes #167, #234) - Fix compilation on MSVC2008 (fixes #253) - EM::Deferrable#(callback|errback|timeout) now return self so you can chain them (closes #177) - Make EventMachine::Connection#get_peername and #get_sockname valid for IPv6 (closes #132) - reconnect DNS socket if closed - Use String#bytesize in EM::Connection#send_datagram for 1.9 (closes #153) Thursday, February 23, 12
  • 37. Hotspots: 0.9723 - ext/ed.cpp 0.3311 - ext/ed.h 0.3271 - ext/em.cpp 0.3034 - lib/eventmachine.rb 0.2433 - lib/em/protocols/postgres3.rb 0.2403 - ext/project.h 0.0431 - lib/em/deferrable.rb 0.029 - ext/cmain.cpp 0.0278 - ext/rubymain.cpp 0.0277 - ext/eventmachine.h 0.0241 - lib/em/resolver.rb 0.0241 - tests/test_resolver.rb 0.0225 - lib/em/connection.rb 0.0013 - lib/em/protocols/smtpserver.rb 0.0003 - ext/extconf.rb 0.0002 - tests/test_basic.rb 0.0001 - ext/em.h 0.0001 - ext/cplusplus.cpp Thursday, February 23, 12
  • 39. highest complexity turbulence highest turbulence Thursday, February 23, 12
  • 40. gitstats http://gitstats.sourceforge.net/ Thursday, February 23, 12
  • 42. The Church of Graphs Thursday, February 23, 12
  • 43. graphite Highly scalable open source real time graphing engine. http://graphite.wikidot.com/ Thursday, February 23, 12
  • 44. statsd Open source node-based daemon for stats aggregation. UDP front-end for fault- tolerance*. Pushes aggregated stats into graphite. https://github.com/etsy/statsd Thursday, February 23, 12
  • 47. Error rates that matter Thursday, February 23, 12
  • 48. various key stats overlaid Thursday, February 23, 12
  • 49. looking at pictures only gets you so far Thursday, February 23, 12
  • 50. Shewhart Charts Measure process stability Thursday, February 23, 12
  • 51. doesn’t work for data like this though Thursday, February 23, 12
  • 52. Double Exponential Smoothing (Holt-Winters) http://www.it.iitb.ac.in/~praj/acads/seminar/04329008_ExponentialSmoothing.pdf Thursday, February 23, 12
  • 54. What is QA? 50 releases per day redefines “QA” Thursday, February 23, 12