paint-brush
Tester l'analyse d'impact - Qu'est-ce que c'est, comment le tester et tout ce que vous devez savoir d'autrepar@launchable
11,328 lectures
11,328 lectures

Tester l'analyse d'impact - Qu'est-ce que c'est, comment le tester et tout ce que vous devez savoir d'autre

par Launchable7m2023/02/15
Read on Terminal Reader

Trop long; Pour lire

L'analyse de l'impact des tests peut aider à accélérer les cycles de test, mais s'il n'est pas correctement géré, il peut devenir indiscipliné. Apprenez à utiliser efficacement cette méthode ici.
featured image - Tester l'analyse d'impact - Qu'est-ce que c'est, comment le tester et tout ce que vous devez savoir d'autre
Launchable HackerNoon profile picture

Vous n'êtes pas seul si votre organisation a fait avancer à toute vitesse sa stratégie DevOps au cours des cinq dernières années. Les trois quarts des organisations ont adopté une approche DevOps - un chiffre qui a plus que doublé au cours des cinq dernières années.


Malgré la croissance explosive de DevOps, seuls 10 % des répondants à l'enquête Harvard Business Review décrivent leur entreprise comme « très performante dans le développement et le déploiement rapides de logiciels ».


La transformation DevOps nécessite un lancement et un déploiement plus rapides, mais l'augmentation de la fréquence des builds entraîne la création d'un plus grand nombre de tests et provoque des goulots d'étranglement de développement.


Pour les équipes dans une position où les cycles de test lents bloquent le développement rapide, l'analyse de l'impact des tests est un moyen d'accélérer le cycle de développement en n'exécutant que les tests pertinents pour le code source modifié.

Qu'est-ce que l'analyse d'impact des tests ?

L'analyse d'impact des tests est un moyen d'accélérer les tests logiciels en n'exécutant que les tests importants pour un ensemble de modifications de code. L'analyse de l'impact des tests permet aux équipes d'accélérer leur cycle de développement et de déploiement en réduisant les frais généraux liés à l'envoi d'un changement.


Traditionnellement, l'analyse d'impact dans les tests de logiciels s'appuie souvent sur l'analyse du code source statique pour créer des graphiques de dépendance entre le code et les tests.


Si vous n'avez pas accès à un outil ou à une bibliothèque spécialement conçue pour l'analyse d'impact des tests, vous pouvez suivre manuellement les modifications apportées à votre base de code et utiliser ces informations pour déterminer quels tests sont susceptibles d'être affectés.


Par exemple, vous pouvez conserver une liste des tests associés à chaque module ou composant de votre système et mettre à jour cette liste au fur et à mesure que vous apportez des modifications.

Comment effectuer une analyse d'impact de test

Pour effectuer manuellement une analyse d'impact de test, vous exécutez chaque test et créez une carte du code de chaque test. Une fois que vous avez créé la carte, vous pouvez écrire un petit programme qui s'exécute chaque fois qu'un développeur pousse du code.


Le programme examine les fichiers modifiés et recherche les tests que vous devez exécuter pour le changement.


Vous devez régulièrement mettre à jour la carte pour avoir un graphique de dépendance précis à mesure que le code change au fil du temps.

Exemple de code Python pratique : analyse manuelle de l'impact des tests

L'extrait de code ci-dessous mappe les noms des tests aux composants auxquels ils sont associés. Dans cet exemple, nous avons trois modules :


  • Connexion
  • Création de compte
  • Réinitialisation du mot de passe


Pour chaque composant modifié, ajoutez les tests à une liste que nous pouvons passer au framework d'exécution des tests.


 # Define a dictionary that maps test names to the modules or components they are testing tests_by_component = { "test_login": ["login_module"], "test_account_creation": ["account_creation_module"], "test_password_reset": ["password_reset_module"] } # Define a list of the components that have been modified # This should be dynamically generated based on the code changes. modified_components = ["login_module"] # Determine which tests are likely to be affected by the changes affected_tests = [] for test, components in tests_by_component.items(): for component in components: if component in modified_components: affected_tests.append(test) # Now, we can pass the affected tests to our test harness. print(affected_tests) # Output: ["test_login"]


Avantages et défis de l'analyse d'impact des tests

Lorsqu'elle est effectuée efficacement, l'analyse d'impact des tests présente de nombreux avantages, notamment :


  • Réduire le temps passé à re-tester


  • Améliorer l'efficacité globale du processus de test


L'analyse d'impact des tests logiciels manuels peut être difficile à réaliser. Que votre projet soit un petit microservice ou un monolithe géant, la quantité de données de test avec lesquelles vous devez travailler peut rapidement augmenter.


L'analyse manuelle des tests devient rapidement lourde et encore plus difficile à mesure que les développeurs ajoutent de nouvelles fonctionnalités et refactorisent le code au fil du temps.


Pour chaque ligne de code ajoutée, vous devez déterminer les impacts potentiels et quels tests sont pertinents pour cette ligne de code. De nombreuses équipes de développement signalent que la sélection des bons tests nécessite beaucoup de travail à grande échelle .

Tests de logiciels dans une organisation en pleine croissance : l'état commun des tests

Passons en revue un scénario très familier - une équipe de développement de logiciels dans une startup technologique de taille moyenne a connu une croissance explosive au cours des trois dernières années.


Ils ont atteint leur série C de financement en capital-risque et ont utilisé l'injection de liquidités pour embaucher des développeurs afin de créer rapidement de nouvelles fonctionnalités. L'entreprise utilise un modèle agile centré sur DevOps et est fière d'un ensemble de tests robuste .

Où allons-nous à partir d'ici?

L'expansion rapide de l'entreprise s'accompagne de difficultés de croissance pour l'équipe de développement. L'afflux de nouvelles fonctionnalités signifie un afflux de nouveaux tests et de changements de rupture, ce qui à son tour provoque des flocons de test et de longues durées d'exécution.


Personne au démarrage ne croit plus que les échecs sont légitimes, donc les développeurs ont appuyé à plusieurs reprises sur le bouton "réexécuter" jusqu'à ce que les tests réussissent. Ils fusionnent quand même les modifications lorsqu'ils ne parviennent pas à faire réussir les tests et supposent que le problème vient du test, pas de leur code.


Les développeurs désactivent les tests qui prennent trop de temps ou qui ne semblent pas pertinents pour le code - ils ont un travail à faire et ont commencé à voir les tests logiciels comme un obstacle à l'accomplissement de leurs tâches.


Les développeurs sont dans un scénario où ils ne font plus confiance aux tests et les désactivent ou les ignorent arbitrairement - s'engageant essentiellement dans leur propre version risquée de la sélection manuelle des tests.


L'équipe d'ingénierie commence à s'inquiéter que cet état de choses ne soit pas durable.


  • Que se passe-t-il si quelqu'un fusionne du code défectueux parce qu'il a ignoré le test qui aurait détecté le problème ?


  • Combien d'argent l'équipe dépense-t-elle en ressources cloud pour réexécuter en continu des tests aléatoires qu'elle ignore finalement ?


  • Combien de temps perdent-ils à attendre que les tests soient exécutés ?


Le responsable de l'ingénierie de la startup décide qu'il est temps de devancer la dette technique DevOps avant qu'elle ne provoque un incident coûteux.


Au lieu d'une analyse ad hoc de l'impact des tests pilotée par les développeurs essayant d'accélérer leur flux de travail, ils trouveront comment sélectionner les tests importants pour les modifications de code.

Faire progresser l'analyse d'impact des tests avec la sélection prédictive des tests

La sélection prédictive des tests est une branche de l'analyse d'impact des tests qui utilise des données pour prédire les tests que votre système CI doit exécuter en fonction des résultats des tests historiques et des modifications de code.


Launchable démocratise l'approche de sélection prédictive des tests afin qu'elle soit disponible pour les équipes de toutes tailles en appuyant simplement sur un bouton.


La sélection de tests prédictifs de Launchable résout l'analyse d'impact des tests en exploitant la puissance de l'apprentissage automatique pour rationaliser le développement de logiciels. Predictive Test Selection utilise l'intelligence basée sur les données pour déterminer quels tests conviennent le mieux à chaque type de changement.


Vous pouvez réduire le nombre d'exécutions de test et accélérer le délai de livraison avec moins de ressources gaspillées.


En l'absence de cette pratique, les équipes doivent créer manuellement des sous-ensembles de « smoke tests » ou paralléliser leurs tests.


Dans le scénario précédent, l'équipe de développement de la startup pouvait bénéficier de la sélection prédictive des tests. Leurs développeurs peuvent se concentrer sur la fourniture des fonctionnalités les plus importantes, accélérer leur flux de travail et faire à nouveau confiance à la suite de tests.

Exemple de code Python pratique : sélection de tests prédictifs avec Launchable et Pytest

Avec Launchable, vous n'avez pas besoin de deviner quels tests s'exécutent et mettez constamment à jour votre suite d'analyse d'impact de test. Voici un exemple Python de la façon dont Launchable peut fonctionner avec le framework Pytest .

Configuration et exécution de Pytest avec Launchable

  1. Installez pytest-launchable dans votre environnement avec pip3 install pytest-launchable


  2. Générez un fichier de configuration Launchable en exécutant launchable-config --create .


  3. Générez une clé API lançable à partir de https://app.launchableinc.com/


    1. Définissez-la comme variable d'environnement LAUNCHABLE_TOKEN sur la machine qui exécutera les tests.


  4. Depuis le répertoire contenant votre fichier de configuration Launchable, exécutez pytest --launchable <your-pytest-project>


Vos résultats de pytest seront signalés à Launchable. Launchable commence ensuite à former un modèle d'apprentissage automatique sur les résultats de vos tests au fil du temps. Le modèle optimise les tests les plus susceptibles d'être utiles dans le temps de test le plus court.

Réflexions finales sur l'analyse d'impact des tests, la sélection prédictive des tests et la création de votre pipeline basé sur les données

Avec la sélection de tests prédictifs basée sur le ML de Launchable, les équipes constatent généralement une réduction de 60 à 80 % des temps de test sans impact sur la qualité .


Les principales raisons pour lesquelles les organisations choisissent la fonctionnalité de sélection prédictive de Launchable sont :


  • Gagner du temps pour les développeurs


  • Réduire les dépenses d'infrastructure


  • Expédier le code plus rapidement


Découvrez comment les ingénieurs de tous les secteurs réussissent avec Launchable grâce à ces études de cas . L'analyse d'impact des tests est un outil essentiel pour améliorer l'efficacité du processus de test. Cependant, l'analyse manuelle ou statique peut être fastidieuse et ne pas apporter de valeur.


Une mise en œuvre appropriée de l'analyse d'impact des tests avec Predictive Test Selection peut faire gagner du temps et améliorer la qualité des tests en rendant votre pipeline plus axé sur les données.


Launchable s'intègre de manière transparente à votre CI, quelle que soit la fréquence de validation ou le nombre de branches Git dont vous disposez. Il prend en charge toutes les applications et toutes les langues, et les équipes signalent jusqu'à 90 % de réduction des temps de test sans aucun impact sur la qualité.