2. 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
3. Why do we need clean code?
3
HP Confidential
Jan 2013
4. 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
5. 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
6. 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
7. 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
8. 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
9. 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
10. 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&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
12. How do we measure clean code?
•
12
Demo!
HP Confidential
Jan 2013
13. 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