par
Hywan » 25 oct. 2008, 17:10
Hmmm

.
C'est intéressant ce que tu dis. Le fait d'ordonner le raisonnement met en avant des priorités, c'est intéressant. Je n'ai juste pas compris : « _ ne pas être affecté par des effets de bord », tout sous-entend que le test ne doit pas échouer sur des effets de bord, donc il faut testé les valeurs aux limites c'est ça ? Autrement dit, si on a
n qui appartient à l'intervalle [1; 10], il faut tester 1 et 10 (je vulgarise).
Aussi, tu dis : « _ être relativement simple à étendre », dans quel sens/cas ?
Ta définition d'unitaire est intéressante aussi. On ne travaille que sur des cas simples. Et si un cas est compliqué, il sera alors compliqué à tester et les résultats ne seront pas fiables à 100% (si je prolonge le raisonnement). C'est bien vu.
En gros, plus un code est atomisé, et plus on pourra être sûr des résultats. D'une part parce que les tests seront plus faciles à mettre en place et parce qu'ils seront plus complets.
Tes remarques sur les tests unitaires sont intéressantes aussi. Je comprends d'une manière générale que les tests obligent le développeur à écrire plus que de code que le code à tester ; d'où l'idée de génération automatique de tests.
En revanche, je ne suis pas d'accord quand tu dis : « * tout code qui n'est pas testé va planter ( à coup sûr ) », c'est pas toujours vrai. On peut prévoir ou anticiper les tests. Sans en faire, on peut quand même penser à gérer des cas. Bien sûr, il est fort probable que ce soit incomplet …
Tu soulèves aussi une idée très très intéressante : « le code de test est un excellent exemple d'utilisation de la classe; il permet un gain de temps énorme pour l'écriture de scripts utilisant cette classe; il constitue une sorte de documentation du code ». Et c'est ce que fait JML et ACSL, les tests sont fait en documentation, c'est à dire qu'ils ont mis au point un langage formel capable de décrire une suite de test, et c'est au moment de la compilation (ou écriture du
byte-code) que sont écrit les tests (si j'ai bien tout compris).
Je n'ai pas compris en quoi onpk.net était intéressant

.
Et pour conclure, on (un ami et moi) a en projet de créer un générateur automatique de tests unitaires réalistes sur les types pour PHP 5. C'est encore au stade de réflexion. En fait, le typage peut être vu comme un cas particulier d'assertion que l'on peut vérifier statiquement ou pas inférence. Donc la première étape du projet serait d'établir une description d'un langage formel/d'annotation afin d'implémenter une procédure de vérification statique du bon typage. La seconde étape serait d'utiliser les types pour guider la génération automatique des tests aléatoires (et uniforme je pense). Et la troisième (et dernière) étape est la plus intéressante : on se servirait des assertions pour affiner le typage et ainsi mieux guider la génération de tests. C'est là que la notion de données réalistes intervient.
En licence 3, on a un projet à faire et au lieu de prendre les projets que les enseignants proposent, avec mon pote, on a décidé de proposer des sujets. Le sujet de base était un générateur automatique de tests, mais le prof vers qui on est allé trouvait ça un peu trop facile à son goût. Donc comme c'est une tronche dans ce domaine (types, contraintes, vérification et validation symbolique etc.), il a voulu faire rejoindre notre projet avec ses recherches. D'où la fin du projet vraiment intéressante avec la notion de données réalistes.
Donc voilà, je me documente tout doucement, et j'étudie les outils déjà existants (à travers vos réponses et remarques

) pour voir comment tout ça fonctionne, voir les limites, et tenter de les dépasser. Aussi observer les meilleurs solutions, les plus simples, les plus efficaces et comprendre pourquoi. Enfin bref, une phase de documentation classique

.
Maintenant : pourquoi posais-tu la question ? Il y a un besoin particulier ? Un vieux fantasme de programmeur ?
Hmmm :-k.
C'est intéressant ce que tu dis. Le fait d'ordonner le raisonnement met en avant des priorités, c'est intéressant. Je n'ai juste pas compris : « _ ne pas être affecté par des effets de bord », tout sous-entend que le test ne doit pas échouer sur des effets de bord, donc il faut testé les valeurs aux limites c'est ça ? Autrement dit, si on a [i]n[/i] qui appartient à l'intervalle [1; 10], il faut tester 1 et 10 (je vulgarise).
Aussi, tu dis : « _ être relativement simple à étendre », dans quel sens/cas ?
Ta définition d'unitaire est intéressante aussi. On ne travaille que sur des cas simples. Et si un cas est compliqué, il sera alors compliqué à tester et les résultats ne seront pas fiables à 100% (si je prolonge le raisonnement). C'est bien vu.
En gros, plus un code est atomisé, et plus on pourra être sûr des résultats. D'une part parce que les tests seront plus faciles à mettre en place et parce qu'ils seront plus complets.
Tes remarques sur les tests unitaires sont intéressantes aussi. Je comprends d'une manière générale que les tests obligent le développeur à écrire plus que de code que le code à tester ; d'où l'idée de génération automatique de tests.
En revanche, je ne suis pas d'accord quand tu dis : « * tout code qui n'est pas testé va planter ( à coup sûr ) », c'est pas toujours vrai. On peut prévoir ou anticiper les tests. Sans en faire, on peut quand même penser à gérer des cas. Bien sûr, il est fort probable que ce soit incomplet …
Tu soulèves aussi une idée très très intéressante : « le code de test est un excellent exemple d'utilisation de la classe; il permet un gain de temps énorme pour l'écriture de scripts utilisant cette classe; il constitue une sorte de documentation du code ». Et c'est ce que fait JML et ACSL, les tests sont fait en documentation, c'est à dire qu'ils ont mis au point un langage formel capable de décrire une suite de test, et c'est au moment de la compilation (ou écriture du [i]byte-code[/i]) que sont écrit les tests (si j'ai bien tout compris).
Je n'ai pas compris en quoi onpk.net était intéressant :?.
Et pour conclure, on (un ami et moi) a en projet de créer un générateur automatique de tests unitaires réalistes sur les types pour PHP 5. C'est encore au stade de réflexion. En fait, le typage peut être vu comme un cas particulier d'assertion que l'on peut vérifier statiquement ou pas inférence. Donc la première étape du projet serait d'établir une description d'un langage formel/d'annotation afin d'implémenter une procédure de vérification statique du bon typage. La seconde étape serait d'utiliser les types pour guider la génération automatique des tests aléatoires (et uniforme je pense). Et la troisième (et dernière) étape est la plus intéressante : on se servirait des assertions pour affiner le typage et ainsi mieux guider la génération de tests. C'est là que la notion de données réalistes intervient.
En licence 3, on a un projet à faire et au lieu de prendre les projets que les enseignants proposent, avec mon pote, on a décidé de proposer des sujets. Le sujet de base était un générateur automatique de tests, mais le prof vers qui on est allé trouvait ça un peu trop facile à son goût. Donc comme c'est une tronche dans ce domaine (types, contraintes, vérification et validation symbolique etc.), il a voulu faire rejoindre notre projet avec ses recherches. D'où la fin du projet vraiment intéressante avec la notion de données réalistes.
Donc voilà, je me documente tout doucement, et j'étudie les outils déjà existants (à travers vos réponses et remarques :)) pour voir comment tout ça fonctionne, voir les limites, et tenter de les dépasser. Aussi observer les meilleurs solutions, les plus simples, les plus efficaces et comprendre pourquoi. Enfin bref, une phase de documentation classique :).
Maintenant : pourquoi posais-tu la question ? Il y a un besoin particulier ? Un vieux fantasme de programmeur ?