<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Software Evolved &#187; reviews</title>
	<atom:link href="http://www.peterfranza.com/category/reviews/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.peterfranza.com</link>
	<description></description>
	<lastBuildDate>Wed, 29 Sep 2010 17:04:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Comparison of Continuous Integration Servers</title>
		<link>http://www.peterfranza.com/2008/09/26/comparison-of-continuous-integration-servers/</link>
		<comments>http://www.peterfranza.com/2008/09/26/comparison-of-continuous-integration-servers/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 20:11:02 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=35</guid>
		<description><![CDATA[A Short Background Continuous integration is a practice the grew out of the extreme programming community, and was written about by Martin Fowler and Kent Beck. Martin Fowler&#8217;s paper provides a very nice definition of the term Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each [...]]]></description>
			<content:encoded><![CDATA[<h2>A Short Background</h2>
<p>Continuous integration is a practice the grew out of the extreme programming community, and was written about by <a href="http://www.martinfowler.com/articles/continuousIntegration.html">Martin Fowler</a> and <a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0201616416">Kent Beck</a>.  Martin Fowler&#8217;s paper provides a very nice definition of the term</p>
<blockquote><p><em>Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily &#8211; leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. This article is a quick overview of Continuous Integration summarizing the technique and its current usage. </em></p></blockquote>
<p>When being used effectivly, the practice of continious integration provides feedback on the &#8216;health&#8217; of the software after every commit to the software repository allowing developers to identify and fix defects early. Since the time between the commit and the identification of a problem is so short, bugs are often simpiler as eassier to fix.</p>
<h2>Laying the out the guidelines</h2>
<p>There are many continuous integration servers out there and they each have their own pros and cons, but just to shrink the playing field a little bit I&#8217;m going to layout some basic criteria.  So I am looking for the following in a continuous server:</p>
<ul>
<li>Free, I know that there are numerous COTS solutions, but free should fit into everyone&#8217;s budget. Also with as many good free solutions available with you really don&#8217;t need a COTS product.</li>
<li>Should work using existing projects build files</li>
<li>Should work with a popular SCM system, I&#8217;m looking for at least SVN, CVS</li>
<li>Should have an adequate selection of notification systems</li>
</ul>
<p>I know that these are pretty vague but these criteria do eliminate many solutions from the playing field, and in my opinion the solutions that are left are going to be the more mainstream and stable solutions.</p>
<p>So here we go, in no particular order:</p>
<h2><a href="hhttp://cruisecontrol.sourceforge.net/index.html"><img class="size-medium wp-image-42 alignright" title="CruiseControl Logo" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol.png" alt="" width="195" height="42" /></a></h2>
<h2>CruiseControl</h2>
<p>CruiseControl is a product that I&#8217;ve had a love/hate relationship with for many years, while it does its job and possesses all the fundamental qualities that you would look for in an it is rather cumbersome to configure, and not the most refined thing to look at.  That being said it is a work horse and it does get the job done.</p>
<h4>Installation</h4>
<p>The installation of cruisecontrol is pretty straight forward and about on par for what you might expect for any opensource application.  The quickstart from their website reads as follows:</p>
<p style="padding-left: 60px;"><em>Unzip the release to a directory, like </em><code><em>~/cc-sanbox/cruisecontrol-bin-2.7.3</em></code></p>
<p style="padding-left: 60px;"><code><span style="font-family: 'Lucida Grande';"><em>Check that the scripts </em><code><em>cruisecontrol-bin-2.7.3/cruisecontrol.sh</em></code><em> and </em><code><em>cruisecontrol-bin-2.7.3/apache-ant-1.7.0/bin/ant</em></code><em> have execution permission.</em></span></code></p>
<p style="padding-left: 60px;"><code><span style="font-family: 'Lucida Grande';"><em>Run </em><code><em>~/cc-sanbox/cruisecontrol-bin-2.7.3/cruisecontrol.sh</em></code><em> from the newly unzipped directory</em></span></code></p>
<p style="padding-left: 60px;">
<p>In all honesty that is a pretty accurate assessment of the level of effort it takes to install the software and start the application.</p>
<h4>Configuration</h4>
<p>All the configuration for CruiseControl is done in with XML files, and there is no good utility for helping you setup a project other than the <a href="http://cruisecontrol.sourceforge.net/main/configxml.html">configuration reference</a>, a ton of elbow grease, and maybe a few cold ones.  I think that if you take a look at the configuration reference, it is pretty daunting at first glance, and second glance &#8230; right up to about the 100th or so.  It is just a lot of information to take in, and while it is very well documented and makes perfect sense once you get the hang of it, it will take a bit of time and experimentation until you&#8217;ve hit that balance of functionality that you were hoping to achieve from the system.</p>
<h4>User Interface</h4>
<p>There are actually two user interfaces that come with CruiseControl.</p>
<p>The standard interface is kinda of a web 1.0 older looking interface, although it is powered off of XSLT stylesheets, and serverl other new(er) technologies, it just doesn&#8217;t bring in the easy to use kind of appeal to the product.</p>
<table border="0" width="100%">
<tbody>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_statuspage.jpg" rel="lightbox[35]"><img class="size-medium wp-image-45 alignleft" style="margin: 0px 15px;" title="cruisecontrol_statuspage" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_statuspage-300x240.jpg" alt="" width="300" height="240" /></a></td>
<td valign="top">This is the main status page, it is a fairly simple overview of all the projects that the server is tracking, the status of the build and the last time a build was run.                 </p>
<p>It provides a link into the project so you can investigate any failures or access any artifacts produced by that build.</td>
</tr>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_buildresultpage.jpg" rel="lightbox[35]"><img class="alignleft size-medium wp-image-47" style="margin: 0px 15px;" title="cruisecontrol_buildresultpage" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_buildresultpage-300x235.jpg" alt="" width="300" height="235" /></a></td>
<td valign="top">This screen gives you a detailed view of a particular project. On the left you can pick which build you want to look at so you can compare the current build to a past build.                 </p>
<p>This view is customizable if you have the stomach for editing the stylesheets, and you can add support for the output of any other build tool that can produce xml output like findbugs, checkstyle, pmd etc..</td>
</tr>
</tbody>
</table>
<p>The dashboard interface is a bit better, it uses AJAX and provides a more modern feel.</p>
<table border="0" width="100%">
<tbody>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_newstatus.jpg" rel="lightbox[35]"><img class="alignnone size-medium wp-image-50" style="margin-left: 15px; margin-right: 15px;" title="cruisecontrol_newstatus" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_newstatus-300x180.jpg" alt="" width="300" height="180" /></a></td>
<td valign="top">Like above this view gives you an overall sense of how your projects are doing, this view with the color-coded boxes allows you to keep an eye on the status of many projects and mousing over any box will give you more information like project name and last build time.</td>
</tr>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_newbuildresultpage.jpg" rel="lightbox[35]"><img class="alignnone size-medium wp-image-51" style="margin-left: 15px; margin-right: 15px;" title="cruisecontrol_newbuildresultpage" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cruisecontrol_newbuildresultpage-300x254.jpg" alt="" width="300" height="254" /></a></td>
<td valign="top">Much like the screen in the old user interface, this allows you to see information like which tests are failing, what the changeset was that triggered the build.  And you can navigate to previous builds.</td>
</tr>
</tbody>
</table>
<p>While I do consider the dashboard interface an improvement over the standard interface, it still lacks a polished quality.  But that aside it does allow you to do everything and anything you could want to do with it, you just might have to go into the source and do some tweeking.</p>
<h4>Overall</h4>
<p>While CruiseControl probably does everything that you would like it to do, its a bit hard on the eyes, and I talked with many users of it and they have all expressed the same feelings of mild irritation when it comes to configuring the server.  All that being said it is the original so it gets points for that.</p>
<h2>LuntBuild</h2>
<h4>Installation</h4>
<p>Installation of LuntBuild is pretty straight forward, it has the option of an installation GUI.</p>
<pre class="programlisting" style="padding-left: 60px;"><em>Download Luntbuild installer from Luntbuild Sourceforge site, or from Luntbuid Javaforge  site
</em><em>Run command <span class="emphasis"><em>java -jar luntbuild-xxx-installer.jar
</em></span>cd <luntbuild-install-dir>
java -jar luntbuild-standalone.jar localhost 8888
</luntbuild-install-dir></em></pre>
<p>Now if you don&#8217;t mind it using teh HSQL DB embedded database, then you&#8217;re done, if you want it to use another type of database then there are instructions to set that feature up <a href="http://luntbuild.javaforge.com/doc/installguide/installguide.html#database">here</a>.</p>
<h4>Configuration</h4>
<p>All the LuntBuild configuration is done within the web interface, select the projects tab and click the <a href="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_newprojectico.jpg" rel="lightbox[35]"><img class="alignnone size-medium wp-image-56" title="luntbuild_newprojectico" src="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_newprojectico.jpg" alt="" width="18" height="18" /></a>(new project) icon.</p>
<p><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_createproject.jpg" rel="lightbox[35]"><img class="aligncenter size-medium wp-image-57" title="luntbuild_createproject" src="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_createproject-300x117.jpg" alt="" width="300" height="117" /></a></p>
<p>You can then start customizing the fields to your hearts desire. However most all of the fields are just text input boxes and its up to you to select the correct thing.</p>
<h4>User Interface</h4>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_status.jpg" rel="lightbox[35]"><img class="alignnone size-medium wp-image-70" title="luntbuild_status" src="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_status-300x173.jpg" alt="" width="300" height="173" /></a></td>
<td valign="top">The main status view shows you the status of each project&#8217;s last build, this view also provides links into the project configuration and into the details of the last build.</td>
</tr>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_projectstatus.jpg" rel="lightbox[35]"><img class="alignnone size-medium wp-image-71" title="luntbuild_projectstatus" src="http://www.peterfranza.com/wp-content/uploads/2008/09/luntbuild_projectstatus-300x173.jpg" alt="" width="300" height="173" /></a></td>
<td valign="top">The build status view, shows you all the basic information about the status of the build.  Not to many bells and whistles here just a basic view.</td>
</tr>
</tbody>
</table>
<h4>Overall</h4>
<p>LuntBuild seems that it will get the job done, but it isn&#8217;t going to win any awards doing it, it seems to be a product that is just kind of middle of the road &#8216;eh&#8217;</p>
<h2>Continuum<a href="http://www.peterfranza.com/wp-content/uploads/2008/09/continuum_logo.gif" rel="lightbox[35]"><img class="alignright size-medium wp-image-75" title="continuum_logo" src="http://www.peterfranza.com/wp-content/uploads/2008/09/continuum_logo.gif" alt="" width="212" height="66" /></a></h2>
<p>Continuum is a lightweight brought to you by the team who developed Maven. It is has a fairly simple installation and a novice amount initial configuration.</p>
<h4>Installation</h4>
<p>The installation for continuum is pretty straight forward</p>
<ul>
<li>Download the standalone version from the  Download page</li>
<li>Extract the file</li>
<li>Set a JAVA_HOME environment variable which use a jdk >= 1.5</li>
<li>configure JNDI resources (such as SMTP server, database, etc..)</li>
</ul>
<p>It is actually this last step that seems the most complicated, because it involves mucking around in the jetty  XML files to define the resources.</p>
<h4>Configuration</h4>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/cont_add-ant-project.png" rel="lightbox[35]"><img class="alignleft size-medium wp-image-219" title="cont_add-ant-project" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cont_add-ant-project-300x195.png" alt="" width="300" height="195" /></a></td>
<td valign="top">Screen that allows you to configure a new Ant project</td>
</tr>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/cont_project-view-bottom.png" rel="lightbox[35]"><img class="alignleft size-medium wp-image-220" title="cont_project-view-bottom" src="http://www.peterfranza.com/wp-content/uploads/2008/09/cont_project-view-bottom-300x162.png" alt="" width="300" height="162" /></a></td>
<td valign="top">Screen that allows you to edit a project</td>
</tr>
</tbody>
</table>
<h4>User Interface</h4>
<p>For my tastes the Continuum interface is a little daunting looking, it is defiantly utilitarian.  But I don&#8217;t know that it is particularly user friendly.  I prefer interfaces that use constrained input fields that are harder for new users to screw up.</p>
<h4>Overall</h4>
<p>While Continuum is a full featured server, I&#8217;m not sure that it would be very well used, the harsh nature of the user interface doesn&#8217;t really help users want to use it.  I believe that Continuum would likely be deployed and then quickly fall into disrepair.</p>
<h2>Hudson</h2>
<h4>Installation</h4>
<p>You will never find a product that is as easy to install as Hudson. Just download the file and run</p>
<p><code lang="bash">java -jar hudson.war</code></p>
<p>You will be off and running, no messing around in configuration files or anything.  Now if you really want to mess with the configuration files (and you really don&#8217;t have to, because everything can be done in the UI) they are available and you can hack away to your hearts content.</p>
<h4>Configuration</h4>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/systemconfig.png" rel="lightbox[35]"><img class="alignleft size-medium wp-image-223" title="systemconfig" src="http://www.peterfranza.com/wp-content/uploads/2008/09/systemconfig-300x106.png" alt="" width="300" height="106" /></a></td>
<td valign="top">This is just an example of one of the many screen you find to help you configure parts of the system, everything is in small manageable pieces and almost all (if not all) have examples and context help to show you what goes where,</td>
</tr>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/hudsonplugin.jpg" rel="lightbox[35]"><img class="alignnone size-medium wp-image-224" title="hudsonplugin" src="http://www.peterfranza.com/wp-content/uploads/2008/09/hudsonplugin-300x270.jpg" alt="" width="300" height="270" /></a></td>
<td valign="top">This is a view of available plugins that you can select and just press install and hudson will go out and upgrade itself, you can&#8217;t ask for more than that.</td>
</tr>
</tbody>
</table>
<h4>User Interface</h4>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/hudson_main.png" rel="lightbox[35]"><img class="alignleft size-medium wp-image-225" title="hudson_main" src="http://www.peterfranza.com/wp-content/uploads/2008/09/hudson_main-300x232.png" alt="" width="300" height="232" /></a></td>
<td valign="top">This is the main screen, it is simple and elegant and it tells you everything you want to know about all the projects as well as what the server is working on building now, and what is in the build queue.</td>
</tr>
<tr>
<td><a href="http://www.peterfranza.com/wp-content/uploads/2008/09/hudson_proj.png" rel="lightbox[35]"><img class="alignleft size-medium wp-image-226" title="hudson_proj" src="http://www.peterfranza.com/wp-content/uploads/2008/09/hudson_proj-300x207.png" alt="" width="300" height="207" /></a></td>
<td valign="top">This is a typical screen that displays the project summary, you can see that the it is giving you the trend for unit test failures in the form of a graph which I love. Most of the project detail screen are similar to this one, favoring pictures over text so you can get all the information you need at a quick glance.</td>
</tr>
</tbody>
</table>
<h4>Overall</h4>
<p>I love this product, installation is a snap and configuration is extremely simple but the most powerful thing about hudson is its plugin API it has allowed many developers (including your&#8217;s truly) to contribute  to the project creating an impressive wealth of functionality. </p>
<p>And I don&#8217;t think that I&#8217;ve found a single thing that the other projects can do that hudson doesn&#8217;t do as well if not better.</p>
<h2>Conclusions</h2>
<p>Of course it depends on what you are looking for, cruisecontrol is going to be a bit more work up front but once you get it going, it will serve you well as long as you don&#8217;t mind its old school user interface.  Whereas hudson will be up and running within minutes, and it boasts a very modern very easy user interface.</p>
<p>I&#8217;m not sure that I would waste my time with either LuntBuild or Continuum, they are both solid projects but neither presents a very compelling reason to choose them over CrusieControl or Hudson.</p>
<p>Since I believe that user interface is a critical piece of a continuous integration server I&#8217;m gonna give this one to Hudson.  Since basically a CI server is something who&#8217;s whole purpose for existence is to nag you when you&#8217;ve done something wrong, and then help you narrow down what you did and when you did it.  If you don&#8217;t have a descent interface then you developers will slowly start to ignore its feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2008/09/26/comparison-of-continuous-integration-servers/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>AccuRev: Considered Harmful</title>
		<link>http://www.peterfranza.com/2008/09/11/accurev/</link>
		<comments>http://www.peterfranza.com/2008/09/11/accurev/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 00:39:46 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[reviews]]></category>
		<category><![CDATA[accurev]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=29</guid>
		<description><![CDATA[OK maybe that&#8217;s over stating it a little bit, its not quite as bad as &#8216;goto&#8217;. I&#8217;ve now been using AccuRev for about 6 months now, and I it seems that I am having to adjust my process to suit some of the idiosyncrasies of the tools. Now I&#8217;m not going to say that its [...]]]></description>
			<content:encoded><![CDATA[<p>OK maybe that&#8217;s over stating it a little bit, its not quite as bad as &#8216;goto&#8217;.</p>
<p>I&#8217;ve now been using <a href="http://www.accurev.com/">AccuRev</a> for about 6 months now, and I it seems that I am having to adjust my process to suit some of the idiosyncrasies of the  tools. Now I&#8217;m not going to say that its a bad tool, because as with everything in computer science I&#8217;m certain that there was a specific use case that was identified that AccuRev fills perfectly, but I don&#8217;t have that use-case.</p>
<p>My primary gripe is the inability to  update my local workspace while I have a dirty workspace.  Now while I understand the rational for this, it irritates me to no end.  When my team is working toward a release we are all working very closely and when somebody else completes a feature that I would find useful I would like to be able to checkout their changes without having to commit my changes.  The AccuRev team seems to think that taking a course view of  solves many of the SCM problems, and indeed it probably does .. for the tool designers, but what about the tool users?</p>
<p>In any decent software project, the software will naturally fallout into different modules, and I find it extremely useful to sometimes update a piece of the tree without updating other pieces.  AccuRev doesn&#8217;t allow this at all, it forces you to update everything or nothing.  This is the fundamental cornerstone of my problem with this product.  With any tool I expect to have some level of choice in how I will use that tool, and I fully understand that I am accepting the responsibility to utilize that tool properly else I only have myself to blame when damage is caused. In AccuRev everything is very one-dimensional and doesn&#8217;t allow me to work the way I want to work, and really who is supposed to be in control here, the human or the tool?  <em>(hint if your tool is </em>AccuRev <em>then you are not in charge) </em></p>
<p>Then there is this business with server workspaces, in AccuRev there are two levels for checking in a file, there is a &#8216;keep&#8217;  which stores the change in your private workspace on the server and then there is a &#8216;promote&#8217; which puts the revision in the public stream to be shared with everybody else. The main problem with the approach is mostly psychological, having these two levels actually lengthens development iterations because people can check into their private workspaces for the duration of the development effort (I&#8217;ve seen weeks and months) and then only promote and merge into the public stream when they are completely finished, its very <a href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall</a> and not really helping anybody because it lengthens the integration and doesn&#8217;t provide the rest of your team with the benefits of your work until its too late.  Now I will admit that this is a process problem, but it is something to consider because if you are working with inexperienced developers this might go unnoticed and then everybody will be in for a surprise when a very large merge happens and nothing works anymore.</p>
<p>At the end of the day AccuRev is a inflexible tool that comes with a pretty hefty price tag.  I would rather use a free tool like <a href="http://subversion.tigris.org/">subversion</a> any day. While I&#8217;m certain that most of my complaints are petty, when you use a tool everyday its the little things that start to eat away at you. While I&#8217;m sure some of my frustrations are my own fault, I&#8217;ve tried to get to the bottom of all of them and have found no research to make me think otherwise.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2008/09/11/accurev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

