Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Code Review

Code Review

Ran Tavory

May 01, 2012
Tweet

More Decks by Ran Tavory

Other Decks in Programming

Transcript

  1. Formal Code Review Meetings • A sit down meeting •

    Everyone looks at the code • Need to get prepared in advance • People bring up issues that need to be fixed before you can go ahead with commit
  2. Formal Code Review - The Pain • Needs preparation •

    Time consuming • Hard to concentrate • No time to dig in and be thorough • Difficult to schedule the right ppl, especially at decentralized companies or projects • Synergy - Yes • Cost effective - No • Fun - well...
  3. Code Review in Apache 1. Every change has a jira

    issue 2. A patch is uploaded 3. A committer reviews and writes comments per the patch 4. When LGTM, the committer commits
  4. Offline Code Review Tools • Jupiter - Eclipse prehistorical plugin

    • Mondrian - Google • Rietveld - Free and very limited Mondrian • ReviewBoard - The leading open source • Crubicle - from Atlassian ($$) • Code Collaborator - the leading $$ from SmartBear • Gerrit - git goodness
  5. Motivation • Teach • Learn • Maintain coding conventions •

    Find defects early • Get more ppl familiar with the code (no job security)
  6. Motivation - by the numbers Average defect detection rate: 25%

    for unit testing 35% for functional testing 45% for integration testing Design and code reviews 55% at design review 60% at code review
  7. Motivation - by the numbers Average defect detection rate: 25%

    for unit testing 35% for functional testing 45% for integration testing Design and code reviews 55% at design review 60% at code review
  8. Who? • Manager • Tech lead • Architect • Peers

    ◦ Any peer from the team ◦ The one most likely to have valuable input
  9. Checklist (?) • Does the code build correctly? • Does

    the code execute as expected? • Is all new code tested? Altered code tests up to date? • Is the code readable? • Do you understand the code you are reviewing? • Has the developer tested the code? • coding conventions? • Are all functions, methods and classes documented? • Are complex algorithms and code optimizations adequately commented? • Error Handling • Resource Leaks • Thread Safeness • Is the code free of unintended infinite loops? • Are function parameters explicitly verified in the code? • Pending/TODO • assertions • abnormal terminations • Database Transactions • Correct synchronization • no deadlocks/livelocks • Bug Fix Side Effects • All the occurrences of the bug are fixed
  10. Different Techniques - recap • email • jira patch process

    a la apache • over the shoulder • formal review at a meeting room • pasetbin • web tools - reviewboard and such • GitHub - fork-review-pull process
  11. Tips for Effective Code Review • Psychology - Let's face

    it, there's a lot of psychology in it, so play nice. • Be professional, nothing is personal • Strive to understand, not criticize. • Get prepared ◦ understand the technology in use ◦ know the coding conventions ◦ read related code (classes/method being used) • Read Slow • Short
  12. Eye tracking 01 void main(void){ 02 int i, num, isPrime

    = 0; 03 04 printf("Input Number:"); 05 scanf("%d", &num); 06 07 i = 2; 08 while(i < num){ 09 if(num%i == 0) 10 isPrime = 1; 11 i = i + 1; 12 } 13 14 if(isPrime == 1) 15 printf("%d is prime number.¥n", num); 16 else 17 printf("%d is NOT prime number.¥n", num); 18 }
  13. Eye tracking (3) => Now there's a physiological reason to

    write short method. => People who spend more time on the first scan find more issues and find them faster
  14. Defect density vs LOC/hour Conclusion: Take your time (<500 LOC/hour)

    http://smartbear.com/white-paper.php?content=docs/articles/Case-Study.html
  15. Author preperation Conclusion: Author preparation results in more efficient reviews

    http://smartbear.com/white-paper.php?content=docs/articles/Case-Study.html