code quality assurance · code quality assurance (with a pinch of c# and php) peter kofler, ‘code...

62
Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ SEQIS, April 2011

Upload: others

Post on 27-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Code Quality Assurance(with a pinch of C# and PHP)

Peter Kofler, ‘Code Cop’

SEQIS, April 2011

Page 2: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Agenda

• Presentation

–30’ “Theory”

–1h “Practice”

• Break

• Workshop (2h)

–Analysis of your Problems

–Discussion of Solutions

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 3: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 4: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Peter Kofler

• Ph.D. (Appl. Math.)

• Professional SoftwareDeveloper for 11 years

• Lead Developer at System One

• “fanatic about code quality”

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 5: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 6: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Zero-Defect Mindset(MSF)

Page 7: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 8: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 9: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 10: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Robert C. Martin(“Uncle Bob”)

Page 11: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 12: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

SoftwareCraftsmanship

Page 13: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Craftsmanship

Engineering

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 14: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

CraftsmanshipOver Crap

Page 15: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 16: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Mindset

andPassion

Page 17: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Prime FactorsKata

Page 18: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

... To Epic Evil

From Holy Bliss...

Page 19: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Don’tHurtMe!

Page 20: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

The Requirements.

• Write a class named “PrimeFactors”that has one static method: Generate.

–The Generate method takes an integerargument and returns a List<int>.

–That list contains the prime factors innumerical sequence.

http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 21: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Demo

Page 22: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Keep the bar green to keep the code clean

Page 23: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Unit Testing

• test individual units

• isolate each part

• show that the individual parts are

correct

• regression testing

• sort of living documentation

• executed within a frameworkhttp://en.wikipedia.org/wiki/Unit_testing

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 24: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 25: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

xUnit Frameworks

• e.g.

• Smalltalk - SUnit

• .NET - NUnit, MSTest

• Java - JUnit, TestNG

• PHP - PHPUnit

• C++, Groovy, Python, Ruby, Scala, etc.http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 26: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

TESTINGI FIND YOUR LACK OF TESTS DISTURBING.

Page 27: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Test-Driven Development

• add a test

• run all tests and see if the new one fails

• write some code

• run all tests and see them succeed

• refactor code

• „Red Green Refactor“http://en.wikipedia.org/wiki/Test_Driven_Development

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 28: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

A minute ago alltheir code worked

Page 29: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 30: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Testing isa mindset

Page 31: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Youhave to want it

Page 32: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 33: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Code Coverage

comprehensiveness of tests

Page 34: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Beware!

comprehensiveness ≠ quality!

Page 35: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Some Code Coverage Tools

• .NET - PartCover, (NCover, VS)

• Java - EMMA, Cobertura, Clover

• C++ - Covtool, gcov

• PHP - PHPUnit

• commercial products

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 36: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Demo

Page 37: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Demo

Page 38: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 39: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Daily BuildsNightly Builds

Page 40: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

ContinuousIntegration

Page 41: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Continuous Integration

• Maintain a code repository

• Automate the build

• Make the build self-testing

• Everyone commits every day

• Every commit should be built

• Keep the build fast

• Everyone can see the results of the buildhttp://en.wikipedia.org/wiki/Continuous_integration

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 42: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Immediate Feedbackand

Early Warning

Page 43: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 44: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Some CI Servers

• .NET - TFS, CruiseControl.NET, Jenkins

• Java - CruiseControl, Jenkins

• C++ - Jenkins (Shell/Make)

• PHP - Hudson, phpUnderControl, Arbit

• commercial products - TeamCity, ALA

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 45: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 46: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Good Enough?

Page 47: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Demo

Page 48: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 49: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Check What?

• Lexical analysis–naming, coding conventions, design idioms

• Flow/path analysis–null-pointer, dead code (conditional)

• Dependency analysis–architectural/design flaws

• Verification–mathematical proof of correctness

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 50: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Some Static Analysis Tools

• .NET - FxCop, StyleCop (ReSharper)

• Java - Checkstyle, Findbugs, PMD

• C++ - (Sp)Lint

• PHP - PHPLint, PHP_CodeSniffer

• commercial products

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 51: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Good Enough?

Page 52: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Demo

Page 53: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Some Code Review Tools

• Your peer (Pair Programming)

• Your version control system

• Your IDE (e.g. ReviewClipse)

• commercial products

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 54: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the
Page 55: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

ThankYou

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 56: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

www.code-cop.org

www.seqis.com

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 57: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Links #1

Mindset

• http://codebetter.com/blogs/darrell.norton/archive/2003/12/03/4222.aspx (Zero-Defect Mindset)

• http://www.sqnz.org.nz/documents/ShipHappens/Software%20Quality%20Group%20Presentation_frame.htm (Zero-Defect Mindset)

• http://en.wikipedia.org/wiki/Fixing_Broken_Windows

• http://pragprog.com/the-pragmatic-programmer

Software Craftsmanship

• http://en.wikipedia.org/wiki/Robert_Cecil_Martin

• http://www.clean-code-developer.de/

• http://en.wikipedia.org/wiki/Software_craftsmanship

• http://vikashazrati.wordpress.com/2009/11/18/dissecting-software-craftsmanship/

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 58: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Links #2

Kata

• http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata

• http://en.wikipedia.org/wiki/Kata_(programming)

Katacasts C#

• http://blog.slatner.com/2009/11/11/PrimeFactorsKataInC.aspx

• http://urilavi.blogspot.com/2010/03/primes-kata.html

• http://www.rickardnilsson.net/post/2010/07/21/Prime-Factors-Kata.aspx

• http://blog.softwareontheside.com/2011/03/prime-factors-kata-in-c.html

Unit Test

• http://en.wikipedia.org/wiki/Unit_testing

• http://en.wikipedia.org/wiki/Xunit

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 59: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Links #3

• http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks

TDD

• http://en.wikipedia.org/wiki/Test_Driven_Development

Code Coverage

• http://en.wikipedia.org/wiki/Code_coverage

Continuous Integration

• http://jenkins-ci.org/

• http://www.codinghorror.com/blog/archives/000818.html

• http://www.stevemcconnell.com/ieeesoftware/bp04.htm

• http://www.joelonsoftware.com/articles/fog0000000023.html

• http://en.wikipedia.org/wiki/Continuous_integration

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 60: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

Links #4

Static Code Analysis

• http://en.wikipedia.org/wiki/Static_code_analysis

• http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

Code Review

• http://en.wikipedia.org/wiki/Code_review

• http://en.wikipedia.org/wiki/Pair_programming

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 61: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

CC Images #1

• demo: http://www.flickr.com/photos/st3f4n/4109940538/

• list: http://www.flickr.com/photos/kylesteeddesign/3724074594/

• spray face: http://www.flickr.com/photos/iangallagher/4115047191/

• eggs: http://www.flickr.com/photos/nickwheeleroz/2475011402/

• windows: http://www.flickr.com/photos/sketchglass/4281424410/

• shoe maker: http://www.flickr.com/photos/tbatty/1450209613/

• factory: http://www.flickr.com/photos/94693506@N00/4643248587/

• passion: http://gapingvoid.com/2011/03/29/suddenly-passion/

• grail: http://www.flickr.com/photos/mr_t_in_dc/4183854194/

• evil: http://www.flickr.com/photos/legofenris/4476593087/

• puppy: http://www.flickr.com/photos/davdunc/3706558237/

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

Page 62: Code Quality Assurance · Code Quality Assurance (with a pinch of C# and PHP) Peter Kofler, ‘Code Cop’ ... Continuous Integration •Maintain a code repository •Automate the

CC Images #2

• fence: http://www.flickr.com/photos/30830597@N08/3630649274/

• Darth Vader: http://rubystammtisch.at/

• covered car: http://www.flickr.com/photos/paulk/3166328163/

• works: http://www.codinghorror.com/blog/archives/000818.html

• Agnes: http://www.youbrokethebuild.com/

• microscope: http://www.flickr.com/photos/gonzales2010/8632116/

• review: http://www.flickr.com/photos/smitty/2245445147/

• questions: http://www.flickr.com/photos/seandreilinger/2326448445/

PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY