Demandez-vous vraiment "Les tests unitaires auraient-ils aidé ici?", Ou demandez-vous "un type de test aurait-il pu être utile ici?".
La forme de test la plus évidente qui aurait pu aider, est une assertion préalable dans le code lui-même, selon laquelle un identifiant de branche est constitué uniquement de chiffres (en supposant que ce soit l'hypothèse sur laquelle le codeur s'est fondé pour écrire le code).
Cela aurait alors pu échouer dans une sorte de test d'intégration et, dès que les nouveaux identifiants de branche alphanumériques sont introduits, l'assertion explose. Mais ce n'est pas un test unitaire.
Vous pouvez également effectuer un test d'intégration de la procédure qui génère le rapport SEC. Ce test garantit que chaque identifiant de branche réelle rapporte ses transactions (et nécessite donc une entrée réelle, une liste de tous les identifiants de branche utilisés). Donc, ce n'est pas un test unitaire non plus.
Je ne vois aucune définition ni documentation des interfaces impliquées, mais il se peut que les tests unitaires ne puissent éventuellement pas avoir détecté l'erreur car l'unité n'était pas en panne . Si l’unité est autorisée à supposer que les identificateurs de branche ne sont composés que de chiffres et que les développeurs n’ont jamais décidé ce que le code devrait faire dans le cas contraire, ils ne devraient pasrédigez un test unitaire pour imposer un comportement particulier dans le cas d'identificateurs autres que des chiffres, car le test rejetterait une implémentation valide hypothétique de l'unité qui traitait correctement les identificateurs de branche alphanumériques et vous ne souhaitiez généralement pas écrire un test unitaire empêchant la validation. futures implémentations et extensions. Ou peut-être un document écrit il y a 40 ans implicitement défini (via une plage lexicographique dans EBCDIC brut, au lieu d'une règle de classement plus conviviale) que 10B est un identificateur de test car il se situe en réalité entre 089 et 100. Mais alors Il y a 15 ans, quelqu'un a décidé de l'utiliser comme identifiant réel. Le "défaut" ne réside donc pas dans l'unité qui implémente correctement la définition d'origine: cela réside dans le processus qui n'a pas remarqué que 10B est défini comme un identifiant de test et ne doit donc pas être attribué à une branche. La même chose se produirait en ASCII si vous définissiez 089 - 100 en tant que plage de test, puis introduisiez un identifiant 10 $ ou 1.0. Il se trouve que dans EBCDIC, les chiffres viennent après les lettres.
Un test unitaire (ou sans doute un test fonctionnel) qui pourrait éventuellementpourrait avoir sauvé la journée, est un test de l'unité qui génère ou valide les nouveaux identifiants de branche. Ce test affirmerait que les identifiants ne doivent contenir que des chiffres et serait écrit afin de permettre aux utilisateurs des identifiants de branche de prendre la même chose. Ou peut-être y a-t-il une unité quelque part qui importe de vrais identificateurs de branche mais ne voit jamais les identificateurs de test, et qui pourrait être testée d'unités pour s'assurer qu'elle rejette tous les identificateurs de test (si les identificateurs ne sont que trois caractères, nous pouvons les énumérer tous et comparer le comportement de le validateur à celui du test-filtre pour s'assurer qu'ils correspondent, ce qui traite de l'objection habituelle aux tests ponctuels). Ensuite, si quelqu'un modifiait les règles, le test unitaire aurait échoué car il contredirait le comportement nouvellement requis.
Etant donné que le test existait pour une bonne raison, le moment où vous devez le supprimer en raison de modifications des exigences professionnelles devient une opportunité pour que le poste soit attribué à un poste ", recherchez dans le code tout élément qui repose sur le comportement que nous souhaitons. changement". Bien sûr, cela est difficile et donc peu fiable, cela ne garantirait absolument pas de sauver la situation. Mais si vous capturez vos hypothèses dans les tests des unités dont vous assumez les propriétés, alors vous vous donnez une chance et l'effort ne sera donc pas totalement perdu.
Je conviens bien sûr que si l’unité n’avait pas été définie au départ avec une entrée "de forme amusante", il n’y aurait rien à tester. Il peut être difficile de tester correctement les divisions de l'espace de noms fastidieux, car la difficulté réside dans l'application de votre définition amusante, elle consiste à s'assurer que tout le monde comprend et respecte votre définition amusante. Ce n'est pas une propriété locale d'une unité de code. De plus, changer un type de données de "chaîne de chiffres" en "chaîne alphanumériques" revient à faire en sorte qu'un programme basé sur ASCII traite Unicode: ce ne sera pas simple si votre code est fortement couplé à la définition d'origine, et quand le type de données est fondamental pour ce que le programme fait, alors il est souvent fortement couplé.
il est un peu dérangeant de penser que c'est un effort largement gaspillé
Si vos tests unitaires échouent parfois (lors de la refactorisation, par exemple) et que, ce faisant, vous fournissent des informations utiles (votre modification est erronée, par exemple), vos efforts ne sont pas vains. Ce qu’ils ne font pas, c’est tester si votre système fonctionne. Donc, si vous écrivez des tests unitaires au lieu de tests fonctionnels et d'intégration, vous utilisez peut-être votre temps de manière sous-optimale.