SlideShare a Scribd company logo
EFFECTIVE	
  
  CODE	
  
  REVIEWS	
  




 Sebas1an	
  Marek,	
  So8ware	
  Architect	
  
Sebastian Marek
•  a	
  Pole	
  living	
  in	
  Sheffield	
  
  •  over	
  12	
  years	
  in	
  
     development	
  
  •  Pascal,	
  C++,	
  PHP,	
  perl,	
  
     python,	
  Java	
  
  •  co-­‐author	
  of	
  2	
  PHP	
  books	
  	
  
  •  big	
  fan	
  of	
  process	
  
     automaBon	
  
  •  TDD	
  and	
  CI	
  
  •  occasionally	
  contributes	
  to	
  
     open	
  source	
  projects	
  
  •  wants	
  to	
  be	
  a	
  knight	
  


                                  h?ps://joind.in/7056	
  

@proofek
Who does code reviews?
All characters
                appearing in this
                presentation are
                fictitious.

                Any resemblance to
                real persons, living or
                dead, is purely
                coincidental.


Disclaimer
Tom “I Need It Now” –
              The Owner




              Harry “Just Get It Done” –
              The Manager




The Team
Adam “The Night Coder” –
              developer



              Kris “Hackety Hack” –
              master code reviewer



              Bruno “It Will Work” –
              apprentice reviewer



The Team
How much time do we need to
                get this project done?




                        Well, design, coding, code
                        reviews, testing…	
  


                 Do we really need to code review the
                 code? You surely know how to code, and
                 you have tested it and it works… Right?


Scenario 1
We're nearly done, just need to
                         get this code reviewed.




                Hmmm… all the developers are busy, we
                have no one spare. Let's skip it and get it
                straight into QA…




Scenario 2
Hello Harry,
                 I need John to review my code.



                     John is busy, you can have Rob.




                But Rob is a junior developer, and he
                doesn't know this system.


                    You want it code reviewed or
                    not? Rob is all we've got!

Scenario 3
We do all these code review, spend a
                lot of time on this, but the code that
                hits production is still buggy. It's a
                waste of time!




Scenario 4
Code review
      Adam The Developer                         9:31 PM (0 minutes ago)
      to	
  Kris	
  The	
  Reviewer	
  

      Kris,

      I got this code I need you to review.
      Can you do it for me please? The code is in my repository on problem-fix branch.

      Thanks

      ---
      Adam

      Click here to Reply or Forward
No	
  (e)mail!	
  




Raising a code review
Bug	
  tracking	
  systems	
  
   -­‐  JIRA	
  
   -­‐  Bugtrak	
  
   -­‐  ManBs	
  
   	
  
   Code	
  review	
  tools	
  
   -­‐  Crucible/Fisheye	
  
   -­‐  Gerrit	
  
   -­‐  Github	
  



Raising a code review
Code review
      Adam The Developer                                        9:31 PM (13 minutes ago)
      to	
  Kris	
  The	
  Reviewer	
  

      Kris,

      I got this code I need you to review.
      Can you do it for me please? The code is in my repository on problem-fix branch.

      Thanks

      ---
      Adam

      Kris The Reviewer                                          9:44 PM (0 minutes ago)
      to	
  Adam	
  The	
  Developer	
  

       Adam,

       No problem at all, but where did you branch the code from?
       I can’t identify the change set without it.

       ---
       Kris

      Click here to Reply or Forward
Version	
  control	
  
                    •  Specific	
  change	
  sets	
  
                    •  avoid	
  specific	
  
                       commits	
  
                    •  Reviewing	
  patches	
  
                       risky,	
  unless	
  
                       automated	
  




What to review
Code review
       Adam The Developer                                                9:31 PM (25 minutes ago)
        Kris, I got this code I need you to review. Can you do it for me please? …

      Kris The Reviewer                                   9:44 PM (12 minutes ago)
     to	
  Adam	
  The	
  Developer	
  

      Adam,

      No problem at all, but where did you branch the code from?
      I can’t identify the change set without it.

      ---
      Kris

      Adam The Developer                                 9:56 PM (0 minutes ago)
      to	
  Kris	
  The	
  Reviewer	
  

       Kris,

       Ah yes. Sorry. It’s branched from my master branch.

       ---
       Adam
What
                               and
                                     Why?
The purpose of the review
Bruno	
  “It	
  will	
  work”	
  


         Usual	
  feedback	
  produced:	
  
          •    Makes	
  sense	
  
          •    Works	
  
          •    SyntacBcally	
  correct	
  
          •    Approved	
  




One way of doing things…
Kris	
  “The	
  Master	
  Reviewer”	
  


        Tools	
  used:	
  
        •    PHP	
  linter	
  
        •    PHP	
  Code	
  Sniffer	
  
        •    PHPUnit	
  
        •    phpDocumentor	
  
        •    PHP	
  Depend	
  
        •    PHP	
  Mess	
  Detector	
  
        •    Sonar	
  


Being smarter…
$ php -l Libraries/Action.class.php
      No syntax errors detected in Libraries/Action.class.php


      $ php -l Libraries/Action.class.php
      Errors parsing Libraries/Action.class.php


      $ phpcs –standard=Zend Libraries/Action.class.php

      FILE: /Volumes/git/modules/AccountChange/Libraries/Action.class.php
      --------------------------------------------------------------------------------
      FOUND 2 ERROR(S) AND 1 WARNING(S) AFFECTING 3 LINE(S)
      --------------------------------------------------------------------------------
        44 | ERROR   | Protected member variable "arrOptions" must contain a leading
           |         | underscore
        66 | WARNING | Line exceeds 80 characters; contains 82 characters
        97 | ERROR   | Line exceeds maximum limit of 120 characters; contains 135
           |         | characters
      --------------------------------------------------------------------------------

      Time: 0 seconds, Memory: 5.75Mb




Speed up with automation
$ phpunit
        PHPUnit 3.6.12 by Sebastian Bergmann.

        Configuration read from phpunit.xml.dist

        ..................IIII................IIIIIIIIIIIIIIIIIIIIIII.. 63 / 240 ( 26%)
        .............................................I.....I........... 126 / 240 ( 52%)
        ............................................................... 189 / 240 ( 78%)
        ...................................................

        Time: 02:01, Memory: 26.75Mb

        OK, but incomplete or skipped tests!
        Tests: 240, Assertions: 514, Incomplete: 29.




Verify whether the code works
PHP_Depend 0.10.6 by Manuel Pichler	
                  	
                  Parsing source files:	
                  ....................                                      20	
                  	
                  Executing CyclomaticComplexity-Analyzer:	
                  .............                                            261	
                  	
                  Executing ClassLevel-Analyzer:	
                  ............                                             247	
                  	
                  Executing CodeRank-Analyzer:	
                  .                                                         28	
                  	
                  Executing Coupling-Analyzer:	
                  .............                                            267	
                  	
                  Executing Hierarchy-Analyzer:	
                  ............                                             246	
                  	
                  Executing Inheritance-Analyzer:	
                  .                                                         30	
                  	
                  Executing NPathComplexity-Analyzer:	
                  ..............                                           283	
                  	
                  Executing NodeCount-Analyzer:	
                  ........                                                 174	
                  	
                  Executing NodeLoc-Analyzer:	
                  ..........                                               205	
                  	
                  Generating pdepend log files, this may take a moment.	
                  	
                  Time: 00:05; Memory: 25.50Mb	
  




Static analysis and code quality
Static analysis and code quality
Static analysis and code quality
Kris	
  “The	
  Master	
  Reviewer”	
  


     Things	
  checked:	
  
       •    clarity	
                              •    duplicaBons	
  
       •    performance	
                          •    code	
  quality	
  
       •    excessive	
  complexity	
              •    potenBal	
  deployment	
  issues	
  
       •    impact	
  on	
  other	
  systems	
     •    design	
  flaws	
  
       •    does	
  the	
  soluBon	
  solves	
  
            the	
  problem	
  



…by looking at things all important
•    Knowledge	
  sharing	
  
     •    Mentoring	
  new	
  starters	
  
     •    Find	
  bugs/design	
  flaws	
  early	
  
     •    Improve	
  overall	
  code	
  quality	
  
     •    Fostering	
  collecBve	
  code	
  
          ownership	
  	
  




The benefits of a code review – they are for you!
DEVELOPERS
                                •  Understand	
  and	
  accept	
  that	
  
                                   you	
  will	
  make	
  mistakes.	
  	
  

                                •  You	
  are	
  not	
  your	
  code.	
  

                                •  No	
  maZer	
  how	
  much	
  
                                   "karate"	
  you	
  know,	
  
                                   someone	
  else	
  will	
  always	
  
                                   know	
  more.	
  	
  

                                •  Don't	
  rewrite	
  code	
  without	
  
                                   consultaBon.	
  	
  



The soft side - developers
CODE REVIEWERS

                            •  The	
  only	
  true	
  authority	
  stems	
  
                               from	
  knowledge,	
  not	
  from	
  
                               posiBon.	
  	
  

                            •  CriBque	
  code	
  instead	
  of	
  people	
  




The soft side – code reviewers
•  LocaBon	
  of	
  your	
  changes	
  




                                                                           WHAT?
         –  Repository	
  name,	
  branch	
  name,	
  branch	
  base	
  

    •  Subject	
  of	
  your	
  changes	
  
         –  What	
  have	
  you	
  changed	
  

    •  Reason	
  for	
  the	
  change	
  
         –  Why	
  have	
  you	
  change	
  it	
  




Summary - what include in the code review
WHO?
           •  Seek	
  the	
  experts	
  
                –  If	
  you're	
  not	
  sure	
  ask	
  around	
  	
  

           •  QuesBon	
  the	
  soluBon	
  
                –  Make	
  sure	
  it	
  fits	
  the	
  purpose	
  




Summary - who assign the code review to?
WHERE?
       •  Make	
  it	
  traceable	
  
           –  Bug	
  trucking	
  system,	
  ie.	
  Jira,	
  Trac,	
  ManBs,	
  etc	
  
           –  Code	
  review	
  tool,	
  ie.	
  Fisheye/Crucible,	
  gerrit	
  	
  

       •  ConversaBon/Pair	
  programming	
  
           –  Just	
  make	
  sure	
  outcome	
  is	
  captured	
  




Summary – where to raise a code review?
•    Use	
  tools,	
  don’t	
  be	
  a	
  tool	
  




                                                                     HOW?
        •    Check	
  for	
  duplicaBons/complexity	
  
        •    Asses	
  impact	
  on	
  other	
  systems	
  
        •    Make	
  sure	
  code	
  is	
  clear	
  and	
  self-­‐
             descripBve	
  




Summary - how to perform a good code review?
hZp://www.atlassian.com/angrynerds/	
  



              	
  
              hZp://www.flickr.com/photos/dawgbyte77/3058349367/	
  
              hZp://www.flickr.com/photos/zzpza/3269784239/	
  
              hZp://www.flickr.com/photos/toolmanBm/6170448143/	
  
              hZp://www.flickr.com/photos/coyau/7630782996/	
  
              hZp://www.flickr.com/photos/73885983@N02/6729908421/	
  
              	
  
              	
  


Credits…
The	
  Ten	
  Commandments	
  of	
  Egoless	
  Programming:	
  hZp://alturl.com/q4dpa	
  
   	
  
   The	
  Code	
  review:	
  hZp://www.soulbroken.co.uk/blog/2010/07/the-­‐code-­‐review/	
  	
  
   	
  
   Fisheye/Crucible:	
  hZp://www.atlassian.com/sokware/crucible/overview	
  
   	
  
   Gerrit:	
  hZp://code.google.com/p/gerrit/	
  
   	
  
   Github:	
  hZps://github.com/	
  
   	
  
   PHPUnit:	
  hZp://phpunit.de	
  	
  
   	
  
   PHP	
  CodeSniffer:	
  hZp://pear.php.net/PHP_CodeSniffer	
  	
  
   	
  
   PHP	
  Depend:	
  hZp://pdepend.org/	
  	
  
   	
  
   PHP	
  Mess	
  Detector:	
  hZp://phpmd.org/	
  	
  
   	
  
   Sonar:	
  hZp://www.sonarsource.org/	
  	
  


…and references
Ques1ons?	
  
         h?ps://	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /7056	
  



Q&A

More Related Content

PPTX
Code Review Best Practices
PPTX
Static Testing
PDF
Unit testing best practices
PDF
manual-testing
PPT
ISTQB / ISEB Foundation Exam Practice - 5
PPT
ISTQB / ISEB Foundation Exam Practice - 2
PPT
Manual testing concepts course 1
PDF
On to code review lessons learned at microsoft
Code Review Best Practices
Static Testing
Unit testing best practices
manual-testing
ISTQB / ISEB Foundation Exam Practice - 5
ISTQB / ISEB Foundation Exam Practice - 2
Manual testing concepts course 1
On to code review lessons learned at microsoft

What's hot (20)

PDF
ISTQB Foundation Level Basic
PDF
Introduction to Acceptance Test Driven Development
PPT
Agile Engineering Practices
PPTX
DOC
Complete guide to manual testing@uma
PDF
Test cases
PPTX
An Introduction to Unit Testing
PPTX
QA Fest 2015. Артем Быковец. Техники тест дизайна или как правильно покрывать...
PDF
Writing clean code
PPT
Agile Testing Process
PPTX
Test Case Management Tools
PPTX
Code review
PPTX
How To Improve Quality With Static Code Analysis
PPTX
ISTQB - What's testing
PPTX
Software Quality Assurance (QA) Testing Interview Questions & Answers
PPTX
Scrum events
PPTX
Chapter 4 - Quality Characteristics for Technical Testing
PPT
Test Automation Strategies For Agile
PPTX
Automation Testing
PDF
Test Automation
ISTQB Foundation Level Basic
Introduction to Acceptance Test Driven Development
Agile Engineering Practices
Complete guide to manual testing@uma
Test cases
An Introduction to Unit Testing
QA Fest 2015. Артем Быковец. Техники тест дизайна или как правильно покрывать...
Writing clean code
Agile Testing Process
Test Case Management Tools
Code review
How To Improve Quality With Static Code Analysis
ISTQB - What's testing
Software Quality Assurance (QA) Testing Interview Questions & Answers
Scrum events
Chapter 4 - Quality Characteristics for Technical Testing
Test Automation Strategies For Agile
Automation Testing
Test Automation
Ad

Viewers also liked (20)

PPT
Code Review
PPTX
Code Review
PPT
Peer Code Review An Agile Process
DOCX
Code review guidelines
PDF
How to successfully grow a code review culture
PDF
Code-Review-Principles-Process-and-Tools (1)
PDF
Principios diseño de interacción
PPTX
Carolina castro segundo parcial_tarea2
PDF
Exposiçao: Kandinsky - Tudo começa num ponto
PDF
Interplay Project. National Indigenous Research and Knowledges Network (NIRAK...
PPTX
Unit tests benefits
PPTX
Scala collections wizardry - Scalapeño
PDF
Caso La Noria
PPTX
7th Etherum Meetup Vienna: Crypto Token Economy - Price of ETH, Bitcoin 1.0 a...
PPTX
ZAYANN : Parcours pédagogique entre nature et culture
PPTX
Effective Code Review
PDF
090603 Contratos áGiles
PDF
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
PDF
Linking E-Mails and Source Code Artifacts
PDF
Effective code reviews
Code Review
Code Review
Peer Code Review An Agile Process
Code review guidelines
How to successfully grow a code review culture
Code-Review-Principles-Process-and-Tools (1)
Principios diseño de interacción
Carolina castro segundo parcial_tarea2
Exposiçao: Kandinsky - Tudo começa num ponto
Interplay Project. National Indigenous Research and Knowledges Network (NIRAK...
Unit tests benefits
Scala collections wizardry - Scalapeño
Caso La Noria
7th Etherum Meetup Vienna: Crypto Token Economy - Price of ETH, Bitcoin 1.0 a...
ZAYANN : Parcours pédagogique entre nature et culture
Effective Code Review
090603 Contratos áGiles
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
Linking E-Mails and Source Code Artifacts
Effective code reviews
Ad

Similar to Effective code reviews (20)

PPTX
Html5 devconf nodejs_devops_shubhra
PPTX
Effective C++
PDF
Rocket Fuelled Cucumbers
PDF
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
PDF
SFBigAnalytics_20190724: Monitor kafka like a Pro
PDF
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
PPTX
Connect js nodejs_devops_shubhra
PDF
WWCode Dallas - Kubernetes: Learning from Zero to Production
PDF
Использование KASan для автономного гипервизора
PDF
Kanban for Software Development and Kaizen Culture
PDF
Clearly, I Have Made Some Bad Decisions
PDF
Web Developing In Search
PDF
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
PDF
Abusing bleeding edge web standards for appsec glory
PDF
Sista: Improving Cog’s JIT performance
PDF
Mapping Detection Coverage
PPTX
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
PDF
Testing: ¿what, how, why?
PDF
VMs, Interpreters, JIT
PPTX
Ruby Under The Hood
Html5 devconf nodejs_devops_shubhra
Effective C++
Rocket Fuelled Cucumbers
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
SFBigAnalytics_20190724: Monitor kafka like a Pro
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
Connect js nodejs_devops_shubhra
WWCode Dallas - Kubernetes: Learning from Zero to Production
Использование KASan для автономного гипервизора
Kanban for Software Development and Kaizen Culture
Clearly, I Have Made Some Bad Decisions
Web Developing In Search
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
Abusing bleeding edge web standards for appsec glory
Sista: Improving Cog’s JIT performance
Mapping Detection Coverage
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
Testing: ¿what, how, why?
VMs, Interpreters, JIT
Ruby Under The Hood

More from Sebastian Marek (15)

PDF
The Journey Towards Continuous Integration
PDF
CodeClub - Teaching the young generation programming
PDF
Praktyczne code reviews - PHPConPl
PDF
Managing and Monitoring Application Performance
PDF
Ten Commandments Of A Software Engineer
PDF
Continuous Inspection: Fight back the 7 deadly sins of a developer!
PDF
Test your code like a pro - PHPUnit in practice
PDF
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PPTX
Ten Commandments Of A Software Engineer
PDF
PHP Benelux 2012: Magic behind the numbers. Software metrics in practice
PPTX
Magic behind the numbers - software metrics in practice
PDF
Back to basics - PHPUnit
ODP
Back to basics - PHP_Codesniffer
ODP
Sonar - the ring to rule them all
ODP
vfsStream - effective filesystem mocking
The Journey Towards Continuous Integration
CodeClub - Teaching the young generation programming
Praktyczne code reviews - PHPConPl
Managing and Monitoring Application Performance
Ten Commandments Of A Software Engineer
Continuous Inspection: Fight back the 7 deadly sins of a developer!
Test your code like a pro - PHPUnit in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
Ten Commandments Of A Software Engineer
PHP Benelux 2012: Magic behind the numbers. Software metrics in practice
Magic behind the numbers - software metrics in practice
Back to basics - PHPUnit
Back to basics - PHP_Codesniffer
Sonar - the ring to rule them all
vfsStream - effective filesystem mocking

Recently uploaded (20)

PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
KodekX | Application Modernization Development
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Electronic commerce courselecture one. Pdf
PPT
Teaching material agriculture food technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
CIFDAQ's Market Insight: SEC Turns Pro Crypto
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
KodekX | Application Modernization Development
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
NewMind AI Weekly Chronicles - August'25 Week I
Electronic commerce courselecture one. Pdf
Teaching material agriculture food technology
Advanced methodologies resolving dimensionality complications for autism neur...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Understanding_Digital_Forensics_Presentation.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
The Rise and Fall of 3GPP – Time for a Sabbatical?
MYSQL Presentation for SQL database connectivity
Mobile App Security Testing_ A Comprehensive Guide.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Effective code reviews

  • 1. EFFECTIVE   CODE   REVIEWS   Sebas1an  Marek,  So8ware  Architect   Sebastian Marek
  • 2. •  a  Pole  living  in  Sheffield   •  over  12  years  in   development   •  Pascal,  C++,  PHP,  perl,   python,  Java   •  co-­‐author  of  2  PHP  books     •  big  fan  of  process   automaBon   •  TDD  and  CI   •  occasionally  contributes  to   open  source  projects   •  wants  to  be  a  knight   h?ps://joind.in/7056   @proofek
  • 3. Who does code reviews?
  • 4. All characters appearing in this presentation are fictitious. Any resemblance to real persons, living or dead, is purely coincidental. Disclaimer
  • 5. Tom “I Need It Now” – The Owner Harry “Just Get It Done” – The Manager The Team
  • 6. Adam “The Night Coder” – developer Kris “Hackety Hack” – master code reviewer Bruno “It Will Work” – apprentice reviewer The Team
  • 7. How much time do we need to get this project done? Well, design, coding, code reviews, testing…   Do we really need to code review the code? You surely know how to code, and you have tested it and it works… Right? Scenario 1
  • 8. We're nearly done, just need to get this code reviewed. Hmmm… all the developers are busy, we have no one spare. Let's skip it and get it straight into QA… Scenario 2
  • 9. Hello Harry, I need John to review my code. John is busy, you can have Rob. But Rob is a junior developer, and he doesn't know this system. You want it code reviewed or not? Rob is all we've got! Scenario 3
  • 10. We do all these code review, spend a lot of time on this, but the code that hits production is still buggy. It's a waste of time! Scenario 4
  • 11. Code review Adam The Developer 9:31 PM (0 minutes ago) to  Kris  The  Reviewer   Kris, I got this code I need you to review. Can you do it for me please? The code is in my repository on problem-fix branch. Thanks --- Adam Click here to Reply or Forward
  • 12. No  (e)mail!   Raising a code review
  • 13. Bug  tracking  systems   -­‐  JIRA   -­‐  Bugtrak   -­‐  ManBs     Code  review  tools   -­‐  Crucible/Fisheye   -­‐  Gerrit   -­‐  Github   Raising a code review
  • 14. Code review Adam The Developer 9:31 PM (13 minutes ago) to  Kris  The  Reviewer   Kris, I got this code I need you to review. Can you do it for me please? The code is in my repository on problem-fix branch. Thanks --- Adam Kris The Reviewer 9:44 PM (0 minutes ago) to  Adam  The  Developer   Adam, No problem at all, but where did you branch the code from? I can’t identify the change set without it. --- Kris Click here to Reply or Forward
  • 15. Version  control   •  Specific  change  sets   •  avoid  specific   commits   •  Reviewing  patches   risky,  unless   automated   What to review
  • 16. Code review Adam The Developer 9:31 PM (25 minutes ago) Kris, I got this code I need you to review. Can you do it for me please? … Kris The Reviewer 9:44 PM (12 minutes ago) to  Adam  The  Developer   Adam, No problem at all, but where did you branch the code from? I can’t identify the change set without it. --- Kris Adam The Developer 9:56 PM (0 minutes ago) to  Kris  The  Reviewer   Kris, Ah yes. Sorry. It’s branched from my master branch. --- Adam
  • 17. What and Why? The purpose of the review
  • 18. Bruno  “It  will  work”   Usual  feedback  produced:   •  Makes  sense   •  Works   •  SyntacBcally  correct   •  Approved   One way of doing things…
  • 19. Kris  “The  Master  Reviewer”   Tools  used:   •  PHP  linter   •  PHP  Code  Sniffer   •  PHPUnit   •  phpDocumentor   •  PHP  Depend   •  PHP  Mess  Detector   •  Sonar   Being smarter…
  • 20. $ php -l Libraries/Action.class.php No syntax errors detected in Libraries/Action.class.php $ php -l Libraries/Action.class.php Errors parsing Libraries/Action.class.php $ phpcs –standard=Zend Libraries/Action.class.php FILE: /Volumes/git/modules/AccountChange/Libraries/Action.class.php -------------------------------------------------------------------------------- FOUND 2 ERROR(S) AND 1 WARNING(S) AFFECTING 3 LINE(S) -------------------------------------------------------------------------------- 44 | ERROR | Protected member variable "arrOptions" must contain a leading | | underscore 66 | WARNING | Line exceeds 80 characters; contains 82 characters 97 | ERROR | Line exceeds maximum limit of 120 characters; contains 135 | | characters -------------------------------------------------------------------------------- Time: 0 seconds, Memory: 5.75Mb Speed up with automation
  • 21. $ phpunit PHPUnit 3.6.12 by Sebastian Bergmann. Configuration read from phpunit.xml.dist ..................IIII................IIIIIIIIIIIIIIIIIIIIIII.. 63 / 240 ( 26%) .............................................I.....I........... 126 / 240 ( 52%) ............................................................... 189 / 240 ( 78%) ................................................... Time: 02:01, Memory: 26.75Mb OK, but incomplete or skipped tests! Tests: 240, Assertions: 514, Incomplete: 29. Verify whether the code works
  • 22. PHP_Depend 0.10.6 by Manuel Pichler Parsing source files: .................... 20 Executing CyclomaticComplexity-Analyzer: ............. 261 Executing ClassLevel-Analyzer: ............ 247 Executing CodeRank-Analyzer: . 28 Executing Coupling-Analyzer: ............. 267 Executing Hierarchy-Analyzer: ............ 246 Executing Inheritance-Analyzer: . 30 Executing NPathComplexity-Analyzer: .............. 283 Executing NodeCount-Analyzer: ........ 174 Executing NodeLoc-Analyzer: .......... 205 Generating pdepend log files, this may take a moment. Time: 00:05; Memory: 25.50Mb   Static analysis and code quality
  • 23. Static analysis and code quality
  • 24. Static analysis and code quality
  • 25. Kris  “The  Master  Reviewer”   Things  checked:   •  clarity   •  duplicaBons   •  performance   •  code  quality   •  excessive  complexity   •  potenBal  deployment  issues   •  impact  on  other  systems   •  design  flaws   •  does  the  soluBon  solves   the  problem   …by looking at things all important
  • 26. •  Knowledge  sharing   •  Mentoring  new  starters   •  Find  bugs/design  flaws  early   •  Improve  overall  code  quality   •  Fostering  collecBve  code   ownership     The benefits of a code review – they are for you!
  • 27. DEVELOPERS •  Understand  and  accept  that   you  will  make  mistakes.     •  You  are  not  your  code.   •  No  maZer  how  much   "karate"  you  know,   someone  else  will  always   know  more.     •  Don't  rewrite  code  without   consultaBon.     The soft side - developers
  • 28. CODE REVIEWERS •  The  only  true  authority  stems   from  knowledge,  not  from   posiBon.     •  CriBque  code  instead  of  people   The soft side – code reviewers
  • 29. •  LocaBon  of  your  changes   WHAT? –  Repository  name,  branch  name,  branch  base   •  Subject  of  your  changes   –  What  have  you  changed   •  Reason  for  the  change   –  Why  have  you  change  it   Summary - what include in the code review
  • 30. WHO? •  Seek  the  experts   –  If  you're  not  sure  ask  around     •  QuesBon  the  soluBon   –  Make  sure  it  fits  the  purpose   Summary - who assign the code review to?
  • 31. WHERE? •  Make  it  traceable   –  Bug  trucking  system,  ie.  Jira,  Trac,  ManBs,  etc   –  Code  review  tool,  ie.  Fisheye/Crucible,  gerrit     •  ConversaBon/Pair  programming   –  Just  make  sure  outcome  is  captured   Summary – where to raise a code review?
  • 32. •  Use  tools,  don’t  be  a  tool   HOW? •  Check  for  duplicaBons/complexity   •  Asses  impact  on  other  systems   •  Make  sure  code  is  clear  and  self-­‐ descripBve   Summary - how to perform a good code review?
  • 33. hZp://www.atlassian.com/angrynerds/     hZp://www.flickr.com/photos/dawgbyte77/3058349367/   hZp://www.flickr.com/photos/zzpza/3269784239/   hZp://www.flickr.com/photos/toolmanBm/6170448143/   hZp://www.flickr.com/photos/coyau/7630782996/   hZp://www.flickr.com/photos/73885983@N02/6729908421/       Credits…
  • 34. The  Ten  Commandments  of  Egoless  Programming:  hZp://alturl.com/q4dpa     The  Code  review:  hZp://www.soulbroken.co.uk/blog/2010/07/the-­‐code-­‐review/       Fisheye/Crucible:  hZp://www.atlassian.com/sokware/crucible/overview     Gerrit:  hZp://code.google.com/p/gerrit/     Github:  hZps://github.com/     PHPUnit:  hZp://phpunit.de       PHP  CodeSniffer:  hZp://pear.php.net/PHP_CodeSniffer       PHP  Depend:  hZp://pdepend.org/       PHP  Mess  Detector:  hZp://phpmd.org/       Sonar:  hZp://www.sonarsource.org/     …and references
  • 35. Ques1ons?   h?ps://                              /7056   Q&A