41
Effective code reviews Sebastian Marek - Software Architect

Effective code reviews

Embed Size (px)

DESCRIPTION

It’s not easy to perform a good code review. Often done in a hurry just to get it done, it only makes things worse. People treat it as an obstacle, not a helpful thing. I am gonna tell you why code reviews are important and how they can help you maintain good quality code. I will not only tell who are the code reviews for, how to raise a useful code review, but also how to perform a good code review in the quickest time possible.

Citation preview

Page 1: Effective code reviews

Effective code reviews

Sebastian Marek - Softw

are Architect

Page 2: Effective code reviews

@proofek

• 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

automation• TDD and CI• occasionally contributes

to open source projects• wants to be a knight

https://joind.in/6947

Page 3: Effective code reviews

Who does code reviews?

Page 4: Effective code reviews

Disclaimer

All characters appearing in this presentation are fictitious.

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

Page 5: Effective code reviews

The Team

Harry “Just Get It Done” – The Manager

Tom “I Need It Now” – The Owner

Page 6: Effective code reviews

The Team

Adam “The Night Coder” – developer

Kris “Hackety Hack” – master code reviewer

Bruno “It Will Work” – apprentice reviewer

Page 7: Effective code reviews

Scenario 1

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?

Page 8: Effective code reviews

Scenario 2

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

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

Page 9: Effective code reviews

Scenario 3

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!

Page 10: Effective code reviews

Scenario 4

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!

Page 11: Effective code reviews

Code review

Adam The Developerto Kris The Reviewer

9:31 PM (0 minutes ago)

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

Page 12: Effective code reviews

Raising a code review

No (e)mail!

Page 13: Effective code reviews

Raising a code review

Bug tracking systems- JIRA- Bugtrak- Mantis

Code review tools- Crucible/Fisheye- Gerrit- Github

Page 14: Effective code reviews

Code review

Adam The Developerto Kris The Reviewer

9:31 PM (13 minutes ago)

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

Kris The Reviewerto Adam The Developer

9:44 PM (0 minutes ago)

Adam,

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

---Kris

Page 15: Effective code reviews

What to review

Version control• Specific change

sets• avoid specific

commits• Reviewing patches

risky, unless automated

Page 16: Effective code reviews

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 Reviewerto Adam The Developer

9:44 PM (12 minutes ago)

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 Developerto Kris The Reviewer

9:56 PM (0 minutes ago)

Kris,

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

---Adam

Page 17: Effective code reviews

The purpose of the review

What and

Why?

Page 18: Effective code reviews

One way of doing things…

Bruno “It will work”

• Makes sense• Works• Syntactically correct• Approved

Usual feedback produced:

Page 19: Effective code reviews

Being smarter…

Kris “The Master Reviewer”

• PHP linter• PHP Code Sniffer• PHPUnit• phpDocumentor• PHP Depend• PHP Mess Detector• Sonar

Tools used:

Page 20: Effective code reviews

Speed up with automation - PHP linter and PHP CodeSniffer

$ 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

Page 21: Effective code reviews

Verify whether the code works with PHPUnit

$ phpunitPHPUnit 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.

Page 22: Effective code reviews

Static analysis and code quality with PHP Depend

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

Page 23: Effective code reviews

Static analysis and code quality with PHP Mess Detector

Page 24: Effective code reviews

Static analysis and code quality with Sonar

Page 25: Effective code reviews

Static analysis and code quality with Sonar

Page 26: Effective code reviews

Static analysis and code quality with Sonar

Page 27: Effective code reviews

Static analysis and code quality with Sonar

Page 28: Effective code reviews

Static analysis and code quality with Sonar

Page 29: Effective code reviews

Static analysis and code quality with Sonar

Page 30: Effective code reviews

…by looking at things all important

Kris “The Master Reviewer”

Things checked:• clarity• performance• excessive complexity• impact on other

systems• does the solution

solves the problem

• duplications• code quality• potential deployment

issues• design flaws

Page 31: Effective code reviews

The benefits of a code review – they are for you!

• Knowledge sharing• Mentoring new starters• Find bugs/design flaws

early• Improve overall code quality• Fostering collective code

ownership

Page 32: Effective code reviews

The soft side - developers

• Understand and accept that you will make mistakes.

• You are not your code.

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

• Don't rewrite code without consultation.

DEV

ELO

PER

S

Page 33: Effective code reviews

The soft side – code reviewers

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

• Critique code instead of people

CO

DE

REV

IEW

ERS

Page 34: Effective code reviews

Summary - what include in the code review

• Location of your changes– Repository name, branch name, branch base

• Subject of your changes– What have you changed

• Reason for the change– Why have you change it

WH

AT?

Page 35: Effective code reviews

Summary - who assign the code review to?

• Seek the experts– If you're not sure ask around

• Question the solution– Make sure it fits the purpose

WH

O?

Page 36: Effective code reviews

Summary – where to raise a code review?

• Make it traceable– Bug trucking system, ie. Jira, Trac, Mantis, etc– Code review tool, ie. Fisheye/Crucible, gerrit

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

WH

ERE?

Page 37: Effective code reviews

Summary - how to perform a good code review?

• Use tools, don’t be a tool• Check for duplications/

complexity• Asses impact on other systems• Make sure code is clear and

self-descriptive

HO

W?

Page 38: Effective code reviews
Page 39: Effective code reviews

Credits…

http://georgegant.deviantart.com/art/Angry-Nerds-217554774http://www.flickr.com/photos/dawgbyte77/3058349367/http://www.flickr.com/photos/zzpza/3269784239/http://www.flickr.com/photos/toolmantim/6170448143/http://www.flickr.com/photos/coyau/7630782996/http://www.flickr.com/photos/73885983@N02/6729908421/http://www.osnews.com/story/19266/WTFs_m

http://www.atlassian.com/angrynerds/

Page 40: Effective code reviews

…and references

The Ten Commandments of Egoless Programming: http://alturl.com/q4dpa

The Code review: http://www.soulbroken.co.uk/blog/2010/07/the-code-review/

Fisheye/Crucible: http://www.atlassian.com/software/crucible/overview

Gerrit: http://code.google.com/p/gerrit/

Github: https://github.com/

PHPUnit: http://phpunit.de

PHP CodeSniffer: http://pear.php.net/PHP_CodeSniffer

PHP Depend: http://pdepend.org/

PHP Mess Detector: http://phpmd.org/

Sonar: http://www.sonarsource.org/

Page 41: Effective code reviews

Q&A

Questions?

https:// /6947