Your SlideShare is downloading. ×
0
Code Quality Assurance
FH Technikum Wien, April 2013
Peter Kofler, ‘Code Cop’
@codecopkofler
www.code-cop.org
Copyright Pe...
Peter Kofler
• Ph.D. (Appl. Math.)
• Professional Software
Developer for 14 years
• Lead Developer at IBM
• “fanatic about...
The opinions expressed here are my
own and do not necessarily represent
those of current or past employers.
PETER KOFLER, ...
Tools of the Trade
●
Mindset/Books
●
Code Kata
●
TDD/BDD
●
Code Coverage
●
CI
●
Static Analysis
●
Code Review
PETER KOFLER...
Zero-Defect Mindset
(MSF)
Boy Scout Rule
Software
Craftsmanship
Craftsmanship
Engineering
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
“Craftsmanship
Over Crap“
(Uncle Bob)
Mindset
and
Passion
The Prime Factors
Kata
What Exactly Will We Do?
●
write code together
●
using TDD
●
see techniques
and patterns
●
discuss while
doing
PETER KOFLE...
The Requirements.
• Write a class named “PrimeFactors”
that has one static method: generate.
● The generate method takes a...
First Some Math.
●
Prime Number: number > 1 that has
no divisors other than 1 and itself.
●
e.g. 2, 3, 5, 61, 67, ..., 997...
Requirements (for Mortals).
• code a file/module/class “PrimeFactors”
• function/method/routine “generate“
• accept an int...
Demo(Code Kata)
Keep the bar green to keep the code clean
Unit Testing
• test individual units
• isolate each part
• show that the individual parts are
correct
• regression testing...
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Some xUnit Frameworks
● Smalltalk – SUnit
● Java - JUnit, TestNG
● .NET - NUnit, Typemock
● C++ - CppUTest
● Groovy, PHP, ...
“I write unit tests for one
reason: so my coworkers
don't f*** up my code.”
(David Angry)
Test-Driven Development
●
add a test
●
run all tests and see if the new one fails
●
write some code
●
run all tests and se...
A minute ago all
their code worked
BDD
is
TDD
“Done Right“
Scenarios and Stories

focus on behaviour
(e.g. requirements are behaviour)

full sentences

expected behaviour should
...
Testing is
a mindset
You
have to want it
TESTING
I FIND YOUR LACK OF TESTS DISTURBING.
Code Coverage
comprehensiveness of tests
Beware!
comprehensiveness ≠ quality!
100%
(What else?)
Some Code Coverage Tools
● Java - EMMA, Cobertura, Clover
● .NET - NCover, PartCover
● C++ - Covtool, gcov
● Ruby – rcov
●...
Never measure
developers by
Code Coverage!
Demo(Coverage)
Coverage helps.
Use it!
Really, Use it!
Demo(Jenkins)
Daily Builds
Nightly Builds
Continuous
Integration
Continuous Integration
• Maintain a code repository
• Automate the build
• Make the build self-testing
• Everyone commits ...
Immediate Feedback
and
Early Warning
Some CI Servers
●
Java - Jenkins (Hudson), CruiseControl
●
.NET - TFS, Jenkins, CruiseControl.NET
●
C++ - Jenkins (Shell/M...
Good Enough?
Demo(Warnings)
Check What?
• Lexical analysis
–naming, coding conventions, design idioms
• Flow/path analysis
–null-pointer, dead code (c...
Some Static Analysis Tools
● Java - Checkstyle, Findbugs, PMD
● .NET - FxCop, (ReSharper, NDepend)
● C++ - (Sp)Lint
● Ruby...
Many, Many Tools
Good Enough?
Demo(Review)
Some Code Review Tools
●
Your peer (Pair Programming)
●
Your version control system
●
Your IDE (e.g. ReviewClipse)
●
Comme...
Lessons Learned
(!) Boy Scout Rule
(!) Do TDD/BDD
(!) Use the Tools
(Coverage, CI, Static Analysis)
PETER KOFLER, CODE-COP...
Thank
You
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Peter Kofler
@codecopkofler
www.code-cop.org
PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
Links #1
Mindset
●
http://codebetter.com/blogs/darrell.norton/archive/2003/12/03/4222.aspx
●
http://www.sqnz.org.nz/docume...
Links #2
Unit Test
• http://en.wikipedia.org/wiki/Unit_testing
• http://en.wikipedia.org/wiki/XUnit
• http://en.wikipedia....
Links #3
Continuous Integration
• http://en.wikipedia.org/wiki/Continuous_integration
• http://www.codinghorror.com/blog/a...
CC Images
• spray face: http://www.flickr.com/photos/iangallagher/4115047191/
• Judge Dredd: http://www.flickr.com/photos/...
CC Images
• fence: http://www.flickr.com/photos/30830597@N08/3630649274/
• Darth Vader: http://rubystammtisch.at/
• covere...
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Upcoming SlideShare
Loading in...5
×

Code Quality Assurance v4 (2013)

2,263

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,263
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Code Quality Assurance v4 (2013)"

  1. 1. Code Quality Assurance FH Technikum Wien, April 2013 Peter Kofler, ‘Code Cop’ @codecopkofler www.code-cop.org Copyright Peter Kofler, licensed under CC-BY.
  2. 2. Peter Kofler • Ph.D. (Appl. Math.) • Professional Software Developer for 14 years • Lead Developer at IBM • “fanatic about code quality” PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  3. 3. The opinions expressed here are my own and do not necessarily represent those of current or past employers. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  4. 4. Tools of the Trade ● Mindset/Books ● Code Kata ● TDD/BDD ● Code Coverage ● CI ● Static Analysis ● Code Review PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  5. 5. Zero-Defect Mindset (MSF)
  6. 6. Boy Scout Rule
  7. 7. Software Craftsmanship
  8. 8. Craftsmanship Engineering PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  9. 9. “Craftsmanship Over Crap“ (Uncle Bob)
  10. 10. Mindset and Passion
  11. 11. The Prime Factors Kata
  12. 12. What Exactly Will We Do? ● write code together ● using TDD ● see techniques and patterns ● discuss while doing PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  13. 13. The Requirements. • Write a class named “PrimeFactors” that has one static method: generate. ● The generate method takes an integer argument and returns a List<Integer>. ● That list contains the prime factors in numerical sequence. http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  14. 14. First Some Math. ● Prime Number: number > 1 that has no divisors other than 1 and itself. ● e.g. 2, 3, 5, 61, 67, ..., 997, ..., 243112609 -1 ● Prime Factors: prime numbers that divide an integer without remainder. ● e.g. 2 = 2, 4 = 2 * 2, 24 = 2 * 2 * 2 * 3 288 = 25 * 32 PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  15. 15. Requirements (for Mortals). • code a file/module/class “PrimeFactors” • function/method/routine “generate“ • accept an integer number as parameter • return the prime factors of that number PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  16. 16. Demo(Code Kata)
  17. 17. Keep the bar green to keep the code clean
  18. 18. Unit Testing • test individual units • isolate each part • show that the individual parts are correct • regression testing • sort of living documentation • executed within a framework PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  19. 19. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  20. 20. Some xUnit Frameworks ● Smalltalk – SUnit ● Java - JUnit, TestNG ● .NET - NUnit, Typemock ● C++ - CppUTest ● Groovy, PHP, Python, Ruby, Scala, ... PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  21. 21. “I write unit tests for one reason: so my coworkers don't f*** up my code.” (David Angry)
  22. 22. 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 mercilessly ● „Red Green Refactor“ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  23. 23. A minute ago all their code worked
  24. 24. BDD is TDD “Done Right“
  25. 25. Scenarios and Stories  focus on behaviour (e.g. requirements are behaviour)  full sentences  expected behaviour should  Use Arrange-Act-Assert in form of Given-When-Then PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  26. 26. Testing is a mindset
  27. 27. You have to want it
  28. 28. TESTING I FIND YOUR LACK OF TESTS DISTURBING.
  29. 29. Code Coverage comprehensiveness of tests
  30. 30. Beware! comprehensiveness ≠ quality!
  31. 31. 100% (What else?)
  32. 32. Some Code Coverage Tools ● Java - EMMA, Cobertura, Clover ● .NET - NCover, PartCover ● C++ - Covtool, gcov ● Ruby – rcov ● commercial products PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  33. 33. Never measure developers by Code Coverage!
  34. 34. Demo(Coverage)
  35. 35. Coverage helps. Use it! Really, Use it!
  36. 36. Demo(Jenkins)
  37. 37. Daily Builds Nightly Builds
  38. 38. Continuous Integration
  39. 39. 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 build PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  40. 40. Immediate Feedback and Early Warning
  41. 41. Some CI Servers ● Java - Jenkins (Hudson), CruiseControl ● .NET - TFS, Jenkins, CruiseControl.NET ● C++ - Jenkins (Shell/Make) ● Ruby – CruiseControl.rb ● commercial products - TeamCity, ALA PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  42. 42. Good Enough?
  43. 43. Demo(Warnings)
  44. 44. 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
  45. 45. Some Static Analysis Tools ● Java - Checkstyle, Findbugs, PMD ● .NET - FxCop, (ReSharper, NDepend) ● C++ - (Sp)Lint ● Ruby - Roodi, Dust, Flog, Saikuro ● commercial products PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  46. 46. Many, Many Tools
  47. 47. Good Enough?
  48. 48. Demo(Review)
  49. 49. 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
  50. 50. Lessons Learned (!) Boy Scout Rule (!) Do TDD/BDD (!) Use the Tools (Coverage, CI, Static Analysis) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  51. 51. Thank You PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  52. 52. Peter Kofler @codecopkofler www.code-cop.org PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  53. 53. Links #1 Mindset ● http://codebetter.com/blogs/darrell.norton/archive/2003/12/03/4222.aspx ● http://www.sqnz.org.nz/documents/ShipHappens/Software%20Quality%20Group%20Presentation_frame.htm ● http://pragprog.com/the-pragmatic-programmer ● http://en.wikipedia.org/wiki/Fixing_Broken_Windows ● http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule Software Craftsmanship ● http://en.wikipedia.org/wiki/Software_craftsmanship ● http://en.wikipedia.org/wiki/Robert_Cecil_Martin ● http://vikashazrati.wordpress.com/2009/11/18/dissecting-software-craftsmanship/ ● http://clean-code-developer.de/ Kata ● http://en.wikipedia.org/wiki/Kata_(programming) ● https://bitbucket.org/pkofler/primefactors.java/ (Kata Source Code) PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  54. 54. Links #2 Unit Test • http://en.wikipedia.org/wiki/Unit_testing • http://en.wikipedia.org/wiki/XUnit • http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks TDD • http://en.wikipedia.org/wiki/Test_Driven_Development BDD • http://en.wikipedia.org/wiki/Behavior_Driven_Development • http://dannorth.net/introducing-bdd/ • http://behaviour-driven.org/ Code Coverage ● http://en.wikipedia.org/wiki/Code_coverage ● http://www.ibm.com/developerworks/java/library/j-cq01316/ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  55. 55. Links #3 Continuous Integration • http://en.wikipedia.org/wiki/Continuous_integration • http://www.codinghorror.com/blog/archives/000818.html • http://www.stevemcconnell.com/ieeesoftware/bp04.htm • http://www.joelonsoftware.com/articles/fog0000000023.html • http://jenkins-ci.org/ 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
  56. 56. CC Images • spray face: http://www.flickr.com/photos/iangallagher/4115047191/ • Judge Dredd: http://www.flickr.com/photos/eldave/6169431454/ • list: http://www.flickr.com/photos/kylesteeddesign/3724074594/ • 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/ (by 2010, now dead link) • factory: http://www.flickr.com/photos/94693506@N00/4643248587/ • passion: http://gapingvoid.com/2011/03/29/suddenly-passion/ • questions: http://www.flickr.com/photos/oberazzi/318947873/ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  57. 57. CC Images • 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/ • wtf: http://www.flickr.com/photos/smitty/2245445147/ • questions: http://www.flickr.com/photos/seandreilinger/2326448445/ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×