<?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; xdebug</title>
	<atom:link href="http://phpblog.it/tag/xdebug/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 21 May 2012 21:45:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Comodi strumenti di sviluppo in-browser</title>
		<link>http://phpblog.it/2008/05/15/strumenti-di-sviluppo-in-browser-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=strumenti-di-sviluppo-in-browser-php</link>
		<comments>http://phpblog.it/2008/05/15/strumenti-di-sviluppo-in-browser-php/#comments</comments>
		<pubDate>Thu, 15 May 2008 06:00:23 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[error handler]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[traceer]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/05/15/strumenti-di-sviluppo-in-browser-php/</guid>
		<description><![CDATA[Troels Knak-Nielsen sul blog PHP di SitePoint parla di alcuni comodi strumenti di sviluppo PHP da utilizzare direttamente dal browser che possono tornare veramente utili nella programmazione di tutti i giorni. Si parla di  traceers e error handlers (come XDebug), qualche porzione di strumenti di debugging dei frameworks PHP più comuni ed un insieme di [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/05/15/strumenti-di-sviluppo-in-browser-php/' addthis:title='Comodi strumenti di sviluppo in-browser '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Troels Knak-Nielsen sul <a href="http://www.sitepoint.com/blogs/category/php/" title="blog PHP di SitePoint">blog PHP di SitePoint</a> <a href="http://www.sitepoint.com/blogs/2008/05/13/useful-in-browser-development-tools-for-php/" title="parla di alcuni comodi strumenti di sviluppo PHP">parla di <strong>alcuni comodi strumenti di sviluppo PHP</strong></a> da utilizzare direttamente dal browser che possono tornare veramente utili nella programmazione di tutti i giorni. Si parla di  traceers e error handlers (come XDebug), qualche porzione di strumenti di debugging dei frameworks PHP più comuni ed un insieme di strumenti *cachegrind per permetterti di effettuare il parsing dell&#8217;output di XDebug per il profiling dell&#8217;appliazione.</p>
<p>Lascio a voi la lettura dell&#8217;articolo completo (in inglese).</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/05/15/strumenti-di-sviluppo-in-browser-php/' addthis:title='Comodi strumenti di sviluppo in-browser '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/05/15/strumenti-di-sviluppo-in-browser-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>10 strumenti per uno sviluppatore moderno</title>
		<link>http://phpblog.it/2008/03/27/10-strumenti-per-uno-sviluppatore-php-moderno/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=10-strumenti-per-uno-sviluppatore-php-moderno</link>
		<comments>http://phpblog.it/2008/03/27/10-strumenti-per-uno-sviluppatore-php-moderno/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 06:00:32 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[Jira]]></category>
		<category><![CDATA[Phing]]></category>
		<category><![CDATA[PHP CodeSniffer]]></category>
		<category><![CDATA[PHPDocumentor]]></category>
		<category><![CDATA[phpUnderControl]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[Selenium Rc]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[xdebug]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/27/10-strumenti-per-uno-sviluppatore-php-moderno/</guid>
		<description><![CDATA[Tramite un giro di link partito da Technorati sono finito in una lista di dieci strumenti utili allo sviluppatore PHP. Eccoli: PHPUnit Selenium RC PHP CodeSniffer Phing XDebug PHPDocumentor phpUnderControl Zend Framework (o un framework a piacere) Subversion Jira Escludendo PHPUnit (al quale anche noi stiamo dedicando una serie di articoli), XDebug (personalmente non l&#8217;ho [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/03/27/10-strumenti-per-uno-sviluppatore-php-moderno/' addthis:title='10 strumenti per uno sviluppatore moderno '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Tramite un giro di link partito da <a href="http://technorati.com/">Technorati</a> sono finito in una <a href="http://www.davedevelopment.co.uk/2008/03/20/10-tools-for-modern-php-development/">lista</a> di dieci strumenti utili allo sviluppatore PHP.</p>
<p><span id="more-74"></span></p>
<p>Eccoli:</p>
<ul>
<li><a href="http://www.phpunit.de/">PHPUnit</a></li>
<li><a href="http://selenium-rc.openqa.org/">Selenium RC</a></li>
<li><a href="http://pear.php.net/PHP_CodeSniffer">PHP CodeSniffer</a></li>
<li><a href="http://phing.info/trac/">Phing</a></li>
<li><a href="http://xdebug.org/">XDebug</a></li>
<li><a href="http://www.phpdoc.org/">PHPDocumentor</a></li>
<li><a href="http://www.phpunit.de/wiki/phpUnderControl">phpUnderControl</a></li>
<li><a href="http://framework.zend.com/">Zend Framework</a> (o un framework a piacere)</li>
<li><a href="http://subversion.tigris.org/">Subversion</a></li>
<li><a href="http://www.atlassian.com/software/jira/">Jira</a></li>
</ul>
<p>Escludendo <strong>PHPUnit</strong> (al quale anche noi stiamo dedicando <a href="http://php5blog.it/2008/03/10/phpunit-tecniche-avanzate/">una serie di articoli</a>), <strong>XDebug</strong> (personalmente non l&#8217;ho mai usato, ma ha una buona fama), <strong>PHPDoc</strong> (che conosciamo quasi tutti, e al quale credo in un futuro non troppo remoto dedicherò qualche post), a <strong>Subversion</strong> (indispensabile per lo sviluppo di software in collaborativa) e al framework di turno, gli altri strumenti mi risultano se non nuovi quantomeno poco conosciuti.</p>
<p>Cosi scopro che <strong>Selenium RC</strong> è un tool che può essere utilizzato insieme a PHPUnit allo stesso scopo; <strong>PHP CodeSniffer</strong> invece è un pacchetto disponibile su <em>Pear</em> che analizza il codice scritto e rileva eventuali infrazioni rispetto ad un insieme di standard di programmazione.</p>
<p><strong>Phing</strong> invece opera sulla falsariga di <a href="http://ant.apache.org/">Ant</a> (per Java), il quale se non ricordo male è implementato pure su symfony. Diciamo che è un utility per automatizzare certe operazioni da linea di comando.</p>
<p><strong>PHPUnderControl</strong> sinceramente ho capito solo che serve per tenere il controllo sullo stato dell&#8217;applicazione. Rimando al <a href="http://www.phpunit.de/wiki/phpUnderControl">sito</a> per ulteriori informazioni.</p>
<p>Last but not least, <strong>Jira</strong>. Da quanto leggo si tratta di un tool per il bug tracking, simile a <a href="http://trac.edgewall.org/">trac</a>., e per progetti &#8220;seri&#8221; strumenti simili sono sempre consigliati.</p>
<p>Non sono strumenti assolutamente <em>indispensabili</em>, ma almeno alcuni sono <strong>più che consigliati</strong> nella realizzazione di progetti di una certa consistenza.</p>
<p>E voi? Avete i vostri strumenti ai quali non rinuncereste mai? Ditecelo nei commenti!</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/03/27/10-strumenti-per-uno-sviluppatore-php-moderno/' addthis:title='10 strumenti per uno sviluppatore moderno '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/27/10-strumenti-per-uno-sviluppatore-php-moderno/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHPUnit: tecniche avanzate</title>
		<link>http://phpblog.it/2008/03/10/phpunit-tecniche-avanzate/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phpunit-tecniche-avanzate</link>
		<comments>http://phpblog.it/2008/03/10/phpunit-tecniche-avanzate/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 06:00:04 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[code coverage]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/10/phpunit-tecniche-avanzate/</guid>
		<description><![CDATA[Continua il nostro viaggio all&#8217;interno dello unit testing, dopo l&#8217;introduzione e il passaggio dalla teoria alla pratica con i primi semplici esempi è ora di analizzare nel dettaglio le funzioni avanzate di PHPUnit. Per chi avesse cominciato a leggere la serie solo ora consiglio vivamente di fare un passo indietro ed iniziare dai post precedenti [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/03/10/phpunit-tecniche-avanzate/' addthis:title='PHPUnit: tecniche avanzate '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Continua il nostro viaggio all&#8217;interno dello unit testing, dopo <a title="l'introduzione" href="http://phpblog.it/2008/02/25/phpunit-introduzione-allo-unit-testing/">l&#8217;introduzione</a> e <a title="il passaggio dalla teoria alla pratica" href="http://phpblog.it/2008/03/03/php-unit-dalla-teoria-alla-pratica-esempi-di-utilizzo/">il passaggio dalla teoria alla pratica</a> con i primi semplici esempi è ora di analizzare nel dettaglio le funzioni avanzate di PHPUnit. Per chi avesse cominciato a leggere la serie solo ora consiglio vivamente di fare un passo indietro ed iniziare dai post precedenti al fine di avere una visione completa del quadro della situazione.</p>
<p><span id="more-56"></span></p>
<p>Se ricordate le puntate precedenti <strong>uno dei compiti di un framework come PHPUnit è quello di far risparmiare tempo al programmatore</strong> che sarà meno impegnato in compiti di debug potendosi concentrare maggiormente sullo sviluppo e l&#8217;implementazione delle funzionalità delle proprie classi. Vediamo quindi alcune delle funzioni avanzate più importanti in termini di tempo risparmiato e di utilità all&#8217;interno del framework.</p>
<p><strong>Fixtures</strong><br />
Sicuramente una delle funzionalità che permette di risparmiare più tempo quando si devono preparare ed eseguire i test per la verifica del corretto funzionamento delle nostre classi. <a title="Le fixtures permettono di partire con i test da uno stato ben preciso" href="http://www.phpunit.de/pocket_guide/3.2/en/fixtures.html">Le fixtures permettono di partire con i test da uno stato ben preciso</a> per tornarvi poi quando ogni singolo test è stato eseguito. Immaginate di dover testare dei metodi che abbiano a che fare una base di dati: invece che ripetere ogni volta il codice per la connessione al database, l&#8217;inizializzazione dei dati, la pulizia delle tabelle alla fine del test basterà definire tutte queste operazioni una singola volta per poi richiamare semplicemente il metodo così definito. I metodi in questione sono <strong>setUp()</strong> e <strong>tearDown() </strong>che conterranno rispettivamente il codice di inizializzazione e di pulizia dell&#8217;ambiente di test.  In questo modo eviteremo la scrittura di codice ridondante e renderemo più semplici e chiari i nostri test.</p>
<p>Questi due metodi vengono richiamati automaticamente dal framework ogni volta che viene eseguito un metodo di test. Inoltre,  per fare in modo che ogni test non sia per assolutamente influenzato dagli altri, i metodi vengono richiamati ogni volta su nuove istanze della classe che implementa il TestCase.</p>
<p><strong>I metodi setUp() e tearDown() sono in teoria simmetrici ma non lo sono in pratica.</strong> Infatti l&#8217;implementazione di tearDown() è richiesta solo quando nel setUp() sono state allocate risorse esterne come socket o file. Se nel setUp() sono solo stati allocati oggetti PHP appartenenti alla classe l&#8217;implementazione di tearDown() può essere tralasciata. Ad ogni modo se nel setUp() sono stati creati molti oggetti è sempre buona cosa eseguire l&#8217;unset() delle variabili che puntanto agli oggetti nel tearDown() per fare in modo che vengano gestiti dalla <a title="garbage collection" href="http://it.wikipedia.org/wiki/Garbage_collection">garbage collection</a>.</p>
<p><strong>Performance</strong><br />
Un concetto molto importante parlando di testing è sicuramente quello che riguarda le performance. Volendo eseguire dei semplici test sulle performance di un metodo possiamo ricorrere alla classe <em>PHPUnit_Extensions_PerformanceTestCase</em> da cui estendere le nostre classi di test. Grazie a questa classe possiamo verificare che il test in esame venga eseguito entro un termine di tempo ben preciso che passiamo che parametro.</p>
<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/03/performancetesting.png" alt="PerformanceTestCase" /></p>
<p><strong>Code coverage</strong><br />
Ora che siamo in grado di scrivere i test per il nostro codice non resta che fare di quest&#8217;esperienza un&#8217;abitudine. Lavorare con classi semplici non implica nessun tipo di problema,<strong> man mano che il codice e la portata del nostro progetto aumentano diventa più complesso anche avere una visione d&#8217;insieme dei test e dei metodi che realmente sono coperti da un test</strong>.</p>
<p><a title="Il framework PHPUnit ci viene ancora una volta in soccorso" href="http://www.phpunit.de/pocket_guide/3.2/en/code-coverage-analysis.html">Il framework PHPUnit ci viene ancora una volta in soccorso</a>: sfruttando una funzionalità di <a href="http://www.xdebug.org/">Xdebug</a> permette di analizzare la copertura del codice da parte dei test scritti. Si parla proprio di <em><strong>Code Coverage Analysis</strong> </em>ed è la rappresentazione del codice delle nostre classi che viene utilizzato mentre si eseguono i test. Grazie a quest&#8217;analisi otterremo una serie di file di report che specificano le righe di codice interessate dall&#8217;esecuzione di un determinato test. In rosso saranno evidenziate le righe non interessate, in verde quello eseguite. Sulla base dei risultati ottenuti si potranno quindi affinare i propri test al fine di ottenere una copertura del 100% del codice in esame.</p>
<p>Sulla base del randomPasswordTest per la classe di generazione casuale delle password realizzato la nella puntata precedente <a title="report di code coverage" href="http://php5blog.it/downloads/php5blog/report/">ho realizzato i report che potete analizzare qui</a>. Come potete vedere la coperturaè del 100%.</p>
<p><strong>Generazione automatica dei test</strong><br />
Aggiungendo alcune annotazioni ai metodi delle proprie classi <a title="PHPUnit fornisce la possibilità di generare automaticamente semplici test partendo dal codice sorgente stesso" href="http://www.phpunit.de/pocket_guide/3.2/en/skeleton-generator.html">PHPUnit fornisce la possibilità di generare automaticamente semplici test partendo dal codice sorgente stesso</a>. Queste annotazioni verranno interpretate da PHPUnit e serviranno da base per la generazione dei test. Si parla in questo caso di <em>Skeleton Generator.</em></p>
<p>Le annotazioni sui test da far generare al framework vanno aggiunte utilizzando il solito <em>@assert</em>, quindi per una semplice classe Calculator avremo il seguente codice:</p>
<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/03/skeleton1.png" alt="Skeleton Generator" /></p>
<p>Le possibilità di test con @assert sono molteplici, non prevedono solo l&#8217;uguaglianza, rimando alla documentazione ufficiale per l&#8217;elenco completo.</p>
<p><strong>CONCLUSIONE</strong><br />
In questa mini serie di tre articoli sullo unit testing <strong>abbiamo coperto l&#8217;argomento dalla teoria alla pratica</strong> focalizzando la nostra attenzione sul framework PHPUnit che è lo strumento di unit testing per eccellenza del campo della programmazione PHP. Abbiamo parlato dei vantaggi legati allo unit testing e del perchè è bene scrivere i test mentre si scrive il codice e non solamente alla fine, abbiamo visto come applicare queste regole al fine di migliorare il codice prodotto ed anche il proprio lavoro nel senso dell&#8217;azione e non del fine.</p>
<p>Chiaramente <strong>questa piccola guida non è esaustiva sull&#8217;argomento ma spero serva da introduzione ad un mondo che vorrete scoprire da soli</strong> affascinati ed incuriositi da quello che avete letto qui. Ora tocca a voi, come diceva un mio illustre docente universitario di Sistemi Operativi &#8220;<strong>è ora di sporcarsi le mani, alzate il cofano e guardate cosa c&#8217;è sotto</strong>&#8220;.</p>
<p>I commenti sono sempre apprezzati, sentitevi liberi di esprimere le vostre idee e i vostri dubbi siamo qui per parlarne.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/03/10/phpunit-tecniche-avanzate/' addthis:title='PHPUnit: tecniche avanzate '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/10/phpunit-tecniche-avanzate/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

