Les tests unitaires, ça pourrit la vie.

Mammouth du PHP | 790 Messages

06 nov. 2013, 18:39

Svp: pourriez-vous m'expliquez simplement ce que sont les test unitaires (principe de fonctionnement) ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

ViPHP
ViPHP | 5902 Messages

06 nov. 2013, 18:47


Mammouth du PHP | 790 Messages

06 nov. 2013, 19:29

Ok, merci, j'ajoute pour ceux qui le veulent: https://www.youtube.com/watch?v=_kJCPGMBLok
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 397 Messages

07 nov. 2013, 10:51

Svp: pourriez-vous m'expliquez simplement ce que sont les test unitaires (principe de fonctionnement) ?
En gros, c'est du code qu'on développe pour tester le bon fonctionnement de parties d'une application. Par exemple vérifier qu'un webservices retourne les données correctement, permet de vérifier que des méthodes de calculs retournent ce qu'on attend d'elle, vérifier aussi des temps de réponses etc...

Le but principal est d'anticiper les erreurs et régressions pendant le developpement
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Mammouth du PHP | 790 Messages

07 nov. 2013, 13:31

En gros, c'est du code qu'on développe pour tester le bon fonctionnement de parties d'une application. Par exemple vérifier qu'un web services retourne les données correctement, permet de vérifier que des méthodes de calculs retournent ce qu'on attend d'elle, vérifier aussi des temps de réponses etc...
Tout est ok, j'ai bien compris, cependant je me pose encore quelques questions:
A partir de quoi décide ton de mettre ce système en place ?
Est-ce que ce système est appliqué a la totalité des fonction ?
Quand on travail toujours seul: est-ce vraiment utile ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

ViPHP
xTG
ViPHP | 7331 Messages

07 nov. 2013, 14:54

A partir de quoi décide ton de mettre ce système en place ?
Si tu juges que tu as besoin des tests unitaires pour avoir un code de qualité tu le mets en place. C'est un outil, c'est comme choisir entre utiliser un IDE ou bien un éditeur de texte. Si l'IDE ne t'apporte rien de plus qu'un éditeur de texte...
Est-ce que ce système est appliqué a la totalité des fonction ?
Oui, sinon cela n'a aucun intérêt ! Et c'est l'un des points contraignants des tests unitaires, il faut les maintenir à jour pour qu'ils servent, sinon autant ne pas en faire.
De plus pourquoi ne pas tester une fonction ? Pourquoi cette fonction serait-elle exempte de bug ou de régression ? Quand tu auras répondu à ces questions tu auras ta réponse.
Quand on travail toujours seul: est-ce vraiment utile ?
Si tu juges que tu perds ton temps à les utiliser c'est que cela ne t'est pas utile. :)
Si tu juges que tu vas y gagner en les utilisant c'est que ça l'est !

Il existe des tonnes d'outils ou de méthodes, on ne peut pas dire que l'un est plus utile que l'autre.
C'est à traiter au cas par cas pour chaque projet et chaque équipe.

Eléphant du PHP | 397 Messages

07 nov. 2013, 14:54

En gros, c'est du code qu'on développe pour tester le bon fonctionnement de parties d'une application. Par exemple vérifier qu'un web services retourne les données correctement, permet de vérifier que des méthodes de calculs retournent ce qu'on attend d'elle, vérifier aussi des temps de réponses etc...
Tout est ok, j'ai bien compris, cependant je me pose encore quelques questions:
A partir de quoi décide ton de mettre ce système en place ?
Est-ce que ce système est appliqué a la totalité des fonction ?
Quand on travail toujours seul: est-ce vraiment utile ?
1/ Quand une application commence à avoir beaucoup de fonctionnalités, ou affiche une certaine complexité, que ça nécessite une certaine maintenance, qu'on souhaite maintenir l'application, ou simplement qu'on veut être sure que l'application répond parfaitement aux specs

2 / Non, faire des TU pour faire des TU n'a aucun sens. Il est plus important d'appliquer les TU aux points sensibles que de tout recouvrir. ça doit être fait sur quelque chose de pertinent.

3 / Tout dépend sur quoi tu travailles. Plus l'application s'avère complexe, plus il sera préféré d'en faire


EDIT : je vois que nous ne sommes pas d'accord sur le deuxième point avec xtg :). Mais il est vrai qu'après tout dépend de la philosophie adopté par l'équipe de devs' ou le dév
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
ViPHP | 5902 Messages

07 nov. 2013, 15:04

2 / Non, faire des TU pour faire des TU n'a aucun sens. Il est plus important d'appliquer les TU aux points sensibles que de tout recouvrir. ça doit être fait sur quelque chose de pertinent.

EDIT : je vois que nous ne sommes pas d'accord sur le deuxième point avec xtg :). Mais il est vrai qu'après tout dépend de la philosophie adopté par l'équipe de devs' ou le dév
Oui, au passage certains types de logiciels sont très complexes à tester unitairement, auquel cas on préfère le peer-reviewing. Mais ce n'est pas le cas en web.

Cordialement

Mammouth du PHP | 790 Messages

07 nov. 2013, 15:19

L'idée me plais, vous dire si j'en ais besoin ou pas je n'en sais rien tend que je n'ai pas essayer..
Le tuto vidéo que j'ai posté plus haut utilise phpunit:
D’après-vous est-ce un bon départ pour essayer ?
Que me conseillez-vous pour commencer ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 397 Messages

07 nov. 2013, 15:31

Faire des tests avec des assertions simples (assertTrue(), assertFalse(), assertEquals()). Par exemple, j ai une méthode qui récupère la date présent dans le nom d'un fichier passé en argument et la retourne au format yyyy-mm-jj, je vérifie deux cas :

- Le cas passant
- le cas erreur
    public function testRecupDateFile ()
    {
        // Preparation
        $file = 'CDR-ARD-ISBC_20120918.csv';
        $oFichier = new Admin_Model_Table_Fichiers();
        
        // Appel
        $dateTrue = '2012-09-18'; // Date correcte
        $dateFalse = '2012/09/17'; // Date incorrecte
        $dateToVerif = $oFichier->_recupDateFile($file);
        
        // Vérification
        $this->assertEquals($dateTrue, $dateToVerif);
        $this->assertNotEquals($dateFalse, $dateToVerif);
    }
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Mammouth du PHP | 790 Messages

07 nov. 2013, 15:53

Ok, peux tu me montrer la fonction en question ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 397 Messages

07 nov. 2013, 16:00

Ok, peux tu me montrer la fonction en question ?
Elle n'a rien d'extraordinaire :) :
private function _recupDateFile ($file)
{
    $dateFile = null;
    if (preg_match('/([a-zA-Z_-]+)([\d]+)/', $file, $match)) {
        $dateFile = DateTime::createFromFormat('Ymd', $match[2]);
        return $dateFile->format('Y-m-d');
    }
}
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Mammouth du PHP | 790 Messages

07 nov. 2013, 16:18

Elle n'a rien d'extraordinaire :) :
Donc tu fais des tests aussi sur des fonctions simple, je pense comprendre qu'il est impossible de deviner quels fonctions seront modifier dans le futur et qu'il est préférable de prévoir des tests sur la totalités des fonctions comme le préconise xTG ?

Autre chose que je voudrais savoir, les tests sont fait sur toutes les fonctions ou seulement celles des classes ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

ViPHP
xTG
ViPHP | 7331 Messages

07 nov. 2013, 16:26

Je répondais de mon expérience sur les projets web qui m'ont l'air totalement adaptés aux tests unitaires.
Après je suis dans le domaine du système embarqué temps réel, et là on a des systèmes impossibles à foutre en totalité (voir même partiellement) sous tests unitaires sans être obligé de demander une rallonge de 2ans pour le projet...
J'entends que tu vas mettre 100x plus de moyen et de temps pour réaliser le test unitaire que tu ne vas en mettre pour coder la fonction alors qu'une relecture de code (peer-reviewing) demandera moins de moyens et de temps.

Dans un système comme on peut en faire dans le monde du web il devient donc plus sécurisant de tout porter en tests unitaires.
Même pour une fonction simple, car rien ne te dit qu'elle ne sera pas modifiée un jour.
A ton avis combien de rapport d'anomalie sont ouverts par an à cause d'une fonction basique qui a été mal modifiée ? :)
Autre chose que je voudrais savoir, les tests sont fait sur toutes les fonctions ou seulement celles des classes ?
Toutes.

Eléphant du PHP | 397 Messages

07 nov. 2013, 16:33

Elle n'a rien d'extraordinaire :) :
Donc tu fais des tests aussi sur des fonctions simple, je pense comprendre qu'il est impossible de deviner quels fonctions seront modifier dans le futur et qu'il est préférable de prévoir des tests sur la totalités des fonctions comme le préconise xTG ?

Autre chose que je voudrais savoir, les tests sont fait sur toutes les fonctions ou seulement celles des classes ?
Le mieux reste de trouver un consensus entre ce qu'il préconise et ce que je préconise. Bien sur que tu peux tout tester avec les TU mais mieux vaut tester d'abord tout ce qui est sensible et pertinant. Mais plus les tests couvriront le maximum de code, plus l'application sera solide

Apres je les fais que sur les méthodes présentes dans des classes vu que je travailles qu'avec des frameworks.
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre