2

Ma question suppose que les gens croient déjà que les tests unitaires en valent la peine et les écrivent réellement sur leurs projets actuels. Supposons également que les tests unitaires pour certaines parties du code ne valent pas la peine d'être écrits car ils testent des fonctionnalités triviales. Les exemples sont des getters/setters, et/ou des choses qu'un compilateur/interpréteur attrapera immédiatement. L'hypothèse contraire est qu'un code "intéressant" mérite d'être testé.Quels types de tests unitaires sont les plus rentables?

Répondre

8

Le niveau de couverture pour une région de code devrait être directement proportionnel à une combinaison de la probabilité de changement et de la quantité de fonctionnalité qui en dépend. Par exemple, nous avons une logique d'analyse assez complexe au cœur de nos classes de contrôle de base. Nous testons unitaire le absolu pisse parce qu'il doit gérer l'entrée provenant de systèmes hors de notre influence (possibilité élevée de changement) + Tous nos contrôles d'interface utilisateur en dépendent pour être stable. Le moindre tweak dans la base ondule et grossit à travers les couches d'héritage et de dépendance.

+1

"Nous testons l'unité de la pisse absolue" - +1 pour un tour de phrase merveilleux! –

2

Les tests unitaires qui permettent de vérifier les données transmises entre les couches souvent ajouter la valeur la plus

UI < ----> Business < ---> Données

0

Pour prendre un coup à ma propre question , voici les modules que j'ai trouvé la peine de tester:

a) L'une des règles de gestion. Dans mon application actuelle, les règles métier sont externalisées à partir des objets métier.

b) l'un des attributs virtuels sur les objets métier. Souvent, ces attributs virtuels ont impliqué des algorithmes.

c) Principaux composants pour lesquels nous pouvons indiquer la production attendue pour une entrée donnée consommée. Souvent, cela saigne dans les tests d'intégration.

d) Notre processus de développement nous oblige à vérifier dans les tests unitaires de nouvelles fonctionnalités et corrections de bugs. Pour les corrections de bogues, nous essayons de reproduire exactement ce qui a causé le bogue et de montrer que le test peut être passé.

e) Une de nos couches de traduction où nous traduisons d'un type de représentation de données à un autre comme POJO-XML

1

Je trouve que les tests les plus rentables sont ceux qui testent les bogues trouvés précédemment. À mon avis, si une équipe ne faisait rien d'autre que d'ajouter des tests de régression pour les bugs au fur et à mesure qu'ils les corrigeaient, ils obtiendraient plus pour leur argent que presque n'importe quelle autre stratégie de test.

En testant ce qui a été brisé (et en le testant minutieusement), vous savez que vous testez des zones susceptibles de se casser. Cela suppose bien sûr que vous testiez des choses qui se brisent pendant le développement, pas seulement en attendant que les rapports d'assurance qualité se diffusent après un déploiement ou quelque chose comme ça.

0

Discuté dans SO Podcast 41 - cette partie n'est pas dans le transcript pour le moment. Les réponses dans le blog contiennent une discussion plus approfondie de la valeur de couverture de test unitaire.

  • Joel craint que TDD excessive (par exemple, passant de 90% à la couverture de test 100%) réduit le temps d'autres activités qui pourraient bénéficier du logiciel, comme une meilleure facilité d'utilisation ou fonctionnalités supplémentaires aux utilisateurs réclament.
  • Les tests unitaires sont absolument utiles comme une forme de « manger votre propre nourriture pour chiens », et documenter le comportement de votre système. Même si vous ignorez complètement les résultats réels des tests, ils sont toujours valables en tant que documentation et vous donnent une nouvelle perspective extérieure sur votre base de code.
  • Joel note la difficulté de tester l'interface utilisateur (web ou exécutable) par rapport à tester le code derrière l'interface utilisateur. La méthode classique pour ce faire est probablement documentée dans The Art of UNIX Programming, où vous commencez avec une application de ligne de commande qui prend en charge et crache du texte. L'interface graphique est simplement une couche que vous collez au-dessus de l'application de ligne de commande, ce qui conduit à une parfaite testabilité - mais peut-être pas de si bonnes applications, à long terme. Lequel est le plus important?
+0

Écrit cette question (et ma réponse) tout en listant le podcast. J'ai tendance à me ranger du côté de Bob Martin à ce sujet. Plus de tests est meilleur, bien que je puisse certainement entendre Joel sur le problème de test fragile. – Alan

1

Comme la question est posée, je ne doute pas que ce soit que des tests fonctionnels comme le test de sélénium offre la plus grande valeur commerciale. Un test de sélénium (Web) clique sur l'application et affirme le comportement attendu, tel que défini par le scénario utilisateur/cas d'utilisation. Ces tests affirment que la «chose» que votre logiciel essaie de communiquer au client est bonne.

Si ces choses ne fonctionnent pas, votre client va perdre confiance dans votre capacité à produire des logiciels crédibles, en prenant donc loin une bonne quantité de valeur commerciale.

Maintenant, il peut y avoir une bonne quantité de détails que ces tests ne couvrent pas, mais je crois vraiment qu'ils sont essentiels dans la création de confiance, surtout lorsque vous parlez à un marché de masse.

0

Tous les tests unitaires raisonnables sont précieux, mais ceux qui ont tendance à épargner le plus de temps dans mon expérience, ce qui donne ainsi le meilleur retour sur investissement, sont des tests unitaires pour des corrections de bugs. Principalement parce que les corrections de bugs s'appliquent aux parties les plus difficiles/fragiles du code.

0

TDD vous aide à écrire votre code plus rapidement, de sorte que TDD quand aller plus vite fournirait une plus grande valeur commerciale. ;)

0

Les tests qui peuvent être réutilisés dans de nombreux endroits. Exemples de mon projet actuel:

  • syntaxe vérification des fichiers de configuration
  • Vérification que les propriétés du modèle mentionné dans les modèles RTF existent réellement dans les classes du modèle (les gens changent les classes et oublient généralement d'ajuster les modèles)
  • Vérification de certaines règles de guidage de style souvent laissées de côté (chaque masque de l'interface utilisateur doit avoir un texte de barre de titre, chaque bouton doit avoir une mnémotechnique unique, etc.)

Même les programmeurs qui sont sceptiques sur les tests unitaires aiment ceux-ci parce que ils peuvent les utiliser avec esprit h une quantité minimale de travail - et dans certains cas cela les conduit à écrire leurs propres tests unitaires.

Questions connexes