<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Goal-Driven Development</title>
	<atom:link href="http://sebastien-arbogast.com/2008/03/10/goal-driven-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/</link>
	<description>Solving Software Problems since 2010</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:39:51 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Sébastien</title>
		<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/comment-page-1/#comment-368</link>
		<dc:creator>Sébastien</dc:creator>
		<pubDate>Sun, 06 Jul 2008 14:49:12 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/goal-driven-development/#comment-368</guid>
		<description>Very interesting indeed. I can&#039;t wait to be able to try this. For now, I&#039;m trying to write an enterprise application DSL (entities, services, value objects, etc.) with concepts I&#039;m familiar with in AndroMDA. And making it possible to write tests for those constructs would really be amazing. That&#039;s one of the cartridges I missed the most in AndroMDA: a way to model unit tests using instance diagrams.</description>
		<content:encoded><![CDATA[<p>Very interesting indeed. I can&#8217;t wait to be able to try this. For now, I&#8217;m trying to write an enterprise application DSL (entities, services, value objects, etc.) with concepts I&#8217;m familiar with in AndroMDA. And making it possible to write tests for those constructs would really be amazing. That&#8217;s one of the cartridges I missed the most in AndroMDA: a way to model unit tests using instance diagrams.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Konstantin Solomatov</title>
		<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/comment-page-1/#comment-367</link>
		<dc:creator>Konstantin Solomatov</dc:creator>
		<pubDate>Sun, 06 Jul 2008 14:42:19 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/goal-driven-development/#comment-367</guid>
		<description>Tests might be written in a special test DSL for a main DSL.It might provide assertions and other common stuff in a easier to read/write notation.

We have such a DSL for testing language implementation (it will probably be available in the next MPS build). For example in it, you can annotate you program with special notation which requires that a particular expression has a type you set. Another use case is testing of refactorings (like extract/inline method). They have a lot of special cases to make them look intelligent which makes them very error prone. In these tests you specify how code looks before and after refactoring and test checks this with respect to refactoring implementation.</description>
		<content:encoded><![CDATA[<p>Tests might be written in a special test DSL for a main DSL.It might provide assertions and other common stuff in a easier to read/write notation.</p>
<p>We have such a DSL for testing language implementation (it will probably be available in the next MPS build). For example in it, you can annotate you program with special notation which requires that a particular expression has a type you set. Another use case is testing of refactorings (like extract/inline method). They have a lot of special cases to make them look intelligent which makes them very error prone. In these tests you specify how code looks before and after refactoring and test checks this with respect to refactoring implementation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sébastien</title>
		<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/comment-page-1/#comment-366</link>
		<dc:creator>Sébastien</dc:creator>
		<pubDate>Sun, 06 Jul 2008 14:34:54 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/goal-driven-development/#comment-366</guid>
		<description>I still find it hard to figure out what &quot;higher level tests&quot; would look like. But I&#039;m writing unit tests for a small application I&#039;m developing right now, and using JMock is really painful. I feel like I&#039;m just writing the algorithm of my service methods using some kind of awful unreadable DSL (Expectations... ierk). From that point of view, it might be interesting. Are you working on such a test DSL with MPS?</description>
		<content:encoded><![CDATA[<p>I still find it hard to figure out what &#8220;higher level tests&#8221; would look like. But I&#8217;m writing unit tests for a small application I&#8217;m developing right now, and using JMock is really painful. I feel like I&#8217;m just writing the algorithm of my service methods using some kind of awful unreadable DSL (Expectations&#8230; ierk). From that point of view, it might be interesting. Are you working on such a test DSL with MPS?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Konstantin Solomatov</title>
		<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/comment-page-1/#comment-365</link>
		<dc:creator>Konstantin Solomatov</dc:creator>
		<pubDate>Sun, 06 Jul 2008 14:25:17 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/goal-driven-development/#comment-365</guid>
		<description>IMO, moving towards higher abstraction layer with MDA, DSLs or other similar technology doesn&#039;t remove need to write tests. It just makes a user write less but higher level tests.

On the other hand, not all projects require unit tests. If you are creating prototype or a proof of concept application, it&#039;s almost always a bad idea to write unit tests since they slow down experimentation. Why writing unit tests for code if you are 90% sure that you will throw it away. As project and its architecture mature it test stop slowing it down and improve its quality.</description>
		<content:encoded><![CDATA[<p>IMO, moving towards higher abstraction layer with MDA, DSLs or other similar technology doesn&#8217;t remove need to write tests. It just makes a user write less but higher level tests.</p>
<p>On the other hand, not all projects require unit tests. If you are creating prototype or a proof of concept application, it&#8217;s almost always a bad idea to write unit tests since they slow down experimentation. Why writing unit tests for code if you are 90% sure that you will throw it away. As project and its architecture mature it test stop slowing it down and improve its quality.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sébastien</title>
		<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/comment-page-1/#comment-93</link>
		<dc:creator>Sébastien</dc:creator>
		<pubDate>Wed, 12 Mar 2008 15:44:37 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/goal-driven-development/#comment-93</guid>
		<description>I see at least two delusions, two things you tend to forget as well:

1- Unit tests are code, and if you write unit tests because there might be some mistakes in your code, then what prevents you from having mistakes in your unit tests as well? My point is: unit tests are by no way a proof of anything. If you want to prove that your code is doing what you expect it to, then you&#039;re stuck with formal programming, something like B for example.

2- Unit tests do NOT test that your code does what the client expects of it, they test that your code does what YOU expect of it, and in my experience, most of the time, developers are the ones who misinterpret what the client wants, so you end up testing correctly something that does not correspond to what the customer needs. And if THAT&#039;s really your objective, then &quot;my&quot; fancy graphical and high-level representation seems more suitable to spot misinterpretation mistakes than a very local and low-level unit test.

My ultimate goal as a software developer is dual:
- the application should do what the customer expects it to do
- the application should NOT do what the customer does not want it to do

Now those are goals, something I tend do, but I also keep in mind that the closer I want to be to these, the more difficult it is to focus on both goals at the same time. IMHO, unit tests can be useful for the second goal, but not very much for the first one. MDA does not pretend to remove all bugs, but at least it reduces the probability of bugs, while allowing you to work with a much higher-level view of your application, which is great for the first goal. Of course, I could combine MDA and Unit tests, and I have seen it done on a few MDA projects. But then the question is, is it worth the time and effort... and pain? For me, the jury is still out.

My only point was to open up the debate, because I&#039;m kind of fed up with hearing that unit tests are the only way to salvation, that if you&#039;re doing unit tests, you&#039;re the good guy, if not you&#039;re bad. That&#039;s dangerous, because software quality is not only about bugs, it&#039;s about business value and usability too. And there are various techniques that you can use to improve the quality of your software. And because all those techniques have costs, your software will never be perfect. And all I&#039;m saying is that the cost of unit tests is sometimes too big, big enough for me to look for other techniques to reach similar goals.</description>
		<content:encoded><![CDATA[<p>I see at least two delusions, two things you tend to forget as well:</p>
<p>1- Unit tests are code, and if you write unit tests because there might be some mistakes in your code, then what prevents you from having mistakes in your unit tests as well? My point is: unit tests are by no way a proof of anything. If you want to prove that your code is doing what you expect it to, then you&#8217;re stuck with formal programming, something like B for example.</p>
<p>2- Unit tests do NOT test that your code does what the client expects of it, they test that your code does what YOU expect of it, and in my experience, most of the time, developers are the ones who misinterpret what the client wants, so you end up testing correctly something that does not correspond to what the customer needs. And if THAT&#8217;s really your objective, then &#8220;my&#8221; fancy graphical and high-level representation seems more suitable to spot misinterpretation mistakes than a very local and low-level unit test.</p>
<p>My ultimate goal as a software developer is dual:<br />
- the application should do what the customer expects it to do<br />
- the application should NOT do what the customer does not want it to do</p>
<p>Now those are goals, something I tend do, but I also keep in mind that the closer I want to be to these, the more difficult it is to focus on both goals at the same time. IMHO, unit tests can be useful for the second goal, but not very much for the first one. MDA does not pretend to remove all bugs, but at least it reduces the probability of bugs, while allowing you to work with a much higher-level view of your application, which is great for the first goal. Of course, I could combine MDA and Unit tests, and I have seen it done on a few MDA projects. But then the question is, is it worth the time and effort&#8230; and pain? For me, the jury is still out.</p>
<p>My only point was to open up the debate, because I&#8217;m kind of fed up with hearing that unit tests are the only way to salvation, that if you&#8217;re doing unit tests, you&#8217;re the good guy, if not you&#8217;re bad. That&#8217;s dangerous, because software quality is not only about bugs, it&#8217;s about business value and usability too. And there are various techniques that you can use to improve the quality of your software. And because all those techniques have costs, your software will never be perfect. And all I&#8217;m saying is that the cost of unit tests is sometimes too big, big enough for me to look for other techniques to reach similar goals.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Iwein Fuld</title>
		<link>http://sebastien-arbogast.com/2008/03/10/goal-driven-development/comment-page-1/#comment-92</link>
		<dc:creator>Iwein Fuld</dc:creator>
		<pubDate>Wed, 12 Mar 2008 14:56:52 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/goal-driven-development/#comment-92</guid>
		<description>You&#039;re forgetting something: it is not relevant how you&#039;re software is defined/created, the tests are about *verifying that it actually works*. 

So you don&#039;t write a test for every method. Fine. If you drag an arrow to the wrong place in your fancy tool and screw up the system not test will show that mistake. Wrong!

I don&#039;t have a problem so much with the fact that you use fancy tools to generate your software, I have a problem with the fact that you don&#039;t provide proof that it works alongside it. 

Especially in an environment where some people are working on the code directly your approach is completely naive. Even if you have generated the perfect code, somebody will come along during refactoring and get no warning whatsoever if he breaks it.

The ultimate goal is working software, which is not the same as correct software. Your tools might generate code without bugs, but they might also generate code that doesn&#039;t do what the client expects of it. 

In a way similar to what code coverage junkies do, you value the process over the result in your post. That is the kind of behavior that gives software developers a bad name.</description>
		<content:encoded><![CDATA[<p>You&#8217;re forgetting something: it is not relevant how you&#8217;re software is defined/created, the tests are about *verifying that it actually works*. </p>
<p>So you don&#8217;t write a test for every method. Fine. If you drag an arrow to the wrong place in your fancy tool and screw up the system not test will show that mistake. Wrong!</p>
<p>I don&#8217;t have a problem so much with the fact that you use fancy tools to generate your software, I have a problem with the fact that you don&#8217;t provide proof that it works alongside it. </p>
<p>Especially in an environment where some people are working on the code directly your approach is completely naive. Even if you have generated the perfect code, somebody will come along during refactoring and get no warning whatsoever if he breaks it.</p>
<p>The ultimate goal is working software, which is not the same as correct software. Your tools might generate code without bugs, but they might also generate code that doesn&#8217;t do what the client expects of it. </p>
<p>In a way similar to what code coverage junkies do, you value the process over the result in your post. That is the kind of behavior that gives software developers a bad name.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

