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

<channel>
	<title>Schauderhaft &#187; Quality Management</title>
	<atom:link href="http://blog.schauderhaft.de/category/quality_management/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schauderhaft.de</link>
	<description>Softwaredevelopment, Projectmanagement, Qualitymanagement and all things &#34;schauderhaft&#34;</description>
	<lastBuildDate>Sun, 25 Jul 2010 14:04:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Prepare for Your Next Job Interview</title>
		<link>http://blog.schauderhaft.de/2010/04/25/prepare-for-your-next-job-interview/</link>
		<comments>http://blog.schauderhaft.de/2010/04/25/prepare-for-your-next-job-interview/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 08:52:51 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[interview]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=476</guid>
		<description><![CDATA[From time to time I&#8217;m on the employer side of a job interview for software development positions and similar. It is certainly an interesting experience. But it would be much more fun when the candidates came a little prepared. So here are a couple of things to ponder when you are heading for an interview:

Don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>From time to time I&#8217;m on the employer side of a job interview for software development positions and similar. It is certainly an interesting experience. But it would be much more fun when the candidates came a little prepared. So here are a couple of things to ponder when you are heading for an interview:</p>
<ul>
<li>Don&#8217;t worry about technology so much. Software development is such a broad field you can&#8217;t know everything. I will be able to find some limits of your knowledge. In fact everybody with a couple of years experience will find those limits no matter who the candidate is. If you are any good, you&#8217;ll find my limits too. It is not so important what you know, but what you are able and willing to learn. But there are some things you should absolutely know, because they are about yourself:</li>
<li>Know why you are a software developer and why you want to stay one. What is it that fascinates you about software development? If you don&#8217;t know this I&#8217;m gonna assume that you are not fascinated by software development at all. That&#8217;s OK. I know lots of companies that are looking for exactly this kind of employee. I am not.</li>
<li>Know what you don&#8217;t know. When you are telling me you are an expert in X and I find out you aren&#8217;t, this is a big minus. If you tell me you have a working knowledge of Y and I find out this is exactly the case it is a big plus. It is your choice to collect pluses or minuses.</li>
<li>Know what you learned. As I said I am interested in your ability to learn. So be prepared to tell me what and how you learned during the last project, during the last year and during the last month. What have you read? What did you like, what did you dislike? And of course why?</li>
<li>Know where you want to go. Do you want to become project managere? Do you want to become a teacher and mentor? Do just want to write code? When you tell me where you want to go, I can tell you if the job offering will match that. If you don&#8217;t tell me, I&#8217;ll vote for not giving you the chance to find out.</li>
</ul>
<p>Does this sound harsh and arrogant? Thats becaus it is. One of things I want to reach is a higher quality of software development in my proximity. For that I&#8217;m more then willing to learn and to teach, but I&#8217;m not willing to waste time with people that don&#8217;t even know where they are and where they want to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2010/04/25/prepare-for-your-next-job-interview/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Is ISO 9001 obsolete?</title>
		<link>http://blog.schauderhaft.de/2010/01/03/iso-9001-obsolete/</link>
		<comments>http://blog.schauderhaft.de/2010/01/03/iso-9001-obsolete/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 04:45:20 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[ISO9001]]></category>
		<category><![CDATA[quality]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=361</guid>
		<description><![CDATA[I just finished &#8216;Here Comes Everybody&#8217;, a must-read for anybody trying to understand what is going on with all this social media stuff. One point Clay Shirky makes, is that  the various web2.0 tools make failing cheap.
If in the 80s you had an idea for a group to form, you had a lot of things [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_368" class="wp-caption alignleft" style="width: 310px"><a href="http://www.sxc.hu/photo/1156438"><img class="size-medium wp-image-368" title="1156438_86834439" src="http://blog.schauderhaft.de/wp-content/uploads/2009/12/1156438_86834439-300x199.jpg" alt="A rusty car" width="300" height="199" /></a><p class="wp-caption-text">Rusty Car</p></div>
<p>I just finished <a href="http://www.amazon.com/Here-Comes-Everybody-Organizing-Organizations/dp/0143114948">&#8216;Here Comes Everybody&#8217;</a>, a must-read for anybody trying to understand what is going on with all this social media stuff. One point Clay Shirky makes, is that  the various web2.0 tools make failing cheap.</p>
<p>If in the 80s you had an idea for a group to form, you had a lot of things to do, many of which cost money: Finding a room to meet, printing fliers or ads to promote your idea and so on. If your idea failed, all that money was wasted.</p>
<p>Compare that to the situation today. Create a webpage, and promote it using facebook, twitter, xing or many of the other tools is free. All you have to invest is your own time. If it fails, nothing is lost. Actually something that fails today might get picked up tomorrow by somebody else and brought to success. Like a wikipedia article which is a stub at first, but then evolves in a well written article, through many mostly small changes an improvements. If one of the changes is bad, again the cost of this is minimal. Somebody will notice it and revert the change. Cost: a couple minutes of online time for bad article and 5 minutes work. Compare that to a typo in a printed encyclopedia. Fixing a typo would cost thousands of euros. So it won&#8217;t get fixed until the next revision which might take years to come.</p>
<p>So where is the relationship to the title of this post, namely the ISO 9001? One of the corner stones of modern quality management is to prevent errors to happen. This is a good thing under the assumption that fixing errors is way more expensive then preventing them. For building a car, this is probably still true: &#8220;Oh the brakes didn&#8217;t work? Probably because we installed any in the first place. Let me fix that right away. What do you mean, you don&#8217;t want them anymore? Oh you are dead &#8230; I see.&#8221; But for building software, for creating documentation for the software, for gathering requirements of the software, this assumption is wrong in many cases.</p>
<p>I am trying to write <a href="http://www.amazon.com/gp/product/0132350882?ie=UTF8&amp;tag=schauderhaft-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0132350882">clean code</a>, <a href="http://www.amazon.com/gp/product/1932394850?ie=UTF8&amp;tag=schauderhaft-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1932394850">tested code</a>, <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=schauderhaft-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X">working code</a> all the time and I expect my coworkers to do the same. But that doesn&#8217;t prevent me from checking in less then perfect code into the version control system. Because as soon as it available for others to see and to use, they might find bugs, or even fix some. They might provide feed back for improvement or further development of the piece. I would not accept a rule that disallows less then perfect code (or documentation) to be seen by others.</p>
<p>So, is ISO 9001 obsolete? I&#8217;d say NO for the following reasons:</p>
<ul>
<li>While it is OK to have broken stuff around, it is not OK to leave it that way. An implementation of ISO 9001 may help with making this clear for everybody.</li>
<li>The agile / social media way of doing things does lead some people to the impression that it is OK to write crappy software. Although it is hard to understand how they come to that conclusion when reading the agile manifesto or any of the well known literature on agile software development, it still happens. Fixed rules inside a company of what must be done before releasing software or any development artifact to a customer.</li>
<li>While the ISO 9001 is build on the idea of preventing errors it actually isn&#8217;t hard coded in a form that requires anything like a Waterfall approach.</li>
<li>Even in a software developing company there are processes that need attention and that don&#8217;t need, and maybe shouldn&#8217;t be as flexible as a wiki page (consider the processes of paying the salaries with correct taxes and all)</li>
</ul>
<p>But there are a couple of things that pop up around ISO 9001: Lengthy specifications and lengthy review processes of that specification. Many companies like to create those, and many people seem to think they are a requirement of the ISO 9001. This is not true. The norm requires that you know what you need, before you build it. A specification of the complete system certainly fits that requirement. But since you don&#8217;t create a complete new CRM in an afternoon, you don&#8217;t need the complete specification.</p>
<p>If you agree with a customer on a couple of user stories to be implemented in the next two weeks, and write those down on a whiteboard or in a webbased application or on some sheets of paper, any auditor of ISO 9001 conformance will have a problem criticizing that. If you use a whiteboard, you might want to make a photo of that. And if you write it down as a Fitnesse test, the auditor will probably be impressed.</p>
<p>So no, ISO 9001 is not obsolete. What is obsolete are ways of implementing the ISO 9001 that are damaging the reputation of that norm.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2010/01/03/iso-9001-obsolete/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Do we need an Agile Maturity Model?</title>
		<link>http://blog.schauderhaft.de/2009/09/06/do-we-need-an-agile-maturity-model/</link>
		<comments>http://blog.schauderhaft.de/2009/09/06/do-we-need-an-agile-maturity-model/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 09:20:53 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[APMM]]></category>
		<category><![CDATA[cmmi]]></category>
		<category><![CDATA[ISO]]></category>
		<category><![CDATA[Maturity]]></category>
		<category><![CDATA[measurement]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[Scott Ambler]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[SPICE]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=167</guid>
		<description><![CDATA[In a post on developer works Scott Ambler proposes a &#8220;Agile Process Maturity Model&#8221; (APMM), if you are asking &#8220;WTF is that supposed to be?&#8221; Scott tries to answer that in his first sentence:
The goal of the Agile Process Maturity Model (APMM) is to provide a framework which provides context for the plethora of agile [...]]]></description>
			<content:encoded><![CDATA[<p>In a post on developer works Scott Ambler proposes a <a href="http://www.ibm.com/developerworks/blogs/page/ambler?entry=apmm_overview">&#8220;Agile Process Maturity Model&#8221; (APMM)</a>, if you are asking &#8220;WTF is that supposed to be?&#8221; Scott tries to answer that in his first sentence:</p>
<blockquote><p>The goal of the Agile Process Maturity Model (APMM) is to provide a framework which provides context for the plethora of agile methodologies and practices out there today.</p></blockquote>
<p>First I was quite impressed by the BWPS ratio (Buzz Word Per Sentence). I count 6 (counting &#8220;Agile Process Maturity Model (APMM)&#8221; as one). But then I realized that this is what I would highly welcome: Context for Agile Methods. If this means we get an overview of all the process that you need if you do software development and then markers in this process landscape to indicate various Agile Methods to help with this process, that for sure would be helpful. But how would this be a &#8216;Maturity Model&#8217;?</p>
<p>So once again I had no choice but to read the complete article, including the comments. I must say, I was disappointed. What follows is basically a ranking of agile process, methodologies or what ever you want to call these. Such a ranking explains the &#8216;Maturity Model&#8217; part, but it completely voids the agile part. What value can a ranking of processes have in a context where the common understanding is that processes aren&#8217;t that important anyway?</p>
<p>So my clear opinion is: No thanks we don&#8217;t need another maturity model, the existing once are causing enough problems. I know some of my coworkers are reading this blog and are by now probably thinking: &#8220;Interesting opinion for the quality manager of our company&#8221;. So let me explain why I think ISO 9001, SPICE, CMMI &amp; Co are often doing more harm then good.</p>
<p>The problem is the same as with <a href="/2009/02/06/how-to-use-key-figures-and-how-not-to-use-key-figures/">any kind of measurement</a>: If you measure people or they work, they start to optimize for the measurement. For example if you start to measure code coverage and declare high coverage to be good, people will create automated tests for code that gets created automatically, although in most cases these kind of tests are of very limited use. With all the quality norms the auditors look for proofs that a certain aspect of a process gets executed as intended. This is really difficult to do, expect for the cases where documentation is created. But documentation created only for some audit is actually the exact kind of thing you don&#8217;t want to have. It costs money, gets outdated fast after the audit and has no benefit for your project, your company or the customer.</p>
<p>How to avoid this pitfall is a topic for a different post.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/09/06/do-we-need-an-agile-maturity-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to ask for a critique</title>
		<link>http://blog.schauderhaft.de/2009/08/30/how-to-ask-for-a-critique/</link>
		<comments>http://blog.schauderhaft.de/2009/08/30/how-to-ask-for-a-critique/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 08:42:11 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[ask]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[perspective]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=196</guid>
		<description><![CDATA[Des Traynor writes about how to get valuable feedback from your clients. He writes from a designer perspective, but the key points just as well apply for software developers, not only when talking to customers, but also when doing audits and reviews:
Every time in my career that I’ve gotten useless feedback it has always been [...]]]></description>
			<content:encoded><![CDATA[<p>Des Traynor writes about <a href="http://www.contrast.ie/blog/asking-for-feedback/">how to get valuable feedback</a> from your clients. He writes from a designer perspective, but the key points just as well apply for software developers, not only when talking to customers, but also when doing audits and reviews:</p>
<blockquote><p>Every time in my career that I’ve gotten useless feedback it has always been because I hadn’t asked for anything more. Attaching a file to an email and asking for any thoughts the client may have is a sure way to get any thoughts that the client may have.</p></blockquote>
<p>If you don&#8217;t want to start a brain storm about whatever you have created, ask specific questions. When you create mock gui the questions might be:</p>
<ul>
<li>Do the colors and layout match your Corporate Identity?</li>
<li> Are the most important elements easily accessible? How can we improve on that?</li>
<li> Should we make the fonts larger, smaller or keep them as they are?</li>
</ul>
<p>When doing a code review questions or tasks might be:</p>
<ul>
<li>Look for ill designed methods, that don&#8217;t work on a single level of abstraction, or aren&#8217;t properly named.</li>
<li>Is there anything that looks like a bug?</li>
<li>Is there anything that is difficult to understand and therefor needs refactoring or a comment?</li>
<li>Is there anything that might result in performance problems?</li>
</ul>
<p>It is also important to consider if you actually want feedback in order to improve the piece of work, or if you just want a confirmation that everything is Ok and you can consider it done. In the first case ask open questions: &#8220;What can we do to improve &#8230;?&#8221;, &#8220;What do you think about &#8230;?&#8221; If you just want to get an Ok ask closed question, that can be answered with yes or no: &#8220;Is &#8230; acceptable?&#8221;, &#8220;Do you agree &#8230;?&#8221;</p>
<p>Just in case you didn&#8217;t followed the link to <a href="http://www.contrast.ie/blog/">Des Traynors blog</a> you mist the hilarious video he included in the post, so let me add it here.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/sifESist1KY&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/sifESist1KY&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/08/30/how-to-ask-for-a-critique/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Use Key Figures and How Not to Use Key Figures</title>
		<link>http://blog.schauderhaft.de/2009/02/06/how-to-use-key-figures-and-how-not-to-use-key-figures/</link>
		<comments>http://blog.schauderhaft.de/2009/02/06/how-to-use-key-figures-and-how-not-to-use-key-figures/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 20:54:50 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[key figure]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Motivation]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2009/02/06/how-to-use-key-figures-and-how-not-to-use-key-figures/</guid>
		<description><![CDATA[Possibly the worst idea ever conceived in business is the idea to link payment to key figures. Why? Because it can only work for a single key figure: company profit, assuming that the main purpose of the company in question is to maximize company profit in the long run. If you link that number to [...]]]></description>
			<content:encoded><![CDATA[<p>Possibly the worst idea ever conceived in business is the idea to link payment to key figures. Why? Because it can only work for a single key figure: company profit, assuming that the main purpose of the company in question is to maximize company profit in the long run. If you link that number to the payments of the employees they now have an interest in maximizing the profit of the company. And if the employees expect to stay long enough with the company they have an interest in maximizing the profit in the long run. Great!<br />
But of course the motivation of the employee diminishes when the company grows. A single employee has hardly any influence on the company profit. Now smart people think up new key figures. But since those are by definition different from the company profit, employees get paid for optimizing something that is not company profit, with disastrous results. Let me give you some examples:</p>
<ul>
<li>Employees get extra pay for work on billable projects. Undesired result: If an employee is finished with her work she benefits from claiming to still work on the project instead of announcing availability for new tasks.</li>
<li>Employees get extra pay for the ratio of positive feedback from customers. Undesired result: Negative feedback gets hidden, but the negative feedback is the one you really need to know about.</li>
<li>Employees get extra pay for the success of their department. Undesired result: Fights between department about who is ‘owner’ of a project; Information hiding between departments.</li>
</ul>
<p>So should we scrap all key figures? No, I think they are actually quite useful, as long as you never try to tie any kind of automatic action on a key figure that goes beyond some kind alarm, triggering somebody to look into the situation. It also makes the selection of key figures much easier. You don’t have to find a key figure which is fail proof (which you won’t find anyway). Another example: Key figures for Software Development. The aim is to get an indicator when something in the software construction phase is going astray. I propose the following key figures:</p>
<ul>
<li>Lines Of Code per man month</li>
<li>Code Coverage in any of its flavors</li>
<li><a href="http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/">Toxicity</a></li>
</ul>
<p>Of course it is a bad idea to base any kind of payment on the lines of code produced. Employees would use cut and paste instead of avoiding duplicate code. The inverse is equally bad. People would probably stop working at all. Yet if you find that one team produces half the lines of code than all the others it is worth a second. Maybe they creating extremely crisp code or they are just lazy, or encounter serious problems.  Almost the same applies when code coverage or toxicity deviates from the usual values. If all three numbers evolve as you are used to from other projects, development probably evolves as you are used to. And if something unusual happens it will probably show in the numbers pretty soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/02/06/how-to-use-key-figures-and-how-not-to-use-key-figures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Keep your Tests Green</title>
		<link>http://blog.schauderhaft.de/2009/02/03/dont-keep-your-tests-green/</link>
		<comments>http://blog.schauderhaft.de/2009/02/03/dont-keep-your-tests-green/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 09:04:44 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2009/02/03/dont-keep-your-tests-green/</guid>
		<description><![CDATA[Wait &#8230; wasn&#8217;t that &#8216;Keep your tests green&#8217;? Of course I agree, if 50% of your tests are red all the time you have a problem. BUT if 100% of the tests are green all the time, then how do you know they can actually detect the errors they are supposed to cover? Simple answer [...]]]></description>
			<content:encoded><![CDATA[<p>Wait &#8230; wasn&#8217;t that &#8216;Keep your tests green&#8217;? Of course I agree, if 50% of your tests are red all the time you have a problem. BUT if 100% of the tests are green all the time, then how do you know they can actually detect the errors they are supposed to cover? Simple answer you don&#8217;t.</p>
<p>It really sounds like a trivial thing, but it isn&#8217;t. So far I have three times accountered scenarios where tests couldn&#8217;t possibly become red. And in all cases this went undetected at least for some time:</p>
<ul>
<li>The first time I finally found the problem, when I by excident ran code coverage not only for the code under test but also for the Tests themself. I was quite surprised to find many classes with partial coverage as well with no coverage at all. The partial coverage turned out to be ok. This was due to tests checking for thrown exceptions. Those resulted in segments of the testcode that where never run. But the Tests that never ran at all, well they never ran at all. They were not included in any test suite.</li>
<li>The next time we were using Teamcity to run our tests on each commit. We were kind of proud of ourself, because the tests where green for quite some time now. We clicked around in the statistic a little just to show to ourself how great we were. But what was that?The number of executed tests wen&#8217;t down! Two days ago it went from 396 to 387! Who the heck deleted the tests? Well nobody did. But a change in the code caused an exception during setup of some tests. And this exception was silently ignored by Teamcity. But the associated tests of course didn&#8217;t ran, thus reducing the test count. <a href="http://www.jetbrains.net/jira/browse/TW-3809">JetBrains is aware of the problem</a>, but it doesn&#8217;t seem to be high on the priority list.</li>
<li>I detected the last on when I tried to gather some code statistics for a project and didn&#8217;t get any results. In this case no tests where run at all! The team used the <a href="http://ant.apache.org/manual/OptionalTasks/junit.html">ant junit target</a> with the batchtest nested element. But the pattern they used was wrong. So no tests where picked up. But since no tests failed the build was reported as a success.</li>
</ul>
<p>All cases where pretty trivial to fix, but also in all cases the not excecuted tests surfaced some problem when they where finally executed. So do yourself a favor and make sure that</p>
<ul>
<li>your tests can fail (test first is one way to do that) .</li>
<li>all your tests do run (using code cover and examination of statistics)</li>
</ul>
<p>And only than make sure that your tests stay green.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/02/03/dont-keep-your-tests-green/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>News on Testing for databases</title>
		<link>http://blog.schauderhaft.de/2008/12/19/news-on-testing-for-databases/</link>
		<comments>http://blog.schauderhaft.de/2008/12/19/news-on-testing-for-databases/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 18:47:50 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Quality Management]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/12/19/news-on-testing-for-databases/</guid>
		<description><![CDATA[I have blogged before about my experience with database development and how it feels like stone age if you are coming from the object oriented world. Obviously an area where a lot of improvement is needed.
Here is somebody else working on that problem. He is aproaching the problem using FIT or at least based on [...]]]></description>
			<content:encoded><![CDATA[<p>I have blogged before about my <a href="/2008/02/04/wie-setze-ich-ein-datenbankprojekt-auf/">experience</a> with <a href="/2008/08/31/datenbankesign/">database</a> <a href="/2008/11/27/why-hibernate-is-so-much-more-powerful-than-jdbc/">development </a>and how it <a href="/2008/08/22/database-refactoring/">feels like stone age</a> if you are coming from the object oriented world. Obviously an area where a lot of improvement is needed.</p>
<p>Here is <a href="http://timhigh.wordpress.com/">somebody else</a> <a href="http://timhigh.wordpress.com/2008/12/19/unit-tests-for-the-database/trackback">working on that problem</a>. He is aproaching the problem using FIT or at least based on fit:</p>
<blockquote><p>That’s the hardest part about testing code that depends on the database: setting up the data the way you want it, and making sure it’s there in a pure and unadulterated form (otherwise, you may get incorrect results). What better way to declare your test data than to put in it tables, just the way it should look in the database? So, we made special set up fixtures that let you declare the name of a table and the columns into which you want to insert your test data. Each row in the HTML or spreadsheet declares a row that will be inserted into the database before the test begins.</p></blockquote>
<p>Unfortunatly the tool he talks about isn&#8217;t open sourced, but I think it is an interesting aproach worth considering when you do database centric software development.</p>
<p>He talks also about code coverage analysis for database code and promises to cover that in a future post in more detail. I do look forward to that post.</p>
<blockquote><p>One other piece that is typically missing from the database development suite are tools for reporting on test coverage of procedural code by the unit test suite. [...] Our Data Architect, has come to the rescue with an excellent, thorough and flexible solution to this problem. Unfortunately, it’s Oracle-specific, so it will only help you if you work with Oracle. I’ll save the details for another post &#8211; stay tuned!</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/12/19/news-on-testing-for-databases/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Probleme lösen</title>
		<link>http://blog.schauderhaft.de/2008/12/07/probleme-losen/</link>
		<comments>http://blog.schauderhaft.de/2008/12/07/probleme-losen/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 21:30:44 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/12/07/probleme-losen/</guid>
		<description><![CDATA[In einer Klausur über theoretische Physik wurde mir eine der wiederlichsten Fragen gestellt, die mir in einer Prüfung gestellt wurden: &#8220;Wie lösen Sie ein physikalisches Problem?&#8221;
Ein Kommilitone versuchte es mit dieser Antwort:
&#8220;Es gibt zwei Möglichkeiten: Entweder es ist ein schon gelöstes Problem, dann hat schon jemand eine Lösung dafür und ich schlage sie nach, oder [...]]]></description>
			<content:encoded><![CDATA[<p>In einer Klausur über theoretische Physik wurde mir eine der wiederlichsten Fragen gestellt, die mir in einer Prüfung gestellt wurden: &#8220;Wie lösen Sie ein physikalisches Problem?&#8221;</p>
<p>Ein Kommilitone versuchte es mit dieser Antwort:</p>
<p>&#8220;Es gibt zwei Möglichkeiten: Entweder es ist ein schon gelöstes Problem, dann hat schon jemand eine Lösung dafür und ich schlage sie nach, oder es ist ein ungelöstes Problem. In diesem Fall ist es auch mit ausgeprägtem Selbstbewusstsein für einen Vordiplomanden unangemessen zu erwarten man könnte es lösen.&#8221;</p>
<p>Die Antwort bekommt definitiv einen Bonus für Witz, und für wohlstrukturierte Probleme ist sie auch tatsächlich sehr brauchbar. Wohlstrukturiert heisst alle relevanten Informationen zu dem Problem sind vorhanden und von einer potentiellen Lösung läßt sich verhältnismäßig einfach sagen, ob es sich um eine tatsächliche Lösung handelt. Diese Probleme lassen sich in der Tat am besten lösen, in dem man einen Experten fragt.</p>
<p>Ab viel spannender sind die schlecht strukturierten Problemen: Es gibt unglaublich viele potentielle Lösungen, und ob sie  tatsächliche Lösungen sind, kann man erst sagen, wenn man es ausprobiert hat. Ein Beispiel? Politische Probleme: Sollten wir die Mehrwertsteuer senken um die Wirtschaft zu stärken? Oder Barschecks verteilen? Oder einfach abwarten? Wir haben vermutlich alle eine Meinung. Aber wirklich wissen tut es niemand. Fast alle Probleme die man täglich bei der Arbeit bearbeitet fallen in diese Kategorie: Welches Framework ist für das nächste Projekt das bessere? Struts, Struts2, JSF, Wicked &#8230;</p>
<p>Also, wie löst man solche Probleme? Ich kenne zwei Strategien. Die erste nenne ich die Berater Strategie:</p>
<ol>
<li>Es werden ein paar Lösungsalternativen diskutiert</li>
<li>Es wird eine Alternative ausgewählt</li>
<li>Und diese umgesetzt.</li>
</ol>
<p>Klingt gut? Ich denke nicht. Warum nicht sollte offensichtlich werden, wenn man sich die etwas ausgefeiltere Methode anschaut, die unter dem Namen <a href="http://de.wikipedia.org/wiki/Probleml%C3%B6sen#Methodische_Probleml.C3.B6sung">S.P.A.L.T.E.N</a> firmiert anschaut:</p>
<ol>
<li><strong>S</strong>ituationsanalyse</li>
<li><strong>P</strong>roblemeingrenzung</li>
<li><strong>A</strong>lternativen aufzeigen</li>
<li><strong>L</strong>ösungsauswahl</li>
<li><strong>T</strong>ragweite analysieren &#8211; Chancen und Risiken abschätzen</li>
<li><strong>E</strong>inführung und Umsetzung &#8211; Maßnahmen und Prozesse</li>
<li><strong>N</strong>achbearbeitung und Lernen</li>
</ol>
<p>Man erkennt die drei Punkte aus der ersten &#8216;Methode&#8217; wieder. Aber es ist einiges hinzugekommen, was oft (nicht nur von Beratern) vergessen wird. Als erstes wird das Problem erkannt, identifiziert und eingegrenzt, d.h. erst wenn man weiß, dass es ein Problem gibt, und man das Problem kennt, wird versucht eine Lösung für das Problem zu finden.</p>
<p>Und nachdem eine Lösung umgesetzt wurde, wird diese nachbearbeitet, d.h. insbesondere wird kontrolliert, ob das Problem tatsächlich gelöst wurde.</p>
<p>Also: das nächste Mal, wenn euch jemand eine Lösung vorstellt, vor allem wenn er dafür viel Geld haben will, fragt doch einfach mal, was das Problem ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/12/07/probleme-losen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Infos zum Thema Testen</title>
		<link>http://blog.schauderhaft.de/2008/11/21/infos-zum-thema-testen/</link>
		<comments>http://blog.schauderhaft.de/2008/11/21/infos-zum-thema-testen/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 07:50:48 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[kurz notiert]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/11/21/infos-zum-thema-testen/</guid>
		<description><![CDATA[Testen ist wichtig, und seit einigen Jahren ist es zumindest in der Form von (J)Unit test schon fast beliebt geworden. Gut so. Nicht so toll ist, dass leider eine Menge Leute denken, JUnit wäre alles was man zum Thema wissen kann und muss. Ich denke den Lesern meines Blogs ist klar, dass das nicht so [...]]]></description>
			<content:encoded><![CDATA[<p>Testen ist wichtig, und seit einigen Jahren ist es zumindest in der Form von (J)Unit test schon fast beliebt geworden. Gut so. Nicht so toll ist, dass leider eine Menge Leute denken, JUnit wäre alles was man zum Thema wissen kann und muss. Ich denke den Lesern meines Blogs ist klar, dass das nicht so ist. Aber wo bekommt man Anregungen, Ideen und Informationen über professionelles Testen her? Bis vor kurzem hätte ich die Achseln gezuckt und geantwortet &#8220;Google?&#8221; Aber dann hab ich mir mal wieder meine Referrer angesehen und dabei eine &#8220;Community&#8221; entdeckt (vor 3 Jahren hätte man Forum gesagt) die sich mit Softwaretests beschäftigt. <a href="http://www.softwaretestingclub.com/">Den Softwaretesting Club</a>. Nach dem ersten Stöbern sieht das sehr vielversprechend aus. Gleich in den Reader gepackt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/11/21/infos-zum-thema-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Coverage, what is it good for?</title>
		<link>http://blog.schauderhaft.de/2008/10/20/code-coverage-what-is-it-good-for/</link>
		<comments>http://blog.schauderhaft.de/2008/10/20/code-coverage-what-is-it-good-for/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 15:44:01 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Quality Management]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/10/20/code-coverage-what-is-it-good-for/</guid>
		<description><![CDATA[Today I read in short succession two articles about the code coverage metric, its use and potential harm.
First I read Increasing Code Coverage May Be Harmful where Dan Mange describes how adding tests just to increase code coverage might cause problems. Secondly Meera Subbarao asks is code coverage important?
I think there are a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>Today I read in short succession two articles about the code coverage metric, its use and potential harm.</p>
<p>First I read <a href="http://www.dcmanges.com/blog/increasing-code-coverage-may-be-harmful">Increasing Code Coverage May Be Harmful</a> where Dan Mange describes how adding tests just to increase code coverage might cause problems. Secondly <span class="submitted">Meera Subbarao asks </span><a href="http://java.dzone.com/articles/is-code-coverage-important">is code coverage important</a>?</p>
<p>I think there are a lot of problems with the whole code coverage discussion. The phrase with &#8216;tool&#8217; and &#8216;fool&#8217; comes to ones mind.</p>
<p>So this is my list of problems I have with 99% of all code coverage discussions</p>
<ol>
<li>Code coverage isn&#8217;t properly defined at all. Are you talking about statement, block, path, method coverage? What exact flavor thereof? With out defining it the term code coverage is pretty much useless.</li>
<li>Any kind of Code Coverage of 100% percent suggests some kind of completeness of the test. Which is pretty much bullshit. If your tests are wrong, coverage says nothing. If your test is correct (in the sense of checking for the correct result) it doesn&#8217;t mean the code will have the correct result in all possible cases. Other things like configurations, annotations and third party libraries, including operating systems and hardware often go completely untested although some metric says we have a code coverage of 100%. So it is important to realize 100% code coverage of your preferred flavor is just some completely arbitrary degree of completness for the test suite.</li>
<li>Closely to related to the second point is the assumed ideal of a completely tested code base. Such a complete coverage in the sense of guaranteed surfacing of every possible contained bug is impossible. No matter how trivial you program is. Even for the most trivial program it is easily possible to construct hundreds of testcases.</li>
<li>In most projects only automated unit tests contribute to reported code coverage. But normally there is a lot of manual testing to accompany that. So while 100% coverage doesn&#8217;t mean there are no bugs, 30% doesn&#8217;t mean the software is bug ridden.</li>
</ol>
<p>So where is the real target for testing? As so often it is a tradeoff. A trade off between effort invested in development and maintanance of test code vs. uncovered bugs in the code base. So one needs to define the limitations in budget and the limitation in bugs to stay undetected in the codebase. Which again are constraint by feasability: Some kind of bugs are difficult to find by tests: Bugs in extremly simple code could hide, when the test code is more complex and therefore errorprone then the code under test. Other Bugs you cannot possibly find by tests: Features that are not required yet implemented (called surprises by Robert V. Binder in his book <a href="http://www.amazon.de/gp/product/0201809389?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0201809389">Testing Object Oriented Systems: Models, Patterns and Tools (Addison-Wesley Object Technology)</a>) as well as not implemented but required features.</p>
<p>When you are working on software that does not control life support systems nor large amounts of money I&#8217;d consider it quite naturally that quite a piece of the code isn&#8217;t covered by automated tests at all but the tests concentrate on the most complex most error prone pieces of the software.</p>
<p>So what to do? Whenever your actions are controlled by just one number, stop it. Code Coverage is a valuable tool to find areas that need testing.</p>
<p>But before blindly writing tests ask some questions first.</p>
<ul>
<li>Do we need to increase the quality (in the meaning of decreasing the number of bugs). Ok most of the time the answer is a big yes to this one.</li>
<li>How much do we want to increase it.</li>
<li>How much are we willing to pay for that</li>
<li>What is the best way to increase the quality? Increase code coverage? Increase thoroughness of the test? Which in turn leads to the question of fault models (what kind of bugs are we looking for) and test strategies (how to hunt bugs effective AND efficient)</li>
</ul>
<p>And if the team doesn&#8217;t want to answer all these questions but still increase the code quality through test, I&#8217;d opt for some training possibly by reading the already mentioned book by <a href="http://www.amazon.de/gp/product/0201809389?ie=UTF8&amp;tag=schauderhafte-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0201809389">Robert V. Binder</a>. I have some critism for the book as well, but that must wait for another post. It at least clarifies some facts about what tests can achieve and what they can&#8217;t achieve.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/10/20/code-coverage-what-is-it-good-for/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
