<?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>dbnewz &#187; Analyse Statique du Code</title>
	<atom:link href="http://www.dbnewz.com/tag/analyse-statique-du-code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dbnewz.com</link>
	<description>le blog français sur les SGBD - MySQL, Oracle et plus...</description>
	<lastBuildDate>Tue, 31 Jan 2012 16:03:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Qualité du Code de Mysql  &#8230; ou non qualité</title>
		<link>http://www.dbnewz.com/2008/12/02/qualite-du-code-de-mysql-ou-non-qualite/</link>
		<comments>http://www.dbnewz.com/2008/12/02/qualite-du-code-de-mysql-ou-non-qualite/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 14:32:36 +0000</pubDate>
		<dc:creator>Laurent Tardif</dc:creator>
				<category><![CDATA[5.1]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Analyse Statique du Code]]></category>
		<category><![CDATA[Static Code Analysis]]></category>

		<guid isPermaLink="false">http://www.dbnewz.com/?p=159</guid>
		<description><![CDATA[Ma marotte actuelle sont les outils d&#8217;analyse statique de code (ASC). J&#8217;ai essayé d&#8217;expliquer a mon DBA préféré comment faire de l&#8217;intégration continue avec une DB, et comment intégrer des outils d&#8217;ASC pour valider son travail.
Nous sommes partis de la dernière version de Mysql (5.1.29-rc&#8230;) que j&#8217;ai téléchargé sous forme de tarball sans m&#8217;embêter a [...]]]></description>
			<content:encoded><![CDATA[<p>Ma marotte actuelle sont les outils d&#8217;analyse statique de code (ASC). J&#8217;ai essayé d&#8217;expliquer a mon DBA préféré comment faire de l&#8217;intégration continue avec une DB, et comment intégrer des outils d&#8217;ASC pour valider son travail.</p>
<p>Nous sommes partis de la dernière version de Mysql (5.1.29-rc&#8230;) que j&#8217;ai téléchargé sous forme de tarball sans m&#8217;embêter a lire la doc de bazaar :-p &#8230;..  J&#8217;ai intégré les quelques patches maison, les quelques modifications, et plugé ca dans <a href="https://hudson.dev.java.net/" target="_blank">Hudson </a>pour avoir un retour rapide sur la qualité de mon build.</p>
<p>(Profitant des nombreux tests fournis avec le source.)</p>
<p>Plutôt content de moi, j&#8217;ai décidé de brancher plusieurs outils d&#8217;ASC (spécialisés dans la recherche de bugs, ou de code &#8216;risqué&#8217;). Je n&#8217;ai pas était déçu du tout du voyage &#8230;&#8230;</p>
<p>Plus de 2000 problèmes potentiels !!!!!!!!!</p>
<p><span id="more-159"></span></p>
<p>Alors, triés par modules cela donne a peu prêt :</p>
<p>client                      134<br />
cmd-line-utils         80<br />
core                      1034<br />
libmysql                  211<br />
mysys                       61<br />
server-tools             34<br />
storage/archive        38<br />
storage/blackhole      1<br />
storage/csv                9<br />
storage/federated       5<br />
storage/heap              8<br />
storage/innobase   262<br />
storage/myisam     147<br />
storage/ndb           785</p>
<p>Juste pour illustrer les problèmes rencontrés regardons les (enfin, une petite partie des) problèmes liés a myisam:</p>
<ul>
<li> <strong>storage/myisam/mi_check.c</strong></li>
</ul>
<p><em>Return code not check</em> : everywhere the return code is checked, and an error is raised &#8230; my checker assume the return code is critical. So why at this line &#8230; no check ???</p>
<p>=&gt; ligne 1185 :i_pack_get_block_info(info, &amp;info-&gt;bit_buff, &amp;block_info, &amp;info-&gt;rec_buff, file, filepos)</p>
<ul>
<li> <strong>storage/myisam/mi_key.c</strong></li>
</ul>
<p><em>NPE :</em><br />
&#8211;&gt; ligne 252 : char_length= (!is_ft &amp;&amp; cs &amp;&amp; cs-&gt;mbmaxlen &gt; 1) ? length/cs-&gt;mbmaxlen : length;<br />
//so assuming cs is null<br />
&#8211;&gt; ligne 268<br />
FIX_LENGTH(cs, pos, length, char_length); //which dereference cs without any checks &#8230;.</p>
<ul>
<li> <strong>storage/myisam/mi_rkey.c</strong></li>
</ul>
<p><em>Lock error :</em><br />
&#8212;-&gt; ligne 78 : rw_rdlock(&amp;share-&gt;key_root_lock[inx]);  // take a lock<br />
if (!(nextflag &amp; (SEARCH_FIND | SEARCH_NO_FIND | SEARCH_LAST))) use_key_length=USE_WHOLE_KEY;<br />
&#8230;&#8230;<br />
if (rtree_find_first(info,inx,key_buff,use_key_length,nextflag) &lt; 0)<br />
//Allons donc dans le &laquo;&nbsp;then&nbsp;&raquo; &#8230; et bien la ressource n&#8217;est jamais libérée &#8230;.</p>
<ul>
<li> <strong>storage/myisam/ha_myisam.cc</strong></li>
</ul>
<p><em>Fuite Memoire : </em><br />
&#8212;&gt; ligne 146<br />
DBUG_ENTER(&laquo;&nbsp;table2myisam&nbsp;&raquo;);<br />
if (!(my_multi_malloc(MYF(MY_WME, &#8230;..) ///// the allocation is not stored &#8230; and never free<br />
DBUG_RETURN(HA_ERR_OUT_OF_MEM);</p>
<p>Alors, on peut bien sur, dire que certains problèmes n&#8217;arrivent que rarement, ou que c&#8217;est dans une partie du code peu appelée &#8230; Personnelement je pense qu&#8217;un BUG est un BUG &#8230;<br />
Et les lois de Murphy m&#8217;ont apprises qu&#8217;un BUG vous embêtera toujours un vendredi soir &#8230; ou un week end.</p>
<p>Alors, ce n&#8217;est pas parcequ&#8217;il y a 2000 bugs potentiels qu&#8217;on peut dire que la release est de mauvaise qualité (lisez aussi (<a href="http://monty-says.blogspot.com/2008/11/oops-we-did-it-again-mysql-51-released.html" target="_blank">cela</a>), &#8230; mais c&#8217;est un indice de plus, qu&#8217;a force de trop vouloir rajouter de nouvelles fonctionnalités, on oublie souvent l&#8217;essentiel, la stabilité et la robustesse du code.</p>
<p>(Vous pouvez trouver une autre version de l&#8217;article <a href="http://ouelcum.wordpress.com/2008/12/01/how-can-static-code-analysis-tools-may-help-you/" target="_blank">ici</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbnewz.com/2008/12/02/qualite-du-code-de-mysql-ou-non-qualite/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

