<?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>Soapbox Rants and Raves &#187; Software Development</title>
	<atom:link href="http://www.beilers.com/category/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.beilers.com</link>
	<description>Crazy Thoughts on Software Development and Life in General</description>
	<lastBuildDate>Tue, 20 Jul 2010 12:11:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Eclipse Project Configurations &#8211;  Shared or Personal?</title>
		<link>http://www.beilers.com/2010/07/eclipse-project-configurations-shared-or-personal/</link>
		<comments>http://www.beilers.com/2010/07/eclipse-project-configurations-shared-or-personal/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 04:01:07 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=755</guid>
		<description><![CDATA[To be honest, this was not a topic I was actually planning to write about. However, because I received a couple of interesting comments on a recent blog entry, Unfriendly Developer Practices, I thought I should clarify my position. Question of the Day Should your IDE (Eclipse) configuration files be checked in as part of [...]]]></description>
			<content:encoded><![CDATA[<p>To be honest, this was not a topic I was actually planning to write about. However, because I received a couple of interesting comments on a recent blog entry, <a href="http://www.beilers.com/2010/07/unfriendly-developer-pactices-adding-uncessary-environmental-complexities/" target="_blank">Unfriendly Developer Practices</a>, I thought I should clarify my position.</p>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr align="center" bgcolor="lightgrey">
<td><strong>Question of the Day</strong></td>
</tr>
<tr align="center">
<td>Should your IDE (Eclipse) configuration files be checked in as part of your project?</td>
</tr>
</tbody>
</table>
<p>One of the comments suggested that there should be should be <strong>no</strong> dependency between the build system and the IDE. Another person suggested the disconnect between the IDE and the build system creates a convenient place for dependency inconsistencies to develop unchecked.</p>
<p>I completely agree with <em>both </em>of those statements and have seen <em>both </em>problems manifested several times. However, there are two simple tools can make this a non-issue: Continuous Integration and Dependency Management.</p>
<ul>
<li><a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">Continuous Integration</a> is obvious; if that <em>lazy </em>developer forgets to check in a dependency or update the build scripts, the build fails. Not perfect, but the problem is immediately detected and the relevant people are notified of the situation. The problem can be resolved within minutes.</li>
<li>The <a href="http://en.wikipedia.org/wiki/Silver_bullet#Idiomatic_usage" target="_blank">Silver Bullet</a> for me, was the addition of the <a href="http://ant.apache.org/ivy/" target="_blank">Ivy Dependency Management</a> tool into our build process. Because the build system and IDE share the same dependency configuration, the project&#8217;s dependencies were now managed in single place. Using the <a href="http://ant.apache.org/ivy/ivyde/" target="_blank">IvyDE</a> plug-in, Eclipse simply worked, with no additional configuration. Using the externalized dependencies and basic Ant targets, the project could create a robust, change resilient build system. To achieve this level of robustness, I took advantage of the <a href="http://ant.apache.org/ivy/history/2.0.0/use/postresolvetask.html" target="_blank">Ivy post resolve tasks</a>. It was not until I discovered how easily they could isolate the build scripts from the actual dependencies, did it all come together. The real beauty of this approach is that no files (dependencies) are directly referenced. The post resolve tasks create variables which contain all of the <em>appropriate</em> files; the build script can then treat these variables generically, without concern. Nice and clean!</li>
</ul>
<p>It was an unstated, fundamental requirement to have no &#8220;direct&#8221; dependency on Eclipse; such that we could all revert back to the wonderful world of Emacs tomorrow, should the need arise. I don&#8217;t think <em>which </em>IDE a project chooses to use, is really that important. I am apparently an Eclipse snob; but all I <em>really </em>care about is having Emacs key-bindings! If a majority of the team works on the same platform, I do believe there is <strong>real value</strong> around this <strong>continuity</strong>; that just happens to be Eclipse for me!</p>
<p>I have several other reasons for checking in configuration files:</p>
<ul>
<li>It quickly highlights wrong doing! If a developer checks in something specific to their environment, they will break everyone on the team. My goal is for complete project neutrality: check out on any machine, in any directory, and the project is guaranteed to build and deploy.  Additionally, check the project out in Eclipse and it should build with no issues, within minutes.</li>
<li>Not all developer&#8217;s actually care about tools. Some developers simply want their environment setup for them. They have no desire to figure out how Eclipse formats code when you save a file or how to configure and run quality checks after each build; implementing business solutions is their primary concern.</li>
<li>Enhanced team productivity. If everyone&#8217;s world (environment) is the same, it is so much easier to spin up a new developer or help a teammate with a problem. Would you really want each developer to go through the discovery process of setting up the project? In the big picture, isn&#8217;t this really just wasted time?</li>
<li>Helping to ensuring quality coding practices and standards. We also check in the Checkstyle, PMD, and Findbugs configuration and rule sets. Taking advantage of the sharable configuration files, both the Eclipse plug-ins and Ant tasks work from the same rule sets, ensuring complete consistency across the team, no matter where the rules are executed.</li>
</ul>
<p>I appreciate all of the recent comments; thanks for taking the time to reply. They enable me think about and reconsider the decisions I have made, giving me yet another opportunity to learn from my mistakes!  As far as Eclipse configuration files are concerned, I strongly believe there is far <strong>more project value</strong> gained by including them, as compared to <em>requiring </em>each developer manage their own environment. One final note, I have no issue with developers <em>wanting </em>to manage their own world, more power to them!  I would hope that these efforts would be to make the overall, shared environment a little better; after all, everyone should be contributing to all aspects of the project! The real point is that everyone <em>should not be required</em> to configure a project, unless they really want or need to.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/07/eclipse-project-configurations-shared-or-personal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Self-destructive Tendencies and Root Cause Analysis</title>
		<link>http://www.beilers.com/2010/07/self-destructive-tendencies-and-root-cause-analysis/</link>
		<comments>http://www.beilers.com/2010/07/self-destructive-tendencies-and-root-cause-analysis/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 04:01:41 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=750</guid>
		<description><![CDATA[One of my favor blogs, 37Signals, had an interesting post. It quoted Ed Catmull, President of Pixar, on the topic of creative vision and leadership. The full interview can be read here; it is actually rather interesting. What caught my attention was the quote concerning self-destructive tendencies, &#8220;if everyone is trying to prevent error, it [...]]]></description>
			<content:encoded><![CDATA[<p>One of my favor blogs, <a href="http://37signals.com/svn" target="_blank">37Signals</a>, had an interesting post. It quoted <a href="http://37signals.com/svn/posts/2440-we-all-know-the-saying-its-better-to-ask-f" target="_blank">Ed Catmull, President of Pixar</a>, on the topic of creative vision and leadership. The full interview can be <a href="http://www.scottberkun.com/blog/2010/inside-pixars-leadership/" target="_blank">read here</a>; it is actually rather interesting. What caught my attention was the quote concerning self-destructive tendencies, &#8220;<em>if everyone is trying to prevent error, it screws things up. It’s better<br />
to fix problems than to prevent them</em>&#8220;.</p>
<p><img style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/07/Why.png" alt="" width="152" height="147" />Unfortunately, it seems that in our current economic environment, it is more important to prevent mistakes rather than take action to address the underlying problems. This strategy can even be taken to the extreme, putting so many gates into the process, that it actually makes it impossible to move forward. It becomes difficult to fix existing issues and nearly impossible to development new functionality. The number of signatures and the amount of evidence required to prevent errors has become more of an accountability tool, rather than a quality tool.</p>
<p>Writing this post made me think of another technique that we always seem to overlook, the &#8220;<a href="http://www.google.com/search?q=5+whys&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a" target="_blank">5 Whys</a>&#8220;. If you are like me and have not looked at this lately, it is perfect time for a refresher! Just click the link!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/07/self-destructive-tendencies-and-root-cause-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unfriendly Developer Pactices &#8211; Adding uncessary environmental complexities</title>
		<link>http://www.beilers.com/2010/07/unfriendly-developer-pactices-adding-uncessary-environmental-complexities/</link>
		<comments>http://www.beilers.com/2010/07/unfriendly-developer-pactices-adding-uncessary-environmental-complexities/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 19:10:51 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=744</guid>
		<description><![CDATA[A couple of years ago, I began focusing on construction and deployment complexities. I had just joined a new team and began looking for the commonalities between their architectures and environments. Needless to say, they were all different. The most disturbing issue was the amount of effort required for a new developer to start working [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of years ago, I began focusing on construction and deployment complexities. I had just joined a new team and began looking for the commonalities between their architectures and environments. Needless to say, they were all different. The most disturbing issue was the amount of effort required for a new developer to start working with an application. If there was any project documentation, it was probably out of date; resulting in hours or even days of trial and error to actually build and deploy the system. In this post, I&#8217;m talking about is building and deploying J2EE applications.  The following list represents the top developer <i>unfriendly</i> practices I have observed.</p>
<table style="border-collapse: collapse;" align="center" border="1" width="90%">
<tbody>
<tr align="center" bgcolor="lightgrey">
<td><b>Developer Unfriendly Practices</b></td>
</tr>
<tr>
<td>
<ol>
<li><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/07/black-box.png" />Without first running a <i>setup </i>task in <a target="_blank" href="http://ant.apache.org/">Ant</a>, the project does not build in <a target="_blank" href="http://www.eclipse.org/">Eclipse</a>.</li>
<li>The Eclipse .project and .classpath files are not checked into version control system with the source.</li>
<li>The project&#8217;s Ant scripts are generic and non-deterministic; they have to be edited for your individual environment before building the project. </li>
<li>The project requires specific libraries or packages to be installed on your machine before it can be built.</li>
<li>Eclipse project not configured as an <a target="_blank" href="http://www.eclipse.org/webtools/">WTP</a> project.</li>
<li>Minimal <a target="_blank" href="http://www.junit.org/">jUnits</a> and no <a target="_blank" href="http://martinfowler.com/articles/continuousIntegration.html">continuous integration</a>.</li>
<li><a target="_blank" href="http://docs.sun.com/source/819-0215/containers.html">J2EE container</a> dependencies built into the project.</li>
</ol>
</td>
</tr>
</tbody>
</table>
<p>After experiencing these challenges, I began a quest of environmental simplification. I understand there are numerous reasons why projects end up with these unfriendly  characteristics,&nbsp; but leaving them unaddressed was just not in my character! I made it my personal mission to ensure that each project that I worked on, I would try to leave it in a <i>little </i>better shape than when I arrived. This is a never ending activity; I hope that those that come after me will have a similar philosophy and continue my quest. It is amazing how easy and fast an application can atrophy, eliminating all of the positive changes that had been previously applied. To keep things simple, I came up with following three project requirements. I try to weave some aspect of them into the development process and architecture of each project that I work on.</p>
<table style="border-collapse: collapse;" align="center" border="1" width="60%">
<tbody>
<tr align="center" bgcolor="lightgrey">
<td><b>Project Principles</b></td>
</tr>
<tr>
<td><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/07/ruler.png" />
<ol>
<li>Self-Containment, No External Configuration.</li>
<li>Environmental Awareness</li>
<li>Change Resilient</li>
</ol>
</td>
</tr>
</tbody>
</table>
<p>I hope that most of these principles seem like common sense and are nothing new. Much like many of the <a target="_blank" href="http://martinfowler.com/bliki/PrinciplesOfXP.html">XP principals</a>, they are <i>not </i>new or revolutionary, just good reminders of often overlooked practices. I will try to elaborate on each principal in a future post, hopefully, in the near future!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/07/unfriendly-developer-pactices-adding-uncessary-environmental-complexities/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ant 1.8, Reusable XML Scriptlets, and Ivy for Self-Containment</title>
		<link>http://www.beilers.com/2010/07/ant-1-8-and-reusable-xml-scriptlets-and-self-containment/</link>
		<comments>http://www.beilers.com/2010/07/ant-1-8-and-reusable-xml-scriptlets-and-self-containment/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 13:33:54 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=729</guid>
		<description><![CDATA[I started reading about EasyAnt sometime ago on the Ivy developer forums. It was a very interesting concept, storing reusable Ant targets in your Ivy Repository and pulling them into projects at build time. Ivy works great for jar files, so why not Ant build scripts?  I have a set of Ant scripts in my [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/07/toolbox.png" alt="" />I started reading about <a href="http://www.easyant.org/" target="_blank">EasyAnt</a> sometime ago on the Ivy developer forums. It was a very interesting concept, storing reusable Ant targets in your Ivy Repository and pulling them into projects at build time. Ivy works great for jar files, so why not Ant build scripts?  I have a set of Ant scripts in my toolbox that seem to get copied from project to project; it bothers me every time I copy them! We gave EasyAnt a quick look, but it had one show stopper; it required every developer and builder to have EasyAnt installed (rather than just Ant). This is a little thing, but when you are working with dozens of projects and hundreds of developers, it seemed like too much of a hurdle.  I wanted Ant to be the only installation requirement and be &#8220;self contained&#8221;. Just type &#8220;ant&#8230;&#8221; Nice and simple.</p>
<p>I started addressing the problem my making templates out of my scripts and placing them into a Subversion repository. They could easily be included into a project using the Ant &lt;get&gt; task. A little ugly, but it worked well enough. It did required us to land the XML files in the project directory, such that they could be &#8220;imported&#8221; into the running build.  Once again, not a problem if you remember to use SVN ignore on the .ant directory; we might have been able to put them in /tmp, but never tried it.</p>
<pre class="brush: xml;">
&lt;property name=&quot;ant.xml.location&quot; value=&quot;http://svn:1234/Ivy/Ant/Common/trunk/main/1.0/xml&quot; /&gt;
&lt;mkdir dir=&quot;.ant&quot; /&gt;
&lt;get src=&quot;${ant.xml.location}/ant.ivy.xml&quot; dest=&quot;${basedir}/.ant/ant.ivy.xml&quot; usetimestamp=&quot;true&quot; /&gt;
&lt;get src=&quot;${ant.xml.location}/ant.checkstyle.xml&quot; dest=&quot;${basedir}/.ant/ant.checkstyle.xml&quot; usetimestamp=&quot;true&quot; /&gt;

&lt;import file=&quot;.ant/ant.ivy.xml&quot; /&gt;
&lt;import file=&quot;.ant/ant.checkstyle.xml&quot; /&gt;
</pre>
<p>With Ant 1.8, you can actually accomplish this in a much cleaner method. Look at the <a href="http://ant.apache.org/manual/Tasks/import.html" target="_blank">import task</a> for some quick examples. Our first test was a very simple implementation, but worked like a champ.</p>
<p>I personally like to break my Ant scripts into multiple files, each with it own purpose. Some of my coworkers hate this approach and would prefer a single XML file. In the long run, the multi-file approach seems easier to support, especially when you factor in multiple maintainers. You would never put all of your Java code in a single class, why would you put all of your XML in a single file?  I will ultimately create a single file to import; it will import all of the individual XML files. This should make the consumers of the templates a little happier!</p>
<pre class="brush: xml;">
&lt;property name=&quot;ant.xml.location&quot; value=&quot;http://svn:1234/Ivy/Ant/Common/trunk/main/1.0/xml&quot; /&gt;
&lt;import&gt;
       &lt;url url=&quot;${ant.xml.location}/ant.ivy.xml&quot; /&gt;
       &lt;url url=&quot;${ant.xml.location}/ant.checkstyle.xml&quot; /&gt;
       &lt;url url=&quot;${ant.xml.location}/ant.pmd.xml&quot; /&gt;
       &lt;url url=&quot;${ant.xml.location}/ant.clover.xml&quot; /&gt;
       &lt;url url=&quot;${ant.xml.location}/ant.findbugs.xml&quot; /&gt;
       &lt;url url=&quot;${ant.xml.location}/ant.testability.xml&quot; /&gt;
&lt;/import&gt;
</pre>
<p>I think the <a href="http://ant.apache.org/manual/Types/resources.html#javaresource" target="_blank">javaresource</a> approach would be the perfect way to solve my problem. Unfortunately, I could not find any way to combine a remote URL with a classpath attribute. It is a neat little trick to remember, maybe this feature could be added to the next version of Ant.</p>
<pre class="brush: xml;">
&lt;import&gt;
    &lt;javaresource name=&quot;common/targets.xml&quot;&gt;
      &lt;classpath location=&quot;common.jar&quot;&gt;
&lt;!--  &lt;url url=&quot;http://somewhere/common.jar/&gt; --&gt;
    &lt;/classpath&gt;
  &lt;/javaresource&gt;
&lt;/import&gt;
</pre>
<p>One final word about completeness. My personal goal is to make the build system completely self-contained, meaning no external dependencies (outside of Ivy), no custom Ant installations, no Ant-lib requirements, or any manual configuration. Ideally, a developer should be able to check out the project from the version control system and get to work. It should automatically build and execute from Eclipse, and as long as Ant is installed, the developer should just be able to type Ant &lt;target&gt; to accomplish where ever is required.</p>
<p>I have been changing all of my templates to make use of the ivy:cachepath and ivy:cachefileset tasks. In prior Ant implementations, I used Ivy <em>retrieve</em> to access all of the dependencies; my new goal is to only use files from the Ivy cache. Additionally, I think the Ant templates should do their own Ivy dependency management. Now applications teams only need to worry about their own dependencies, not what is required by the environment or build system. The follow example demonstrates how to add Clover to the build process, and ensure that the Clover license is added to your class path, all without really knowing where the files are&#8230; Pretty cool!</p>
<pre class="brush: xml;">
&lt;ivy:cachepath pathid=&quot;classpath.CLOVER&quot; conf=&quot;runtime&quot; organisation=&quot;atlassian&quot; module=&quot;clover&quot; revision=&quot;3.0.2&quot; inline=&quot;true&quot; /&gt;
&lt;ivy:cachefileset setid=&quot;fileset.CLOVER&quot; conf=&quot;license&quot; organisation=&quot;atlassian&quot; module=&quot;clover&quot; revision=&quot;3.0.2&quot; inline=&quot;true&quot; /&gt;
&lt;pathconvert pathsep=&quot;${line.separator}-&gt; &quot; property=&quot;clover.license.path&quot; refid=&quot;fileset.CLOVER&quot; setonempty=&quot;&quot; /&gt;
&lt;dirname file=&quot;${clover.license.path}&quot; property=&quot;clover.license.dir&quot; /&gt;

&lt;taskdef resource=&quot;cloverlib.xml&quot;&gt;
     &lt;classpath&gt;
          &lt;path refid=&quot;classpath.CLOVER&quot; /&gt;
          &lt;path location=&quot;${clover.license.dir}&quot; /&gt;
      &lt;/classpath&gt;
&lt;/taskdef&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/07/ant-1-8-and-reusable-xml-scriptlets-and-self-containment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eclipse 3.6 Helios: WTP + Ivy and Deployment Assembly&#8230; Working reliably at last?</title>
		<link>http://www.beilers.com/2010/07/eclipse-3-6-helios-wtp-ivy-and-deployment-assembly-working-reliably-at-last/</link>
		<comments>http://www.beilers.com/2010/07/eclipse-3-6-helios-wtp-ivy-and-deployment-assembly-working-reliably-at-last/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 05:01:33 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=711</guid>
		<description><![CDATA[I have a love/hate relationship with the IvyDE plug-in when it comes to WTP project types. I have literally wasted hours of time trying to get IvyDE to publish into my web application. It is very strange, no pattern at all; it works fine for days at a time and then decides to stop working&#8230; [...]]]></description>
			<content:encoded><![CDATA[<div><img style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/06/ivydelogo.png" alt="" width="89" height="62" />I have a love/hate relationship with the <a href="http://ant.apache.org/ivy/ivyde/index.html" target="_blank">IvyDE</a> plug-in when it comes to <a href="http://www.eclipse.org/webtools/" target="_blank">WTP</a> project types. I have literally wasted hours of time trying to get IvyDE to publish into my web application. It is very strange, no pattern at all; it works fine for days at a time and then decides to stop working&#8230; I don&#8217;t believe that the team has actually developed a &#8220;reproducible pattern&#8221; of forcing WTP to publish the Ivy dependencies; it is a continual &#8220;trial and error&#8221; of the following steps, clean the project, Ivy resolve, clean Tomcat, un-deploy the application, redeploy the application; one of these will eventually cause WTP to push the dependencies over. Can you say, frustrating?<img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/06/WebDeploy.png" alt="" /></div>
<p>Some developers just give up and use Ivy retrieve to dump the dependencies into the WEB-INF/lib directory; this will work, but is not a very elegant solution. To make this work, you are required to refresh the workspace after the Ivy resolve/retrieve completes, which pushes the dependencies into the web application; nasty.</p>
<p><img class="alignleft" style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" title="Reference Type" src="http://www.beilers.com/wp-content/uploads/2010/06/ReferenceType.png" alt="" width="368" height="298" />This problem may have been answered in Eclipse 3.6 (Helios). I tested some of the 3.6 milestone releases, but was fooled into thinking that the IvyDE and WTP integration was broken; the J2EE module dependency option was no longer visible on the project properties. I was too busy to investigate (or look at other menu options!), I just assumed that it was just broken. To make a long story short, there is a new menu option called Deployment Assembly. The new option is a much simpler concept to comprehend; it is more flexible and actually seems to work consistently with Ivy. The most obvious change is the presentation; it gives a better picture of how the web application will be assembled. The old J2EE Module Dependency manager allowed you to choose components, but might have been more tailored for building an EAR file, rather than a WAR. Another issues is the inability to exclude any of the &#8220;source&#8221; folders. If you manage your unit test classes in a separate source folder, they would also be included in the application (WAR). Not necessarily a problem, but not very clean and could possibly hide unintended dependencies between the two source trees.</p>
<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/06/Ivy.png" alt="" />When using IvyDE, the first step is to add an Ivy classpath container. This will add Ivy dependencies to the classpath of your Eclipse project. If you have a WTP project, you will also need these dependencies copied to the WEB-INF/lib directory. This is easily accomplished by clicking the Add button under Deployment Assembly (under project properties). You can add other projects and external jars as well. Here is where it gets interesting, there appears to be two different options. If you have already added the Ivy classpath container to your build path, click the “Referenced Classpath Entries”  option and select the ivy.xml file from your project. There might be a little display problem, as the &#8220;Deploy Path&#8221; for the classpath container does not appear correct, but it does put the libraries in the correct directory location.</p>
<p>The second option is to remove the Ivy classpath container from the build path, and re-add it under the new Deployment Assembly properties. This option displays properly and copies the dependencies to the WEB-INF/lib directory.  I actually prefer this option, but there is a significant problem; there is no way to  re-resolve the dependencies; it appears you need to delete the container and re-add it, if you change your ivy.xml file.  Rather annoying!</p>
<p>I started writing this blog a couple of weeks ago and was under the impression that the new version was working perfectly. However, I&#8217;m currently back to where I started, with inconsistent, unexplainable behavior. Time to submit a question to the Ivy support list. Hopefully, I will have something to report back soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/07/eclipse-3-6-helios-wtp-ivy-and-deployment-assembly-working-reliably-at-last/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>What motivates you?</title>
		<link>http://www.beilers.com/2010/06/what-motivates-you-3/</link>
		<comments>http://www.beilers.com/2010/06/what-motivates-you-3/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 05:01:45 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=702</guid>
		<description><![CDATA[Kent Beck tweeted this a couple of weeks ago, I thought it was interesting from multiple perspectives&#8230; First, the overall &#8220;presentation&#8221; concept was super cool and very creative. Secondly, the content was excellent and thought provoking. I think many of the points seem to get lost in corporate America. The video is 10 minutes long, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/kentbeck" target="_blank">Kent Beck</a> tweeted this a couple of weeks ago, I thought it was interesting from multiple perspectives&#8230; First, the overall &#8220;presentation&#8221; concept was super cool and very creative. Secondly, the content was excellent and thought provoking. I think many of the points seem to get lost in corporate America. The video is 10 minutes long, but well worth the time; grab a coffee and enjoy! If you liked this video, there are actually numerous other topics from <a href="http://www.youtube.com/user/theRSAorg" target="_blank">RSA Animate</a> on YouTube.</p>
<div class="youtube-video"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="src" value="http://www.youtube.com/v/u6XAPnuFjJc&amp;feature=youtube_gdata" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://www.youtube.com/v/u6XAPnuFjJc&amp;feature=youtube_gdata" wmode="transparent"></embed></object></div>
<p>RSA Animate &#8211; Drive: The surprising truth about what motivates us</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/06/what-motivates-you-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ivy Dependency Management &#8211; Lessons Learned and Ant 1.8 Mapped Resources</title>
		<link>http://www.beilers.com/2010/06/ivy-dependency-management-lessons-learned-and-ant-1-8-mapped-resources/</link>
		<comments>http://www.beilers.com/2010/06/ivy-dependency-management-lessons-learned-and-ant-1-8-mapped-resources/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 18:59:09 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=696</guid>
		<description><![CDATA[I have been using Ivy for a couple of years now. Strangely, of all of the developers that I have introduced Ivy too, I think I&#8217;m the only one really jazzed by this approach. Some actually question the value of the tool; change is a hard thing! I think it is hard to see the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ant.apache.org/ivy/" target="_blank"><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/06/ivy-lierre.png" alt="" width="156" height="116" /></a>I have been using Ivy for a couple of years now. Strangely, of all of the developers that I have introduced Ivy too, I think I&#8217;m the only one really jazzed by this approach. Some actually question the value of the tool; <a href="http://ezinearticles.com/?Change-is-the-Hardest-Thing-Youll-Ever-Do&amp;id=1736701" target="_blank">change is a hard thing</a>! I think it is hard to see the <em>real </em>value of dependency management, especially when you only work on a single application, for an extended period of time. After all, once an application is wired up with the right libraries, what is the big deal?  I tend to work on multiple projects and take a more board view of development issues. I seem to be the guy creates the Ant scripts,  upgrades the libraries, and manage the dependencies between all of these tools; hence I’m a huge fan of dependency management! I see no better way to document the external dependency requirements of an application. From a corporate or even organization perspective, Ivy can provide additional value beyond development, it can support both compliance and configuration management activities. The value of a single, centrally managed, browsable repository of reusable components should not be overlooked. I believe that significant number of person-hours are lost each year on the simple task of component (open source and commercial) version management. Just think about the amount of time spent by a project to download new component versions (and their dependencies), update build scripts, manage them in a version control system, creating tags and branches for items that never change! Now, multiple that effort by the number of applications your company manages. I have to imagine this amount of time is more than insignificant. OK, my Ivy sermon is over; on to something that might actually be valuable.</p>
<p>Once you have your repository structured, Ivy works pretty well. Converting an Ant-based application to use Ivy is pretty trivial and always seems to work perfectly. On the other hand, the <a href="http://ant.apache.org/ivy/ivyde/" target="_blank">IvyDE </a>plug-in has always been a little bit of pain, especially when you are working with a <a href="http://www.eclipse.org/webtools/" target="_blank">WTP</a> project. After converting the first project to use Ivy, it was basically a cut and paste exercise for every other project. Unfortunately, there were a few side effects of using Ivy that I just finally got around to addressing.  Not that these were huge issues, more a matter of cleanliness.</p>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr>
<td><strong>Use multiple Ivy configuration files rather than one single file.</strong></td>
</tr>
</tbody>
</table>
<p>We always use a single Ivy configuration file per project; it contains the dependencies for all activities:  compiling, execution, jUnit, Clover, FindBugs, PMD, Checkstyle, etc. This made the Ivy configuration a little difficult to comprehend, as it was not 100% obvious which libraries were <em>actually </em>required to simply build the application. Additionally, this made the Ant build files and file system rather messy; we ended up with hundreds of jar files in the Ivy retrieve directory, not knowing if a tool or component was dependent on them.  If the project happened to create a WAR file, we had to “hand pick” the files from the retrieve directory and provide a custom fileset of required files for the WEB-INF/lib directory. This was a continual maintenance issue, as someone would add a new dependency to Ivy and forget to update the custom path object in the Ant XML. To simplify and eliminate this problem, we decided to create two Ivy configuration files, one for the required components (ivy.xml), and one for the continuous integration / build environment (ivy.tools.xml).  It was now much easier to visualize and manage the run-time components required to execute the application, independently from components needed to build and/or test the application.</p>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr>
<td><strong>Use Ivy resolve Ant task rather than Ivy retrieve task, or better yet, use the Ivy cachepath task. </strong></td>
</tr>
</tbody>
</table>
<p>The simplest Ivy strategy is to dump all the components into a single directory using the Ivy:retrieve Ant task. This approach gives direct access to the files and enables the creation of multiple filesets for specific uses. This is the easiest way to convert an existing project to Ivy, just re-point the build scripts to the new location. This approach aggravated some developers on the team, as we could end up with the same jar file in at least 3 different sub-directories on your machine; a copy in your Ivy cache, another copy in the Ivy retrieve directory, and another copy in the required location (WEB-INF/lib for example). The IvyDE plug-in uses files directly from the Ivy cache, no extra  copies of the files are created. I should have picked up on this approach sooner, as it seems much more elegant. There are several <a href="http://ant.apache.org/ivy/history/2.0.0/use/postresolvetask.html" target="_blank">post resolve tasks</a> that can be used to implement this approach, namely the Ivy:cachepath task. This task creates Ant path objects with direct references to the file&#8217;s location within the Ivy cache. If you need a fileset object, you can utilize the Ivy:cachefileset task.</p>
<p>As you can see from the following example, it is easy to create multiple path objects from within your Ant build process. It is even possible to have extremely fine grain control, you can create path objects for individual modules, one for each specific tool if you so desired; I  have not used this strategy yet, but it does seem interesting.</p>
<pre class="brush: xml;">
&lt;ivy:settings file=&quot;ivysettings.xml&quot; /&gt;
&lt;ivy:cachepath pathid=&quot;classpath.CORE&quot; conf=&quot;runtime&quot; resolveId=&quot;CORE&quot; file=&quot;ivy.xml&quot; /&gt;
&lt;ivy:cachepath pathid=&quot;classpath.CI&quot; conf=&quot;runtime&quot; resolveId=&quot;CI&quot; file=&quot;ivy.tools.xml&quot; /&gt;
&lt;ivy:cachepath pathid=&quot;classpath.COMMON&quot;organisation=&quot;beilers.com&quot; module=&quot;common&quot; revision=&quot;1.0&quot; inline=&quot;true&quot; conf=&quot;debug&quot; /&gt;
</pre>
<p>Once you have your path objects created, you can use them just like normal in other tasks, nothing special here. It is that point that what makes Ivy so attractive from a build (Ant) perspective, in that Ivy does not require you to change the way you think or typically use Ant.</p>
<pre class="brush: java;">
&lt;javac source=&quot;1.5&quot; destdir=&quot;${build.dir}&quot; debug=&quot;${javac.debug.option}&quot; verbose=&quot;no&quot;&gt;
     &lt;compilerarg value=&quot;-Xlint:unchecked&quot; /&gt;
     &lt;src path=&quot;src&quot; /&gt;
     &lt;classpath&gt;
           &lt;path refid=&quot;classpath.COMMON&quot; /&gt;
           &lt;path refid=&quot;classpath.CORE&quot; /&gt;
           &lt;path refid=&quot;classpath.CI&quot; /&gt;
      &lt;/classpath&gt;
&lt;/javac&gt;
</pre>
<p>I did run into one issue with the Ant &lt;war&gt; task using the Ivy:cachepath task. When the WAR file was created, the WEB-INF/lib directory did not get flattened. All of the dependent jar files were placed in sub-directories that mirrored the Ivy repository structure. Unfortunately, the &lt;war&gt; task &lt;lib&gt; section does not support the &#8220;flatten&#8221; option. (An Ant <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=31947" target="_blank">bug</a> was actually filed in 2004 for this problem.) Luckily, the post gave me the appropriate Ant <em>way </em>of resolving the situation, using a new feature in Ant 1.8 called <a href="http://ant.apache.org/manual/Types/resources.html#mappedresources" target="_blank">mapped resources</a>. The XML seems a little convoluted looking, but works perfectly. I don&#8217;t think I would have ever figured this out without Google!</p>
<p>By combining all of these ideas into the Ant build build system, I can take advantage of the Ivy cache and eliminate all extraneous copies of jar files. The <em>real </em>value is provided by the multiple Ivy configuration files, making it <em>completely </em>unnecessary to know what jar files are included in each dependency. This approach makes the Ant build system significantly less error prone and eliminates all future maintenance concerning  jar files.</p>
<pre class="brush: xml;">
&lt;war destfile=&quot;${war.full.path}&quot; webxml=&quot;WebContent/WEB-INF/web.xml&quot; manifest=&quot;${manifest.path}&quot;&gt;
    &lt;fileset dir=&quot;WebContent&quot;&gt;
     &lt;/fileset&gt;
    &lt;classes dir=&quot;${build.dir}&quot;/&gt;

    &lt;mappedresources&gt;
      &lt;restrict&gt;
        &lt;path refid=&quot;classpath.CORE&quot;/&gt;
        &lt;type type=&quot;file&quot;/&gt;
      &lt;/restrict&gt;
      &lt;chainedmapper&gt;
        &lt;flattenmapper/&gt;
        &lt;globmapper from=&quot;*&quot; to=&quot;WEB-INF/lib/*&quot;/&gt;
      &lt;/chainedmapper&gt;
    &lt;/mappedresources&gt;

    &lt;zipfileset dir=&quot;src&quot; prefix=&quot;WEB-INF/classes&quot;&gt;
         &lt;include name=&quot;**/resources/**/*.properties&quot; /&gt;
         &lt;include name=&quot;**/resources/**/*.xml&quot; /&gt;
    &lt;/zipfileset&gt;
&lt;/war&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/06/ivy-dependency-management-lessons-learned-and-ant-1-8-mapped-resources/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Agile&#8230;</title>
		<link>http://www.beilers.com/2010/04/new-agile-2/</link>
		<comments>http://www.beilers.com/2010/04/new-agile-2/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 22:50:53 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=681</guid>
		<description><![CDATA[I might be dating myself, but when I was a kid, I remember my parents talking about New Math. I don&#8217;t believe that I was ever exposed to New Math, it might not have made it to the small towns in northwestern Ohio! The New Math Wiki was actually very interesting; taking us back to [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/04/NewAgile.jpg" alt="" />I might be dating myself, but when I was a kid, I remember my parents talking about <em><a target="_blank">New Math</a></em>. I don&#8217;t believe that I was ever exposed to <em>New Math, </em>it might not have made it to the small towns in northwestern Ohio! The <a href="http://en.wikipedia.org/wiki/New_Math" target="_blank">New Math Wiki</a> was actually very interesting; taking us back to the cold war with Russia, attempting to drive up the American scientific and mathematical skills. For better or worse, <em>New Math</em> was not able to change the status quot and was abandoned.</p>
<p>Not really the point of this blog, but <em>New Math</em> actually stressed the mathematical concept of <a href="http://en.wikipedia.org/wiki/Set_theory" target="_blank">set theory</a>. This is actually a concept that one of my mentors actually spoke about quite often. Something that I suggest everyone do a little reading on, especially if you are not familiar with the concept.</p>
<p>So, why <strong>New Agile</strong>?  A friend happened to snap a picture from a white board at his place of employment, illustrating their new 14 week Agile process. Oh, where to begin&#8230;. I going to skip the obvious 14 week concept and tie this back to one of my <a href="http://www.beilers.com/2010/04/making-up-your-own-methodology-wetagaile-or-w-agile" target="_blank">previous posts</a> on testing. I asked the question: <strong>Should testing be the limiting factor in the software development process?</strong> I am not exactly sure what numbers were used per cycle, as it seemed like it was a discussion point, but it does highlight an interesting trend.<br />
<img style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/04/Testing.png" alt="" />I threw together this little a table to illustrate my point. Based on either combination of values, the project was going to allocate between 57% and 64% of it&#8217;s project schedule to testing. Using the worst case numbers, we are talking about 3 times longer to <strong>test </strong>the code, than actually <strong>develop </strong>the code. Is it just me or is that crazy? What if you had two (2) months worth of development? Simple math, that would require six (6) additional months to validate!  I realize there are or can be several factors contributing to this equation, but I&#8217;m pretty sure that we are not talking about a team of twelve (12) developers to one (1) tester, creating an unbalanced capacity situation.  Just for fun, I threw a <em>Theory </em>column into my table. I can&#8217;t remember where I learned or read this, but I&#8217;m sure everyone knows this fact as well&#8230; <a href="http://en.wikipedia.org/wiki/Software_testing" target="_blank">the cost of fixing bugs</a>. We should be spending the vast majority of our software development resources on upfront planning; this would include requirements, analysis and design. It would seem that if developers knew exactly what there building and testers knew exactly what they were testing, both teams could do a much higher quality job, probably in less time!</p>
<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/04/values.png" alt="" />Unfortunately, we seem to be spending too much of our time in the wrong SDLC phase and on the wrong artifacts. I can&#8217;t tell you how many times I have seen a hundred (100) page requirements document for a seemingly trivial system. The SDLC mandates that these documents be produced, irregardless of the content&#8217;s quality. This is no fault of the business, they simply try to document their needs, given what they know. Because requirements are typically not allowed to evolve and are seldom interpreted correctly by the IT team, the business never gets what they really need. Additionally, the time spent by the testing teams to provide the traceability back to the excessively verbose requirements, while generating and documenting their test cases could almost be considered SDLC overhead. The testers are rarely given a chance to actually automate their test cases, which in my opinion, is the most valuable artifact of their job.</p>
<p>If we could produce smaller, more concise, valuable requirement documents, spend more time doing actual analysis and design work, we could actually take steps toward my <em>Theory </em>column. This approach could and should enable the later phases of the SDLC to be completed with less effort, fewer issues, and in less time. So two questions:</p>
<ol>
<li>Is this not common sense?</li>
<li>Why is this approached not embraced by technology organizations?  The benefits seem unquestionable&#8230;</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/04/new-agile-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making up your own methodology&#8230; WetAgaile or W-agile</title>
		<link>http://www.beilers.com/2010/04/making-up-your-own-methodology-wetagaile-or-w-agile/</link>
		<comments>http://www.beilers.com/2010/04/making-up-your-own-methodology-wetagaile-or-w-agile/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 00:57:00 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=664</guid>
		<description><![CDATA[I was reading the Software Development Times last week and found an interesting article about development methodologies. I almost think Agile has turned into a &#8220;techno-fad&#8221;; a meaningless buzzword, right up there next to architect! Nobody wants to admit they are using the waterfall approach; they would have be considered an technical dinosaur; just look [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/04/nevadafalls.jpg" />I was reading the <a target="_blank" href="http://www.sdtimes.com/">Software Development Times</a> last week and found an interesting article about development methodologies. I almost think Agile has turned into a &#8220;techno-fad&#8221;; a meaningless buzzword, right up there next to architect! Nobody wants to admit they are using the waterfall approach; they would have be considered an technical dinosaur; just look at the history highlights below!&nbsp; Unfortunately, many projects seem to choose Agile for the wrong reason; there seems to be some kind of <i>coolness, prestige, or promise of advancement </i>associated with using Agile, rather than a true embracement of the methodology.</p>
<table style="border-collapse: collapse;" width="60%" align="center" border="1">
<tbody>
<tr>
<td><span style="color: rgb(255, 0, 0);">Can you believe&#8230;</span>
<ul>
<li>The <a target="_blank" href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall model</a>  was first documented in 1970 by Winston Royce.</li>
<li>The <a target="_blank" href="http://en.wikipedia.org/wiki/Spiral_model">spiral model</a> was defined by Barry Boehm in 1986 article &#8220;A Spiral Model of Software Development and Enhancement&#8221;.</li>
<li>The <a target="_blank" href="http://en.wikipedia.org/wiki/Extreme_Programming">Extreme Programming</a> model was introduced by Kent Beck in 1999. I recently suggested following Kent <a target="_blank" href="http://www.beilers.com/2010/04/who-should-write-unit-tests/">here</a>&#8230;</li>
<li>Interesting fact, <a target="_blank" href="http://en.wikipedia.org/wiki/Ken_Schwaber">Ken Schwaber</a>, one of the SCRUM creators stated that 75% of organizations using SCRUM do not get the benefits they had hoped for using this approach.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p> So, everyone claims to be &#8220;doing Agile&#8221;; I think reality tells a slightly different story. I recently observed a group define the allowable methodology options for new projects; they chose Waterfall, Iterative, and Agile. Waterfall and Agile are pretty to definable, but Iterative seemed a little vague to me. After reading this article, I think I actually figured out what it was, WetAgile. Per the author, WetAgile is a term used to describer Waterfall shops that either aspire to be Agile or are in the transition process.<br /><img style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/04/InterativeCycle.png" />I  actually found two versions of the document by the author, Steve  Piecko. The <a target="_blank" href="http://www.sdtimes.com/GUEST_VIEW_WETAGILE_COMBINES_AGILE_AND_WATERFALL/By_Steve_Pieczko/About_AGILE/34245">SD Time version</a> seemed to be at a little higher level, while the  <a target="_blank" href="http://www.emqus.com/index.php?/emq/article/agile_waterfall_how_about_wetagile_7781">Enterprise Management Quarterly version</a> has a little more substance.</p>
<p>The real question is why do teams only implement so few aspects of Agile? The author suggest that we typically implement the pieces of Agile that we most understand or believe the Waterfall teams can easily embrace. It seems like the <a target="_blank" href="http://www.extremeprogramming.org/rules.html">XP techniques</a> are much easier for the development team to implement, specifically because they control their own space; whereas embracing the complete <a target="_blank" href="http://agilemanifesto.org/principles.html">Agile</a> (<a target="_blank" href="http://en.wikipedia.org/wiki/Scrum_%28development%29">SCRUM</a>) management process is a little more involved. I believe the problem is that too many people have to be involved to make it work. Throwing a bunch of people in a room and having a daily stand-up meeting does not exactly imply you are doing &#8220;Agile&#8221;. I find it disappointing that the most valuable part of SCRUM (my opinion), the creation and management of the <a target="_blank" href="http://en.wikipedia.org/wiki/Scrum_%28development%29#Product_backlog">backlog</a>, is rarely&nbsp; done. Probably because project management is still very &#8220;Waterfall&#8221; centric; you start with some requirements and end with a date, nice and simple. Additionally, it is not very easy to build a backlog when requirements, including defects and enhancements, are managed by processes that have nothing to do with the software development life cycle.</p>
<p>Here is the root of the problem, most projects (applications) are managed as series of individual releases, where each release has a concise beginning and end. Each release is a discrete and isolated project. I don&#8217;t think applications are ever viewed as perpetual, ongoing, evolving entities.&nbsp; The subtle difference is that enhancements and defects are usually managed independently and are rarely viewed and prioritized together. The backlog, if it exists is virtual. The business seems to &#8220;divine&#8221; their most relevant needs out of thing air, ask for some LOEs, and then define the next release based on what can be implemented by the some magical date. That is a far cry of creating, evolving, and managing a complete list of features that ultimately should be built in a application, using a iterative release stream.</p>
<p>I think another significant problem is the perceived cost of creating a release. How great would it be to deliver new functionality to your customer every month? Unfortunately, with today&#8217;s audit and traceability requirements, the actual cost of creating a release can outweigh the value. Too many meetings, too many sign-offs, just too much overhead.; Not to bash the testing community, but it seems that the effort required to test and certify a release is also cost prohibitive. There is no possible way that testing teams could manage monthly release cycles using their traditional approaches. Should testing actually be the limiting factor in the software development process? What is really driving up the cost? What is burning up all of the time? Something I will have to research! I would hope that testing could be accomplished just like development, as developers attempt to do test driven development, testers should be following the exact same process. The continuous integration process should be running their suite, same as the developers suite. Would this not be sweet? The next question is, do we really need &#8220;User Acceptance Testing&#8221;? If the users are truly involved with the SDLC process and all testing is automated and quantifiable, is that not good enough? We seem to add multiple levels of testing, choosing an &#8220;accumulative testing strategy&#8221;, rather than a single, cohesive plan. </p>
<p>I found an interesting post on Agile Coaching, called &#8220;<a target="_blank" href="http://agilecoach.typepad.com/agile-coaching/2010/03/agile-or-wagile.html">Agile or W-agile</a>&#8220;. I think the blog is kind of unique, a series of drawings done on note cards and white boards&#8230; actually a pretty good way to get out a message!</p>
<table style="border-collapse: collapse;" width="85%" align="center" border="1">
<tbody>
<tr>
<td><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/04/extra-credit.jpg" /><span style="color: rgb(255, 0, 0);">Extra Credit Reading&#8230;</span><br />This article got me thinking: what is the next advancement in software development methodologies? It seems like eXtreme Programming and Agile have been around for many, many years; even though, <i>maybe </i>not widely adopted. I did a quick Google and found an interesting post titled: <a target="_blank" href="http://davenicolette.wikispaces.com/After+Agile">After Agile, What&#8217;s next?</a> There are some interesting questions and several good links.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/04/making-up-your-own-methodology-wetagaile-or-w-agile/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Who should write unit tests?</title>
		<link>http://www.beilers.com/2010/04/who-should-write-unit-tests/</link>
		<comments>http://www.beilers.com/2010/04/who-should-write-unit-tests/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 05:01:30 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=647</guid>
		<description><![CDATA[I have been a big fan of Kent Beck for many years, mostly from all of his work on jUnit and extreme programming.  I have two recommendations for you: Follow him on Twitter. I cannot tell you how many thought provoking tweets he has provided me, I&#8217;m sure that I get at least one good [...]]]></description>
			<content:encoded><![CDATA[<p>I have been a big fan of Kent Beck for many years, mostly from all of his work on jUnit and extreme programming.  I have two recommendations for you:</p>
<ol>
<li>Follow him on <a href="http://twitter.com/KentBeck" target="_blank">Twitter</a>. I cannot tell you how many thought provoking tweets he has <a href="http://twitter.com/KentBeck" target="_blank"><img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/03/moz-screenshot-4.png" alt="" /></a>provided me, I&#8217;m sure that I get at least one good nugget each day!</li>
<li>Read his personal blog at <a href="http://www.threeriversinstitute.org/blog/" target="_blank">Three Rivers Institute</a>.  It is a really good source of design and development information. Typically, not a quick read, but well worth the investment.</li>
</ol>
<p><img style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2010/03/moz-screenshot-3.png" alt="" />Earlier this month, Kent tweeted about the &#8220;Pragmatic Magazine&#8221;. I had been to the &#8220;<a href="http://www.pragprog.com/" target="_blank">Pragmatic Bookshelf</a>&#8221; many times in the past, but did not know about their <a href="http://www.pragprog.com/magazines" target="_blank">magazine</a>. This turned out to be complete and valuable educational exercise for me.</p>
<table style="border-collapse: collapse;" border="1" width="85%" align="center">
<tbody>
<tr>
<td><span style="color: #ff0000;">Tangent&#8230;</span><br />
You can download the &#8220;magazine&#8221; in multiple formats: PDF, ePub,  or mobi. Since I do all of my reading on my cell phone (Motorola Droid), I downloaded the <a href="http://www.aldiko.com/" target="_blank">Aldiko ebook reader</a>. Within a couple of minutes, I was able to open up the magazine on my phone, too cool! My poor Kindle is so neglected; I should try to download the mobi format and see how the reading experience compares. I&#8217;m sure it will be much nicer on the Kindle DX, but I always have my phone with me, so the Droid wins!</td>
</tr>
</tbody>
</table>
<p>I was really surprised by the featured articles. I gravitated the to the <a href="http://www.pragprog.com/magazines/2010-03/jsonthe-last--feet" target="_blank">JSON article</a>; I&#8217;m a huge JSON fan, but see it totally ignored in my professional world&#8230; I have not figured why this is true, but the article did provide an interesting perspective. One of the other articles that grabbed my attention was on <a href="http://www.pragprog.com/magazines/2010-03/testing-as-contract" target="_blank">Testing</a>. You have to read it, it is very interesting&#8230;</p>
<table style="border-collapse: collapse;" border="1" width="85%" align="center">
<tbody>
<tr>
<td><span style="color: #ff0000;">Quoted from the article&#8230;</span><br />
The developers who understand the importance of unit tests and who write comprehensive and subtle tests are exactly the group that need them the least. The “average” or inexperienced developer probably doesn’t   believe in unit tests and will write bad or pointless tests if forced to do so.</td>
</tr>
</tbody>
</table>
<p><big><strong>So, the question is: Who should write your unit tests?</strong></big> This answer to this question really emphasizes something that I always try to stress to project teams: Do not test your implementation,  test the behavior, the contract, you need to support. So many times, especially if testing is not second nature to the developer and the team uses a code coverage tool, there is a very bad tendency to write tests which are specific to the implementation. To make matter&#8217;s worse, some teams do in-package testing of their Java code to exercise and validate the implementation details. I was so fired up on this point last year, so I wrote a <a href="http://www.beilers.com/2009/11/netbeans-unit-test-creation-better-than-eclipse-and-where-should-unit-test-live/" target="_blank">blog</a> on it! Needless to say, I think this is a really bad idea and creates unnecessary and undesirable coupling between your unit test and implementation.</p>
<p>The author goes on to suggest that your best developers should only create the interfaces and associated unit tests, let the other developers create the implementation behind the interface. Pretty cool idea. Unfortunately,  I don&#8217;t see this taking off in the corporate world. In my experience, most developers tend to write their own unit tests or unit testing is completely outsourced to some third party (way after the fact). Additionally, the &#8220;first tier&#8221; developers are expected to write the hard code, and that is what they really <em>want</em> to do anyway; the &#8220;second tier&#8221; developers usually get the leftovers, like unit test cleanup and shell scripts.</p>
<p>I think the whole value system is skewed in the typical corporate software development process. Where should you put the good people to get the most value?  In the past, if you did not cut it as a developer, you would get <em>promoted</em> to the CM or testing team.  Many times, these teams were not valued by the organization, and hence not staffed with top talent. I would prefer the best and brightest developers in the testing space. No matter how good the code is, if the testers are sub-par, then the application is destined to fail. Conversely, if you have marginal developers and a strong test team, I think you have at least a chance of success (providing you have a good design).</p>
<p>I read another interesting <a href="http://www.makinggoodsoftware.com/2010/02/23/the-best-bug-tracking-system-dont-raise-bugs-write-an-automated-test/" target="_blank">article about bug tracking and system testing</a>.  Think about this&#8230; rather than creating a problem ticket for issues found in system test, why not create some type of unit / integration test to demonstrate the problem?  The test get checked in by the test team and breaks the continuous integration build process. Now, the development staff just has to fix the problem. Seems kind of streamlined and efficient; I guess it will never work! But I do like the concept!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/04/who-should-write-unit-tests/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
