CODE QUALITY ASSURANCE

Jan 15, 2013

Bart Blommaerts
bart.blommaerts@hp.com
EMEA NG Java & WEB: HP Belgium

©2010 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without
notice
Agenda
•

Why do we need clean code?

•

What is clean code?

•

How do we write clean code?

•

How do we test clean code?

•

How do we measure clean code?

•

Disclaimer: clean code vs. great code

•

Q&A

2

HP Confidential

Jan 2013
Why do we need clean code?

3

HP Confidential

Jan 2013
Why do we need clean code?
Objectives
– Easy

to read and understand

– Unnecessary
– Maintaining
•

and extending code is easier

First step towards re-use!

– Project
•

code and noise are removed

lifecycle cost will be reduced

Cost of owning a mess ..

“Writing clean code is what you must do in order to call yourself a
professional. There is no reasonable excuse for doing anything less
than your best.”

Robert C. Martin

4

HP Confidential

Jan 2013
What is clean code?
•
•
•
•
•
•

5

HP Confidential

Simple and direct
Human readable
Efficient
No duplications: DRY
Made for the problem
Easy to enhance

Jan 2013
How do we write clean code?
•

SRP: Single responsibility principle
–
–

Stepdown Rule

–

•

Do One Thing

Restrict number of arguments (3 is a lot ..)

Boy Scout Rule
–
–

6

Leave code better than you found it
Don’t comment bad code, rewrite it

HP Confidential

Jan 2013
How do we write clean code?
•

Meaningful, self-explaining names
–
–

•

Purpose of a variable, class, method, ..
Avoid disinformation (eg. lblUserName)

Error Handling
–
–

7

Don’t return null

–

•

Use exceptions rather then return codes
Don’t pass null

Expresses intent

HP Confidential

Jan 2013
How do we test clean code?
•

SRP: Single responsibility principle
–

•

Boy Scout Rule
–

8

Unit test enabler

Add unit tests before refactoring

HP Confidential

Jan 2013
How do we test clean code?
•

Meaningful names
–

•

Understand what to test

Error Handling
–

@Test(expected=CleanCodeException.class)

Fix a bug only once. Write Unit tests when fixing bugs!

9

HP Confidential

Jan 2013
How do we measure clean code?
•

Sonar integration
–

•

http://sonar.elabs.eds.com:9000/

Maven:

<properties>
<sonar.jdbc.url>
jdbc:mysql://sonar.elabs.eds.com:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
</sonar.jdbc.url>
<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>x</sonar.jdbc.username>
<sonar.jdbc.password>x</sonar.jdbc.password>
<sonar.host.url>http://sonar.elabs.eds.com:9000</sonar.host.url>
</properties>

10

HP Confidential

Jan 2013
How do we measure clean code?
•

Ant:

<!-- Sonar properties -->
<property name="sonar.jdbc.url"
value="jdbc:mysql://sonar.elabs.eds.com:3306/sonar?useUnicode=true&amp;characterEncoding=utf8" />
<property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" />
<property name="sonar.jdbc.username" value="x" />
<property name="sonar.jdbc.password" value="x" />
<property name="sonar.host.url" value="http://sonar.elabs.eds.com:9000" />
<!-- Sonar target -->
<target name="sonar" depends="compile">
<sonar:sonar workDir="." key="be.vlaanderen.vip:xfire" version="02.00"
xmlns:sonar="antlib:org.sonar.ant">
<sources>
<path location="${project.dir.src}" />
</sources>
</sonar:sonar>
</target>
<!-- Sonar task -->
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath>
<fileset dir="${project.dir.lib}">
<include name="sonar-ant-task-1.0.jar" />
</fileset>
</classpath>
</taskdef>

11

HP Confidential

Jan 2013
How do we measure clean code?
•

12

Demo!

HP Confidential

Jan 2013
Disclaimer: clean code vs. great code
•

Primary goal: making it work

•

SRP
–

–

•

But: no methods with 1 line of code

But: don’t write a huge amount of tiny classes

Boy Scout Rule
–

13

Don’t go overboard

HP Confidential

Jan 2013
Q& A

http://www.osnews.com/comics
14

HP Confidential

Jan 2013
THANKS FOR YOUR ATTENTION

©2010 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without
notice

Code Quality Assurance

  • 1.
    CODE QUALITY ASSURANCE Jan15, 2013 Bart Blommaerts bart.blommaerts@hp.com EMEA NG Java & WEB: HP Belgium ©2010 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice
  • 2.
    Agenda • Why do weneed clean code? • What is clean code? • How do we write clean code? • How do we test clean code? • How do we measure clean code? • Disclaimer: clean code vs. great code • Q&A 2 HP Confidential Jan 2013
  • 3.
    Why do weneed clean code? 3 HP Confidential Jan 2013
  • 4.
    Why do weneed clean code? Objectives – Easy to read and understand – Unnecessary – Maintaining • and extending code is easier First step towards re-use! – Project • code and noise are removed lifecycle cost will be reduced Cost of owning a mess .. “Writing clean code is what you must do in order to call yourself a professional. There is no reasonable excuse for doing anything less than your best.” Robert C. Martin 4 HP Confidential Jan 2013
  • 5.
    What is cleancode? • • • • • • 5 HP Confidential Simple and direct Human readable Efficient No duplications: DRY Made for the problem Easy to enhance Jan 2013
  • 6.
    How do wewrite clean code? • SRP: Single responsibility principle – – Stepdown Rule – • Do One Thing Restrict number of arguments (3 is a lot ..) Boy Scout Rule – – 6 Leave code better than you found it Don’t comment bad code, rewrite it HP Confidential Jan 2013
  • 7.
    How do wewrite clean code? • Meaningful, self-explaining names – – • Purpose of a variable, class, method, .. Avoid disinformation (eg. lblUserName) Error Handling – – 7 Don’t return null – • Use exceptions rather then return codes Don’t pass null Expresses intent HP Confidential Jan 2013
  • 8.
    How do wetest clean code? • SRP: Single responsibility principle – • Boy Scout Rule – 8 Unit test enabler Add unit tests before refactoring HP Confidential Jan 2013
  • 9.
    How do wetest clean code? • Meaningful names – • Understand what to test Error Handling – @Test(expected=CleanCodeException.class) Fix a bug only once. Write Unit tests when fixing bugs! 9 HP Confidential Jan 2013
  • 10.
    How do wemeasure clean code? • Sonar integration – • http://sonar.elabs.eds.com:9000/ Maven: <properties> <sonar.jdbc.url> jdbc:mysql://sonar.elabs.eds.com:3306/sonar?useUnicode=true&amp;characterEncoding=utf8 </sonar.jdbc.url> <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver> <sonar.jdbc.username>x</sonar.jdbc.username> <sonar.jdbc.password>x</sonar.jdbc.password> <sonar.host.url>http://sonar.elabs.eds.com:9000</sonar.host.url> </properties> 10 HP Confidential Jan 2013
  • 11.
    How do wemeasure clean code? • Ant: <!-- Sonar properties --> <property name="sonar.jdbc.url" value="jdbc:mysql://sonar.elabs.eds.com:3306/sonar?useUnicode=true&amp;characterEncoding=utf8" /> <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" /> <property name="sonar.jdbc.username" value="x" /> <property name="sonar.jdbc.password" value="x" /> <property name="sonar.host.url" value="http://sonar.elabs.eds.com:9000" /> <!-- Sonar target --> <target name="sonar" depends="compile"> <sonar:sonar workDir="." key="be.vlaanderen.vip:xfire" version="02.00" xmlns:sonar="antlib:org.sonar.ant"> <sources> <path location="${project.dir.src}" /> </sources> </sonar:sonar> </target> <!-- Sonar task --> <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> <classpath> <fileset dir="${project.dir.lib}"> <include name="sonar-ant-task-1.0.jar" /> </fileset> </classpath> </taskdef> 11 HP Confidential Jan 2013
  • 12.
    How do wemeasure clean code? • 12 Demo! HP Confidential Jan 2013
  • 13.
    Disclaimer: clean codevs. great code • Primary goal: making it work • SRP – – • But: no methods with 1 line of code But: don’t write a huge amount of tiny classes Boy Scout Rule – 13 Don’t go overboard HP Confidential Jan 2013
  • 14.
  • 15.
    THANKS FOR YOURATTENTION ©2010 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice