<?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>PHPBlog.it &#187; unit test</title>
	<atom:link href="http://phpblog.it/tag/unit-test/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:36:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Refactoring: migliorare la struttura del codice</title>
		<link>http://phpblog.it/2008/05/19/refactoring-migliorare-la-struttura-del-codice/</link>
		<comments>http://phpblog.it/2008/05/19/refactoring-migliorare-la-struttura-del-codice/#comments</comments>
		<pubDate>Mon, 19 May 2008 06:00:24 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[code design]]></category>
		<category><![CDATA[martin fowler]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/05/19/refactoring-migliorare-la-struttura-del-codice/</guid>
		<description><![CDATA[Il refactoring è una pratica di sviluppo, il cui scopo fondamentale è di migliorare la struttura del codice, per favorire il riutilizzo di porzioni di esso, per migliorarne la leggibilità e prepararne l&#8217;evoluzione. Il principio fondamentale sul quale si basa il refactoring, è riassunto molto bene dalla definizione che ne da Martin Fowler, primo fra [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/05/369500852_25a2c45a69_m.jpg" alt="migliorare la struttura del codice" />Il refactoring è una pratica di sviluppo, il cui scopo fondamentale è di migliorare la struttura del codice, per favorire il riutilizzo di porzioni di esso, per migliorarne la leggibilità e prepararne l&#8217;evoluzione. Il principio fondamentale sul quale si basa il refactoring, è riassunto molto bene dalla definizione che ne da Martin Fowler, primo fra tutti a teorizzare tale pratica: <em>Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior</em>. In altre parole: il refactoring rappresenta la necessità di modificare una porzione di codice, possibilmente di dimensioni limitate, senza alterare il compito che essa svolge e quindi senza alterarne il risultato.</p>
<p><span id="more-97"></span></p>
<p>Quando si scrivono applicazioni e programmi in genere <strong>si cerca di partire sempre con il piede giusto</strong> prestando particolare attenzione alla struttura del codice per avere sorgenti &#8220;puliti&#8221; e facilmente mantenibili da noi o da terze parti. Si scrive quindi con un occhio di riguardo al futuro cercando di scrivere codice migliore e più aperto possibile. Tuttavia è pressochè certo che durante la fase di sviluppo (e non durante la progettazione o la stesura delle specifiche) <strong>il committente varierà le specifiche iniziali o i tempi ed i modi in cui vuole che la sua applicazione venga realizzata</strong>. Questo porterà inesorabilmente il programmatore di inserire parti di codice non previste, sviluppate in poco tempo e contro i propri consigli che andranno a degradare la qualità del codice prodotto facendogli perdere leggibilità ed apertura a modifiche future.</p>
<p>Purtroppo visto che i tempi da dedicare allo sviluppo sono sempre inferiori a quelli che realmente servirebbero per scrivere delle applicazioni in modo pulito e ragionato non è possibile concentrarsi contemporaneamente sulla scrittura del codice e sul suo refactoring. <strong>Quando impegnarsi quindi per migliorare il design del proprio codice?</strong> Esisteranno sicuramene molte scuole di pensiero a riguardo (se ve ne piace qualcuna in particolare ditecelo pure nei commenti) ma quella che preferisco è quella teorizzata da Fowler come &#8220;<strong>La regola del 3</strong>&#8221; (<em>Rule of Three</em>):</p>
<p><em>La prima volta che fai qualcosa, semplicemente la fai. La seconda volta che farai qualcosa di simile, probabilmente controvoglia la duplicherai comunque. La terza volta che farai qualcosa di simile sarà arrivato il momento di compiere il refactoring.</em></p>
<p>Gli approcci alle attività di refactoring sono sostanzialmente due e possono essere svolte <strong>prima</strong> di introdurre una nuova modifica o <strong>dopo</strong> la sua introduzione. Nel primo caso si tratterà di preparare il codice per ospitare nuove funzionalità andando a migliorare il design dell&#8217;applicazione dove possibile al fine di rendere meno vincolanti alcune operazioni presenti nel codice già scritto. In questo modo si potrà risparmiare tempo nel momento in cui si renderà necessaria l&#8217;implementazione di nuove funzioni. Nel secondo caso, forse quello più comune, si lavora sul codice presente al fine di migliorarne la sua strutturazione immediatamente dopo aver aggiunto una nuova funzionalità. In questo modo il codice sarà lasciato sempre nella migliore delle condizioni per poterci lavorare in seguito. Le fasi di sviluppo saranno quindi due: inizialmente ci si concentra sul raggiungimento dell&#8217;obiettivo della funzionalità per poi passare al refactoring per ristrutturare e riorganizzare quanto appena prodotto.</p>
<p><strong>Di pari passo con il refactoring va il testing che deve accompagnare l&#8217;implementazione in tutto il suo processo</strong> al fine di evitare spiacevoli sorprese al momento della messa in produzione della nuova funzionalità. Quando si applicano delle modifiche al codice sorgente è possibile che si inseriscano degli errori nel codice. Spesso capita che una modifica in un punto generi un errore in un&#8217;altra parte del programma come abbiamo visto quando abbiamo parlato di PHPUnit. Ogni volta che aggiungete una funzione scrivete subito un piccolo test che controlli il suo funzionamento, poi sviluppate la funzione ed eseguitelo. Se tutto va bene siete sicuri che il codice inserito funziona e che la modifica di questo non ha influito in modo distruttivo sul resto del codice. <strong>Quando applicate refactoring del codice eseguite spesso questi test; questo vi assicura che l&#8217;interfaccia del software sia sempre la stessa, e che tutto funzioni correttamente.</strong></p>
<p><strong>Alcuni link consigliati:</strong></p>
<ul>
<li><a href="http://www.refactoring.com/" rel="nofollow">Il sito di Martin Fowler sul Refactoring</a></li>
<li><a href="http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/LibriSuObjectOrientedDesign.html#Refactoring">Refactoring: Improving the Design of Existing Code</a></li>
<li><a href="http://en.wikipedia.org/wiki/Refactoring" title="Code refactoring">Code refactoring</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/05/19/refactoring-migliorare-la-struttura-del-codice/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

