<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>XPlayer</title>
	<atom:link href="http://xplayer.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://xplayer.wordpress.com</link>
	<description>eXtreme Programming e mondo agile</description>
	<pubDate>Tue, 12 Feb 2008 10:31:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>it</language>
			<item>
		<title>Michael Feathers on testing private methods</title>
		<link>http://xplayer.wordpress.com/2008/02/08/michael-feathers-on-testing-private-methods/</link>
		<comments>http://xplayer.wordpress.com/2008/02/08/michael-feathers-on-testing-private-methods/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 16:59:11 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Testability]]></category>

		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Design]]></category>

		<category><![CDATA[objectoriented]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2008/02/08/michael-feathers-on-testing-private-methods/</guid>
		<description><![CDATA[Da un articolo di InfoQ, la posizione di M.Feathers sul testare i metodi privati:
Michael Feathers suggested last year in The Deep Synergy Between Testability and Good Design that TDD encourages good design and, conversely, code that is not testable should make us think twice:
When I write tests and I have the urge to test a [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Da <a href="http://www.infoq.com/news/2008/01/private-methods-tdd-design">un articolo di InfoQ,</a> la posizione di M.Feathers sul testare i metodi privati:</p>
<p>Michael Feathers suggested last year in <a href="http://michaelfeathers.typepad.com/michael_feathers_blog/2007/09/the-deep-synerg.html">The Deep Synergy Between Testability and Good Design</a> that TDD encourages good design and, conversely, code that is not testable should make us think twice:</p>
<blockquote><p><i>When I write tests and I have the urge to test a private method, I take it as a hint. The hint tells me that my class is encapsulating so much that it has ceased to be &#8220;understandable&#8221; by tests through its public interface. I listen to the hint, and factor my design differently. Usually, I end up moving the private method (and possibly some methods around it) to a new class where it can be non-private and accessible to tests.</i></p></blockquote>
<p>Condivido al 100%!</p>
<p>E interessante anche quello che dice dopo, nel post originale, riguardo alla relazione tra coupling, cohesion e testabilita&#8217;.</p>
<blockquote><p><i>In the end, it all comes down to cohesion and coupling.  If classes are deeply coupled with their neighbors, it is hard to control them in a test or observe them independently.  If a class isn&#8217;t cohesive, it may have some logic which is not easily exercisable through its public interface.</i></p>
<p><i>It seems that reverse is true also.  Classes which are hard to instantiate and use in a test harness are more coupled than they could be, and classes with private methods that you feel the urge to test, invariably have some sort of cohesion problem: they have more than one responsibility.</i></p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/30/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/30/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=30&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2008/02/08/michael-feathers-on-testing-private-methods/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>[Oracle Tips] Monitorare le connessioni aperte verso il db</title>
		<link>http://xplayer.wordpress.com/2008/02/08/oracle-tip-monitorare-le-connessioni-aperte-verso-il-db/</link>
		<comments>http://xplayer.wordpress.com/2008/02/08/oracle-tip-monitorare-le-connessioni-aperte-verso-il-db/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 12:11:04 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[monitoring]]></category>

		<category><![CDATA[oracle]]></category>

		<category><![CDATA[sql]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/?p=29</guid>
		<description><![CDATA[Ogni volta che mi serve tenere d&#8217;occhio le connessioni verso un db Oracle mi ricordo vagamente della tabella Vqualcosa, ma il ricordo non e&#8217; mai abbastanza nitido&#8230; Pertanto mi segno qui alcune query utili, una volta per tutte!
Per contare le connessioni aperte verso il db raggruppate per macchina client
    select MACHINE, count(*) [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ogni volta che mi serve tenere d&#8217;occhio le connessioni verso un db Oracle mi ricordo vagamente della tabella <i>Vqualcosa</i>, ma il ricordo non e&#8217; mai abbastanza nitido&#8230; Pertanto mi segno qui alcune query utili, una volta per tutte!</p>
<p>Per contare le connessioni aperte verso il db raggruppate per macchina client</p>
<blockquote><p><code>    select MACHINE, count(*) from V$SESSION group by MACHINE</code></p></blockquote>
<p>Per contare solo quelle verso un certo schema</p>
<blockquote><p><code>    select MACHINE, count(*) from V$SESSION where schemaname = '&lt;NOME DELLO SCHEMA&gt;' group by MACHINE</code></p></blockquote>
<p>Per contare solo quelle provenienti da certi client<br />
<code></code></p>
<blockquote><p><code>    select MACHINE, count(*) from V$SESSION where upper(machine) like '%&lt;NOME DELLA MACCHINA CLIENT&gt;%' group by MACHINE</code></p></blockquote>
<p>Per contare le connessioni aperte verso il db raggruppate per utente<br />
<code></code></p>
<blockquote><p><code>    select osuser, count(*) from V$SESSION group by osuser;</code></p></blockquote>
<p>Per contare tutte le connessioni aperte (vabbe&#8217;, questa e&#8217; banale!)<br />
<code></code></p>
<blockquote><p><code>    select count(*) from V$SESSION;</code></p></blockquote>
<p>Per vedere anche lo stato della connessione<br />
<code></code></p>
<blockquote><p><code>    select count(*), status from V$SESSION group by status;</code></p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/29/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/29/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=29&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2008/02/08/oracle-tip-monitorare-le-connessioni-aperte-verso-il-db/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>[a-ha! moment] Finalmente ho capito la configurazione di DBCP</title>
		<link>http://xplayer.wordpress.com/2008/02/05/a-ha-moment-finalmente-ho-capito-la-configurazione-di-dbcp/</link>
		<comments>http://xplayer.wordpress.com/2008/02/05/a-ha-moment-finalmente-ho-capito-la-configurazione-di-dbcp/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 13:01:13 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[configuration]]></category>

		<category><![CDATA[connectionpool]]></category>

		<category><![CDATA[dbcp]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/?p=28</guid>
		<description><![CDATA[Questo post e&#8217; piu&#8217; che altro indirizzato a me stesso nel futuro, ma ovviamente se potesse servire ad altri, ora o nel futuro, ne saro&#8217; contento.
Ho finalmente capito il significato dei parametri di configurazione di DBCP!
I miei dubbi riguardavano in particolare i parametri minIdle, maxIdle e maxActive.
Le connessioni aperte in un dato istante possono potenzialmente [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Questo post e&#8217; piu&#8217; che altro indirizzato a me stesso nel futuro, ma ovviamente se potesse servire ad altri, ora o nel futuro, ne saro&#8217; contento.</p>
<p>Ho finalmente capito il significato dei parametri di configurazione di DBCP!<br />
I miei dubbi riguardavano in particolare i parametri <i>minIdle</i>, <i>maxIdle </i>e <i>maxActive</i>.</p>
<p>Le connessioni aperte in un dato istante possono potenzialmente essere comprese tra zero e <i>maxActive</i>.</p>
<p>Quando il n. di connessioni aperte e&#8217; compreso tra <i>maxIdle </i>e <i>maxActive</i>, tutte le connessioni ritornate al pool saranno immediatamente chiuse dal pool.</p>
<p>Quando il n. di connessioni aperte e&#8217; compreso tra <i>minIdle </i>e <i>maxIdle</i>, tutte le connessioni ritornate al pool saranno soggette all&#8217;eventuale evictor (che si attiva con la prop <i>timeBetweenEvictionRunsMillis</i>). Questo significa che quando l&#8217;evictor parte, chiudera&#8217; tutte le connessioni in eccedenza (rispetto a <i>minIdle</i>), ovviamente secondo le impostazioni dei parametri <i>numTestsPerEvictionRun </i>e <i>minEvictableIdleTimeMillis </i>(quest&#8217;ultima in particolare indica quando tempo una connessione &#8216;in eccesso&#8217; puo&#8217; rimanere idle nel pool prima di essere considerata &#8216;chiudibile&#8217; dall&#8217;evictor thread).</p>
<p>Quando il n. di connessioni aperte e&#8217; compreso tra zero e <i>minIdle</i>, tutte le connessioni ritornate al pool saranno lasciate nel pool. In altre parole non si dovrebbe mai scendere al di sotto di <i>minIdle </i>connessioni aperte verso il db.</p>
<p>Ora, magari questo puo&#8217; sembrare scontato a voi, ma a me no!  DBCP ha una documentazione piuttosto fumosa, e in particolare faccio ancora fatica a capire la differenza tra i vari parametri di configurazione&#8230; per esempio, cosa si intende per abandonedConnection? E come si distingue da una normale connessione idle?</p>
<p>Comunque intanto mi godo il mio <i>a-ha! moment</i> :)</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/28/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/28/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=28&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2008/02/05/a-ha-moment-finalmente-ho-capito-la-configurazione-di-dbcp/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>Measuring Lines of Code</title>
		<link>http://xplayer.wordpress.com/2008/01/17/measuring-lines-of-code/</link>
		<comments>http://xplayer.wordpress.com/2008/01/17/measuring-lines-of-code/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 14:23:17 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Metrics]]></category>

		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2008/01/17/measuring-lines-of-code/</guid>
		<description><![CDATA[Mi e&#8217; piaciuta molto questa frase di Kent Beck da una mail sulla lista xp americana, sull&#8217;uso del numero di linee di codice come metrica di produttivita&#8217;:
Lines of code has many limitations &#8212; it&#8217;s like measuring a factory based on its consumption of raw materials not on its output.
Ricorda un po&#8217; quella di Edsger W.Dijkstra
Yet [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Mi e&#8217; piaciuta molto questa frase di Kent Beck da una mail <a href="http://tech.groups.yahoo.com/group/extremeprogramming/message/137842">sulla lista xp americana</a>, sull&#8217;uso del numero di linee di codice come metrica di produttivita&#8217;:</p>
<blockquote><p><i>Lines of code has many limitations &#8212; it&#8217;s like measuring a factory based on its consumption of raw materials not on its output.</i></p></blockquote>
<p>Ricorda un po&#8217; <a href="http://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD854.html">quella </a>di Edsger W.Dijkstra</p>
<blockquote><p><i>Yet people talk about programming as if it were a production process and measure &#8220;programmer productivity&#8221; in terms of &#8220;number of lines of code produced&#8221;. In so doing they book that number on the wrong side of the ledger: we should always refer to &#8220;the number of lines of code spent&#8221;.</i></p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/27/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/27/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=27&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2008/01/17/measuring-lines-of-code/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>Il mio feedback sull&#8217;agile day 2007</title>
		<link>http://xplayer.wordpress.com/2007/11/26/il-mio-feedback-sullagile-day-2007/</link>
		<comments>http://xplayer.wordpress.com/2007/11/26/il-mio-feedback-sullagile-day-2007/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 13:54:11 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[AgileDay]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2007/11/26/il-mio-feedback-sullagile-day-2007/</guid>
		<description><![CDATA[Complimenti a Marco e agli altri organizzatori, l&#8217;agile day 2007 e&#8217; stato molto interessante, con contenuti ed organizzazione migliori dello scorso anno.
Cosa mi e&#8217; piaciuto:

lo speak di Tim Mackinnon, uno dei padri dei mock objects. In particolare:

l&#8217;accento sull&#8217;appreciative inquiry e sul positive thinking
le pratiche da lui adottate, in particolare quelle a supporto della riflessivita&#8217; e [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Complimenti a Marco e agli altri organizzatori, l&#8217;agile day 2007 e&#8217; stato molto interessante, con contenuti ed organizzazione migliori dello <a href="http://xplayer.wordpress.com/2006/12/04/il-mio-feedback-sullagile-day-2006-milano-011206/">scorso anno</a>.</p>
<p>Cosa mi e&#8217; piaciuto:</p>
<ul>
<li>lo speak di Tim Mackinnon, uno dei padri dei mock objects. In particolare:
<ul>
<li>l&#8217;accento sull&#8217;appreciative inquiry e sul positive thinking</li>
<li>le pratiche da lui adottate, in particolare quelle a supporto della riflessivita&#8217; e del miglioramento continuo del team, come la timeline e la retrospective</li>
</ul>
</li>
<li>l&#8217;esperienza di <a href="http://blog.java2me.org/antonio-terreno-home-page/">Antonio Terreno</a> su un progetto in ThoughtWorks dove c&#8217;era stato un cambio totale di team, e si e&#8217; riusciti a fare bene</li>
<li>le incursioni di Francesco Cirillo, vedi la <a href="http://www.metodiagili.it/campagna-anti-if.html">campagna anti-if </a> (comprate la maglietta anti-if!) e le riflessioni su cosa voglia dire essere agili e su quali passi dovrebbe intraprendere la comunita&#8217; xp italiana per favorire la diffusione dei metodi agili.</li>
<li>la presentazione di Alessandro Ruzzon sull&#8217;uso di Spring in progetti &#8220;agili&#8221; (!!)</li>
<li>in generale ho apprezzato la logistica a supporto delle presentazioni, vero punto debole dell&#8217;agile day 2006 (troppo rumore perche&#8217; non c&#8217;era una vera separazione delle diverse track &#8220;concorrenti&#8221;)</li>
</ul>
<p>Cosa non mi e&#8217; piaciuto:</p>
<ul>
<li>la location (troppo difficile da raggiungere)</li>
</ul>
<p>Ah, e ovviamente, aderite anche voi alla campagna anti-if! <a href="http://www.metodiagili.it/campagna-anti-if.html"> <img src="http://www.metodiagili.it/images/aderisci-anti-if-1.gif" alt="Campagna Anti-IF" border="0" height="60" width="120" /></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=25&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2007/11/26/il-mio-feedback-sullagile-day-2007/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>

		<media:content url="http://www.metodiagili.it/images/aderisci-anti-if-1.gif" medium="image">
			<media:title type="html">Campagna Anti-IF</media:title>
		</media:content>
	</item>
		<item>
		<title>Microsoft e il continuous improvement</title>
		<link>http://xplayer.wordpress.com/2007/11/26/microsoft-e-il-continuous-improvement/</link>
		<comments>http://xplayer.wordpress.com/2007/11/26/microsoft-e-il-continuous-improvement/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 13:17:04 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[ContinuousImprovement]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2007/11/26/microsoft-e-il-continuous-improvement/</guid>
		<description><![CDATA[Su InfoQ si parla di tal Jay Bazuzi, &#8220;Development Lead for the C# Editor&#8220;, che lascia Microsoft e che in occasione di questo &#8220;evento&#8221;, ha postato sul suo blog delle riflessioni su alcuni punti deboli nello sviluppo del sw in Microsoft.

A parte le osservazioni su come in Microsoft si usa l&#8217;OO o si applica refactoring, [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Su InfoQ <a href="http://www.infoq.com/news/2007/11/criticism-from-microsoft-devlead">si parla</a> di tal Jay Bazuzi, &#8220;<span style="font-style:italic;">Development Lead for the C# Editor</span>&#8220;, che lascia Microsoft e che in occasione di questo &#8220;evento&#8221;, ha postato sul suo blog delle<a href="http://blogs.msdn.com/jaybaz_ms/archive/2007/11/09/parting-words-for-dear-friends.aspx"> riflessioni su alcuni punti deboli nello sviluppo del sw in Microsoft</a>.</p>
<p><img src="http://farm1.static.flickr.com/68/204873356_bdd9d84cb4.jpg" alt="sunset in val di casies" height="375" width="500" /><br />
A parte le osservazioni su come in Microsoft si usa l&#8217;OO o si applica refactoring, l&#8217;ultimo punto e&#8217; particolarmente interessante, quando parla di &#8220;doing better&#8221;.</p>
<p>Le domande che Jay raccomanda di farsi per migliorare (e che lui personalmente si faceva e faceva al suo team) sono</p>
<ul>
<li><em>“How can I make sure this problem goes away forever?”</em></li>
<li><em>“How can I produce fewer bugs?”</em></li>
<li><em>“How can I make it easier to fix the bugs I have?”</em></li>
<li><em>“How can I make it easier to respond to change quickly?”</em></li>
<li><em>“How can I make it easier to make my software fast enough?”</em></li>
</ul>
<p>Mica paglia!</p>
<p>Che sotto sotto Jay volesse rendere piu&#8217; agile Microsoft? :-)</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=24&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2007/11/26/microsoft-e-il-continuous-improvement/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/68/204873356_bdd9d84cb4.jpg" medium="image">
			<media:title type="html">sunset in val di casies</media:title>
		</media:content>
	</item>
		<item>
		<title>La mia piccola illuminazione di oggi: GANTT planning vs XP planning</title>
		<link>http://xplayer.wordpress.com/2007/11/19/la-mia-piccola-illuminazione-di-oggi-gantt-planning-vs-xp-planning/</link>
		<comments>http://xplayer.wordpress.com/2007/11/19/la-mia-piccola-illuminazione-di-oggi-gantt-planning-vs-xp-planning/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 16:23:08 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[planning]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2007/11/19/la-mia-piccola-illuminazione-di-oggi-gantt-planning-vs-xp-planning/</guid>
		<description><![CDATA[La mia piccola illuminazione di oggi riguarda il modo tradizionale di pianificare e gestire un progetto software, ovvero con un bel GANTT e MS Project.
Per la prima volta ho dovuto analizzare il GANTT per la nuova release di un progetto su cui sto lavorando, e rivedere alcune attivita&#8217; a nostro carico per capire se mancava [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La mia piccola illuminazione di oggi riguarda il modo tradizionale di pianificare e gestire un progetto software, ovvero con un bel <a href="http://en.wikipedia.org/wiki/Gantt_chart">GANTT</a> e MS Project.</p>
<p>Per la prima volta ho dovuto analizzare il GANTT per la nuova release di un progetto su cui sto lavorando, e rivedere alcune attivita&#8217; a nostro carico per capire se mancava qualcosa e verificare le dipendenze e le stime. Ci mancherebbe, se c&#8217;e&#8217; da fare, si fa&#8217;, ma ho sentito pian piano sorgere un senso di frustrazione&#8230;<br />
Ho poi capito il senso di fastidio che provavo: il GANTT (almeno, questo GANTT) e&#8217; piuttosto &#8220;tecnical-task centrico&#8221;, ovvero organizza le attivita&#8217; &#8220;tecniche&#8221;, ma non considera in nessun modo le features dal punto di vista del customer.</p>
<p>Tutto il contrario della pianificazione in XP, che e&#8217; &#8220;business-value centrica&#8221;, ovvero usa le user stories (&#8221;units of customer-visible functionality&#8221;) per pianificare pezzi di funzionalita&#8217;, a prescindere poi dai task tecnici che possono esserci dietro (e che vanno certo esplicitati, se e&#8217; il caso, ma che non hanno valore di business di per se&#8217;).</p>
<p>Ma perche&#8217; questa differenza?</p>
<p>Forse questo e&#8217; dovuto al fatto che, mentre il GANTT e&#8217; uno strumento <u>del project manager</u> per guidare il team di sviluppo (il customer lo vedra&#8217; mai?), le user stories sono invece uno strumento <u>del customer</u> per guidare lo stesso team.<br />
In altre parole la pianificazione in XP coinvolge in prima persona il team dei customers (project manager, product manager, marketing, utenti, &#8230;), mentre in un progetto tradizionale la dinamica e&#8217; del tipo &#8220;eccoti le specifiche, ci si rivede a fine progetto&#8221;.</p>
<p>Sta di fatto che io, abituato a ragionare innanziutto per user stories, mi sono ritrovato piuttosto a disagio a ragionare per task tecnici, perche&#8217; facevo fatica a vederci dietro le funzionalita&#8217;, e  spesso anzi trovavo che la somma dei task tecnici non bastava a coprire la funzionalita&#8217; che il sistema dovrebbe realizzare.</p>
<p>E&#8217; un po&#8217; come descrivere un quadro attraverso la somma dei tratti del pennello che lo compongono&#8230; si rischia di perdere il senso complessivo dell&#8217;opera.<br />
Il rischio nel caso del software e&#8217; quello perdere tra i tanti task tecnici i veri obbiettivi di una feature, ovvero produrre qualcosa che risponde a delle necessita&#8217; del customer.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/23/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/23/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=23&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2007/11/19/la-mia-piccola-illuminazione-di-oggi-gantt-planning-vs-xp-planning/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>Come Object Mentor guida la transizione XP dai propri clienti</title>
		<link>http://xplayer.wordpress.com/2007/11/16/come-object-mentor-guida-la-transizione-xp-dai-propri-clienti/</link>
		<comments>http://xplayer.wordpress.com/2007/11/16/come-object-mentor-guida-la-transizione-xp-dai-propri-clienti/#comments</comments>
		<pubDate>Fri, 16 Nov 2007 09:34:03 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Metrics]]></category>

		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Velocity]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2007/11/16/come-object-mentor-guida-la-transizione-xp-dai-propri-clienti/</guid>
		<description><![CDATA[Di recente Bob Koss di Object Mentor ha pubblicato un post sul possibile cattivo uso della velocity come metrica di processo.
A parte il tema del post, Bob parla anche di come tipicamente Object Mentor guida la transiziona ad XP dai loro clienti.  Prima di tutto tengono un corso su XP per tutti (gruppo di [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Di recente <a href="http://blog.objectmentor.com/articles/category/young-bobs-rants">Bob Koss</a> di Object Mentor ha pubblicato un post sul <a href="http://blog.objectmentor.com/articles/2007/11/15/velocity-inflation-triggers-productivity-recession" title="Velocity Inflation Triggers Productivity Recession">possibile cattivo uso della velocity come metrica di processo</a>.</p>
<p>A parte il tema del post, Bob parla anche di come tipicamente Object Mentor guida la transiziona ad XP dai loro clienti.  Prima di tutto tengono un corso su XP per tutti (gruppo di programmatori e gruppo di customers).</p>
<blockquote><p><em>When Object Mentor does an XP transition with a client, we start with our XP Immersion course to get everybody on the same page about what our goals are.</em></p></blockquote>
<p>Poi due istruttori seguono separatamente i due gruppi, uno insegna ai programmatori le pratiche piu&#8217; tecniche, l&#8217;altro invece affronta con i customers le pratiche di planning e managing del progetto XP (scrivere le carte, le iterazioni, la pianificazione incrementale, &#8230;)</p>
<blockquote><p><em>Ideally, we use two instructors, one to train the programmers in topics such as Test Driven Development and Refactoring, and the other coach teaches story writing, iteration planning, and release planning to the customer team. </em></p></blockquote>
<p>Poi i due gruppi lavorano assieme per un giorno intero ad un progetto di prova, per far vedere a tutti come funziona il processo XP</p>
<blockquote><p><em>We then bring the two groups together for a day and have the customer team drive the programming team on a classroom exercise so everybody can experience how the process works.</em></p></blockquote>
<p>I due mentor  rimangono poi per seguire le prime iterazioni del progetto &#8220;vero&#8221;</p>
<blockquote><p><em>The instructors then stay and work with the team for a few iterations, coaching them on how to use what they learned in class on their own project.</em></p></blockquote>
<p>E poi tornano di tanto in tanto per vedere come vanno le cose, magari partecipano alle retrospective di iterazione per vedere quali sono i problemi, come vanno le metriche (in questo caso la velocity).</p>
<p>Interessante, no?</p>
<p>Quanto meno perche&#8217; mi fa riflettere su quali siano i modi migliori per introdurre XP in una realta&#8217; nuova. Certo, qui c&#8217;e&#8217; un cliente che coscentemente decide di adottare XP e paga (tanto immagino) per essere guidato nella transizione verso un processo agile.</p>
<p>La realta&#8217; in cui invece mi trovo io e&#8217; diversa, si deve procedere in modo incrementale, a piccoli passi, perche&#8217; qui nessuno (tra i dirigenti almeno) ha chiesto di adottare XP, anche se c&#8217;e&#8217; molto interesse e (qualche) consapevolezza dei punti deboli dell&#8217;attuale processo. C&#8217;e&#8217; quindi un lavoro doppio, dal basso verso i programmatori e dall&#8217;altro verso i manager, per far vedere i piccoli miglioramenti che si possono ottenere lavorando in modo agile. Miglioramenti che consentono di lavorare in modo piu&#8217; divertente e soddisfacente (il famoso <a href="http://video.google.com/videoplay?docid=7830246530742207581" title="google video">&#8220;ease at work&#8221;</a> di cui parlava Kent Beck in una sua presentazione tempo fa&#8217;).</p>
<p>Vabbe&#8217; magari ne parlero&#8217; in un altro post, visto che sto andando fuori tema!</p>
<p>Alla prossima!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=21&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2007/11/16/come-object-mentor-guida-la-transizione-xp-dai-propri-clienti/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>Come usare l&#8217;UML?</title>
		<link>http://xplayer.wordpress.com/2007/10/24/come-usare-luml/</link>
		<comments>http://xplayer.wordpress.com/2007/10/24/come-usare-luml/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 09:13:06 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[uml]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2007/10/24/come-usare-luml/</guid>
		<description><![CDATA[ Recentemente mi e&#8217; stato chiesto come si  sposano XP e l&#8217;utilizzo del UML, ovvero se e&#8217; molto usato il design delle classi in UML prima di implementarle.
Per mia esperienza, l&#8217;UML puo&#8217; essere utile come strumento di comunicazione nel team, per trasmettere una idea di design, per esplorare la struttura statica e dinamica degli [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p> Recentemente mi e&#8217; stato chiesto come si  sposano XP e l&#8217;utilizzo del UML, ovvero se e&#8217; molto usato il design delle classi in UML prima di implementarle.</p>
<p>Per mia esperienza, l&#8217;UML puo&#8217; essere utile come strumento di comunicazione nel team, per trasmettere una idea di design, per esplorare la struttura statica e dinamica degli oggetti di un sistema. Una volta ottenuto il risultato (comunicare l&#8217;idea, chiarirsi le idee, mettere a fuoco una issue), si butta via il diagramma.</p>
<p>Non fraintendetemi pero&#8217;.</p>
<p>Una delle prime cose che ho studiato quando sono entrato nel <a href="http://www.quinary.it/pagine/about/extreme_frame.htm">team Xplayers di Quinary</a> e&#8217; proprio la notazione UML. In particolare sono magistrali alcuni capitoli del libro di Larman “Applying UML and Patterns” e alcuni articoli di Bob Martin (per esempio <a href="http://www.objectmentor.com/resources/articles/umlCollaborationDiagrams.pdf">questo</a>). Questo per dire che un bravo xper deve conoscere bene l&#8217;UML perche&#8217; deve saperlo leggere e scrivere (in particolare come dicevo i class diagram, i collaboration diagram e i sequence diagram), cosi&#8217; come deve conoscere mooolto bene i pattern, perche&#8217; deve saperli riconoscere quando emergono dal design del codice in evoluzione (stessa cosa vale per i principi dell&#8217;OO).</p>
<p>Uno degli usi migliori per mia esperienza della notazione UML e&#8217; per esplorare un sistema legacy, ovvero per capire che tipo di legami e di dinamiche ci sono dietro al sistema, magari disegnando qualche class diagram e/o collaboration diagram. E&#8217; quindi molto utile per avere una visione di insieme, seppure molto limitata, di un sistema. Anche qui si disegna il diagramma, e poi, appena diventa inutile (si spera presto), lo si butta via.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=20&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2007/10/24/come-usare-luml/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>
	</item>
		<item>
		<title>Perche&#8217; non si dovrebbero mockizzare classi concrete</title>
		<link>http://xplayer.wordpress.com/2007/05/30/perche-non-si-dovrebbero-mockizzare-classi-concrete/</link>
		<comments>http://xplayer.wordpress.com/2007/05/30/perche-non-si-dovrebbero-mockizzare-classi-concrete/#comments</comments>
		<pubDate>Wed, 30 May 2007 13:03:26 +0000</pubDate>
		<dc:creator>stoner</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<category><![CDATA[Mock Objects]]></category>

		<category><![CDATA[OOPrinciples]]></category>

		<guid isPermaLink="false">http://xplayer.wordpress.com/2007/05/30/perche-non-si-dovrebbero-mockizzare-classi-concrete/</guid>
		<description><![CDATA[Mi sono sempre chiesto perche&#8217; mai Steve Freeman e gli altri &#8216;padri&#8217; dei Mock Objects e dello stile di testing interaction-based sconsigliassero di fare mock di classi concrete, tanto che jMock ed EasyMock non supportavano questa possibilita&#8217; &#8216;nativamente&#8217;, ma si doveva installare un&#8217;estensione a parte, che usa la famosa libreria CGLIB (per inciso con il [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Mi sono sempre chiesto perche&#8217; mai Steve Freeman e gli altri &#8216;padri&#8217; dei Mock Objects e dello stile di testing interaction-based sconsigliassero di fare mock di classi concrete, tanto che <em>jMock </em>ed <em>EasyMock </em>non supportavano questa possibilita&#8217; &#8216;nativamente&#8217;, ma si doveva installare un&#8217;estensione a parte, che usa la famosa libreria <em>CGLIB </em>(per inciso con il nuovo jMock 2 e&#8217; possibile fare mock di classi concrete, ma si deve usare la classe UnsafeHackConcreteClassImposteriser, ed il nome dice tutto di come scoraggino questa pratica).</p>
<p>Tanto che tempo fa avevo anche commentato un <a href="http://www.mockobjects.com/2006/10/jmock-listening-to-opinionated.html#comments" title="Commento al post di Freeman">post di Freeman</a> chiedendogli perche&#8217; lui giudicasse il mock di classi concrete come una sorta di ultima possibilita&#8217; da adottare solo in casi di emergenza (es quando si affronta codice legacy particolarmente ostico e <em>chiuso</em>). E lui mi aveva risposto cosi&#8217;:</p>
<blockquote><p><font color="#000000"><em>Because then the interface is implicit, which means you can&#8217;t see it and you haven&#8217;t given it a name. Instead of using the test to expose a feature of the design, you have more to think about whenever you&#8217;re working in that area: is the method overwritten? is it in a super class? what about the state of the rest of the class I&#8217;m extending? That sort of thing.</em></font></p>
<p><font color="#000000"><em>For me, the CGLIB should have a &#8220;Break Glass in Case of Emergency&#8221; written on the front. It&#8217;s useful in tight situations, but not to be recommended.</em></font></p></blockquote>
<p>Eppero&#8217; nonostante la sua risposta la cosa non mi era ancora chiara fino in fondo.<br />
Poi un recente post su mockobjects.com (<a href="http://www.mockobjects.com/2007/04/test-smell-mocking-concrete-classes.html"><strong>Test Smell: Mocking concrete classes</strong></a>) mi ha finalmente aiutato a capire meglio le cose.</p>
<p>Il fatto e&#8217; che lo scopo del TDD con i Mock Objects e&#8217; quello di scoprire e far emergere relazioni tra oggetti, e dare nomi a queste relazioni. Se pero&#8217; si mantiene la relazione tra oggetti a livello di classi concrete, queste relazioni rimangono per cosi&#8217; dire piu&#8217; nascoste, implicite, e quindi diventa difficile individuarle e darle un nome.</p>
<p>Cito direttamente il post, laddove spiega cosa non va con i mock di classi concrete:</p>
<blockquote><p><font color="#000000"><em>The problem with this approach is that it leaves the relationship between the objects implicit.<br />
I hope we&#8217;ve made clear by now that <strong>the intention of Test-Driven Development with Mock Objects is to discover relationships between objects</strong>.<br />
If I subclass, there&#8217;s nothing in the domain code to make such a relationship visible, just methods on an object. This makes it harder to see if the service that supports this relationship might be relevant elsewhere and I&#8217;ll have to do the analysis again next time I work with the class.</em></font></p></blockquote>
<p><img src="//dictionarytip/skin/book.png" style="border:1px solid blue;z-index:90;position:absolute;left:505px;top:293px;" /></p>
<p>Addirittura si spinge a dire che lasciando le relazioni tra oggetti a livello di classi concrete, si rischia di violare l&#8217;<a href="http://www.objectmentor.com/resources/articles/isp.pdf">Interface Segregation Principle</a>, perche&#8217; le classi dipendono da una interfaccia piu&#8217; grande di quella che usano veramente.</p>
<p>E poi poco piu&#8217; avanti spiega che l&#8217;approccio <em>mockist</em> aiuta anche a dare nomi alle relazioni ed ai ruoli, e a ragionare piu&#8217; in termini di dominio piuttosto che di implementazione:</p>
<blockquote><p><font color="#000000"><em>There&#8217;s a more subtle but powerful reason for not mocking concrete classes.<br />
As part of the TDD with Mocks process, I have to think up names for the relationships I discover—in this example the <code>ScheduledDevice</code>. I find that this makes me think harder about the domain and teases out concepts that I might otherwise miss.<br />
Once something has a name, I can talk about it. </em></font></p></blockquote>
<p>Il tutto e&#8217; poi riassunto bene nell&#8217;altro post, <a href="http://www.mockobjects.com/2007/05/what-tests-will-tell-you.html">What the tests will tell you</a>, da leggere e rileggere, dove elenca alcuni benefici derivanti dall&#8217;approccio TDD+MockObjects</p>
<ul>
<li><em>Keeping knowledge local</em></li>
<li><em>If it&#8217;s explicit I can name it</em></li>
<li><em>More names mean more domain information</em></li>
<li><em>Pass behaviour rather than data</em></li>
</ul>
<p>Detto questo, ammetto che sono sempre stato affascinato da questo approccio ma non ho mai trovato la forza necessaria per decidere di applicarlo un po&#8217; piu&#8217; sistematicamente, metterlo alla prova insomma.</p>
<p>Un po&#8217; perche&#8217; nel mio team da sempre si usa l&#8217;approccio classico, e l&#8217;approccio interaction-based e&#8217; visto con qualche dubbio/sospetto, un po&#8217; perche&#8217; i nostri progetti per ora sono tutti Java 1.4 e quindi buona parte delle comodita&#8217; delle versioni piu&#8217; recenti dei framework jMock e Easymock te le perdi (soprattutto la loro maggiore <em>letteralita&#8217;</em>, cosa importante per avere dei test validi).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/xplayer.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/xplayer.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xplayer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xplayer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xplayer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xplayer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xplayer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xplayer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xplayer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xplayer.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xplayer.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xplayer.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xplayer.wordpress.com&blog=532244&post=19&subd=xplayer&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://xplayer.wordpress.com/2007/05/30/perche-non-si-dovrebbero-mockizzare-classi-concrete/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/stoner-128.jpg" medium="image">
			<media:title type="html">stoner</media:title>
		</media:content>

		<media:content url="//dictionarytip/skin/book.png" medium="image" />
	</item>
	</channel>
</rss>