<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5763764290649132593</id><updated>2016-03-05T04:32:55.463+01:00</updated><category term="programming"/><category term="javablog"/><category term="humor"/><category term="java"/><category term="quote"/><category term="work"/><category term="javascript"/><category term="presentation"/><category term="methodology"/><category term="testing"/><category term="BDD"/><category term="agile"/><category term="technology"/><category term="news"/><category term="object-relational mapping"/><category term="cool stuff"/><category term="weekendreader"/><category term="groovy"/><category term="Weekend Reader"/><category term="bookreview"/><category term="quicktip"/><category term=".net"/><category term="domain driven design"/><category term="professional_pessimism"/><category term="scrum"/><category term="specflow"/><category term="tidbit"/><category term="dysfunction"/><category term="grails"/><category term="mac"/><category term="hibernate"/><category term="ruby/rails"/><category term="DSL"/><category term="MDSD"/><category term="ios"/><category term="jpa"/><category term="kindle"/><category term="patterns"/><category term="TDD"/><category term="cucumber"/><category term="nonsense"/><category term="AngularJS"/><category term="annoyance"/><category term="craftmanship"/><category term="ipad"/><category term="jboss"/><category term="jobs"/><category term="nashorn"/><category term="trivia"/><category term="angular"/><category term="books"/><category term="courses"/><category term="design"/><category term="disappointment"/><category term="entityframework"/><category term="knowhow"/><category term="nosql"/><category term="react"/><category term="scala"/><category term="socialnetwork"/><category term="top"/><title type='text'>CLOSED-LOOP</title><subtitle type='html'>[Reflecting Reality Reflecting Reality Reflecting Reality Reflecting Reality]</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/-/javablog'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/search/label/javablog'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/-/javablog/-/javablog?start-index=26&amp;max-results=25'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>109</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-8537398981722855780</id><published>2010-11-03T01:04:00.004+01:00</published><updated>2010-11-04T00:06:04.360+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>Oracle vs. Google reminds me of Matrix Revolutions</title><content type='html'>&lt;img alt=&quot;Oracle.jpg&quot; border=&quot;0&quot; src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/TNCnB0flORI/AAAAAAAAA5A/4YLIV2Js284/Oracle.jpg?imgmax=800&quot; style=&quot;float: right; margin-left: 10px;&quot; width=&quot;220&quot; /&gt;
Ha ha ha ...&lt;br /&gt;
&lt;br /&gt;
All that &lt;a href=&quot;http://www.dzone.com/links/r/nervousness_in_the_java_camp_and_oracles_silence.html&quot;&gt;talk&lt;/a&gt;, &lt;a href=&quot;http://jaxenter.com/java-in-crisis-32402.html&quot;&gt;predicions&lt;/a&gt;, &lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-openjdkroundup/index.html?ca=drs-&quot;&gt;more talk&lt;/a&gt; and &lt;a href=&quot;http://www.theserverside.com/news/2240024154/The-Oracle-Lawsuit-Will-End-with-Google-Owning-Java&quot;&gt;conspiracy theories&lt;/a&gt; around the Oracle vs. Google lawsuit and it&#39;s meaning for Java reminds me somehow of the time right after &lt;i&gt;Matrix Revolutions&lt;/i&gt; when everybody was speculating about the plot of the third movie &lt;i&gt;Matrix Reloaded&lt;/i&gt;. &lt;span style=&quot;font-size: 10px;&quot;&gt;(Why can Neo control the sentinels in the real world, why can Smith take the body of a real human, what did the architect really mean ...)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
There were actually people that &lt;a href=&quot;http://www.cinemablend.com/forum/archive/index.php/t-5384.html&quot;&gt;spun up plots for &lt;i&gt;Reloaded&lt;/i&gt; that were much better&lt;/a&gt;*&amp;nbsp;than what finally turned out to be the disappointing end of the trilogy. I guess the same is true for the &lt;a href=&quot;http://www.theserverside.com/news/2240024154/The-Oracle-Lawsuit-Will-End-with-Google-Owning-Java&quot;&gt;current wild theories&lt;/a&gt; where Java is heading ...&lt;br /&gt;
&lt;br /&gt;
... somehow I suspect that the same that happened to &lt;i&gt;Matrix Revolutions&lt;/i&gt; will happen to all the fuzz and expectations about where Java is heading: A year from now nothing will have changed substantially &lt;span style=&quot;font-size: 10px;&quot;&gt;(&lt;/span&gt;&lt;i style=&quot;font-size: 10px;&quot;&gt;Revolutions&lt;/i&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt; was not worthy to be connected to the first &lt;i&gt;Matrix&lt;/i&gt; movie)&lt;/span&gt; and&amp;nbsp;nobody will talk about it any more.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Much ado about nothing&lt;/i&gt;!&lt;br /&gt;
&lt;div style=&quot;clear: right; font-size: 10px;&quot;&gt;
&lt;br /&gt;
*search for&amp;nbsp;﻿neo2083&lt;/div&gt;
&lt;div style=&quot;clear: right; font-size: 10px;&quot;&gt;
&lt;a href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; height=&quot;13px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; style=&quot;margin: 0px;&quot; /&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/8537398981722855780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/11/oracle-vs-google-reminds-me-of-matrix.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/8537398981722855780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/8537398981722855780'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/11/oracle-vs-google-reminds-me-of-matrix.html' title='Oracle vs. Google reminds me of Matrix Revolutions'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_X3kaawac_g4/TNCnB0flORI/AAAAAAAAA5A/4YLIV2Js284/s72-c/Oracle.jpg?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-6798398551841659764</id><published>2010-04-13T18:04:00.001+02:00</published><updated>2010-04-13T18:06:37.203+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="patterns"/><title type='text'>M-V-VM: It&#39;s not a pattern, just a mess!</title><content type='html'>&lt;img src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/S8HbIO8MT3I/AAAAAAAAAz0/C3cu_0kulmI/confused.jpg?imgmax=800&quot; alt=&quot;confused.jpg&quot; border=&quot;0&quot; width=&quot;200&quot; align=&quot;right&quot; /&gt;
Ok, I am being provocative here:
&lt;br/&gt;
&lt;br/&gt;
After attending &lt;a href=&quot;http://twitter.com/LBugnion/&quot;&gt;LBugnion&lt;/a&gt; session &quot;Das “Model-View-ViewModel” Entwurfsmuster&quot; at the &lt;a href=&quot;http://www.microsoft.com/switzerland/msdn/de/techdays/default.aspx&quot;&gt;TechDays&lt;/a&gt; last week and now watching DNR-TV episode 161: &lt;a href=&quot;http://www.dnrtv.com/default.aspx?showNum=161&quot;&gt;Rocky Lhotka on the MVVM Pattern in CSLA .NET 3.8&lt;/a&gt;, I now dare to claim that:

&lt;blockquote style=&quot;font-size:14px; font-weight:bold&quot;&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/MVVM&quot;&gt;Model-View-ViewModel pattern&lt;/a&gt; is not a pattern!&lt;/blockquote&gt;

I have been &lt;a href=&quot;http://blog.jonasbandi.net/2008/07/sophisticated-vocabulary-mvc.html&quot;&gt;confused for a long time&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
Now I have come to the conclusion that I will stay with the classic presentation patterns and &lt;a href=&quot;http://martinfowler.com/eaaDev/PresentationModel.html&quot;&gt;Fowlers discussion&lt;/a&gt;: MVC, MVP, Supervising Controller, Passive View, Presentation Model.
&lt;br/&gt;
&lt;br/&gt;
Those concepts are quite clear and provide a sufficient vocabulary to discuss architecture and design of the presentation layer of an application. There is nothing to M-V-VM that provides additional concepts that are not covered by the former patterns.
&lt;br/&gt;
&lt;br/&gt;
For &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/MVVM&quot;&gt;Model-View-ViewModel&lt;/a&gt;&lt;/em&gt; I have just seen too many varying ideas, too many different concepts and too unclear explanations.
So I can&#39;t accept it neither as an architectural- nor as a design-pattern.
&lt;br/&gt;
&lt;br/&gt;
The fact that in the Java world the notion of this pattern is nonexistent is also an indicator that this can&#39;t be a fundamental concept in software development (though technologies like xamlwpfsilverlight might legitimate the need for new patterns).
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/6798398551841659764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/04/m-v-vm-it-not-pattern-just-mess.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6798398551841659764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6798398551841659764'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/04/m-v-vm-it-not-pattern-just-mess.html' title='M-V-VM: It&amp;#39;s not a pattern, just a mess!'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_X3kaawac_g4/S8HbIO8MT3I/AAAAAAAAAz0/C3cu_0kulmI/s72-c/confused.jpg?imgmax=800" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-7149131669752283665</id><published>2010-03-31T00:37:00.005+02:00</published><updated>2010-09-05T18:54:48.388+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="cucumber"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><title type='text'>Classifying BDD Tools (Unit-Test-Driven vs. Acceptance Test Driven) and a bit of BDD history</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_X3kaawac_g4/S6-9sArYT_I/AAAAAAAAAzQ/Hy4cAADP7Jw/s1600/gearknob.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://2.bp.blogspot.com/_X3kaawac_g4/S6-9sArYT_I/AAAAAAAAAzQ/Hy4cAADP7Jw/s200/gearknob.jpg&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_driven_development&quot;&gt;BDD (Behavior Driven Developement)&lt;/a&gt; seems to gain momentum lately.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_driven_development&quot;&gt;BDD&lt;/a&gt; is hard to grasp, because it is more than a &lt;i&gt;development&lt;/i&gt; methodology (unlike &lt;a href=&quot;http://en.wikipedia.org/wiki/Test_Driven_Development&quot;&gt;TDD&lt;/a&gt;) and there are currently very different ideas what it really means. To make matters worse there are a lot of BDD tools around that pursue quite different concepts.&lt;br /&gt;
In this post I try to classify two main categories among those tools.&lt;br /&gt;
&lt;br /&gt;
Important for the understanding is that &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_driven_development&quot;&gt;BDD&lt;/a&gt; can be practiced at &lt;b&gt;different levels&lt;/b&gt;. At the &lt;b&gt;code/unit level&lt;/b&gt; and at the &lt;b&gt;feature level&lt;/b&gt;. In both cases it is a good practice to &lt;b&gt;use examples to specify the behavior&lt;/b&gt; of the units resp. features. However in both cases we have different stakeholders and intents with the BDD process.&lt;br /&gt;
Both approaches to BDD are not exclusive, they can be combined.&lt;br /&gt;
(see also &quot;&lt;a href=&quot;http://groups.google.com/group/specflow/browse_thread/thread/cbfcacf5a197f75e/f59a4f4c138e6f0f?#f59a4f4c138e6f0f&quot;&gt;BDD
 for Acceptance Tests vs. BDD for Unit Tests (or: ATDD vs. TDD)&lt;/a&gt;&quot; on the &lt;a href=&quot;http://www.specflow.org/&quot;&gt;SpecFlow&lt;/a&gt; mailing list)&lt;br /&gt;
&lt;br /&gt;
Currently I would differentiate two flavors of BDD tools:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Tools with a &lt;b&gt;business readable output&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Tools with a &lt;b&gt;business readable input&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
With tools from the first category (business readable output) the support for the BDD process is typically &lt;b&gt;focused on the developers&lt;/b&gt;. All artifacts involved are owned by the developers and are typically code. This is not a bad thing, as responsible and committed developers are often the main stakeholders in successful software projects. Other stakeholders are only addressed by the tools by providing understandable reports &lt;i&gt;after developers have done their work&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Tools from the second category (business readable input) try to widen the focus of the BDD process by &lt;b&gt;enabling more involvement by all other stakeholders&lt;/b&gt;: customers, business analysts, testers maybe even operations.&lt;br /&gt;
This involvement is possible &lt;i&gt;upfront&lt;/i&gt;, meaning &lt;i&gt;before the developers have done their work&lt;/i&gt;. This business readable input is an artifact commonly owned by all stakeholders. By having a &lt;b&gt;commonly owned artifact&lt;/b&gt;, the process tries to ensure that all involved stakeholders build up a &lt;b&gt;shared understanding&lt;/b&gt; which is crucial for successfully software projects (for more information I suggest reading &lt;a href=&quot;http://www.acceptancetesting.info/the-book/&quot;&gt;Bridging the Communication Gap&lt;/a&gt; by &lt;a href=&quot;http://gojko.net/&quot;&gt;Gojko Adzic&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Because this &lt;b&gt;shared understanding&lt;/b&gt; is input (as opposed to output) and business readable, the process can even be taken further and make the artifact business writable. If this is achieved successfully then we have done a big step towards &lt;b&gt;executable specifications&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
In practice we often see tools of the first category (business readable input) used as a replacement/extension for &lt;a href=&quot;http://en.wikipedia.org/wiki/Test_Driven_Development&quot;&gt;TDD&lt;/a&gt; at a unit-testing level.&lt;br /&gt;
In this case the behavior of the unit under development is focused by trying to specify this behavior upfront in a less technical way. However this is usually not interesting for other stakeholders than developers, because the &lt;b&gt;technical units under development are usually too fine grained and have no meaning to non technical persons&lt;/b&gt;. Also technical units are the primary focus of developers and they are the main stakeholders (think of testability, separation of concern, maintainability ...), other stakeholders should not be too involved here. So this is mainly a tool for developers and allows in some cases the &lt;i&gt;mapping of technical units to overlying features&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
The second kind of tools aim clearly at &lt;a href=&quot;http://en.wikipedia.org/wiki/Acceptance_testing&quot;&gt;Acceptance Testing&lt;/a&gt; and &lt;a href=&quot;http://www.methodsandtools.com/archive/archive.php?id=23&quot;&gt;Acceptance Test Driven Development&lt;/a&gt;. Here &lt;i&gt;system features are clearly focused&lt;/i&gt;. &lt;b&gt;Features are usually more coarse grained than the behaviors of single technical units&lt;/b&gt;. Features should always be understood and driven by business requirements.&lt;br /&gt;
&lt;br /&gt;
It is certainly possible to write acceptance tests with the first category of tools, but the driving aspect (as in Acceptance Test &lt;i&gt;Driven&lt;/i&gt; Developement) is certainly harder to achieve and less supported by these kind of tools.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Examples:&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://easyb.org/&quot;&gt;Easyb&lt;/a&gt; is a Groovy based tool of the first category. The following example (from &lt;a href=&quot;http://tech.mrozewski.pl/2010/02/26/from-junit3-to-easyb/&quot;&gt;this post&lt;/a&gt;) shows how &lt;b&gt;behavior is specified at at unit-level (class-level)&lt;/b&gt;:&lt;br /&gt;
&lt;div style=&quot;border: 1px solid silver; overflow: auto;&quot;&gt;
&lt;div style=&quot;width: 800px;&quot;&gt;
&lt;pre class=&quot;groovy&quot;&gt;scenario &lt;span style=&quot;color: red;&quot;&gt;&quot;Two amounts with the same currencies are added&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
  given &lt;span style=&quot;color: red;&quot;&gt;&quot;Two different amounts with the same currencies&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
    money1 = &lt;a href=&quot;http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new&quot;&gt;&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Money&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;&quot;CHF&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    money2 = &lt;a href=&quot;http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new&quot;&gt;&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Money&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;14&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;&quot;CHF&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    expected = &lt;a href=&quot;http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new&quot;&gt;&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Money&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;26&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;&quot;CHF&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
  when &lt;span style=&quot;color: red;&quot;&gt;&quot;Add given amounts&quot;&lt;/span&gt; , &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
    result = money1.&lt;span style=&quot;color: #006600;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;money2&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
  then &lt;span style=&quot;color: red;&quot;&gt;&quot;New amount is sum of two given ones&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
    result.&lt;span style=&quot;color: #006600;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;expected&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;.shouldBe true&lt;/pre&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;  }&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;groovy&quot;&gt;scenario &lt;span style=&quot;color: red;&quot;&gt;&quot;Two amounts with different currencies are added&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
  given &lt;span style=&quot;color: red;&quot;&gt;&quot;Two amounts with different currencies&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
    money1 = &lt;a href=&quot;http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new&quot;&gt;&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Money&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;&quot;CHF&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    money2 = &lt;a href=&quot;http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new&quot;&gt;&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Money&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;14&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;&quot;EURO&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
  when &lt;span style=&quot;color: red;&quot;&gt;&quot;Add given amounts&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
    add = &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
      money1.&lt;span style=&quot;color: #006600;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;money2&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
  then &lt;span style=&quot;color: red;&quot;&gt;&quot;Operation should fail&quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
    ensureThrows&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.google.de/search?as_q=IllegalArgumentException&amp;amp;num=100&amp;amp;hl=en&amp;amp;as_occt=url&amp;amp;as_sitesearch=java.sun.com%2Fj2se%2F1.5.0%2Fdocs%2Fapi%2F&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;IllegalArgumentException&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;{&lt;/span&gt;
      add&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
Executing the above story gives you the follwowing readable report:&lt;br /&gt;
&lt;div style=&quot;border: 1px solid silver; overflow: auto;&quot;&gt;
&lt;div style=&quot;width: 800px;&quot;&gt;
&lt;code&gt;
2 scenarios executed successfully.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; Story: money&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scenario Two amounts with the same currencies are added&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; given Two different amounts with the same currencies&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when Add given amounts&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then New amount is sum of two given ones&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scenario Two amounts with different currencies are added&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; given Two amounts with different currencies&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when Add given amounts&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then Operation should fail&lt;br /&gt;
&lt;/code&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;(of course easyb can also generate a fancy html report)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.cukes.info/&quot;&gt;Cucumber&lt;/a&gt; is a tool of the second category. The &lt;a href=&quot;http://github.com/aslakhellesoy/cuke4duke/blob/master/examples/java-ejb3/features/01_book_search.feature&quot;&gt;following example from cuke4duke&lt;/a&gt; shows how an &lt;b&gt;executable feature&lt;/b&gt; is specified:&lt;br /&gt;
&lt;div style=&quot;border: 1px solid silver; overflow: auto;&quot;&gt;
&lt;div style=&quot;width: 800px;&quot;&gt;
&lt;code&gt;
Feature: Book search&lt;br /&gt;&amp;nbsp; In order to find books I might buy&lt;br /&gt;&amp;nbsp; As a potential customer&lt;br /&gt;&amp;nbsp; I want to search for books by different criterias&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; Background:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given the following books&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Author&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Title&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Year | Publisher&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Martin Fowler&amp;nbsp;&amp;nbsp; | Patterns of Enterprise Application Architecture | 2002 | Addison Wesley |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Eric Evans&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Domain Driven Design&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 2003 | Addison Wesley |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Gerard Meszaros | xUnit Test Patterns&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 2007 | Addison Wesley |&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; Scenario: Search for title&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I search for title &#39;Patterns&#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the result list should contain 2 books&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; Scenario: Search for author&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I search for author &#39;Fowler&#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the result list should contain 2 books&lt;br /&gt;
&lt;/code&gt;
&lt;/div&gt;
&lt;/div&gt;
(notice the error in the second scenario!)&lt;br /&gt;
&lt;br /&gt;
When executing this example (using &lt;a href=&quot;http://github.com/aslakhellesoy/cuke4duke&quot;&gt;cuke4duke&lt;/a&gt;) the whole EJB stack is exercised, including database-access. The result is the following report:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/_X3kaawac_g4/S69i_yGY6OI/AAAAAAAAAzA/njwSl_k0cgE/s1600/Cucumber_Report.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;297&quot; src=&quot;http://1.bp.blogspot.com/_X3kaawac_g4/S69i_yGY6OI/AAAAAAAAAzA/njwSl_k0cgE/s400/Cucumber_Report.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;(of course Cucumber can generate a lot of different outputs)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;History&lt;/b&gt; &lt;span style=&quot;font-size: x-small;&quot;&gt;(as I could reconstruct it)&lt;/span&gt;:&lt;br /&gt;
Tools from the first category evolved from TDD. Dan North introduced BDD in 2002, see his &lt;a href=&quot;http://dannorth.net/introducing-bdd&quot;&gt;introductory blog post&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;http://jbehave.org/&quot;&gt;JBehave&lt;/a&gt; was one of the first BDD tools, at this point clearly part of the first of the above categories.&lt;br /&gt;
Then the BDD movement was mainly driven by the Ruby/Rails community. &lt;a href=&quot;http://blog.dannorth.net/2007/06/17/introducing-rbehave/&quot;&gt;RBehave was introduced&lt;/a&gt; and then merged into RSpec as&lt;i&gt; RSpec Story Runner&lt;/i&gt;.&lt;br /&gt;
&lt;a href=&quot;http://rspec.info/&quot;&gt;RSpec&lt;/a&gt; then was as a tool that could satisfy both of the above catgories&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;RSpec StoryRunner&lt;/i&gt; was then dropped and &lt;a href=&quot;http://www.cukes.info/&quot;&gt;Cucumber&lt;/a&gt; was created. Cucumber coined the current flavor of BDD tools with plain-text specifications. &lt;a href=&quot;http://rspec.info/&quot;&gt;Cucumber&lt;/a&gt; also is aiming at extending its reach beyond Ruby/Rails (see &lt;a href=&quot;http://github.com/aslakhellesoy/cuke4duke&quot;&gt;cuke4duke&lt;/a&gt;, &lt;a href=&quot;http://github.com/richardlawrence/Cuke4Nuke&quot;&gt;cuke4Nuke&lt;/a&gt;, &lt;a href=&quot;http://github.com/aslakhellesoy/gherkin&quot;&gt;gherkin&lt;/a&gt;).&lt;br /&gt;
Other first-generation tools then adapted and also support plain-text specifications (&lt;a href=&quot;http://jbehave.org/&quot;&gt;JBehave2&lt;/a&gt;, &lt;a href=&quot;http://nbehave.org/&quot;&gt;NBehave&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Beside all those explicit &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_driven_development&quot;&gt;BDD&lt;/a&gt; tools there is &lt;a href=&quot;http://fit.c2.com/&quot;&gt;FIT&lt;/a&gt;/&lt;a href=&quot;http://fitnesse.org/&quot;&gt;FitNesse&lt;/a&gt;. FIT was also invented in 2002 by Ward Cunningham. Its goal was enabling collaboration and communication through automated &lt;a href=&quot;http://en.wikipedia.org/wiki/Acceptance_testing&quot;&gt;accepatance testing&lt;/a&gt;. &lt;a href=&quot;http://fitnesse.org/&quot;&gt;FitNesse &lt;/a&gt;took up the basics of FIT and provided an intuitive, wiki-based frontend/IDE.&lt;br /&gt;
While FIT seems to have practically died, &lt;a href=&quot;http://fitnesse.org/&quot;&gt;FitNesse&lt;/a&gt;&amp;nbsp; is still thriving. FitNesse also recently added &lt;a href=&quot;http://fitnesse.org/FitNesse.UserGuide.SliM.ScenarioTable&quot;&gt;Parameterized Scenario Tables&lt;/a&gt; and there is &lt;a href=&quot;http://code.google.com/p/givwenzen/&quot;&gt;GivWenZen&lt;/a&gt;. This makes it possible to use the plain-text GWT (Given-When-Then) syntax, that was made popular by the plain-text BDD tools.&lt;br /&gt;
&lt;br /&gt;
I will list a more complete overview of BDD tools for the Java and .Net platforms in later posts.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;clear: right; font-size: 10px;&quot;&gt;
&lt;br /&gt;
&lt;a href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; height=&quot;13px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; style=&quot;margin: 0px;&quot; /&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/7149131669752283665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/03/classifying-bdd-tools-unit-test-driven.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7149131669752283665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7149131669752283665'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/03/classifying-bdd-tools-unit-test-driven.html' title='Classifying BDD Tools (Unit-Test-Driven vs. Acceptance Test Driven) and a bit of BDD history'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_X3kaawac_g4/S6-9sArYT_I/AAAAAAAAAzQ/Hy4cAADP7Jw/s72-c/gearknob.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-2931412411329047717</id><published>2010-03-18T00:16:00.002+01:00</published><updated>2010-03-18T08:44:45.189+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="work"/><title type='text'>Parkinson&#39;s Laws</title><content type='html'>&lt;img style=&quot;margin: 0px 0px 10px 10px&quot; src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/SzU7IHsRMsI/AAAAAAAAAs4/cXLM2l2ZM1Q/american-law.jpg?imgmax=800&quot; alt=&quot;american-law.jpg&quot; border=&quot;0&quot; width=&quot;150&quot; align=&quot;right&quot; /&gt;
I only recently stumbled over Parkinsons Laws, even though I think in the  IT business we are constantly confronted with them:
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;a href=&quot;http://en.wikipedia.org/wiki/Parkinson%27s_Law&quot;&gt;Parkinson&#39;s Law&lt;/a&gt;:
&lt;blockquote style=&quot;font-size:14pt&quot;&gt;Work expands so as to fill the time available for its completion.&lt;/blockquote&gt;
Who has not seen self fulfilling estimations?
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;a href=&quot;http://en.wikipedia.org/wiki/Parkinson%27s_Law_of_Triviality#Related_principles_and_formulations&quot;&gt;Parkinson&#39;s Law of Triviality&lt;/a&gt;:

&lt;blockquote style=&quot;font-size:14pt&quot;&gt;Organisations give disproportionate weight to trivial issues. &lt;br/&gt;
&lt;div style=&quot;font-size:10pt&quot;&gt;(the time spent on any item of the agenda will be in inverse proportion to the sum involved.)&lt;/div&gt;&lt;/blockquote&gt;

Think of this next time you are on a meeting discussing the pros and cons of using underscores as prefix for member variables ...
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/2931412411329047717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/03/parkinson-laws.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/2931412411329047717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/2931412411329047717'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/03/parkinson-laws.html' title='Parkinson&amp;#39;s Laws'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_X3kaawac_g4/SzU7IHsRMsI/AAAAAAAAAs4/cXLM2l2ZM1Q/s72-c/american-law.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-7561501162320302264</id><published>2010-02-26T17:51:00.001+01:00</published><updated>2010-02-27T17:50:29.455+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="work"/><title type='text'>Phrases that should set off an alarm in every software developers brain</title><content type='html'>In software development there are some requirements that should immediately trigger all available bells in your subconscious alarming system:
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;This must be in real-time&lt;/blockquote&gt;

&lt;blockquote&gt;The system must support historisation&lt;/blockquote&gt;

&lt;blockquote&gt;The system must support &lt;a href=&quot;http://en.wikipedia.org/wiki/Multitenancy&quot;&gt;multitenancy&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;The system must provide reports for every screen.&lt;/blockquote&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;img style=&quot;margin: 0px 0px 10px 10px&quot; src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/S4cFYz4HRbI/AAAAAAAAAwo/ZFz-jvdTwag/66171.jpg?imgmax=800&quot; alt=&quot;66171.jpg&quot; border=&quot;0&quot; width=&quot;160&quot; align=&quot;right&quot; /&gt;Usually those sentences are just mentioned as side notes or in the small print, as if they go without saying anyway and are the most evident thing in the universe.
&lt;br/&gt;
&lt;br/&gt;
But usually they imply a huge communication gap, that can cost buckets of money and bring wagon loads of grief.
&lt;br/&gt;
&lt;br/&gt;
Do you know other requirements that fall into the same category?
&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Update:&lt;/strong&gt;
&lt;a href=&quot;http://twitter.com/asztupak/status/9687598692&quot;&gt;@asztupak on twitter&lt;/a&gt;
&lt;blockquote&gt;It should support all features the previous system had&lt;/blockquote&gt;
&lt;br/&gt;
&lt;strong&gt;Update:&lt;/strong&gt;
&lt;a href=&quot;http://news.ycombinator.com/item?id=1153505&quot;&gt;Comments on Hacker News&lt;/a&gt;
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/7561501162320302264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/02/phrases-that-should-set-off-alarm-in.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7561501162320302264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7561501162320302264'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/02/phrases-that-should-set-off-alarm-in.html' title='Phrases that should set off an alarm in every software developers brain'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_X3kaawac_g4/S4cFYz4HRbI/AAAAAAAAAwo/ZFz-jvdTwag/s72-c/66171.jpg?imgmax=800" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-5964289806886364278</id><published>2010-02-12T16:49:00.002+01:00</published><updated>2011-02-12T16:52:00.936+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>The Agile Testing Quadrants</title><content type='html'>&lt;div style=&quot;float: right; margin-left: 10px;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm-de.amazon.de/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=cl00-21&amp;amp;o=3&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1M6ABJKN5YT3337HVA02&amp;amp;asins=0321534468&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
Discovering the Agile Testing Quadrants was close to an epiphany to me. 
&lt;br /&gt;
They helped me to think much clearer about the different concepts, disciplines and fields of software testing.
&lt;br /&gt;
&lt;br /&gt;
The original concept is from Brian Marick, but the quadrants are discussed in depth in the &lt;a href=&quot;http://www.amazon.de/gp/product/0321534468?ie=UTF8&amp;amp;tag=cl00-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0321534468&quot;&gt;brilliant book &quot;Agile Testing&quot;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.de/e/ir?t=cl00-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321534468&quot; style=&quot;border: medium none ! important; margin: 0px ! important;&quot; width=&quot;1&quot; /&gt;  by Lisa Crispin and Janet Gregory.
&lt;br /&gt;
&lt;br /&gt;
There is also a &lt;a href=&quot;http://agilevancouver.ca/sites/agilevancouver/files/speakerslides/Vancouver-Quadrants.pdf&quot;&gt;presentation&lt;/a&gt; from Agile Vancouver 2008 held by Janet Gregory.
&lt;br /&gt;
&lt;br /&gt;
A project can draw different benefits from each of the testing quadrants:
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://lh3.ggpht.com/_X3kaawac_g4/S3VCgzOuyQI/AAAAAAAAAvw/aww4Ui2N7LU/agile-testing-quadrants.JPG?imgmax=800&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img alt=&quot;agile-testing-quadrants.JPG&quot; border=&quot;0&quot; src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/S3VCgzOuyQI/AAAAAAAAAvw/aww4Ui2N7LU/agile-testing-quadrants.JPG?imgmax=800&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;/a&gt;

&lt;br /&gt;
Traditional software testing focuses almost exclusively on the right side, critiquing the product but not playing a productive part in supporting the creation of the product.
&lt;br /&gt;
Traditional software testing is involved late in the development process to detect bugs but not to prevent them.
&lt;br /&gt;
&lt;br /&gt;
The lower left quadrant is the typical developer testing. &lt;a href=&quot;http://en.wikipedia.org/wiki/Unit_test&quot;&gt;Unit-testing&lt;/a&gt; and integration-testing, hopefully automated and with continuous integration, are quite common practice today.
&lt;br /&gt;
&lt;br /&gt;
The upper left quadrant is where we are entering quite new territory compared to what is common practice in the industry.
&lt;br /&gt;
&lt;br /&gt;
It&#39;s here where we place &lt;a href=&quot;http://www.methodsandtools.com/archive/archive.php?id=72&quot;&gt;Acceptance Test Driven Development (ATDD)&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_Driven_Development&quot;&gt;Behavior Driven Development (BDD)&lt;/a&gt;. Those are quite new agile methodologies that focus on improving quality by placing activities from testing early in the development process. Those activities are constantly supporting the development process throughout its whole duration.
&lt;br /&gt;
&lt;br /&gt;
However it&#39;s important to understand that all testing quadrants are important. It&#39;s not that focusing completely on one quadrant can make the other quadrants completely obsolete. However a well tailored testing strategy uses all quadrants appropriately to improve testing as a whole. Depending on the concrete project the different quadrants have to be wighted accordingly.
&lt;br /&gt;
&lt;div style=&quot;clear: right; font-size: 10px;&quot;&gt;
&lt;br /&gt;
&lt;a href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; height=&quot;13px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; style=&quot;margin: 0px;&quot; /&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/5964289806886364278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/02/agile-testing-quadrants.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/5964289806886364278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/5964289806886364278'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/02/agile-testing-quadrants.html' title='The Agile Testing Quadrants'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_X3kaawac_g4/S3VCgzOuyQI/AAAAAAAAAvw/aww4Ui2N7LU/s72-c/agile-testing-quadrants.JPG?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-6307927971548638570</id><published>2010-02-03T17:12:00.001+01:00</published><updated>2010-02-03T17:17:24.911+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="humor"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="quote"/><title type='text'>Swarm Programming - Scaling Pair Programming</title><content type='html'>&lt;img style=&quot;margin: 0px 0px 10px 10px&quot;src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SzzUB3Rw-1I/AAAAAAAAAt4/yO8s5_7O0ks/3600672192_f281a5a995.jpg?imgmax=800&quot; alt=&quot;3600672192_f281a5a995.jpg&quot; border=&quot;0&quot; width=&quot;150&quot;  align=&quot;right&quot; /&gt;
This is another tidbit from &lt;a href=&quot;http://twitter.com/tastapod&quot;&gt;Dan North&lt;/a&gt; at the parkbench panel discussion on the &lt;a href=&quot;http://skillsmatter.com/event/java-jee/agile-specifications-bdd-and-testing-exchange&quot;&gt;Agile Testing, Specifications and BDD exchange&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
If I remember correctly the topic of the discussion was about the topic if software engineering is really an engineering discipline or rather a &lt;a href=&quot;http://manifesto.softwarecraftsmanship.org/&quot;&gt;craftsmanship&lt;/a&gt;:
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;
Are you sure that what &lt;em&gt;you&lt;/em&gt; do is software &lt;em&gt;engineering&lt;/em&gt;? NASA is doing software engineering!
&lt;br/&gt;
&lt;br/&gt;
In commercial software the average cost for a line of code is estimated at 5$.
&lt;br/&gt;
At NASA the average cost for a line of code is 5&#39;000$.
&lt;br/&gt;
&lt;br/&gt;
They are not just &lt;em&gt;Pair Programming&lt;/em&gt;, what they do could be called &lt;strong&gt;&lt;em&gt;Swarm Programming&lt;/em&gt;&lt;/strong&gt;!
&lt;/blockquote&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/6307927971548638570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/02/swarm-programming-scaling-pair.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6307927971548638570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6307927971548638570'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/02/swarm-programming-scaling-pair.html' title='Swarm Programming - Scaling Pair Programming'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-4177252269214551920</id><published>2010-02-02T22:55:00.001+01:00</published><updated>2010-02-04T09:10:45.866+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="cucumber"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><title type='text'>How to debug your code with cuke4duke</title><content type='html'>&lt;img style=&quot;margin: 0px 10px 10px 0px&quot; src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/S0nxyUKaIYI/AAAAAAAAAu0/CtKaMavsxoM/cucumber.jpg?imgmax=800&quot; alt=&quot;cucumber.jpg&quot; border=&quot;0&quot; width=&quot;150&quot; align=&quot;right&quot; /&gt;
&lt;a href=&quot;http://github.com/aslakhellesoy/cuke4duke&quot;&gt;Cuke4duke&lt;/a&gt; is a &lt;a href=&quot;http://www.methodsandtools.com/archive/archive.php?id=72&quot;&gt;ATDD&lt;/a&gt;/&lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_driven_development&quot;&gt;BDD&lt;/a&gt; tool for the JVM. The tool is based on &lt;a href=&quot;http://cukes.info/&quot;&gt;Cucumber&lt;/a&gt; and uses JRuby to execute.
&lt;br/&gt;
&lt;br/&gt;
Out of the box &lt;a href=&quot;http://github.com/aslakhellesoy/cuke4duke&quot;&gt;cuke4duke&lt;/a&gt; offers three main ways to execute: Ant, Maven or cuke4duke-commandline.
&lt;br/&gt;
&lt;br/&gt;
But all of those three approaches are a bit tricky if you want to debug your application when executing in a BDD scenario.
&lt;br/&gt;
&lt;br/&gt;
There is some &lt;a href=&quot;http://wiki.github.com/aslakhellesoy/cuke4duke/debug-cuke4duke-steps&quot;&gt;information on the wiki&lt;/a&gt; how to achieve it.
&lt;br/&gt;
&lt;br/&gt;
Here some more details:
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Maven and Remote Debugging&lt;/strong&gt;
&lt;br/&gt;
&lt;br/&gt;

When using Maven, you can add the following lines to your cuke4duke config in your pom.xml:

&lt;div style=&quot;border:solid 1px silver;width:410px;overflow:auto&quot;&gt;&lt;code&gt;
&lt;pre&gt;&amp;lt;plugin&amp;gt;
  &amp;lt;groupId&amp;gt;cuke4duke&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;cuke4duke-maven-plugin&amp;lt;/artifactId&amp;gt;
  &amp;lt;configuration&amp;gt;
    &amp;lt;jvmArgs&amp;gt;
      &amp;lt;jvmArg&amp;gt;-Dcuke4duke.objectFactory=cuke4duke.internal.jvmclass.PicoFactory&amp;lt;/jvmArg&amp;gt;
      &amp;lt;jvmArg&amp;gt;-Xdebug&amp;lt;/jvmArg&amp;gt;
      &amp;lt;jvmArg&amp;gt;-Xnoagent&amp;lt;/jvmArg&amp;gt;
      &amp;lt;jvmArg&amp;gt;-Djava.compiler=NONE&amp;lt;/jvmArg&amp;gt;
      &amp;lt;jvmArg&amp;gt;-Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y&amp;lt;/jvmArg&amp;gt;
    &amp;lt;/jvmArgs&amp;gt;
&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br/&gt;

(a running example is &lt;a href=&quot;http://github.com/jbandi/bowling-bdd-java/blob/master/bowling-cuke4duke-java/pom.xml&quot;&gt;here&lt;/a&gt;)
&lt;br/&gt;
&lt;br/&gt;

When you now run the integration-test phase (ie. &lt;code&gt;mvn verify&lt;/code&gt;), then Maven breaks and waits for a debugger to connect:

&lt;code&gt;
&lt;pre&gt;
[INFO] [cuke4duke:cucumber {execution: run-features}]
[INFO] Listening for transport dt_socket at address: 4000
&lt;/pre&gt;&lt;/code&gt;
&lt;br/&gt;

Now you can connect with Eclipse with a new debug configuration (Run-&gt;Debug Configurations...). Choose &#39;Remote Java Application&#39; and configure the same port as you configured in the pom.xml under address:
&lt;a href=&quot;http://lh6.ggpht.com/_X3kaawac_g4/S0ntS_-FedI/AAAAAAAAAuc/Trzw7lRAcgg/Screen%20shot%202010-01-10%20at%204.06.36%20PM.png?imgmax=800&quot;&gt;&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/S0ntS_-FedI/AAAAAAAAAuc/Trzw7lRAcgg/Screen%20shot%202010-01-10%20at%204.06.36%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2010-01-10 at 4.06.36 PM.png&quot; border=&quot;0&quot; width=&quot;330&quot; /&gt;&lt;/div&gt;&lt;/a&gt;

Now execute this debug configuration, and Maven (which is still waiting) will continue after Eclipse successfully connected, and any breakpoints you set in Eclipse will trigger.
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Running from the IDE&lt;/strong&gt;
&lt;br/&gt;
&lt;br/&gt;

Another way is to execute the whole enchilada (JRuby, cuke4nuke, cucumber…) directly out of the IDE. 

In Eclipse this is accomplished with a new Debug Configuration. Choose Java Application then configure it accordingly:

Main class: &lt;code&gt;org.jruby.Main&lt;/code&gt;
&lt;a href=&quot;http://lh6.ggpht.com/_X3kaawac_g4/S0nvPuX-tbI/AAAAAAAAAuk/2mFlypyrB1Q/Screen%20shot%202010-01-10%20at%204.13.57%20PM.png?imgmax=800&quot;&gt;&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/S0nvPuX-tbI/AAAAAAAAAuk/2mFlypyrB1Q/Screen%20shot%202010-01-10%20at%204.13.57%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2010-01-10 at 4.13.57 PM.png&quot; border=&quot;0&quot; width=&quot;330&quot; /&gt;&lt;/div&gt;&lt;/a&gt;

Program Arguments: 
&lt;div style=&quot;border:solid 1px silver;width:410px;overflow:auto&quot;&gt;
&lt;code&gt;${M2_HOME}/repository/.jruby/bin/cuke4duke ./target/test-classes features&lt;/code&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;br/&gt;

VM Arguments: 
&lt;div style=&quot;border:solid 1px silver;width:410px;overflow:auto&quot;&gt;
&lt;code&gt;&lt;pre&gt;-Dcuke4duke.objectFactory=cuke4duke.internal.jvmclass.PicoFactory&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;
&lt;a href=&quot;http://lh3.ggpht.com/_X3kaawac_g4/S0nvWQzoddI/AAAAAAAAAuo/UaVlsl8al3k/Screen%20shot%202010-01-10%20at%204.15.02%20PM.png?imgmax=800&quot;&gt;&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/S0nvWQzoddI/AAAAAAAAAuo/UaVlsl8al3k/Screen%20shot%202010-01-10%20at%204.15.02%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2010-01-10 at 4.15.02 PM.png&quot; border=&quot;0&quot; width=&quot;330&quot; /&gt;&lt;/div&gt;&lt;/a&gt;

Classpath: Make sure all needed jars are on the classpath.
&lt;a href=&quot;http://lh5.ggpht.com/_X3kaawac_g4/S0nvcfeS3eI/AAAAAAAAAus/RT_GP5vlqKo/Screen%20shot%202010-01-10%20at%204.15.17%20PM.png?imgmax=800&quot;&gt;&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/S0nvcfeS3eI/AAAAAAAAAus/RT_GP5vlqKo/Screen%20shot%202010-01-10%20at%204.15.17%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2010-01-10 at 4.15.17 PM.png&quot; border=&quot;0&quot; width=&quot;330&quot; /&gt;&lt;/div&gt;&lt;/a&gt;

Now execute this debug configuration and Eclipse will break directly at any breakpoint you set in your sources.
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/4177252269214551920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/02/how-to-debug-your-code-with-cuke4duke.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4177252269214551920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4177252269214551920'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/02/how-to-debug-your-code-with-cuke4duke.html' title='How to debug your code with cuke4duke'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_X3kaawac_g4/S0nxyUKaIYI/AAAAAAAAAu0/CtKaMavsxoM/s72-c/cucumber.jpg?imgmax=800" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-3929274844194754490</id><published>2010-01-27T18:40:00.001+01:00</published><updated>2010-01-30T19:00:53.852+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><title type='text'>Lessons Learned from Java EE</title><content type='html'>&lt;img style=&quot;margin: 0px 0px 5px 10px&quot;src=&quot;http://lh6.google.com/jonas.bandi/R7cVpj_YxbI/AAAAAAAAAIA/o5pAZus8orA/fetch%3EUID%3E.jpg?imgmax=800&quot; border=&quot;0&quot; width=&quot;150&quot; align=&quot;right&quot; /&gt;

&lt;a href=&quot;http://www.infoq.com/presentations/Lessons-Learned-from-Java-EE&quot;&gt;Lessons Learned from Java EE&lt;/a&gt; is an interesting presentation by &lt;a href=&quot;http://twitter.com/SpringRod&quot;&gt;Rod Johnson&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
Here the most interesting/provoking points:
&lt;ul&gt;
&lt;li&gt;The fallacy of love for complexity: &quot;No pain no gain&quot; does not apply for software. &lt;strong&gt;Powerful solutions do not have to be complex&lt;/strong&gt;, the opposite is true!&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;Tools cannot conceal excessive complexity!&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;&lt;strong&gt;The myth of the code monkey&lt;/strong&gt;: Developers are dumb. They have to be protected from having to make decisions. -&gt; The result is excessive complexity.&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;The need for an over-arching (enterprise) strategy means that common sense is thrown out the window.&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;&lt;strong&gt;Complexity is an expensive luxury&lt;/strong&gt; - in economic boom times people are happy spending money for complexity but economic downturns tend to reduce complexity.&lt;/li&gt;
&lt;br/&gt;

&lt;li&gt;&lt;strong&gt;Developer empowerment&lt;/strong&gt; is an ongoing trend:
&lt;ul&gt;
&lt;li&gt;Because things change quicker than in the past, and management need to rely on developers more&lt;/li&gt;
&lt;li&gt;Open source allows participation&lt;/li&gt;
&lt;li&gt;Expensive, complex portfolio solutions/tools did not prove to be successful/productive&lt;/li&gt;
&lt;li&gt;Agile development is a developer-led initiative&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cloud_computing&quot;&gt;The Cloud&lt;/a&gt; is shifting the balance between operation and development&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;

&lt;br/&gt;

My posts around these topics:
&lt;br/&gt;
&lt;br/&gt;

&lt;div style=&quot;padding-left:10px&quot;&gt;
&lt;table&gt;&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/09/abstraction-encapsulation-and-social.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SsHokfvFdCI/AAAAAAAAAqU/z4-LrYlJhUw/mind_the_gap-logo.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;vertical-align:top&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/09/abstraction-encapsulation-and-social.html&quot;&gt;The Antipattern of Framework- vs. Business-Programmers&lt;/a&gt;
&lt;/td&gt;
&lt;td style=&quot;width:30px;&quot;&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/08/essential-accidental-and-fabricated.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/Sn8rmoX4oYI/AAAAAAAAAo8/8EgwBnR-Yt0/20080118-confusing-street-sign.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;vertical-align:top&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/08/essential-accidental-and-fabricated.html&quot;&gt;Essential, accidental and fabricated complexity&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/07/visual-modeling-is-it-worth-it-example.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SlNzOM4AhcI/AAAAAAAAAnI/mqDDRGN4zmQ/PlasticSurgery2.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/07/visual-modeling-is-it-worth-it-example.html&quot;&gt;Visual modeling: Is it worth it? An example...&lt;/a&gt;
&lt;/td&gt;
&lt;td style=&quot;width:30px;&quot;&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2007/02/creativity-and-competent-people.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SUajAsPr21I/AAAAAAAAAVQ/NcQtx1T-TUE/I%20WANT%20YOU.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2007/02/creativity-and-competent-people.html&quot;&gt;Creativity and competent People&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/08/michael-c-feathers-seven-blind-alleys.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/Sn8uLVI6aKI/AAAAAAAAApE/E_tHefpMMfo/sackgasse3_web.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/08/michael-c-feathers-seven-blind-alleys.html&quot;&gt;Michael C. Feathers: Seven Blind Alleys in Software Design&lt;/a&gt;
&lt;/td&gt;
&lt;td style=&quot;width:30px;&quot;&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2008/10/java-ee-blue-pill-of-enterprise.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh4.ggpht.com/jonas.bandi/SLBPj-mcMVI/AAAAAAAAARs/0A48WSKqu_E/red-pill-or-blue-pill.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;vertical-align:top&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2008/10/java-ee-blue-pill-of-enterprise.html&quot;&gt;Java EE: The blue pill of enterprise development?&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/3929274844194754490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/01/lessons-learned-from-java-ee.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/3929274844194754490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/3929274844194754490'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/01/lessons-learned-from-java-ee.html' title='Lessons Learned from Java EE'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_X3kaawac_g4/SsHokfvFdCI/AAAAAAAAAqU/z4-LrYlJhUw/s72-c/mind_the_gap-logo.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-7014237234897048309</id><published>2010-01-07T23:06:00.001+01:00</published><updated>2010-01-07T23:07:59.635+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>The risk of scrum</title><content type='html'>&lt;img style=&quot;margin: 0px 0px 10px 10px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SzKTYo7fUxI/AAAAAAAAAsc/dBxZI9oFCx0/shark_wave.jpg?imgmax=800&quot; alt=&quot;shark_wave.jpg&quot; border=&quot;0&quot; width=&quot;200&quot; align=&quot;right&quot; /&gt;

Last month &lt;a href=&quot;http://twitter.com/rjocham&quot;&gt;Ralph Jocham&lt;/a&gt; gave &lt;a href=&quot;http://choose.s-i.ch/events/2009-12-08-jocham&quot;&gt;a talk&lt;/a&gt; about the Risks of Scrum.
&lt;br/&gt;
&lt;br/&gt;
He published the slides on slideshare: &lt;a href=&quot;http://www.slideshare.net/choose/ralph-jocham-the-risks-of-scrum&quot;&gt;Ralph Jocham The Risks Of Scrum&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
As far as I understood it, Ralph identified two Risks with Scrum:
&lt;br/&gt;
&lt;ol&gt;
&lt;li&gt;Not doing it right or not practicing it to the full extent&lt;/li&gt;
&lt;li&gt;Neglecting technical excellence and accumulation of technical dept&lt;/li&gt;
&lt;/ol&gt;

The first one is a bit a platitude in my opinion. Any failure can be blamed on not doing things right... of course with methodologies that consist of several parts, there is a danger of cherry-picking, but I am not sure that this can&#39;t work. I think it&#39;s also often a cheap excuse to put the blame for a failure on &quot;not doing it right&quot;. I mean, who is &lt;em&gt;really&lt;/em&gt; doing it right? How many of the successes are &lt;em&gt;doing it right&lt;/em&gt;?
&lt;br/&gt;
&lt;br/&gt;
According to Ralph the second risk should be met with &lt;a href=&quot;http://en.wikipedia.org/wiki/Extreme_Programming&quot;&gt;XP practices&lt;/a&gt; that focus on technical quality.
&lt;br/&gt;
&lt;br/&gt;
But in my opinion there is a much more fundamental danger in scrum:
&lt;br/&gt;
&lt;br/&gt;
&lt;img style=&quot;margin: 0px 10px 10px 0px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SzKPCXk8fUI/AAAAAAAAAsU/8viD1K-RDHo/matrix2.JPG?imgmax=800&quot; alt=&quot;matrix2.JPG&quot; border=&quot;0&quot; width=&quot;200&quot; align=&quot;left&quot; /&gt;
Scrum gives the impression that it is possible to bring &quot;Embracing Change&quot; and &quot;Getting Things Done&quot; under the same umbrella.
&lt;br/&gt;
&lt;br/&gt;
This is dangerous. &quot;Embracing Change&quot; and &quot;Getting Things Done&quot; are two opposing forces. &lt;strong&gt;On a certain level it is inherently not possible to get things done while embracing change.&lt;/strong&gt;
&lt;br/&gt;
&lt;br/&gt;
Scrum as an agile methodology is all about embracing change. With the focus on the Done-Stage on the Taskboard and the &quot;Definition of Done&quot;, &lt;strong&gt;Scrum claims that those two opposing forces are actually not opposing. This is in most cases an illusion.&lt;/strong&gt;
&lt;br/&gt;
&lt;br/&gt;
This is mostly a result of focusing on small stories with immediate business value. Getting these stories done is possible, and Scrum can easily misused as an &quot;excuse&quot; to neglect the big picture.
&lt;br/&gt;
&lt;br/&gt;
Progressing in Scrum means getting stories done. Often the real progress of a finished story in regard of the whole project is not measured...
&lt;br/&gt;
&lt;br/&gt;
A symptom of this antipattern is that certain things get touched and changed again and again by new stories in subsequent sprints...&lt;em&gt; so what was actually done, the story or the real business problem?&lt;/em&gt;
&lt;br/&gt;
&lt;br/&gt;
Shortening sprint duration and focussing on smaller user stories can even aggravate this problem ...
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/7014237234897048309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/01/risk-of-scrum.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7014237234897048309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7014237234897048309'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/01/risk-of-scrum.html' title='The risk of scrum'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_X3kaawac_g4/SzKTYo7fUxI/AAAAAAAAAsc/dBxZI9oFCx0/s72-c/shark_wave.jpg?imgmax=800" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-8427922808575854350</id><published>2010-01-04T19:25:00.001+01:00</published><updated>2010-01-05T07:53:36.628+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing Backlash: Recent, well grounded opinions questioning the value of TDD and unit-testing</title><content type='html'>&lt;div style=&quot;width:320px&quot;&gt;&lt;blockquote&gt;It is 2010. I declare that #TDD is no longer controversial.&lt;/blockquote&gt;
&lt;div style=&quot;font-size:10px; text-align:right&quot;&gt;&lt;a href=&quot;http://twitter.com/unclebobmartin/status/7271083177&quot;&gt;Uncle Bob Martin on Twitter&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;br/&gt;

We all know the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hype_cycle&quot;&gt;Gartner Hype Cycle&lt;/a&gt; for technology adaption:
&lt;br/&gt;&lt;br/&gt;

&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/Sz9a64lcgOI/AAAAAAAAAuQ/X2YdHu12xhs/559px-Gartner_Hype_Cycle.svg.png?imgmax=800&quot; alt=&quot;559px-Gartner_Hype_Cycle.svg.png&quot; border=&quot;0&quot; width=&quot;330&quot;  /&gt;&lt;/div&gt;

Sometimes I wonder where on this curve we are concerning unit-testing and &lt;a href=&quot;http://en.wikipedia.org/wiki/Test_Driven_Development&quot;&gt;Test Driven Development (TDD)&lt;/a&gt;?
&lt;br/&gt;
&lt;br/&gt;
Just recently there seem to be a movement to the &quot;Through of Disillusionment&quot; with several fairly well grounded articles &lt;strong&gt;questioning the value of unit-testing&lt;/strong&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Test_Driven_Development&quot;&gt;Test Driven Development (TDD)&lt;/a&gt;:
&lt;br/&gt;
&lt;br/&gt;
&lt;list&gt;

&lt;li&gt;&lt;a href=&quot;http://www.dalkescientific.com/writings/diary/archive/2009/12/29/problems_with_tdd.html&quot;&gt;Problems with TDD&lt;/a&gt; an Essay by Andrew Dalke. Heavily discussed on &lt;a href=&quot;http://dalkescientific.blogspot.com/2009/12/problems-with-tdd.html&quot;&gt;his blog&lt;/a&gt; and on &lt;a href=&quot;http://news.ycombinator.com/item?id=1020427&quot;&gt;Hacker News&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Chris Ashton&#39;s post: &lt;a href=&quot;http://blogs.msdn.com/cashto/archive/2009/03/31/it-s-ok-not-to-write-unit-tests.aspx&quot;&gt;It&#39;s OK Not to Write Unit Tests&lt;/a&gt;&lt;/li&gt;

Ayende&#39;s posts: &lt;a href=&quot;http://ayende.com/Blog/archive/2009/09/28/even-&lt;li&gt;tests-has-got-to-justify-themselves.aspx&quot;&gt;Even tests has got to justify themselves&lt;/a&gt; and &lt;a href=&quot;http://ayende.com/Blog/archive/2009/09/30/re-are-you-smart-enough-to-do-without-tdd.aspx&quot;&gt;re: Are you smart enough to do without TDD&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;And finally Luce Francis brilliant presentation: &lt;a href=&quot;http://www.infoq.com/presentations/francl-testing-overrated;jsessionid=5C1654248C01CA209E70B7A5BEDE81B2&quot;&gt;Testing is Overrated&lt;/a&gt; (matching &lt;a href=&quot;http://railspikes.com/2008/7/11/testing-is-overrated&quot;&gt;blog post&lt;/a&gt;, &lt;a href=&quot;http://railspikes.com/2008/12/2/testing-is-overrated-great-talk&quot;&gt;slides&lt;/a&gt;)&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;
On the other hand there seems to be &lt;strong&gt;prove that TDD is valuable&lt;/strong&gt;:
&lt;list&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/news/2009/03/TDD-Improves-Quality&quot;&gt;Empirical Studies Show Test Driven Development Improves Quality&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://collaboration.csc.ncsu.edu/laurie/Papers/MAXIMILIEN_WILLIAMS.PDF&quot;&gt;Maximilien-Williams study&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Uncle Bobs &lt;a href=&quot;http://blog.objectmentor.com/articles/2009/10/08/tdd-triage&quot;&gt;TDD Triage&lt;/a&gt;&lt;/li&gt;
&lt;/list&gt;

&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/8427922808575854350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2010/01/testing-backslash-recent-well-grounded.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/8427922808575854350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/8427922808575854350'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2010/01/testing-backslash-recent-well-grounded.html' title='Testing Backlash: Recent, well grounded opinions questioning the value of TDD and unit-testing'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_X3kaawac_g4/Sz9a64lcgOI/AAAAAAAAAuQ/X2YdHu12xhs/s72-c/559px-Gartner_Hype_Cycle.svg.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-6746344131694138020</id><published>2009-12-31T13:29:00.001+01:00</published><updated>2009-12-31T13:29:46.790+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Computer Science vs. Software Engineering</title><content type='html'>I listened to &lt;a href=&quot;http://www.se-radio.net/podcast/2009-11/episode-149-difference-between-software-engineering-and-computer-science-chuck-conne&quot;&gt;SE-Radio Episode 149: Difference between Software Engineering and Computer Science with Chuck Connell&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
Interesting stuff...
&lt;br/&gt;
&lt;br/&gt;
The most insightful thing was that historically we put too much unrelated things into the same bucket:
&lt;br/&gt;
&lt;list&gt;
&lt;li&gt;Computer Science vs. Software Engineering&lt;/li&gt;
&lt;li&gt;Algorithms, Cryptography, Compilers vs. Business Applications, Consumer Applications&lt;/li&gt;
&lt;li&gt;Complexity Analysis, Correctness Proofs vs. Maintainability, Testability&lt;/li&gt;
&lt;li&gt;Formal Specifications vs. Estimation&lt;/li&gt;
&lt;li&gt;Language Syntax/Semantics vs. Design Patterns&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;

More background is in Chuck Connells &lt;a href=&quot;http://www.ddj.com/architect/217701907&quot;&gt;article on Dr.Dobb&#39;s&lt;/a&gt;. Including &lt;em&gt;The bright line in computer science&lt;/em&gt;:
&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SzyYLcA6MKI/AAAAAAAAAts/hA9eKCg-hoo/090604connell_f1.gif?imgmax=800&quot; alt=&quot;090604connell_f1.gif&quot; border=&quot;0&quot; width=&quot;380&quot; /&gt;&lt;/div&gt;

This once again leads back to the question: What is software engineering?
&lt;list&gt;
&lt;li&gt;Art?&lt;/li&gt;
&lt;li&gt;Craftmanship?&lt;/li&gt;
&lt;li&gt;Science?&lt;/li&gt; 
&lt;/list&gt;
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/6746344131694138020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/computer-science-vs-software.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6746344131694138020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6746344131694138020'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/computer-science-vs-software.html' title='Computer Science vs. Software Engineering'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_X3kaawac_g4/SzyYLcA6MKI/AAAAAAAAAts/hA9eKCg-hoo/s72-c/090604connell_f1.gif?imgmax=800" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-4378333143751615302</id><published>2009-12-30T15:50:00.001+01:00</published><updated>2009-12-30T19:00:23.728+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="domain driven design"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Bug Driven Development: Samurai Debugging Reinvented</title><content type='html'>&lt;img style=&quot;margin: 0px 0px 10px 10px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SztZ51wVViI/AAAAAAAAAtc/Jtw5OrvXZCI/Mechanical_bug.jpg?imgmax=800&quot; alt=&quot;Mechanical_bug.jpg&quot; border=&quot;0&quot; width=&quot;180&quot; align=&quot;right&quot; /&gt;
In his &lt;a href=&quot;http://www.infoq.com/presentations/bdd-and-ddd&quot;&gt;presentation&lt;/a&gt; about &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_Driven_Development&quot;&gt;Behavior Driven Development (BDD)&lt;/a&gt; and &lt;a href=&quot;http://www.domaindrivendesign.org/&quot;&gt;Domain Driven Design  (DDD)&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/tastapod&quot;&gt;Dan North&lt;/a&gt; talks about another interpretation of &quot;BDD&quot;: &lt;em&gt;Bug Driven Development&lt;/em&gt; or &quot;DDD&quot;: &lt;em&gt;Defect Driven Development&lt;/em&gt;.
&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;It goes like this:&lt;/strong&gt;
&lt;br/&gt;
&lt;br/&gt;
The customer comes to the developer and wants the perfect system. He describes what he wants, but its this fuzzy vision described in a business language that the developer just is not able to grasp...
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;The developer&lt;/em&gt;: &quot;Ah ok... I understand. It is done!&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Customer&lt;/em&gt;: &quot;What? What do you mean?&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Dev&lt;/em&gt;: &quot;Well it is done. The system is finished!&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Customer&lt;/em&gt;: &quot;Well, no ... I don&#39;t see an icon where I can start the system?&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Dev&lt;/em&gt;: &quot;Oh! You are right. That&#39;s a bug! I will fix it.&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;... five minutes later ...&lt;/em&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Dev&lt;/em&gt;: &quot;Ok, the icon is here. Now it is done!&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Customer&lt;/em&gt;: &quot;Well, no! When I double-click the icon nothing happens!&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Dev&lt;/em&gt;: &quot;Oh! You are right. Thats a bug! I will fix it.&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;... five minutes later ...&lt;/em&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Dev&lt;/em&gt;: &quot;Ok, the the app starts when you double click. Now it is done!&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Customer&lt;/em&gt;: &quot;Well, no! There is nothing in the newly opened window!&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;Dev&lt;/em&gt;: &quot;Oh! You are right. Thats a bug! I will fix it.&quot;
&lt;br/&gt;
&lt;br/&gt;
&lt;em&gt;... you get the idea.&lt;/em&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
While this is a humorous story, it actually demonstrates the qualities that BDD (now Behavior Driven Development again) strives for:
&lt;br/&gt;
&lt;list&gt;
&lt;li&gt;&lt;em&gt;Pull based&lt;/em&gt; instead of push based: The developer pulls new requirements from the business just in time when they are needed.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Outside-in&lt;/em&gt;: The development is driven by the business relevant features that are actually used and matter to the stakeholder.&lt;/li&gt;

&lt;li&gt;&lt;em&gt;Constant involvement&lt;/em&gt; of the customer.&lt;/li&gt;

&lt;li&gt;Small steps with clear &lt;em&gt;acceptance criterias&lt;/em&gt;.&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;

Another analogy is funny:
&lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_Driven_Development&quot;&gt;Behavior Driven Development&lt;/a&gt; is an evolvement from &lt;a href=&quot;http://en.wikipedia.org/wiki/Test_Driven_Development&quot;&gt;Test Driven Development&lt;/a&gt;, taking the concepts of the latter to a higher level, evolving out of a purely developer-centered discipline.
&lt;br/&gt;
&lt;br/&gt;
The same could be said for &lt;em&gt;Bug Driven Development&lt;/em&gt;: The concept of &lt;em&gt;Samurai Debugging&lt;/em&gt; was already a humorous technique in &lt;a href=&quot;http://en.wikipedia.org/wiki/Extreme_Programming&quot;&gt;Extreme Programming&lt;/a&gt;:

&lt;blockquote&gt;When you follow the Samurai Debugging technique, you start with a blank screen. That&#39;s not what you want, so you start debugging it, and you continue debugging it until your program does exactly what you want it to do.&lt;/blockquote&gt;
&lt;div style=&quot;text-align:right; font-size:9px&quot;&gt;from &lt;a href=&quot;http://www.amazon.com/exec/obidos/ASIN/1590590961/ref=nosim/armaties&quot;&gt;Extreme Programming Refactored&lt;/a&gt; &lt;/div&gt;
&lt;br/&gt;
Now Bug Driven Development takes this to the next level by involving the customer :-).
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/4378333143751615302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/bug-driven-development-samurai.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4378333143751615302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4378333143751615302'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/bug-driven-development-samurai.html' title='Bug Driven Development: Samurai Debugging Reinvented'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_X3kaawac_g4/SztZ51wVViI/AAAAAAAAAtc/Jtw5OrvXZCI/s72-c/Mechanical_bug.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-4792294813527087475</id><published>2009-12-29T19:23:00.001+01:00</published><updated>2009-12-29T19:32:51.257+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="humor"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Java vs. Net: Web Frameworks</title><content type='html'>Quantity is the real difference:
&lt;br/&gt;

&lt;div style=&quot;text-align:center;&quot;&gt;
&lt;a href=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SzpFVkIDYxI/AAAAAAAAAtQ/CW0pDdQjUlo/Screen%20shot%202009-12-29%20at%207.06.16%20PM.png?imgmax=800&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SzpFVkIDYxI/AAAAAAAAAtQ/CW0pDdQjUlo/Screen%20shot%202009-12-29%20at%207.06.16%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2009-12-29 at 7.06.16 PM.png&quot; border=&quot;0&quot; width=&quot;381&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br/&gt;

Humorous episodes following from this:

&lt;blockquote&gt;&lt;a href=&quot;http://www.jroller.com/javelotinfo/entry/trolling_with_java_web_frameworks&quot;&gt;Trolling with Java Web Frameworks.&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;I don&#39;t think you can count someone even as a semi-decent java dev until he wrote his very own web framework at least once in his life &lt;span style=&quot;font-size:10px&quot;&gt;(from &lt;a href=&quot;http://blog.brunoborges.com.br/2007/10/jsf-today-standards-versus-oss.html?showComment=1193459760000#c5103441945466060334&quot;&gt;here&lt;/a&gt;)&lt;/span&gt;&lt;/blockquote&gt;




&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/4792294813527087475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/java-vs-net-web-frameworks.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4792294813527087475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4792294813527087475'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/java-vs-net-web-frameworks.html' title='Java vs. Net: Web Frameworks'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_X3kaawac_g4/SzpFVkIDYxI/AAAAAAAAAtQ/CW0pDdQjUlo/s72-c/Screen%20shot%202009-12-29%20at%207.06.16%20PM.png?imgmax=800" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-5641253016660173977</id><published>2009-12-28T12:42:00.001+01:00</published><updated>2009-12-28T12:44:51.105+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="humor"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Code Monkeys do exist: I knew it!</title><content type='html'>

Ever felt like a Code Monkey?
&lt;br/&gt;
&lt;br/&gt;
Then &lt;a href=&quot;http://www.newtechusa.com/PPI/main.asp&quot;&gt;Primate Programming Inc&lt;/a&gt; might be the company for you...
&lt;br/&gt;
&lt;a href=&quot;http://www.thinkgeek.com/tshirts-apparel/unisex/japanese/5e89/&quot;&gt; &lt;img style=&quot;margin: 10px 0px 0px 10px&quot;src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/SziYbjYbDAI/AAAAAAAAAtE/yLpqdPDTftg/Screen%20shot%202009-12-28%20at%2012.36.44%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2009-12-28 at 12.36.44 PM.png&quot; border=&quot;0&quot; width=&quot;120&quot;  align=&quot;right&quot; /&gt; &lt;/a&gt;
&lt;br/&gt;

&lt;blockquote style=&quot;width:200px&quot;&gt;&quot;Humans and higher primates share approximately 97% of their DNA in common.
Recent research in primate programming suggests computing
is a task that most higher primates can easily
perform. Visual Basic 6.0™ was
the preferred IDE for the majority
of experiment primate subjects.&quot;&lt;/blockquote&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/5641253016660173977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/code-monkeys-do-exist-i-knew-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/5641253016660173977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/5641253016660173977'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/code-monkeys-do-exist-i-knew-it.html' title='Code Monkeys do exist: I knew it!'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-6195625154556269912</id><published>2009-12-24T10:11:00.001+01:00</published><updated>2009-12-24T10:25:04.143+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Definition of Behavior Driven Development</title><content type='html'>&lt;img src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/SzMwMz4PXwI/AAAAAAAAAsk/iB3tDq_zjDs/images.jpg?imgmax=800&quot; alt=&quot;images.jpg&quot; border=&quot;0&quot; height=&quot;130&quot; align=&quot;right&quot; /&gt;
I updated the entry for &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_Driven_Development&quot;&gt;Behavior Driven Development on Wikipedia&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
On the &lt;a href=&quot;http://skillsmatter.com/event/java-jee/agile-specifications-bdd-and-testing-exchange&quot;&gt;Agile Testing, Specifications and BDD exchange&lt;/a&gt; &lt;a href=&quot;http://twitter.com/tastapod/&quot;&gt;Dan North&lt;/a&gt; gave an updated definition of BDD in &lt;a href=&quot;http://skillsmatter.com/podcast/java-jee/how-to-sell-bdd-to-the-business&quot;&gt;his talk&lt;/a&gt;:
&lt;br/&gt;
&lt;br/&gt;

&lt;blockquote&gt;BDD is a second-generation, outside-in, pull- based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well- defined outputs, resulting in the delivery of working, tested software that matters.&lt;/blockquote&gt;
Watch &lt;a href=&quot;http://skillsmatter.com/podcast/java-jee/how-to-sell-bdd-to-the-business&quot;&gt;his talk&lt;/a&gt; for an explanation of this definition...
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/6195625154556269912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/definition-of-behavior-driven.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6195625154556269912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6195625154556269912'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/definition-of-behavior-driven.html' title='Definition of Behavior Driven Development'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_X3kaawac_g4/SzMwMz4PXwI/AAAAAAAAAsk/iB3tDq_zjDs/s72-c/images.jpg?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-4506008102890391874</id><published>2009-12-23T19:40:00.001+01:00</published><updated>2009-12-23T19:41:30.704+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="technology"/><title type='text'>Maven gets partially absorbed by modern JVM languages …</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://maven.apache.org/&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh3.ggpht.com/_X3kaawac_g4/SzJkLFS4PVI/AAAAAAAAAsM/IbkFAIDUCjM/s1600-h/matroschka250px%5B4%5D.jpg&quot;&gt;&lt;img style=&quot;border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;matroschka250px&quot; border=&quot;0&quot; alt=&quot;matroschka250px&quot; align=&quot;right&quot; src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/SzJkLaTqgEI/AAAAAAAAAsQ/G9Jp_V6o5g8/matroschka250px_thumb%5B2%5D.jpg?imgmax=800&quot; width=&quot;141&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven&lt;/a&gt;&lt;/a&gt; has a lot of interesting and useful ideas, but its usage is often over-complicated and several concepts are too much entangled.&lt;font size=&quot;1&quot;&gt; (examples: &lt;/font&gt;&lt;a href=&quot;http://twitter.com/aslak_hellesoy/status/6928701431&quot;&gt;&lt;font size=&quot;1&quot;&gt;1,&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; &lt;/font&gt;&lt;a href=&quot;http://tech.puredanger.com/2009/01/28/maven-adoption-curve/&quot;&gt;&lt;font size=&quot;1&quot;&gt;2&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;, &lt;/font&gt;&lt;a href=&quot;http://graemerocher.blogspot.com/2008/01/why-grails-doesnt-use-maven.html&quot;&gt;&lt;font size=&quot;1&quot;&gt;3&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The foremost feature of Maven that comes to mind is probably dependency management. Maven probably standardized dependency management for the Java platform. That’s probably also the reason for its wide adoption.&lt;/p&gt;  &lt;p&gt;At this time there are already several attempts for smaller and easier solutions that repackage the ideas about dependency management from Maven. Their promise is to be a cleaner and easier to use.&lt;/p&gt;  &lt;p&gt;Foremost there is &lt;a href=&quot;http://ant.apache.org/ivy/&quot;&gt;Ivy&lt;/a&gt;, which provides Maven-like dependency management for &lt;a href=&quot;http://ant.apache.org/&quot;&gt;Ant&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There are even two &lt;a href=&quot;http://jruby.org/&quot;&gt;JRuby&lt;/a&gt; projects that bring simplified Maven-like dependency management to the JVM: &lt;a href=&quot;http://github.com/jruby/maven_gem&quot;&gt;maven_gem&lt;/a&gt; and &lt;a href=&quot;https://www.javagems.org/&quot;&gt;javagems&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Especially interesting is &lt;a href=&quot;http://docs.codehaus.org/display/GROOVY/Grape&quot;&gt;Grape&lt;/a&gt;, which provides dependency management for &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt; at a language level (by integrating Ivy).&lt;/p&gt;  &lt;p&gt;I think these examples are an impressive demonstration how the Java platform grows and how good ideas and concepts are adapted and evolved.&lt;/p&gt;  &lt;div style=&quot;clear: right; font-size: 10px; align: right&quot;&gt;   &lt;br /&gt;    &lt;p&gt;&lt;a href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px&quot; border=&quot;0&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; align=&quot;left&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; height=&quot;13&quot; /&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style=&quot;clear: both&quot;&gt;&lt;/div&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/4506008102890391874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/maven-gets-partially-absorbed-by-modern.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4506008102890391874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/4506008102890391874'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/maven-gets-partially-absorbed-by-modern.html' title='Maven gets partially absorbed by modern JVM languages …'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_X3kaawac_g4/SzJkLaTqgEI/AAAAAAAAAsQ/G9Jp_V6o5g8/s72-c/matroschka250px_thumb%5B2%5D.jpg?imgmax=800" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-8053381485283207142</id><published>2009-12-21T19:04:00.001+01:00</published><updated>2009-12-21T19:04:46.106+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Challenging Requirements Video</title><content type='html'>&lt;img style=&quot;margin: 0px 10px 0px 10px&quot; src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/Sy6hIocMixI/AAAAAAAAAsA/rb9GAirNqzs/Screen%20shot%202009-12-20%20at%2011.10.20%20PM.png?imgmax=800&quot; alt=&quot;Screen shot 2009-12-20 at 11.10.20 PM.png&quot; border=&quot;0&quot; width=&quot;150&quot; align=&quot;left&quot; /&gt;

Definitely the most entertaining presentation (closely followed by Dan North&#39;s) at the &lt;a href=&quot;http://skillsmatter.com/event/java-jee/agile-specifications-bdd-and-testing-exchange&quot;&gt;Agile Testing, Specifications and BDD exchange&lt;/a&gt; was Gojko Adzic&#39;s &quot;&lt;em&gt;Challenging Requirements&lt;/em&gt;&quot;.
&lt;br/&gt;
&lt;br/&gt;
You can watch &lt;a href=&quot;http://gojko.net/2009/12/10/challenging-requirements/&quot;&gt;a video of his presentation on his blog&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a href=&quot;http://www.acceptancetesting.info/the-book/&quot;&gt;&lt;img src=&quot;http://www.acceptancetesting.info/images/front-300.jpg&quot; alt=&quot;puzzle.png&quot; border=&quot;0&quot; width=&quot;100&quot; align=&quot;right&quot; /&gt;&lt;/a&gt;
I can also recommend Gojko&#39;s latest book: &lt;a href=&quot;http://www.acceptancetesting.info/the-book/&quot;&gt;Bridging the communication gap&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
It is a very good resource for learning ATDD and BDD. 
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
         </content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/8053381485283207142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/12/challenging-requirements-video.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/8053381485283207142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/8053381485283207142'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/12/challenging-requirements-video.html' title='Challenging Requirements Video'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_X3kaawac_g4/Sy6hIocMixI/AAAAAAAAAsA/rb9GAirNqzs/s72-c/Screen%20shot%202009-12-20%20at%2011.10.20%20PM.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-580071999222172408</id><published>2009-11-11T01:44:00.001+01:00</published><updated>2009-11-11T01:56:29.679+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>A note to all software project stakeholders: Remember it is not christmas!</title><content type='html'>
&lt;div style=&quot;margin: 0px 0px 10px 10px;float:right; font-size:6px&quot;&gt;&lt;img src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/SvoIMx9lKUI/AAAAAAAAAr0/3S5VFQOpmFI/2133915592_ed69c61b19.jpg?imgmax=800&quot; alt=&quot;2133915592_ed69c61b19.jpg&quot; border=&quot;0&quot; width=&quot;170&quot; align=&quot;right&quot; /&gt;
&lt;div xmlns:cc=&quot;http://creativecommons.org/ns#&quot; about=&quot;http://www.flickr.com/photos/gracefamily/2133915592/&quot;&gt;&lt;a rel=&quot;cc:attributionURL&quot; href=&quot;http://www.flickr.com/photos/gracefamily/&quot;&gt;http://www.flickr.com/photos/gracefamily/&lt;/a&gt; / &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by/2.0/&quot;&gt;CC BY 2.0&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;


&lt;a href=&quot;http://twitter.com/peterstev&quot;&gt;Peter Stevens&lt;/a&gt; hit the nail on the head at the &lt;a href=&quot;http://www.saq.ch/de/events/detail/334/&quot;&gt;SAQ Software Tester Forum 2009&lt;/a&gt; last week:
&lt;br/&gt;
&lt;div style=&quot;width:210px&quot;&gt;&lt;blockquote style=&quot;font-size:14px&quot;&gt;You won&#39;t get everything you want!&lt;/blockquote&gt;&lt;/div&gt;
&lt;br/&gt;

That&#39;s a fact. Accept it.
&lt;br/&gt;
&lt;br/&gt;

Actually you can get everything you want if you have unlimited time and money. But since that is not the case in todays software projects &lt;span style=&quot;font-size:9px&quot;&gt;(maybe there are &lt;a href=&quot;http://intentsoft.com/&quot;&gt;exceptions&lt;/a&gt;?)&lt;/span&gt;, we have to make tradeoffs. 
&lt;br/&gt;
And that is where the strength of &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile Software Development&lt;/a&gt; comes into play.
&lt;br/&gt;
&lt;br/&gt;
Agile advocates constant feedback and prioritization. Together with the &lt;a href=&quot;http://www.pragprog.com/titles/tpp/the-pragmatic-programmer&quot;&gt;&#39;good enough&#39;&lt;/a&gt; and &lt;a href=&quot;http://de.wikipedia.org/wiki/YAGNI&quot;&gt;YAGNI&lt;/a&gt; principles this helps to create better usable systems within budget and time constraints (eliminate waste in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Lean_software_development&quot;&gt;lingo of the lean&lt;/a&gt;).
&lt;br/&gt;
&lt;br/&gt;
&lt;a href=&quot;http://twitter.com/peterstev&quot;&gt;Peter Stevens&lt;/a&gt; then talked about how goals can still be achieved, even without getting everything we want. His presentation can be downloaded &lt;a href=&quot;http://sierra-charlie.com/download/From%20Wishlist%20to%20RunningSystem.pdf&quot;&gt;here&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
Later on, in an interesting conversation &lt;a href=&quot;http://twitter.com/AndyPalmer&quot;&gt;Andy Palmer&lt;/a&gt; pointed out that even when a &lt;a href=&quot;http://en.wikipedia.org/wiki/MoSCoW_Method&quot;&gt;MoSCoW&lt;/a&gt; (Must, Should, Could and Won’t) analysis is done, still a lot of projects finally only deliver a fraction of the actual &#39;Musts&#39; ... and are still considered as a success. What does this tell about our prioritization?

&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/580071999222172408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/11/note-to-all-software-project.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/580071999222172408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/580071999222172408'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/11/note-to-all-software-project.html' title='A note to all software project stakeholders: Remember it is not christmas!'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_X3kaawac_g4/SvoIMx9lKUI/AAAAAAAAAr0/3S5VFQOpmFI/s72-c/2133915592_ed69c61b19.jpg?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-7329802062670900942</id><published>2009-11-09T18:52:00.001+01:00</published><updated>2009-11-11T12:56:49.001+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing: Chances and Challenges in an Agile World</title><content type='html'>
Last week I gave a presentation on the &lt;a href=&quot;http://www.saq.ch/de/events/detail/334/&quot;&gt;SAQ Software Tester Forum 2009&lt;/a&gt;:

&lt;div style=&quot;width:425px;text-align:left&quot; id=&quot;__ss_2446846&quot;&gt;&lt;a style=&quot;font:17px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/jbandi/testing-chances-and-challenges-in-an-agile-world-2446846&quot; title=&quot;Testing: Chances and Challenges in an agile World&quot;&gt;Testing: Chances and Challenges in an Agile World&lt;/a&gt; (most slides in english...)&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agiletesting-091107161607-phpapp01&amp;stripped_title=testing-chances-and-challenges-in-an-agile-world-2446846&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agiletesting-091107161607-phpapp01&amp;stripped_title=testing-chances-and-challenges-in-an-agile-world-2446846&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;View more &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/&quot;&gt;documents&lt;/a&gt; from &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/jbandi&quot;&gt;jbandi&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;

&lt;div style=&quot;font-size:11px&quot;&gt;&lt;strong&gt;Update 2009-11-11:&lt;/strong&gt; &lt;a href=&quot;http://www.saq.ch/de/events/detail/334/pictures/&quot;&gt;Here&lt;/a&gt; are some pictures of the event.&lt;/div&gt;
&lt;br/&gt;

The stage for my presentation was very well set by &lt;a href=&quot;http://twitter.com/AndyPalmer&quot;&gt;Andy Palmer&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/peterstev&quot;&gt;Peter Stevens&lt;/a&gt; who talked both about &lt;a href=&quot;http://www.methodsandtools.com/archive/archive.php?id=72&quot;&gt;Acceptance Test Driven Development&lt;/a&gt; and about &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile Development&lt;/a&gt; in general.
&lt;br/&gt;
&lt;br/&gt;
In the afternoon there were several discussion sessions. Generally people wanted to know what the major changes there are in agile projects concernig testing.
&lt;br/&gt;
&lt;br/&gt;

A lot or the participants were very eager to affirm that &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt; does not change anything concerning testing. Somehow I got the feeling that there was a fear that &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt; is claiming that traditional testing is somehow outdated or superfluous...
&lt;br/&gt;
&lt;br/&gt;
In my opinion this is definitely not the case. Solid testing practices and processes are even more important in Agile projects. What  changes is the timeline! This however has implications on the amount of work (a lot more test effort aggregated over the whole project) and it is a challenge for tester how to deal with this. But it does definitely not change that testing in all flavors (automated, manual, guerillia ...) is still a must.
&lt;br/&gt;
&lt;br/&gt;
If I look at &lt;em&gt;requirements engineering&lt;/em&gt;, &lt;em&gt;development&lt;/em&gt; and &lt;em&gt;testing&lt;/em&gt; as three separate disciplines in software projects, then I would argue, that Testing is actually the discipline that is the least affected by &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
&lt;img style=&quot;margin: 0px 0px 10px 10px&quot; src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/Svc6uYjiI6I/AAAAAAAAArs/6IUTs4tHWmw/puzzle.png?imgmax=800&quot; alt=&quot;puzzle.png&quot; border=&quot;0&quot; width=&quot;180&quot; align=&quot;right&quot; /&gt;
Most of the participants however were very focused on their current situation and activities and not seeing the big picture. Tests to assert quality is and will always be important. &lt;strong&gt;But testing can be more than quality assurance!&lt;/strong&gt; Tests can be leveraged to &lt;em&gt;prevent&lt;/em&gt; defects. Of course this is not necessarily bound to &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt;, but &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt; explicitly supports those notions.
&lt;br/&gt;
&lt;br/&gt;
One consequence of these ideas however is that developers and testers have to interact intensely and there is no place any more for traditional boundaries between testers and developers! &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt; promotes multifunctional teams. This however does not mean that there are no specialized testers any more, but they are part of the same team as the developers and all have the common goal of producing useful software. Games of &lt;a href=&quot;http://en.wikipedia.org/wiki/Old_maid_%28card_game%29&quot;&gt;queen of spades&lt;/a&gt; between developers and testers definitely have no place in an Agile project!
&lt;br/&gt;
&lt;br/&gt;

&lt;img style=&quot;margin: 0px 10px 10px 0px&quot; src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/Svc5iCzdtEI/AAAAAAAAAro/1pDLI5RqE3c/Dollar%20Sign%203.jpg?imgmax=800&quot; alt=&quot;Dollar Sign 3.jpg&quot; border=&quot;0&quot; width=&quot;140&quot; align=&quot;left&quot; /&gt;
In the final panel discussion &lt;a href=&quot;http://twitter.com/peterstev&quot;&gt;Peter Stevens&lt;/a&gt; pointed out another perspective, that shows that testers can greatly profit from &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt;:
In traditional enterprisey environments the salary curve is usually inverse proportional to the distance to the customer. Testers sit at the end of the chain, with the greatest distance to the customer. This setup can change drastically with &lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Agile&lt;/a&gt; ideas like formulating Acceptance Tests with the customer, moving Acceptance Tests to the beginning of development and driving development with Acceptance Tests. Open minded testers can seize this chance and redefine their role in the organization hierarchy!
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/7329802062670900942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/11/testing-chances-and-challenges-in-agile_5318.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7329802062670900942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/7329802062670900942'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/11/testing-chances-and-challenges-in-agile_5318.html' title='Testing: Chances and Challenges in an Agile World'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_X3kaawac_g4/Svc6uYjiI6I/AAAAAAAAArs/6IUTs4tHWmw/s72-c/puzzle.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-3024015180959439120</id><published>2009-11-02T22:16:00.002+01:00</published><updated>2010-11-14T16:48:56.146+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Quick Tip: Running Selenium on OS X Snow Leopard</title><content type='html'>Probably it is not only a Snow Leopard thing. But I stumbled over the following problems when running &lt;a href=&quot;http://seleniumhq.org/&quot;&gt;Selenium&lt;/a&gt; on OS X:
&lt;br/&gt;
&lt;br/&gt;

&lt;strong&gt;With Safari 4.0.3:&lt;/strong&gt; Pop-up blocking is default on,  switch it off:
&lt;div style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/Su4ZJncidEI/AAAAAAAAArc/GDQig--e78I/Screen%20shot%202009-11-02%20at%2012.24.29%20AM.png?imgmax=800&quot; alt=&quot;Screen shot 2009-11-02 at 12.24.29 AM.png&quot; border=&quot;0&quot; width=&quot;330&quot; /&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;With Firefox 3.5.3:&lt;/strong&gt;
&lt;br/&gt;

I got the following error from the selenium server:
&lt;br/&gt;
&lt;div style=&quot;border:solid 1px silver;width:410px;overflow:auto&quot;&gt;&lt;code&gt;
&lt;pre&gt;dyld: Library not loaded: /usr/lib/libsqlite3.dylib
  Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
  Reason: Incompatible library version: Security requires version 9.0.0 or later, but libsqlite3.dylib provides version 1.0.0&lt;/pre&gt;
&lt;/code&gt;&lt;/div&gt;
&lt;br/&gt;
This problem was fixed with copying a newer version of the library into the firefox installation:

&lt;div style=&quot;border:solid 1px silver;width:410px;overflow:auto&quot;&gt;&lt;code&gt;
&lt;pre&gt;mv /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib.orig
cp /usr/lib/libsqlite3.dylib /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib
&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;

(First command is just for backup. Tip found &lt;a href=&quot;http://clearspace.openqa.org/thread/21355&quot;&gt;here&lt;/a&gt;)
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Update: 2010-11-14:&lt;/b&gt; For Firefox 3.6 make sure that you are upgrade to the latest version of selenium-server. I just wasted some hours trying to get firefox running with selenium-serve 1.0.1. The problem disappeared with &lt;a href=&quot;http://selenium.googlecode.com/files/selenium-remote-control-1.0.3.zip&quot;&gt;selenium-server 1.0.3&lt;/a&gt;.
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; alt=&quot;http://www.google.com/s2/favicons?domain=twitter.com&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/3024015180959439120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/11/quick-tip-running-selenium-on-os-x-snow.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/3024015180959439120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/3024015180959439120'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/11/quick-tip-running-selenium-on-os-x-snow.html' title='Quick Tip: Running Selenium on OS X Snow Leopard'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_X3kaawac_g4/Su4ZJncidEI/AAAAAAAAArc/GDQig--e78I/s72-c/Screen%20shot%202009-11-02%20at%2012.24.29%20AM.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-721472125455586805</id><published>2009-10-01T22:24:00.001+02:00</published><updated>2009-10-01T22:29:44.527+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><title type='text'>Learned today: Scrum is like a roundabout</title><content type='html'>Yesterday I was attending the &lt;a href=&quot;http://www.swissict.ch/breakfast_be_sept09&quot;&gt;scrum breakfast in Bern&lt;/a&gt;.
&lt;br/&gt; 
&lt;br/&gt;

&lt;a href=&quot;http://twitter.com/FrancoisBachman&quot;&gt;François Bachmann&lt;/a&gt; held an insightful presentation where he drew analogies between traffic and software projects: &lt;strong&gt;Projektstau auflösen - wie Sie Ihrem Manager Agilität erklären können&lt;/strong&gt; (&lt;em&gt;Breaking up traffic jam - how you can explain Agile to your manager&lt;/em&gt;).
&lt;br/&gt;
&lt;br/&gt;
&lt;img src=&quot;http://lh6.ggpht.com/_X3kaawac_g4/SsPOZXb9ClI/AAAAAAAAAqc/tLiD5Rvzj-Y/roundabout.png?imgmax=800&quot; alt=&quot;roundabout.png&quot; border=&quot;0&quot; width=&quot;180&quot; height=&quot;180&quot; align=&quot;right&quot; /&gt;The main analogy was:

&lt;blockquote style=&quot;font-size:14px; width:150px&quot;&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Scrum_%28development%29&quot;&gt;Scrum&lt;/a&gt; is like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Roundabout&quot;&gt;roundabout&lt;/a&gt;&lt;/blockquote&gt;

&lt;list&gt;&lt;li&gt;
Simple &amp; Transparent Concept
&lt;/li&gt;
&lt;li&gt;
Based on the Pull principle (not Push)
&lt;/li&gt;
&lt;li&gt;
Provides Feedback
&lt;/li&gt;
&lt;li&gt;
Self-organising mechanism
&lt;/li&gt;
&lt;li&gt;
Heavily relies on discipline and personal responsibility
&lt;/li&gt;
&lt;li&gt;
Roundabouts cause uncertainty and precaution at first contact (if you are used to traffic lights - command &amp; control style).
&lt;/li&gt;
&lt;li&gt;
Roundabouts are optimized for local decisions (only precedence from one direction is relevant) - traffic is too complex for exact planning and influenced by unforeseeable events, only high level planning is feasible, details have to taken care of when they happen.
&lt;/li&gt;
&lt;li&gt;
A lot of decision-makers with potential different interests are involved
&lt;/li&gt;
&lt;li&gt;
Individual decision-makers have only incomplete informations
&lt;/li&gt;
&lt;li&gt;
Roundabouts work as well for rush-hours as for no-traffic situations
&lt;/li&gt;
&lt;li&gt;
Benefits: less conflict, higher safety, optimized throughput, reduced waste, reduced costs, calm &amp; aesthetic &lt;div style=&quot;font-size:10px&quot;&gt;(&lt;a href=&quot;http://www.sandiego.gov/planning/programs/transportation/pdf/roundabout.pdf&quot;&gt;http://www.sandiego.gov/planning/programs/transportation/pdf/roundabout.pdf)&lt;/div&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Problems: Not appropriate for some situations (highway crossing a footpath), requires space, needs getting used to
&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;
&lt;img style=&quot;margin: 0px 10px 10px 0px&quot;src=&quot;http://lh3.ggpht.com/_X3kaawac_g4/SsPY02h8IjI/AAAAAAAAAqg/Muc85GamZPs/531312153_9f1bef580b.jpg?imgmax=800&quot; alt=&quot;531312153_9f1bef580b.jpg&quot; border=&quot;0&quot; width=&quot;190&quot;  align=&quot;left&quot; /&gt;
&lt;br/&gt;

And a funny example of &lt;a href=&quot;http://blogs.msdn.com/ericgu/archive/2006/10/13/scrumbut.aspx&quot;&gt;scrumbut&lt;/a&gt;: 
&lt;br/&gt;
Arc de Triomphe - a roundabout, but entering vehicles have precedence.
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:left; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://a1.twimg.com/a/1253141863/images/favicon.ico&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/721472125455586805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/10/learned-today-scrum-is-like-rundabout.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/721472125455586805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/721472125455586805'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/10/learned-today-scrum-is-like-rundabout.html' title='Learned today: Scrum is like a roundabout'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_X3kaawac_g4/SsPOZXb9ClI/AAAAAAAAAqc/tLiD5Rvzj-Y/s72-c/roundabout.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-6623213311237257389</id><published>2009-09-30T22:59:00.001+02:00</published><updated>2009-09-30T23:03:51.204+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="jpa"/><category scheme="http://www.blogger.com/atom/ns#" term="object-relational mapping"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Retrospective: JPA Workshop /ch/open</title><content type='html'>&lt;img style=&quot;margin: 0px 10px 10px 0px&quot; src=&quot;http://lh5.ggpht.com/jonas.bandi/SHugkpqvAUI/AAAAAAAAARI/CJ3BVKJhAm8/image_thumb.png?imgmax=800&quot; alt=&quot;image_thumb.png&quot; border=&quot;0&quot; width=&quot;161&quot; height=&quot;142&quot; align=&quot;left&quot; /&gt;
&lt;a href=&quot;http://twitter.com/simas_ch&quot;&gt;Simon&lt;/a&gt; and I gave our &lt;a href=&quot;http://kenai.com/projects/jpaworkshop/&quot;&gt;JPA Workshop&lt;/a&gt; at the &lt;a href=&quot;http://ch-open.ch/wstage/09/&quot;&gt;workshop days&lt;/a&gt; of &lt;a href=&quot;http://www.ch-open.ch/&quot;&gt;/ch/open&lt;/a&gt; earlier this month.
&lt;br/&gt;
&lt;br/&gt;
Now the &lt;a href=&quot;http://ch-open.ch/wstage/09/ws9.html#Kursbeurteilung&quot;&gt;course feedback is online&lt;/a&gt;. I think generally we can be content, especially the comments are pleasant. The participants seemed to like our examples.
&lt;br/&gt;
&lt;br/&gt;
All the content (slides and examples) is available as &lt;a href=&quot;http://kenai.com/projects/jpaworkshop/&quot;&gt;project jpaworkshop on Kenai&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
I am looking forward to repeating the workshop next year. By then the JPA2 implementations should be finished.
&lt;br/&gt;
&lt;br/&gt;
Note to myself - things to look into for the next time:
&lt;list&gt;
&lt;li&gt;
&lt;a href=&quot;http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29#Using_EclipseLink_JPA_Extensions_for_Entity_Caching&quot;&gt;Using EclipseLink JPA Extensions for Entity Caching&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;a href=&quot;http://wiki.eclipse.org/Introduction_to_Cache_%28ELUG%29&quot;&gt;Understanding EclipseLink Caching&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;a href=&quot;http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_%28ELUG%29#Queries_and_the_Cache&quot;&gt;Queries and the Cache&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;a href=&quot;http://wiki.eclipse.org/EclipseLink/Examples/JPA/Pagination&quot;&gt;EclipseLink/Examples/JPA/Pagination -&gt; still supporting only Oracle?&lt;/a&gt;
&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://a1.twimg.com/a/1253141863/images/favicon.ico&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/6623213311237257389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/09/retrospective-jpa-workshop-chopen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6623213311237257389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/6623213311237257389'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/09/retrospective-jpa-workshop-chopen.html' title='Retrospective: JPA Workshop /ch/open'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/jonas.bandi/SHugkpqvAUI/AAAAAAAAARI/CJ3BVKJhAm8/s72-c/image_thumb.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-2255488117203845427</id><published>2009-09-29T12:50:00.001+02:00</published><updated>2009-09-29T13:08:31.540+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="work"/><title type='text'>Abstraction, Encapsulation and social Darwinism (The Antipattern of Framework- vs. Business-Programmers)</title><content type='html'>
&lt;blockquote&gt;Responsibility trap number one: Building a platform to make other (lesser) programmers more productive.&lt;/blockquote&gt;
&lt;p align=&quot;right&quot;&gt;- Eric Evans at SET 2008&lt;/p&gt; 
&lt;br/&gt;
&lt;blockquote&gt;Hiding things from developers often requires more effort in the long run than simply trying to educate your developers as to how they should properly do their job.&lt;/blockquote&gt;
&lt;p align=&quot;right&quot;&gt;- &lt;a href=&quot;http://davybrion.com/blog/2009/04/educate-developers-instead-of-protecting-them/&quot;&gt;Educate Developers Instead Of Protecting Them&lt;/a&gt; by Davy Brion&lt;/p&gt;
&lt;br/&gt;

&lt;blockquote&gt;Making development &quot;safe&quot; for lesser skilled developers by taking choices away from developers [...] does far more to hamper the efforts of your best developers than it does to make weaker developers more productive.
I&#39;ll say that there is a silver bullet(s), it&#39;s: Skill. Knowledge. Experience. Passion. Discipline.&lt;/blockquote&gt;
&lt;p align=&quot;right&quot;&gt;- &lt;a href=&quot;http://codebetter.com/blogs/jeremy.miller/archive/2007/05/21/thoughts-rants-and-arguments-my-devteach-2007-rollup.aspx&quot;&gt;Jeremy Miller&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;

Again and again I come across projects, teams and companies that misuse the concepts of &lt;a href=&quot;http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29&quot;&gt;Abstraction&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Information_hiding&quot;&gt;Encapsulation&lt;/a&gt; to establish a two class society among the developers.
&lt;br/&gt;
&lt;br/&gt;

&lt;img style=&quot;margin: 10px 0px 10px 10px&quot;src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SsHokfvFdCI/AAAAAAAAAqU/z4-LrYlJhUw/mind_the_gap-logo.jpg?imgmax=800&quot; alt=&quot;mind_the_gap-logo.jpg&quot; border=&quot;0&quot; width=&quot;190&quot; align=&quot;right&quot; /&gt;
In those setups you usually find on one side a framework-team that is responsible for a supposedly productivity-boosting, supposedly well crafted framework / platform / infrastructure. On the other side you find an army of business programmers that have to use the provided framework / platform / infrastructure to actually realize business value.
&lt;br/&gt;
&lt;br/&gt;
Usually the framework-team members think of themselves as the gurus, the elite, the &quot;real&quot; programmers, while the business programmers are considered as &quot;lesser&quot; foot soldiers.
&lt;br/&gt;
These attitudes are mostly shared and therefore promoted by management. Indeed the framework-programmers often have the better education and/or more technical expertise.
&lt;br/&gt;
If the situation is really bad then the framework team does not like to mingle with the business-programmers and the worst thing is, when they are not even co-located.
&lt;br/&gt;
&lt;br/&gt;
&lt;img style=&quot;margin: 10px 10px 0px 0px&quot;src=&quot;http://lh6.ggpht.com/jonas.bandi/SFrOQe6K3gI/AAAAAAAAAPo/bWF2jNFEr3U/Teamwork.gif?imgmax=800&quot; alt=&quot;Teamwork.gif&quot; border=&quot;0&quot; width=&quot;140&quot; align=&quot;left&quot; /&gt;
I heavily oppose this setup. It is an antipattern, that prevents team enabling. Agile, self-enabling, highly-motivated teams will never evolve in such a structured and divided team setup. This is not an environment where individuals are allowed to grow, this is an environment where employees are assigned! &lt;strong&gt;In such an environment, people just start to not care any more:&lt;/strong&gt; framework-developers do not really care about business value, business-developers dont&#39;t feel like being able to make a difference...
&lt;br/&gt;
&lt;br/&gt;

&lt;a href=&quot;http://blog.jonasbandi.net/2008/01/why-software-factory-analogy-fails.html&quot;&gt;As I don&#39;t believe in the factory analogy&lt;/a&gt;, I don&#39;t believe there is a situation where lesser developers have to be shielded/protected by a technical framework. The time to create a patronizing framework, would be better invested in teaching and exchanging knowledge.
&lt;br/&gt;
In my experience, if a developer is not productive, then this is usually a management failure. Simple measures like assigning another task,  changing the setup, pair programming, coaching, reviews etc. would usually improve the situation. I have seen projects where this has been achieved successfully, but in the above setup, this is usually not going to happen.
&lt;br/&gt;
And in the rare case that you are really dealing with a &lt;a href=&quot;http://en.wikipedia.org/wiki/NNPP&quot;&gt;net negative producing programmer (NNPP)&lt;/a&gt;, no technological solution will save you...

&lt;a href=&quot;http://en.wikipedia.org/wiki/Abstraction_(computer_science)&quot;&gt;Abstraction&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Information_hiding&quot;&gt;Encapsulation&lt;/a&gt; are pillars of object-oriented design. They are intellectual constructs to tackle complexity. They are technical tools and &lt;em&gt;not a mechanism to legitimate team structure&lt;/em&gt;.
&lt;br/&gt;

&lt;br/&gt;
Using engineering techniques from object-oriented design to enforce team structure and separation feels just as wrong as &lt;a href=&quot;http://en.wikipedia.org/wiki/Social_darwinism&quot;&gt;applying Darwin&#39;s evolution theory to human societies&lt;/a&gt;.
&lt;br/&gt;
&lt;br/&gt;
&lt;img style=&quot;margin: 0px 0px 10px 10px&quot;src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/SjpAxtFUwBI/AAAAAAAAAeU/wlisjzOno20/medicine20logo.jpg?imgmax=800&quot; alt=&quot;medicine20logo.jpg&quot; border=&quot;0&quot; width=&quot;150&quot; align=&quot;right&quot; /&gt;
Possible remedies and counter measures for the situation are:

&lt;list&gt;
&lt;li&gt;
&lt;strong&gt;Eat your own dogfood:&lt;/strong&gt; Framework-developers have to use their own framework. They have to be involved in business-programming.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empower the business developers:&lt;/strong&gt; Establish an environment where it is absolutely clear, that the business developers are the ones that are providing value. 
The framework-team has the sole purpose to enable the business-developers.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Productize the framework:&lt;/strong&gt; Nobody is forced to use the framework. The framework-programers have to actively sell their work, the business developers can freely decide if they want to use it. (According to a disscussion with Mark Striebeck, this philosophy is very successful at Google)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collective ownership of the code&lt;/strong&gt;, including the framework.
&lt;/li&gt;
&lt;/list&gt;
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://a1.twimg.com/a/1253141863/images/favicon.ico&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; follow me on twitter, I need some friends :-)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/2255488117203845427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/09/abstraction-encapsulation-and-social.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/2255488117203845427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/2255488117203845427'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/09/abstraction-encapsulation-and-social.html' title='Abstraction, Encapsulation and social Darwinism (The Antipattern of Framework- vs. Business-Programmers)'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5763764290649132593.post-2828584478202656897</id><published>2009-09-22T16:16:00.001+02:00</published><updated>2009-09-22T16:22:05.077+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javablog"/><category scheme="http://www.blogger.com/atom/ns#" term="MDSD"/><category scheme="http://www.blogger.com/atom/ns#" term="methodology"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Illustrative Programming: I am a skeptic! (and I am not alone)</title><content type='html'>
I have stated several times, that I don&#39;t believe in visual modeling and cannot share the enthusiasm that a certain branch of MDSD people have for visual modeling:
&lt;br/&gt;
&lt;div style=&quot;padding-left:10px&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/07/visual-modeling-is-it-worth-it-example.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://lh4.ggpht.com/_X3kaawac_g4/SlNzOM4AhcI/AAAAAAAAAnI/mqDDRGN4zmQ/PlasticSurgery2.jpg?imgmax=800&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;vertical-align:top&quot;&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2009/07/visual-modeling-is-it-worth-it-example.html&quot;&gt;Visual modeling: Is it worth it? An example...&lt;/a&gt;
&lt;/td&gt;
&lt;td style=&quot;width:30px;&quot;&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href=&quot;http://blog.jonasbandi.net/2008/11/musing-about-code-generation-mdsd-and.html&quot;&gt;
&lt;img width=&quot;60px&quot; src=&quot;http://www.trinity3d.com/images/gnomon/digital_sculpting_human/example1.jpg&quot; height=&quot;60px&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;&lt;td style=&quot;width:120px;vertical-align:top&quot;&gt;
&lt;a href=http://blog.jonasbandi.net/2008/11/musing-about-code-generation-mdsd-and.html&quot;&gt;Musing about Code Generation, MDSD and DSLs&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br/&gt;
Now &lt;a href=&quot;http://twitter.com/martinfowler&quot;&gt;Martin Fowler&lt;/a&gt; is coining the Term &lt;a href=&quot;http://martinfowler.com/bliki/IllustrativeProgramming.html&quot;&gt;&quot;Illustrative Programming&quot;&lt;/a&gt; in the context of Language Workbenches like &lt;a href=&quot;http://www.intentsoft.com/technology/overview.html&quot;&gt;IntentionalSoftware&lt;/a&gt;, which are tools to build &quot;illustrative DSLs&quot;.
&lt;br/&gt;
&lt;br/&gt;
For a lot of people coming from the UML camp, the notion of a &quot;DSL&quot; is what Fowler is calling an &quot;illustrative DSL&quot; here.
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb126235.aspx&quot;&gt;Visual Studio Domain-Specific Language Tools&lt;/a&gt; are a striking example of this.
&lt;br/&gt;
&lt;br/&gt;
In his article &lt;a href=&quot;http://twitter.com/martinfowler&quot;&gt;Martin Fowler&lt;/a&gt; quotes some opinions of &lt;a href=&quot;http://twitter.com/Neal4d&quot;&gt;Neal Ford&lt;/a&gt; about the concepts of &lt;a href=&quot;http://martinfowler.com/bliki/IllustrativeProgramming.html&quot;&gt;Illustrative Programming&lt;/a&gt;:
&lt;br/&gt;

&lt;blockquote style=&quot;font-size:12px&quot;&gt;&lt;list&gt;
&lt;li&gt;
I think these tools work best for lay people (thus, your link to &lt;a href=&quot;http://martinfowler.com/bliki/LayProgrammer.html&quot;&gt;LayProgrammers&lt;/a&gt;). However, in general, tools like this slow down experienced/power users. [...] I would much prefer a markup language I could use to directly define stuff, with macros, snippets, and all the other things I&#39;m accustomed to as a developer.
&lt;/li&gt;

&lt;li&gt;
As these tools grow, they get unwieldy (perhaps because they are ceasing to be domain specific enough?).  [...] APIs in programming languages scale much better, with several orders of magnitude more density before they become hard to navigate.
&lt;/li&gt;

&lt;li&gt;
All the best-practices and tools don&#39;t exist there: refactoring, levels of testing, etc. Also, you loose the connection to text, meaning that macro facilities either don&#39;t exist or complex one-offs. [...]
&lt;/li&gt;

&lt;li&gt;
I share your bullishness around these types of tools, but they are a long time from being useful for full-bore Agile development. I hope they mature fast.
&lt;/li&gt;
&lt;/list&gt;
&lt;/blockquote&gt;&lt;br/&gt;
&lt;img style=&quot;margin: 0px 0px 10px 10px&quot;src=&quot;http://lh5.ggpht.com/_X3kaawac_g4/SktnOqqnsoI/AAAAAAAAAms/Fcstly0klRo/webdesign.jpg?imgmax=800&quot; alt=&quot;webdesign.jpg&quot; border=&quot;0&quot; width=&quot;200&quot; align=&quot;right&quot; /&gt;

&lt;strong&gt;Reading these comments, I am having a deja-vu!&lt;/strong&gt;
&lt;br/&gt;
&lt;br/&gt;
This is really expressing what I was feeling when I was involved in MDSD attempts in recent projects.

I don&#39;t generally doubt the noble goals that the visual modeling camp believe in.
&lt;br/&gt;
&lt;br/&gt;

But the tools and environment are just not ready to provide value. At least not in that kind of mainstream real world enterprise projects I have been involved in.
&lt;br/&gt;
&lt;br/&gt;

Also in my experience, the target of &lt;a href=&quot;http://martinfowler.com/bliki/IllustrativeProgramming.html&quot;&gt;illustrative programming&lt;/a&gt; is the developers,&lt;em&gt; which is wrong&lt;/em&gt;!
&lt;br/&gt;
&lt;br/&gt;
As Fowler is pointing out, the goal of illustrative programming is to engage &lt;a href=&quot;http://martinfowler.com/bliki/LayProgrammer.html&quot;&gt;lay-programmers&lt;/a&gt;.
&lt;br/&gt;
&lt;strong&gt;Developers need other tools than lay-programmers!&lt;/strong&gt; So if there are no lay-programmers in your project, there is arguably need for &lt;a href=&quot;http://martinfowler.com/bliki/IllustrativeProgramming.html&quot;&gt;illustrative programming&lt;/a&gt;... 
&lt;br/&gt;
&lt;br/&gt;
This insight was always lacking when I was confronted with attempts at visual modeling.
&lt;br/&gt;
&lt;br/&gt;
It is a common mistake in a lot of projects to establish some kind of two-class society among the developers, in this case it could be tempting to degrade the second class to lay-programmers. But that is a sick environment to begin with (and the topic for another post)...
&lt;br/&gt;
&lt;br/&gt;
&lt;div style=&quot;align:right; font-size: 10px; clear:right; &quot;&gt;
&lt;br/&gt;
&lt;p&gt;&lt;a  href=&quot;http://twitter.com/jbandi&quot;&gt;&lt;img style=&quot;margin: 0px 0px 0px 0px&quot; src=&quot;http://a1.twimg.com/a/1253141863/images/favicon.ico&quot; border=&quot;0&quot; align=&quot;left&quot; height=&quot;13px&quot;/&gt; of cource you should follow me on twitter&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jonasbandi.net/feeds/2828584478202656897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.jonasbandi.net/2009/09/illustrative-programming-i-am-skeptic.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/2828584478202656897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5763764290649132593/posts/default/2828584478202656897'/><link rel='alternate' type='text/html' href='http://blog.jonasbandi.net/2009/09/illustrative-programming-i-am-skeptic.html' title='Illustrative Programming: I am a skeptic! (and I am not alone)'/><author><name>Jonas Bandi</name><uri>https://plus.google.com/112227752763576523969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CWxpLKpHYgs/AAAAAAAAAAI/AAAAAAAABSY/pIwwfznMU-0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_X3kaawac_g4/SlNzOM4AhcI/AAAAAAAAAnI/mqDDRGN4zmQ/s72-c/PlasticSurgery2.jpg?imgmax=800" height="72" width="72"/><thr:total>4</thr:total></entry></feed>