Je vais donner une conférence à mon département la semaine prochaine sur les tests unitaires et le développement piloté par les tests. Dans le cadre de cela, je vais montrer des exemples concrets à partir d'un code que j'ai écrit récemment, mais j'aimerais également montrer quelques exemples très simples que j'écrirai dans l'exposé.
J'ai cherché sur le Web de bons exemples, mais j'ai eu du mal à en trouver qui s'appliquent particulièrement à notre domaine de développement. Presque tous les logiciels que nous écrivons sont des systèmes de contrôle profondément intégrés fonctionnant sur de petits microcontrôleurs. Il y a beaucoup de code C qui est facilement applicable aux tests unitaires (je parlerai de tests unitaires sur le PC plutôt que sur la cible elle-même) tant que vous restez à l'écart de la couche `` inférieure '': ce qui parle directement aux périphériques du microcontrôleur. Cependant, la plupart des exemples que j'ai trouvés ont tendance à être basés sur le traitement de chaînes (par exemple, l'excellent exemple de chiffres romains Dive Into Python) et comme nous n'utilisons presque jamais de chaînes, cela ne convient pas vraiment (à propos des seules fonctions de bibliothèque que notre code utilise généralement sont memcpy
, memcmp
et memset
,strcat
ou les expressions régulières ne sont pas tout à fait correctes).
Donc, passons à la question: s'il vous plaît, quelqu'un peut-il offrir de bons exemples de fonctions que je peux utiliser pour démontrer les tests unitaires dans une session en direct? Une bonne réponse à mon avis (sous réserve de modifications) serait probablement:
- Une fonction suffisamment simple pour que tout le monde (même ceux qui n'écrivent du code qu'à l'occasion) puisse comprendre;
- Une fonction qui ne semble pas inutile (c'est-à-dire que déterminer la parité ou le CRC est probablement mieux qu'une fonction qui multiplie deux nombres ensemble et ajoute une constante aléatoire);
- Une fonction assez courte pour écrire devant une salle de personnes (je peux profiter des nombreux presse-papiers de Vim pour réduire les erreurs ...);
- Une fonction qui prend des nombres, des tableaux, des pointeurs ou des structures comme paramètres et renvoie quelque chose de similaire, plutôt que de gérer des chaînes;
- Une fonction qui a une erreur simple (par exemple
>
plutôt que>=
) qui est facile à insérer et qui fonctionnerait toujours dans la plupart des cas, mais qui romprait avec un cas particulier: facile à identifier et à corriger avec un test unitaire.
Des pensées?
Bien que ce ne soit probablement pas pertinent, les tests eux-mêmes seront probablement écrits en C ++ à l'aide de Google Test Framework: tous nos en-têtes ont déjà le #ifdef __cplusplus extern "C" {
wrapper autour d'eux; cela a bien fonctionné avec les tests que j'ai effectués jusqu'à présent.