<?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; Testing</title>
	<atom:link href="http://www.beilers.com/category/testing/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</generator>
		<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>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>
		<item>
		<title>Unit Testing Not Required&#8230;</title>
		<link>http://www.beilers.com/2010/03/unit-testing-not-required/</link>
		<comments>http://www.beilers.com/2010/03/unit-testing-not-required/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 00:04:06 +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=613</guid>
		<description><![CDATA[I assume that everyone performs some kind of unit testing&#8230; The real question is what does unit testing mean to you?&#160; For me, it is some form of repeatable, assertion-based approach that can be re-executed by other developers and a continuous integration process. Unit testing is just one piece in my software confidence puzzle. That [...]]]></description>
			<content:encoded><![CDATA[<p><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-2.png" alt="" />I assume that everyone performs some kind of unit testing&#8230; The real question is what does unit testing mean to you?&nbsp; For me, it is some form of repeatable, assertion-based approach that can be re-executed by other developers and a continuous integration process. Unit testing is just one piece in my software confidence puzzle. That sounds like a great topic for my next blog! Unfortunately, some developers think that generating some log messages to inspect or stepping through the code with a debugger accomplishes the very same thing. Depending on the competency of the developer, I believe this can be partially true; however what about the next developer who needs to change the code?</p>
<p>Next, you need to place some kind of value on your unit test strategy. Is testing an investment, an expense, or a liability?&nbsp; I think that unit testing typically starts as some type of organizational mandate. It quickly turns into an expense and ultimately a liability. I have seen very few projects truly embrace and believe in the value of unit testing. It seems that more often than not, a true believer (or zealot) establishes the process and everything goes along smoothly. After a while, the &#8220;pressure of the release date&#8221; eliminates the need for creating new unit tests; or even worse, the existing unit test are no longer maintained. They become brittle, broken and ignored. As the number of failed unit test grows, is seems very hard to justify the cost of fixing them. At this point, you have a liability problem; the existing failures get in the way of identifying and managing new failures. Who will really notice the the <em>one</em> new failure when there are already fifty other failures? If ignoring unit test failures is allowed by the continuous integration process, the typical developer will have no incentive to fix them. We have now created an environment where the correctness of the unit test only matters at the point when the code is checked in. That statement might not even be true, as there is no guarantee or reason for the developer to ensure that their new unit test executed properly in the continuous integration environment. Chances are, that after some period of time,&nbsp; that new test will decay and be added to the every growing, ignored list of broken unit tests.</p>
<p>Wow, I&#8217;m painting a pretty bleak picture of unit testing! To make things even more discouraging, I recently lost the debate on the merits of unit testing with one of my mentors. I think he is one of the smartest and most practical architect/developer/person that I have ever worked with, yet he saw little to no value in unit testing. To this day, I still cannot completely follow his logic; surely there are other, external factors that could minimize the value of unit testing, such as team competency, cohesiveness, maturity, and the general environment, but I don&#8217;t believe unit testing can (or should be) completely eliminated.</p>
<table style="border-collapse: collapse;" width="85%" border="1" align="center">
<tbody>
<tr>
<td><span style="color: rgb(255, 0, 0);">Sad, but true&#8230;</span><br />On a previous project, one of my teammates said that he would not create any unit tests, unless the project manager added additional line items to the project plan, specifically for unit testing his code. I was amazed&#8230; Why was this not considered a standard development procedure? It is pretty easy to see why one could argue that <a href="http://www.javaworld.com/javaworld/jw-08-2008/jw-08-unit-testing-doomed.html" target="_blank">unit testing is doomed</a>.</td>
</tr>
</tbody>
</table>
<p>Fortunately, I have worked on a few projects where we considered unit testing an investment and an asset. These projects mandated zero unit test failures and even required some level of code coverage. The teams never considered or required the creation of a unit test to be called out on the project plan; it was simply part of their job. More than once, these unit test suites gave us the confidence to make the right change (re-factor), rather than the typical Band-Aid Software Methodology typically employed to address problems. Sounds like another good blog topic!</p>
<table style="border-collapse: collapse;" width="85%" border="1" align="center">
<tbody>
<tr>
<td><span style="color: rgb(255, 0, 0);">Final thoughts&#8230;</span><br />Here is another good read, <a href="http://www.theserverside.com/tt/articles/article.tss?l=DesigntoUnitTest" target="_blank">Design to Test</a>; old, but still valid today! There are so many good points in this article, they deserve to be reiterated again and again. If you are familiar with the Spring Framework, they should really resonate with you&#8230;
<ul>
<li>Test the interface, not the implementation</li>
<li>Composition over inheritance</li>
<li>Singleton avoidance</li>
</ul>
<p>Here was one more blog, &#8220;<a href="http://devver.net/blog/2008/07/tips-for-unit-testing/" target="_blank">Tips for Testing</a>&#8220;, that reinforces the increased ROI of unit testing over time. You should at least skim his tips, he seems to have an interesting perspective&#8230;</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2010/03/unit-testing-not-required/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NetBeans Unit Test Creation better than Eclipse? And where should unit test live?</title>
		<link>http://www.beilers.com/2009/11/netbeans-unit-test-creation-better-than-eclipse-and-where-should-unit-test-live/</link>
		<comments>http://www.beilers.com/2009/11/netbeans-unit-test-creation-better-than-eclipse-and-where-should-unit-test-live/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 10:00:17 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=579</guid>
		<description><![CDATA[I seem to work on a variety of Java applications and find that unit testing is one of the most varied (implementation-wise) pieces of the development process. These applications, created by different development staffs, many which have evolved over the pass few years are all very unique&#8230; kind of makes me wonder why? That is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://netbeans.org/" target="_blank"><img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/11/netbeans-logo.png" alt="" /></a>I seem to work on a variety of Java applications and find that unit testing is one of the most varied (implementation-wise) pieces of the development process. These applications, created by different development staffs, many which have evolved over the pass few years are all very unique&#8230; kind of makes me wonder why? That is a topic for another post!</p>
<p>One debate I always seem to encounter is around  where to actually save the unit tests? Should we do in-package testing or rely on the public API. My preferences are pretty simple:</p>
<ul>
<li>Unit test should not be stored with the code, but rather created under a secondary source root. On my early projects, I created a sub-package under each package, called <em>test,</em> to manage the relevant files (tests and data). I later realized that I could simplify the Ant build process and enable in-package testing by creating a separate source tree. I have seen projects commingle the actual source code, unit tests, and even the test data files, all within the single source tree. This defaults the testing strategy to in-package testing, and discourages (or even prevents) API testing. I find this approach rather messy and unclear. This approach also complicates the Ant build process; at some point during the process, the unit tests, supporting classes and files should be separated from the actual deployable content.</li>
<li>I like to name my secondary source root <a href="http://www.google.com/search?q=test+driven+development&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=com.ubuntu:en-US:official&amp;client=firefox-a" target="_blank"><em>tdd</em></a>. I know it is not widely practiced, but my hope is that if the developers see that TDD directory every time the open up their IDE, the concept might actually wear off! Maybe someday, one developer (hopefully more) will actually be challenged to write their unit tests first. With Eclipse and jUnit 4.x annotations, I seem to always start with my unit test, and sometimes even refactor code from the unit test into the actual class; kind of a high-bread TDD process, but the thought is always there!</li>
<li>I also prefer the public API testing strategy verses in-package testing. This line of thinking always takes me back to the <a href="http://code.google.com/p/testability-explorer/" target="_blank">Testability Explorer</a>. The concepts behind this metric enforce the idea public API testing and is worth a quick read. Add the Spring Framework to the mix, enabling dependency injection and I see little need for in-package testing. This is typically accomplished by creating a &#8220;test&#8221; package as the root of the secondary source tree, with sub-packages reflecting the package hierarchy of your classes to be tested. <em>I truly believe that defaulting to in-package testing allows the developers to be very sloppy and even unaware that they are testing a specific internal implementation, rather than externalized behavior presented by the API&#8230; This is VERY bad practice in my opinion. </em></li>
<li>If there is a need for in-package testing, then the sub-package structure of the classes to be tested can be recreated under the secondary source tree, maintaining a clean separation between the source and test cases. These test should be considered an <em>exception</em> to the norm, rather than common practice. I would hope for a 90-10 or 80-20 ratio, with a majority of the test falling under the <em>test</em> package root (in-package is the minority).</li>
</ul>
<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/2009/11/NetBeansProject1.png" border="1" alt="" />I am kind of tied to Eclipse as my IDE, but do play with NetBeans every so often. I think I could switch to NetBeans, my only <em>real</em> requirement is that the IDE must have Emacs key bindings; some habits are just too hard to break! NetBeans looks like an pretty good tool and seems to be very responsive on my Ubuntu box; I especially like the way it manages plug-ins.  One interesting thing that NetBeans does (maybe a little better than Eclipse), is manage unit testing. NetBeans will automatically create the secondary source tree, but seems to default to in-package testing. It is very easy to add the additional <em>test</em> package into the package structure to enable API testing. I also like the way that NetBeans separates the Test Libraries from the regular Libraries. I&#8217;m not sure how well this would work when you use a tool like <a href="http://ant.apache.org/ivy/" target="_blank">Ivy</a>, but does make it more obvious, as to which libraries are used for execution verses unit testing&#8230; If you do happen to generate a unit test from an existing class, NetBeans will generate more code than Eclipse. I&#8217;m not sure how useful this code is, but it does try to create the object under test, invoke the get() methods and perform assertions on the returned values. Might be more noise that it is worth, and anyway, you should be writing the unit test first!</p>
<p>The bottom line is that Unit testing should be easy and valuable. If it becomes too hard or complicated, it might be time to re-address how the unit test strategy is being implemented.</p>
<p><img style="float: none;" src="http://www.beilers.com/wp-content/uploads/2009/11/NetBeansJunit.png" border="1" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2009/11/netbeans-unit-test-creation-better-than-eclipse-and-where-should-unit-test-live/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eclipse &#8211; Ubuntu 9.1 Button Issue&#8230;</title>
		<link>http://www.beilers.com/2009/11/eclipse-ubuntu-9-1-button-issue/</link>
		<comments>http://www.beilers.com/2009/11/eclipse-ubuntu-9-1-button-issue/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 22:18:36 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/2009/11/eclipse-ubuntu-9-1-button-issue/</guid>
		<description><![CDATA[This was making me crazy the other night&#8230; I did not spend too much time on it, thinking is was just me. But, after upgrading my laptop and encountering the exact same problem, I knew there was more too it. It seemed like only the cancel buttons actually worked; all of the next and finish [...]]]></description>
			<content:encoded><![CDATA[<div align="left"><img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/11/GTK.svg.png" alt="" /><img style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/11/Eclipse.jpeg" alt="" />This was making me crazy the other night&#8230; I did not spend too much time on it, thinking is was just me. But, after upgrading my laptop and encountering the exact same problem, I knew there was more too it. It seemed like only the <i>cancel</i> buttons actually worked; all of the <i>next</i> and <i>finish</i> buttons did absolutely nothing, other then beep!&nbsp; I soon realized that I could use the tab key and press enter to move to the next screen; but that did not make me very happy.</div>
<p>A quick Google search turned up several people with the same exact problem. It was kind of interesting. The Ubuntu developers did not want to take responsibility for the problem and said it was an Eclipse issue. The Eclipse community said they never had to do anything special for Eclipse to run on Ubuntu; it was looking like a stand off! I did find the official bug report filed with <a target="_blank" href="https://bugs.launchpad.net/ubuntu/+source/eclipse/+bug/443004">Launchpad.net</a>, it says the problem is resolved. However, without overriding the following variable, Eclipse is not very usable.
<p style="border: thin solid black; padding: 1mm; background: lavender none repeat scroll 0% 50%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><code>export GDK_NATIVE_WINDOWS=1</code></p>
<p> <img style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/11/images.jpeg" alt="" />It also <a target="_blank" href="http://www.google.com/search?q=export+GDK_NATIVE_WINDOWS%3D1&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=com.ubuntu:en-US:official&amp;client=firefox-a">appears</a> that this problem is affecting many other tools on the new 9.1 release as well. This simple fix will get you back into action, without having to wait for the real fix.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=aa64b901-de4c-8727-90d7-cb60dc1ece85" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2009/11/eclipse-ubuntu-9-1-button-issue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spring Framework Anti-Patterns</title>
		<link>http://www.beilers.com/2009/10/spring-framework-anti-patterns/</link>
		<comments>http://www.beilers.com/2009/10/spring-framework-anti-patterns/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 21:40:14 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=562</guid>
		<description><![CDATA[Not that I&#8217;m a big fan of the whole &#8220;Anti-Pattern&#8221; concept, but there is some subtle irony in the title of this post; some of my coworkers will actually understand. Sorry about the mystery for the rest of you, but I think this post is really relevant for those trying to use Spring for the [...]]]></description>
			<content:encoded><![CDATA[<p>Not that I&#8217;m a big fan of the whole &#8220;Anti-Pattern&#8221; concept, but there is some subtle irony in the title of this post; some of my coworkers will actually understand. Sorry about the mystery for the rest of you, but I think this post is really relevant for those trying to use Spring for the first time. After building my first Spring-based application, I was on the fence concerning Spring&#8217;s actual value. Obviously, I made lots of mistakes in my first implementation; I think many of the following anti-patterns can typically happen on your first Spring project; my goal is to make you aware of these pitfalls, such that you can skip past the mistakes made by myself and others.</p>
<table style="border-collapse: collapse;" border="1" width="75%" align="center">
<tbody>
<tr>
<td><strong>Interesting Thought Tangent?</strong><br />
<img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/10/moz-screenshot-7.png" alt="" />While looking for the title to my post, I have found a little snippet that calling &#8220;<a href="http://cyclopeanencyclopedia.blogspot.com/2009/05/spring-anti-patterns-pt-1.html" target="_blank">Spring a direct attack on J2EE</a>&#8220;. I thought this was a unique way of describing the Spring Framework. For sometime now, I have been on the bandwagon to simplify the development practice through Spring (Spring Core, Security and Remoting). I never really thought about Spring as another  religious battle front; such as the classic <strong>emacs</strong>/vi or mac/<strong>pc</strong> wars. In essence, I was picking a side: No more J2EE! I guess it was not obvious to me before today, as I really can&#8217;t escape the J2EE container; I&#8217;m are required to deploy in a J2EE container, even though I make no use of its capabilities; a Servlet container is all most of us really need! Just an interesting thought! Agree or Not?</td>
</tr>
</tbody>
</table>
<p>So where to begin, I guess the first question is: Why do you want to use Spring? What service(s) will it provide for you? I think many developers simply wanted to slam it on their resume! Let&#8217;s start with the the most obvious use of Spring, Dependency Injection (<a href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank">WIKI</a>, <a href="http://martinfowler.com/articles/injection.html" target="_blank">Fowler</a>). I think this is the hardest thing for most developers to actually understand! If you think you are just writing XML code to create your instances rather than writing Java code, you have already missed the boat. I really believe that most developers have not actually taken advantage of DI in their applications.  They just use Spring to create an alternative static (hard-wired) bean creation strategies. Just for fun, I thought I would highlight some <em>anti-</em>patterns I have seen used before and hopefully never again!</p>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr>
<td><strong>Create a Factory.</strong><br />
<img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/10/moz-screenshot-21.png" alt="" />Factories are so 1990. This is one hurdle that some developers have a tough time understanding. They continue to think about creating objects via factories. There is NO need to ever create a factory when using Spring. Spring is essentially the a super factory, plus it is actually responsible for the life-cycle of those vended objects. There are scenarios where you need to specifically create objects that Spring manages, in a loop for example; but these are very uncommon. The proper way to solve this problem, is to create a bean that is <a href="http://www.java2s.com/Code/Java/Spring/ApplicationContextAware.htm" target="_blank">ApplicationContextAware</a>.  When this bean is created (by Spring itself), Spring will set the application context on this bean. Now, you have the ability to ask for any bean that Spring is managing.</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr>
<td><strong><em>Ask</em> Spring for objects.</strong><br />
<a href="http://en.wikipedia.org/wiki/Hollywood_Principle" target="_blank"><img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/10/moz-screenshot-5.png" alt="" /></a>This is probably the toughest habit to break and is easiest pattern to get stuck in. This is especially true if you are trying to integrate Spring into an existing project and  is your first attempt at <a href="http://en.wikipedia.org/wiki/Inversion_of_control" target="_blank">Inversion of Control</a>. You will have a much better chance understanding these constructs, if you can start from a clean slate (or at least create a bunch of samples). Spring done right, is truly is a different way of thinking. For example, when working with a context-aware Servlet, you fundamentally NEVER need to ask Spring for a single instance; this is almost a perfect example of IOC and DI.  The whole point of DI is the INJECTION. It is not about ASKING for an instance, it is about being GIVEN an instance;  throw in the IOC principle and your bean will be invoked at the RIGHT time to provide the appropriate behavior.</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr>
<td><strong>Domain Object DI.</strong><br />
<img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/10/moz-screenshot-6.png" alt="" />This was an unusual one for me. I recently observed a project that used Spring to created multiple static Singleton factories to vend out a variety of instances, each factory with it&#8217;s own Spring context file. Needless to say, this application was far from easy to understand. To my surprise, there was even a factory specifically implemented for creating the business domain objects. Why this was done is still a mystery to me and seems to violate the true spirit of Spring. Why would I ever want to call DomainFactory.getNewWidget() or DomainFactory.getNewGadget()? The configuration had the domain beans defined in a separate Spring context file and oddly, used static methods to initialize specific properties of these new bean instances. There was no way which enabled the XML configuration to be overridden, allowing for different implementations. Worse yet, you were tied to the initialization behavior of the factory methods! Depending on your definition of a domain object, I see very little reason domain object dependency injection.</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse;" border="1" width="90%" align="center">
<tbody>
<tr>
<td><strong>Use Ant to create Spring Configurations.</strong><br />
<img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/10/moz-screenshot-4.png" alt="" />This is an <em>interesting</em> use of Ant in a Spring-based application. The idea here is to generate the Spring configuration and properties file from an Ant task, to specifically configure the context files to each deployment environment. They values are essentially baked into the application and unchangeable.  It is bad enough to substitute property file values, but some developers actually substitute bean name references. This might be a little hard to follow, but the Spring XML configuration would define two different implementations of the same basic function, each with its own name. When the application is built, the Ant tasks would substitute ref=&#8221;<em>bean1</em>&#8221; for some environments and ref=&#8221;<em>bean2</em>&#8221; for others; <em>everywhere</em> that implementation was referenced in the configuration files. Call me crazy, but I don&#8217;t think this what the Spring creators ever intended!</td>
</tr>
</tbody>
</table>
<p>As I have developed a better understanding of Spring and how to take advantage of it features, we have evolved our Spring applications to a state of &#8220;environmental awareness&#8221;. Using this solution, all of the context and property files are packaged into the application, for all known environments at build time. This enables us to build the deployment image (jar/war file) one time, using simple Ant tasks, no more templates, no more substitutions, no complexity. At execution time, Spring is now intelligent and can determine it&#8217;s execution environment; we can use specific property files for specific environments, as well as use alternate implementations (via DI) for each environment. This is where DI really pays off, allowing us to use the appropriate objects, not just properties, but objects for each environment! No code changes, no crazy Ant tasks, you build once and deploy anywhere. I think this is actually pretty slick and what Spring (core functionality) is all about.</p>
<p>I do have to put in a plug in for testability. Taking advantage of jUnit 4.x annotations and Spring integration, makes unit testing a snap. Using the @Resouce annotation to inject everything (instances) you need into your unit test is amazingly elegant; unit testing could not be made any easier. This approach allows us to have highly controlled, customizable execution environments; we can seamlessly manage unique configurations for local development, continuous integration, as well as any actual deployment environment almost magically.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2009/10/spring-framework-anti-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Deployment with Hudson&#8230;</title>
		<link>http://www.beilers.com/2009/09/continuous-deployment-with-hudson/</link>
		<comments>http://www.beilers.com/2009/09/continuous-deployment-with-hudson/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 01:53:12 +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=522</guid>
		<description><![CDATA[Since I was looking through the Hudson plug-in list this week, I decided to try a few more of them. We currently have Hudson continuously deploying a simple web application to a Tomcat instance. Since both Hudson and Tomcat are running on the same server, it was pretty simple to have Tomcat point to the [...]]]></description>
			<content:encoded><![CDATA[<p>Since I was looking through the Hudson plug-in list this week, I decided to try a few more of them. We currently have Hudson continuously deploying a simple web application to a Tomcat instance. Since both Hudson and Tomcat are running on the same server, it was pretty simple to have Tomcat point to the WAR file generated during the build process. Tomcat notices the new WAR file and automatically redeploys the application. Pretty simple and pretty handy; this is about a 100 times easier and faster than dealing with our standard Weblogic deployment process! </p>
<p><img style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/09/moz-screenshot1.jpg" alt="" />So, how do you deploy your application if Hudson is running on a different machine than your Tomcat instance? Fortunately, Hudson provides a plug-in to solve this problem, simply named the <a href="http://wiki.hudson-ci.org/display/HUDSON/Deploy+Plugin">Deploy Plug-in</a>. It supports a variety of containers, taking advantage of the <a href="http://cargo.codehaus.org/">Cargo Framework</a>. Can&#8217;t get much easier than this, just point to your WAR file and fill in the container information. That&#8217;s it! I tried it out today and it worked perfectly. This was a much cleaner approach than adding the logic to the build process.</p>
<div align="center"><img style="float: none;" src="http://www.beilers.com/wp-content/uploads/2009/09/DeployOption.png" /></div>
<p>Having the current code set continuously deployed is a great benefit all by itself. This helps ensure that your application is built correctly and is deployable; How many times have you forgot to add that new JAR file to the WAR, only to discover the failure several days later? Continual deployment also makes the application constantly available to the analysis and test teams. This allows everyone to see the current state of development and bounce through the application to see how it will ultimately work. This early exposure also gives developers a change to resolve issues much earlier in the development cycle. We can achieve more value by adding the integration or system testing to the process as well&#8230; Just think how much we could reduce our development and testing cycles with this level of testing?</p>
<p>I have been starting to read about Selenium on the Hudson mailing list and found this interesting blog by <a href="http://carsonified.com/blog/author/ben-rometsch/">Ben Rometsch</a> on &#8220;<a href="http://carsonified.com/blog/web-apps/easy-automated-web-application-testing-with-hudson-and-selenium/">Easy Automated Testing with Hudson and Selenium</a>&#8220;. I really liked this picture from the article (hopefully it will spark your interest too!) and truly believe this is what we should be working towards&#8230; Maybe this can be one of my next educational adventures!!!<small><font face="sans-serif"><br /></font></small><img src="http://www.beilers.com/wp-content/uploads/2009/09/moz-screenshot-11.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2009/09/continuous-deployment-with-hudson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Firefox Plug-ins &#8211; Useful Firebug Extensions</title>
		<link>http://www.beilers.com/2009/07/more-firefox-plug-ins-useful-firebug-extensions/</link>
		<comments>http://www.beilers.com/2009/07/more-firefox-plug-ins-useful-firebug-extensions/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 00:41:12 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.beilers.com/?p=463</guid>
		<description><![CDATA[I found an interesting web that has all kinds of great information on website design. A highlighted a couple posts that I thought were very interesting: 10 Unusual Places to Get Design Inspiration and 10 Useful Firebug Extensions. You seriously should click on the design inspiration link, especially if you want to see how creative [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://sixrevisions.com/"><img style="float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/07/moz-screenshot-1.jpg" alt="" /></a>I found an interesting web that has all kinds of great information on website design. A highlighted a couple posts that I thought were very interesting: <a target="_blank" href="http://sixrevisions.com/resources/10-unusual-places-to-get-design-inspiration/">10 Unusual Places to Get Design Inspiration</a> and <a target="_blank" href="http://sixrevisions.com/web-development/10-useful-firefox-extensions-to-supercharge-firebug/">10 Useful Firebug Extensions</a>. You seriously should click on the design inspiration link, especially if you want to see how creative people can really be; check the beautiful web sites and unforgettable business cards. Truly amazing!</p>
<p>I also did not realize that people were building plug-ins to extend plug-ins! What a concept! I guess that is what makes Firefox such a powerful web browser, tool, platform; there are plug-ins to do about everything. I previously blogged about Firebug and YSlow, but I did not realize that Firebug was also a platform for other developer centric tools, such as HTML validation and code coverage. Someone was nice enough to create a Mozilla Collection for <a target="_blank" href="https://addons.mozilla.org/en-US/firefox/collection/firetools">Web Debug Tools</a>, it provides links to all of the referenced plug-ins.&nbsp; </p>
<p><img style="float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.beilers.com/wp-content/uploads/2009/07/ietab.PNG" alt="" />I recently found a plug-in that I wanted to share as well, called <a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/1419">IE Tab</a>. A couple of weeks ago, I was working on a web application and was validating the browser compatibility of our CSS; it was kind of painful switching back and forth between the IE and Firefox, especially since I preferred using Firefox. Fortunately, I discovered IE Tab, which is unfortunately not available on Linux! It simply embeds Internet Explorer in a Firefox tab to render the current page&#8217;s content. There will be a little browser icon in the lower right-hand corner of the window; it indicates which browser was used to render the page/tab. Just click on the icon to switch between the two rendering approaches. I think this is much better than having two switch between browsers! Maybe I&#8217;m just lazy! There is one small short coming using this approach, it can only use the version of Internet Explorer that you have installed on your computer. I happened to be using IE8 and our testers were using IE6. Needless to say, we had a couple of unexpected issues! Can you believe that IE6 is still being used? I think I would go crazy with out tabbed browsing!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beilers.com/2009/07/more-firefox-plug-ins-useful-firebug-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
