| Upping the game - an introduction to software development process improvement |
|
|
|
| Wednesday, 03 March 2010 13:03 |
|
How can you improve, harmonize and automate your development process using tools like Maven, Hudson, and Nexus? This presentation is a high-level overview of Java software development process improvement, aimed at explaining the concepts behind optimizing the SLDC to management and product owners. You can also download the slides in PDF form. Trackback(0)
Comments (1)
![]() Write comment
|
|
I'd like to get some of the things you mentioned in this article up and running, but it takes time... Though when I get some, I would like to try setting up Hudson and FindBugs/Checkstyle, so we can at least get a very basic idea of what's going on with code quality.
Speaking of which, I note two extra things in Hudson, apart from FB and CS - PMD and CPD. A quick Google search suggests that PMD is something similar to FB/CS (pmd.sourceforge.net) and CPD is a 'Copy/Paste Detector'. Is that correct?
I've also tried Maven, and found that it's fairly nice, but there is one issue I have with it (and that my boss had with it):
It seems to potentially create a huge amount of projects. I mostly use Eclipse, and that doesn't have support for subprojects, so when I tried to convert an EAR-based project to Maven, I wound up with a huge mess of projects, and it just didn't really look good. Also, Maven didn't (this was a while ago, so things may have changed) seem to understand the concept of a 'light' WAR (I forget the actual term), where the dependencies specified by the EAR are not added to each WAR file, but held only in the root of EAR.
There's also a few other things, like how we could provide an unzip/build solution for Escrow packages with Maven (without requiring them to first set up a Maven repository, or possibly even install Maven).
Anyway, what was the utility you were using to check Code Coverage? Does that come with Hudson, or is it an extra tool?
Also, thanks for pointing out Sonar - another tool to investigate when I have the time.
My one criticism of this presentation would be that it seems to focus primarily on new projects - that is, adding Unit Tests is relatively easy if you're starting a new project and can write your code from the ground up to be testable. Existing Legacy Projects... well, they're not an awful lot of fun to test, especially a project as old as the one I'm working on.
'A little refactoring here will make everyones life easier' doesn't actually hold true when your severely risk-averse client demands an accounting of all changes made...
Having said that, progress is being made. We've moved from 'Dependencies in SVN' and 'one project to rule them all' to using Ivy (we were already using Ant). We're slowly getting rid of custom legacy code that has better open-source alternatives (e.g. moved from custom logging solution to Log4J, moving from custom Caching to Ehcache, moving from custom Threadpool usage to Quartz, etc), and slowly removing anti-patterns in the code (e.g. having ~50% of your classes be descended from your StringUtils class, which contains only static methods...).
I'm not really sure what my point is here... I guess I'm just a little bitter that I see all these things that would make my life so much easier, but just don't have the time to implement them (or to rewrite the application from scratch so that it would be possible to implement them).
Anyways, thanks for pointing out some new tools I can investigate when I have time (PMD/CPD/Sonar).
I've also played around a little with Hudson, and I quite like what I've seen so far - definitely something I need to look more into.
Just out of curiosity, would you say that it's worth setting up a CI server (like Hudson) even if all you are likely to be using it for is running things like PMD/FB/CS/etc.? I think it is, but I'm wondering what other people think.