Java Development Best Practices

Simon Brown, Senior Consultant

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 2

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 3

Presentation Objectives
Provide an overview of the following Cormorant MFE development practices, how to implement them and how they provide real benefit
– – –

Automated unit testing Continuous integration Project blogs

To discuss other best practices that we have used in the past and/or should be using in the future

Ref:

www.evolution.net

Page 4

A quote from a blog entry…
On August 4 we had a session on software engineering. The aim of the session was to share knowledge and experience about the way we develop software and to discuss the importance of doing it a certain way. After the break we had a workshop that briefly touched the different parts of the software development process. The quiz on current real-life practices raised a lot of discussion. While we all recognize the importance of source control, automation of manual tasks, testing, documentation and proper incident management many of us fail in a proper implementation of these practices.
AMIS Technology Corner : On Software Engineering http://technology.amis.nl/blog/index.php?p=695

Ref:

www.evolution.net

Page 5

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 6

Automated unit testing
Automated unit testing now an established technique
– –

You write some code Then you write more code to test it Most popular is Junit 3.8.x Others include TestNG and JUnit 4.0

Many frameworks exist for automated unit testing with Java
– –

Ref:

www.evolution.net

Page 7

Automated unit testing

method1 method2

testMethod1 testMethod2

methodN

testMethodN

Real class

Test class

Ref:

www.evolution.net

Page 8

Automated unit testing
Yes…
– – – –

More code needs to be written Estimates will increase It’s a new way of working It feels weird, perhaps pointless initially Automated unit testing is very powerful Lets you regression test code for free! Helps you write cleaner code Provides a good milestone for completion Provides confidence when changing, fixing or refactoring code If you can write code, you can write a unit test!
www.evolution.net Page 9

But…
– – – – – –
Ref:

Adoption of automated unit testing
New code

Write tests for new code

Existing code that needs to be modified…
– – – –

Look at the unit tests If tests exist, they will help ensure you don’t break anything through unknown side effects If tests don’t exist, write some to cover the area of the code you are changing No need to retrofit the entire code base with unit tests at once
• •

Too expensive! Take an iterative approach

Ref:

www.evolution.net

Page 10

Adoption of automated unit testing
A defect is raised…
– – – – – –

Look at the unit tests Write a unit test to prove the bug - make sure its reproducible Fix the bug The new test will pass Check-in the fix and new test Chances of reoccurrence are greatly reduced

Ref:

www.evolution.net

Page 11

Adoption of automated unit testing
Don’t mandate 100% unit test coverage - it’s too hard and too expensive Do use a code coverage tool (more on this later) Do add tests when you see they don’t already exist Do write tests to prove bugs Do run your tests frequently Do make sure the tests execute quickly Don’t let the tests become out of date Don’t throw them away when they stop passing - fix them! Do treat them as an important deliverable Do include them in code reviews

Ref:

www.evolution.net

Page 12

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 13

Cormorant development environment

Developer PC Developer PC
Commit code

Developer PC

Source code Control (Subversion)

Developer PC

Weblog

Continuous Integration Server
Check-out code

Server

Ref:

www.evolution.net

Page 14

Manual build process
Manual builds performed using Eclipse and command line tools Scripted builds performed using Ant and existing script
– – –

Compile Java code Build EAR file Generate distribution for release to system test

Ref:

www.evolution.net

Page 15

Scheduled, scripted builds
Scheduled, scripted builds performed by CruiseControl and Ant
– – – – –

Build scheduled every hour/30 minutes Clean copy of code checked out from Subversion Compile, build EAR file and run unit (JUnit) tests Build results published to CruiseControl web application Build results also published to build blog

CruiseControl was our sixth team member!

Ref:

www.evolution.net

Page 16

Benefits of scheduled, scripted builds
Forces more frequent, iterative integration rather than bigbang approach
– –

Forces compilation of clean codebase Finds compilation problems where developers have not updated their local copy of code before checking in changes Frequent (continuous) integration is easier and quicker to perform, reducing risk of slippage Automatically runs all unit tests whenever the codebase changes Finds problems when developers have not run tests before checking in changes Provides a level of continuous quality assurance
www.evolution.net Page 17

Forces execution of unit tests
– –

Ref:

Setting up continuous integration
CruiseControl installed on a PC (can be developer PC)
– –

Configured to look at the repository every hour for changes If changes are found, code is checked out and build executed

CruiseControl provides native integration with CVS, Subversion, ClearCase, etc Also look at other continuous integration servers such as Anthill

Ref:

www.evolution.net

Page 18

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 19

What is a blog?
Blog, short for weblog : a web-based log or diary Less formal than static project websites or wikis Information stored on a temporal basis Useful for recording snippets of information as they are encountered

Project information, development tips, environment gotchas, login information, links to documents, documents, instructions, guidelines, links to external resources, status reports, etc Also build information and test results

An alternative to sending out short e-mail memos Can be searched, archived and exported Web-based access means easy distribution of information Low maintenance

Ref:

www.evolution.net

Page 20

Project blogs
R athe r than have a single blog for the proje ct, the re are two: • Te am blog (use d for proje ct inform ation). • Build blog (use d for build re ports).

Ref:

www.evolution.net

Page 21

Team blog
This is the proje ct te am blog and is use d for sharing inform ation about any aspe ct of the proje ct. • All Evolution te am m e m be rs can contribute to this and have acce ss to do so. • Anybody in the e x te nde d te am can le ave com m e nts, but only the Evolution te am can add conte nt. • Inste ad of writing e m ail m e m os, conte nt is publishe d to the blog and a link se nt to the te am . • Since blog conte nt is HTML, it’s e asy to e m be d im age s and link to proje ct arte facts. • W ith an R SS re ade r installe d on e ach de sk top, the te am is autom atically notifie d of ne w conte nt.

Ref:

www.evolution.net

Page 22

Build blog
This is the proje ct build blog and is use d to publish build sum m arie s. • C ruise C ontrol pe rform s a che ck out/build e ach hour and publishe s the re sults. • W ith an R SS re ade r, the te am is autom atically notifie d afte r builds occur. • Anybody can le ave com m e nts, but this blog has be e n configure d so that only C ruise C ontrol can publish conte nt.

Ref:

www.evolution.net

Page 23

Summary page
This is the sum m ary page for both blogs, showing the last thre e e ntrie s that have be e n poste d to e ach. • Navigation is the sam e for the othe r blogs and click ing on link s in the cale ndar shows all conte nt for that pe riod. • The Today link (top) shows all conte nt publishe d today across both blogs. • The R SS/R DF/Atom link s (top) allow a ne wsre ade r application to subscribe to both blogs via a single fe e d.

Ref:

www.evolution.net

Page 24

Blog is green, build is clean!
Through som e custom ization, the blog is use d as a form of e x tre m e fe e dback de vice : • Gre e n m e ans the last build was succe ssful. • R e d m e ans the last build faile d. • The m ain page of the blog is se t to autom atically re fre sh e ve ry fe w m inute s.

Ref:

www.evolution.net

Page 25

Blog is green, build is clean!
Through som e custom ization, the blog is use d as a form of e x tre m e fe e dback de vice : • Gre e n m e ans the last build was succe ssful. • R e d m e ans the last build faile d. • The m ain page of the blog is se t to autom atically re fre sh e ve ry fe w m inute s.

Ref:

www.evolution.net

Page 26

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 27

Roundtable discussion about other best practices
Code coverage

Clover, jcoverage, etc Checkstyle, PMD, etc QALab HttpUnit, Canoo WebTest, etc

Automatic conformance to standards

Tracking metrics over time

Automated acceptance testing

Demos of Clover and Canoo WebTest

Ref:

www.evolution.net

Page 28

Clover in IntelliJ IDEA

Ref:

www.evolution.net

Page 29

Clover HTML reports

Ref:

www.evolution.net

Page 30

Canoo WebTest script
<!DOCTYPE project SYSTEM "../WebTest.dtd"[ <!ENTITY definition SYSTEM "../includes/definition.xml"> <!ENTITY config SYSTEM "../includes/config.xml"> ]> <project name="test" basedir="." default="main"> &definition; <target name="main"> <webtest name="login"> &config; <steps> <invoke description="Request secured resource" url="/login.secureaction" /> <verifyInputField name="j_username" value="" /> <verifyInputField name="j_password" value="" /> <setInputField name="j_username" value="simon" /> <clickButton label="Login" /> <verifyText description="Check user logged in" text="Logged in as simon" /> </steps> </webtest> </target> </project>

Ref:

www.evolution.net

Page 31

Contents
Presentation Objectives Automated unit testing Continuous integration Project blogs Other best practices Summary

Ref:

www.evolution.net

Page 32

Automated unit testing summary
Easy to setup Easy to get to grips with Increases confidence that a solution/fixes/changes work Ensures a certain level of continuous quality assurance

Ref:

www.evolution.net

Page 33

Automated unit testing software
JUnit
– – – –

Open source Easy to install and configure Integrates with Ant for scripted builds Integrated with Eclipse allowing tests to be written and run very quickly http://www.junit.org

Ref:

www.evolution.net

Page 34

Continuous integration summary
Easy to setup Doesn’t require much processing power Doesn’t require a dedicated box Doesn’t require expensive software

Open source software used in MFE development environment Code not compiling Unit tests failing

Provides early warning signs to integration problems
– –

Helps developers integrate more smoothly Ensures a certain level of continuous quality assurance

Ref:

www.evolution.net

Page 35

Continuous integration software
CruiseControl
– – –

– – –

Open source Easy to install and configure Native integration with all leading/standard source code control interfaces Can publish build reports via e-mail, XML, HTML, blogs, etc Only performs builds when code in repository has changed http://cruisecontrol.sourceforge.net

Ref:

www.evolution.net

Page 36

Project blog summary
Also don’t require much processing power, a dedicated box or expensive software Provides a way to easily publish information to the project team
– –

Can be searched, archived and exported Easily distributed to extended project team

Team members can subscribe to the information they want to receive A useful feedback mechanism when combined with continuous integration

Ref:

www.evolution.net

Page 37

Project blog software
Pebble
– – – – – –

Open source Easy to install and configure Runs on most J2EE web/application servers (e.g. Tomcat) Flexible security roles Integrates with enterprise authentication mechanisms Supports standard interfaces such as Atom/RSS newsfeed formats and XML-RPC http://pebble.sourceforge.net

Ref:

www.evolution.net

Page 38

Questions?
simon.brown@evolution.net

Ref:

www.evolution.net

Page 39