Repérer et résoudre les problèmes dans mon code PHP
- 19/11/2009
Développement web://
Repérer et résoudre les problèmes dans mon code PHPTravaillant sur un système capturant les erreurs PHP avec un maximum d'erreurs, j'ai eu la surprise d'y voir des erreurs auxquelles je ne m'attendais pas. En l'occurrence, elles viennent d'une tâche automatique (la crontab Unix) écrite en PHP qui exécute une synchronisation d'un serveur FTP sur mon disque. En fouillant un peu, je me rend compte que mon expression régulière écrite il y a quelques années comporte un léger bug, et je me décide à la corriger.
Le premier point intéressant est que sans mon système de capture des erreurs, je n'aurais pas forcément vu ce bug, ne regardant que rarement le log d'erreurs PHP sur ma machine de développement (vu que ce journal explose régulièrement quand je développe ;-) ).
Le second est que maintenant j'ai une arme pour écrire des regexp plus fiables : TDD, ou développement dirigé par les tests. Et histoire de voyager léger, on va même se passer de framework de test et écrire le notre au vol.
N'ayant pas de tests pour ce petit script, j'ai juste créé un script de test, en commençant par saisir quelques chaînes types à analyser, ainsi que le résultat attendu :
<?php $aEntrees = array(
"-rw-r--r-- 1 sensei (?) 120533 May 28 18:54 V.zip" => array('fichier', 'V.zip', 120533),
"drwxr-xr-x 3 sensei (?) 4096 Nov 19 05:57 inbox0" => array('dossier', 'inbox0', 4096),
"drwxr-xr-x 4 sensei (?) 4096 Apr 8 2009 infos_mobiles" => array('dossier', 'infos_mobiles', 4096),
"-rwxr-xr-x 13 sensei (?) 4096 Dec 16 2008 SSTIC 2008 jour 2" => array('fichier', 'SSTIC 2008 jour 2', 4096),
);?>
Histoire de ne pas me répéter, une petite fonction qui remplacera phpUnit et Simpletest pour cet exemple simple
<?php function CheckEquals($attendu, $resultat, $message)
{
if($attendu !== $resultat)
{
echo "$message : $attendu !== $resultat\n";
}
}?>
Et enfin le test en lui-même, une simple boucle qui exécute la fonction pour chaque ligne et vérifie que tout correspond. Si rien ne s'affiche, c'est que tout est bon.
<?php foreach($aEntrees as $in => $out)
{
list($sInType, $sInNom, $iInTaille) = $out;
list($sOutType, $sOutNom, $iOutTaille) = ExtractionLigneFTP($in);
CheckEquals($sInType, $sOutType, 'type');
CheckEquals($sInNom, $sOutNom, 'nom');
CheckEquals($iInTaille, (int)$iOutTaille, 'taille');
} ?>
Simple non? TDD n'a rien de quelque chose de complexe, c'est plus une manière d'être développeur qu'autre chose. Manière fort bien présentée dans l'excellent TDD by example.
Bande son : la pop trop sucrée de Calogero et le rythme vocal de Grand corps malade
Rubriques des billets
- Agilité - 22 billets
- Archerie - 9 billets
- Avis - 67 billets
- Cultures - 12 billets
- Délires - 42 billets
- Démocrachie - 8 billets
- Développement - 49 billets
- Développement web - 33 billets
- Ergonomie - 18 billets
- Geekerie - 11 billets
- Inclassable - 5 billets
- Informatique - 25 billets
- Japon - 9 billets
- Littératures - 35 billets
- PHP - 9 billets
- Poor Lonesome Coder - 25 billets
- Régalons-nous - 6 billets
- Sortons! - 3 billets
- Travail - 20 billets
- Vivre mieux - 11 billets
- Voyages - 3 billets
- Webmasteriat - 20 billets
Commentaires(s)
Ecrire votre commentaire
19/11/2009 - Systeme