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

Code review... done well

Apokrupto
November 04, 2017

Code review... done well

Tips and best practices for reviewing code in your organisation

Apokrupto

November 04, 2017
Tweet

More Decks by Apokrupto

Other Decks in Programming

Transcript

  1. PEER CODE REVIEWS ARE THE SINGLE BIGGEST THING YOU CAN

    DO TO IMPROVE YOUR CODE JEFF ATWOOD CODINGHORROR.COM CODE REVIEW - @APOKRUPTO
  2. AS THE AUTHOR, BE PREPARED LIKE EXAM REVISION HOW OFTEN

    DO YOU WRITE CODE AND SAY “GOOD ENOUGH”? CODE REVIEW - @APOKRUPTO
  3. AS THE AUTHOR, BE PREPARED LIKE EXAM REVISION HOW OFTEN

    DO YOU WRITE CODE AND SAY “GOOD ENOUGH”? CODE REVIEW - @APOKRUPTO
  4. AVOID UNINTENDED CONSEQUENCES PREFER ENUMS OVER STRINGS & INTS PREFER

    PROMOTED TYPES SEND STRICT, ACCEPT STRICT CODE REVIEW - @APOKRUPTO
  5. AVOID UNINTENDED CONSEQUENCES PREFER ENUMS OVER STRINGS & INTS PREFER

    PROMOTED TYPES SEND STRICT, ACCEPT STRICT CODE REVIEW - @APOKRUPTO
  6. AVOID UNINTENDED CONSEQUENCES PREFER ENUMS OVER STRINGS & INTS PREFER

    PROMOTED TYPES SEND STRICT, ACCEPT STRICT CODE REVIEW - @APOKRUPTO
  7. YOU CAN OVERDO IT /* Now bump the count */

    (*argc)++; CODE REVIEW - @APOKRUPTO wireshark
  8. IF YOU FIND YOURSELF DOING THE SAME THING MORE THAN

    THREE TIMES, WRITE A SCRIPT CODE REVIEW - @APOKRUPTO
  9. STATIC ANALYSIS FINDS: CODE REVIEW - @APOKRUPTO CODE STYLE INFRACTIONS

    COMPLEX CODE DUPLICATION POTENTIAL SECURITY HOLES
  10. WHICH IS CORRECT? if (doFoo) { foo(); } else {

    bar(); } if (doFoo) { foo(); } else
 { bar(); } if (doFoo) foo(); else bar(); CODE REVIEW - @APOKRUPTO
  11. WHICH IS RIGHT? if (doFoo) { foo(); } else {

    bar(); } if (doFoo) { foo(); } else
 { bar(); } if (doFoo) foo(); else bar(); CODE REVIEW - @APOKRUPTO
  12. if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) goto fail; if

    ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; CODE REVIEW - @APOKRUPTO
  13. ================================================= !!!! WARNINGS (CCN > 15 OR ARGUMENTS > 100

    OR LENGTH > 1000) !!!! ================================================ NLOC CCN TOKEN PARAM LENGTH LOCATION ------------------------------------------------ 48 18 287 2 55 SSLUPDATEHANDSHAKEMACS@[email protected] 73 16 488 2 87 SSLPROCESSHANDSHAKERECORD@[email protected] 108 22 799 2 146 DTLSPROCESSHANDSHAKERECORD@[email protected] 96 39 513 2 110 SSLPROCESSHANDSHAKEMESSAGE@[email protected] 400 137 2183 2 477 SSLADVANCEHANDSHAKE@[email protected] 43 18 136 1 43 HDSKSTATETOSTR@[email protected]
  14. RECAP CODE REVIEW - @APOKRUPTO REVIEW BETWEEN 200-400 LOC INSPECT

    300-500 LOC PER HOUR NO MORE THAN 90 MINUTES
  15. READING LIST CODE REVIEW - @APOKRUPTO IN PRAISE OF SUPERFICIAL

    BEAUTY HTTPS://CORTE.SI/POSTS/CODE/READING-CODE.HTML CODE REVIEWS: JUST DO IT HTTPS://BLOG.CODINGHORROR.COM/CODE-REVIEWS-JUST-DO-IT/ BEST KEPT SECRETS OF PEER CODE REVIEW HTTPS://SMARTBEAR.COM/SMARTBEAR/MEDIA/PDFS/BEST-KEPT-SECRETS-OF-PEER-CODE-REVIEW.PDF 11 PROVEN PRACTICES FOR MORE EFFECTIVE, EFFICIENT PEER CODE REVIEW HTTPS://WWW.IBM.COM/DEVELOPERWORKS/RATIONAL/LIBRARY/11-PROVEN-PRACTICES-FOR-PEER-REVIEW/ PROCMAIL.C HTTPS://OPENSOURCE.APPLE.COM/SOURCE/PROCMAIL/PROCMAIL-1.2/PROCMAIL/SRC/PROCMAIL.C THE MYTH OF THE COST OF DEFECT HTTP://THKLEIN.COM/EN_US/COST-OF-DEFECT/ A SHORT HISTORY OF THE COST PER DEFECT METRIC HTTP://WWW.IFPUG.ORG/DOCUMENTS/JONES-COSTPERDEFECTMETRICVERSION4.PDF HTTP://LMGTFY.COM/?Q=CODE+REVIEW