Webinaire en vedette : MISRA C++ 2023 : tout ce que vous devez savoir | Voir le séminaire

Guide des méthodologies de test de logiciels : un aperçu de haut niveau

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
le 17 mars 2022
9 min lire

Une partie de ce qui sépare les meilleures sociétés de développement de logiciels des autres est la profondeur des tests logiciels qu'elles effectuent sur leurs produits logiciels. Mais, comment font-ils cela ? Apprenez dans cet aperçu de haut niveau.

Des systèmes logiciels de haute qualité, sûrs, sécurisés et fiables sont fournis parce que les développeurs, les ingénieurs et les programmeurs effectuent des tests logiciels rigoureux dans le cadre d'une stratégie de mise sur le marché.

Les avantages des tests sont simples. Éliminez les défauts, prévenez les bogues, réduisez les coûts de développement, améliorez les performances et prévenez les litiges. En tant que développeurs de tests de logiciels, nous pensons fondamentalement qu'ils doivent être intégrés à toutes les phases du processus de développement de logiciels.

Dans le passé, peu d'ingénieurs en logiciel, de développeurs ou ingénieurs assurance qualité vu le processus de test logiciel de manière holistique. Traditionnellement, les tests de logiciels ont été séparés du reste du développement, laissés à être exécutés vers la fin du cycle de développement par des ingénieurs d'assurance qualité.

Si des défauts étaient découverts, les correctifs seraient très probablement coûteux et les dates de sortie seraient repoussées, ce qui saperait la crédibilité de l'entreprise et la confiance des parties prenantes. Le résultat a été une augmentation des coûts et une diminution des bénéfices.

Dans cet aperçu de haut niveau des tests, nous allons assembler toutes les pièces du puzzle des tests logiciels. Nous couvrirons :

Qu'est-ce que le test ?

Le test peut être défini comme un processus d'analyse d'un élément logiciel pour détecter les différences entre les conditions existantes et requises et pour évaluer les caractéristiques de l'élément logiciel. Dans ce processus, nous validons et vérifions qu'un produit logiciel ou une application fait ce qu'il est censé faire. Le système ou ses composants sont testés pour s'assurer que le logiciel répond à toutes les exigences spécifiées.

En exécutant les systèmes, nous pouvons identifier les lacunes, les erreurs ou les exigences manquantes par rapport aux exigences réelles. Personne ne veut les maux de tête des corrections de bogues, des retards de livraison, des défauts ou des dysfonctionnements graves entraînant des dommages ou la mort.

Webinaire : Pourquoi investir dans l'automatisation des tests logiciels

Qui effectue les tests ?

Les personnes qui effectuent les tests et développent les processus de test varient considérablement d'une organisation à l'autre. Les entreprises ont des désignations différentes pour les personnes qui testent le logiciel en fonction de leur expérience et de leurs connaissances, cela dépend donc du processus et des parties prenantes associées à un projet. Des titres tels qu'ingénieur en assurance qualité logicielle et développeur de logiciels sont courants. Voici quelques titres généraux et leurs fonctions pour les tests.

Ingénieur QA/testeurs logiciels sont responsables de l'élimination des défauts. Beaucoup sont des experts en analyse de logiciels et de systèmes, en atténuation des risques et en prévention des problèmes liés aux logiciels. Ils peuvent avoir une connaissance limitée du système, mais ils étudient la documentation des exigences et effectuent des tests manuels et automatisés. Ils créer et exécuter des cas de test et signaler les bogues. Une fois que le développement a résolu les bogues, ils testent à nouveau.

Améliorez la qualité, la sûreté et la sécurité des logiciels embarqués grâce à la génération automatisée de tests.

Les développeurs de logiciels peut connaître tout le système, du début à la fin. Ils sont impliqués dans la conception, le développement et les tests des systèmes afin de connaître toutes les directives et exigences. De plus, ils sont hautement qualifiés dans le développement de logiciels, y compris l'automatisation des tests.

Chefs de projet/responsables sont responsables de l'ensemble du projet : qualité du produit, délai de livraison et réussite du cycle de développement. Lorsque des problèmes de produit surviennent, c'est le chef de produit qui priorise les délais de résolution des problèmes.

Les utilisateurs finaux sont les parties prenantes ou les clients. Le test bêta est une version préliminaire du logiciel, qui permet de garantir une qualité élevée et la satisfaction des clients. Qui est le mieux placé pour déterminer si le produit livré est dans la trajectoire pour satisfaire son acceptation.

Ingénieurs système concevoir et concevoir le système à partir des exigences et des concepts recueillis. En raison de l'ensemble des connaissances qu'ils possèdent sur le système, ils définissent des cas de test au niveau du système qui seront ensuite réalisés par l'équipe d'assurance qualité et/ou les développeurs de logiciels. La vérification des exigences des cas de test est également effectuée. Dans les systèmes très complexes où la modélisation est utilisée, les tests via l'exécution du modèle de la conception du système logique et / ou physique sont souvent effectués par des ingénieurs système.

Quand commencer les tests ?

Il est préférable de commencer tôt les tests, car cela réduit les coûts ainsi que le temps nécessaire pour retravailler et produire une conception architecturale propre et un logiciel sans erreur. Chaque phase du cycle de vie du développement logiciel (SDLC) se prête à une opportunité de test, qui est réalisée sous différentes formes.

Par exemple, dans le SDLC, une forme de test peut commencer pendant la phase de collecte des exigences. Les exigences doivent être clairement comprises. Revenir aux parties prenantes pour clarifier et négocier les exigences est une forme de test de l'interprétation des exigences des parties prenantes pour s'assurer que le bon système est construit. C'est une partie essentielle de la gestion des produits et des projets. Cas de test pour les tests d'acceptation doivent également être définis.

Il est important de comprendre que les cas de test définis pendant la phase d'ingénierie du système sont des cas de test textuels qui expliquent quoi et comment le système doit être testé. Ces cas de test seront ensuite réalisés par l'équipe de développement et/ou d'assurance qualité, construits à partir du cas de test textuel des ingénieurs du système ainsi que de l'exigence associée. La validation ou l'exécution des cas de test réalisés produira des résultats de réussite/échec qui fourniront la preuve d'un bon fonctionnement et pourront également être utilisés pour tout besoins de conformité.

La phase de décomposition des exigences et de conception architecturale détaille davantage le système à un autre niveau d'abstraction. Les interfaces sont définies et si la modélisation à l'aide de SysML, UML ou d'un autre langage est effectuée, tester l'architecture par simulation pour éliminer les défauts de conception est une autre tâche vitale.

Au cours de ce processus, des exigences supplémentaires sont définies, y compris les cas de test qui vérifient et valident chacun d'eux. Une décomposition supplémentaire a lieu pour produire la conception détaillée.

En fin de compte, les exigences au niveau du système remontent aux cas de test au niveau du système, les exigences architecturales remontent aux cas de test de test d'intégration et les exigences de conception détaillée ou les exigences de bas niveau remonteront aux cas de test unitaire. La vérification des exigences peut commencer à avoir lieu pour s'assurer que chaque exigence correspond à un cas de test. UNE matrice de traçabilité des exigences est parfait pour trouver des lacunes de traçabilité.

Lorsque le transfert des ingénieurs système aux ingénieurs logiciels aura lieu, les développeurs commenceront leur implémentation en fonction des besoins. Ici, les développeurs de logiciels appliquent ou devraient appliquer des normes de codage pour garantir la qualité du code. Analyse de code statique, qui est une forme de test et aux premiers stades de la phase de mise en œuvre, lorsqu'il est également le moins cher à réparer, trouvera des défauts de codage ainsi que des problèmes de sûreté et de sécurité. Les tests unitaires suivront, et chaque cas de test unitaire réalisé doit être lié aux exigences de bas niveau ou au cas de test qu'il réalise.

Au fur et à mesure que la mise en œuvre du système évolue, les cas de test définis précédemment au cours du processus d'ingénierie des systèmes doivent être réalisés et exécutés sur le système en cours de développement. En commençant par les tests unitaires, suivis des tests d'intégration, des tests système et des tests d'acceptation. De plus, en fonction du type d'exigences de qualité de service, d'autres méthodes de test peuvent être nécessaires, comme Test d'API, tests de performances, tests de résistance, tests de portabilité, tests d'utilisabilité, etc.

Que sont les méthodologies de test de logiciels ?

Les méthodologies de test de logiciels sont les stratégies, les processus ou les environnements utilisés pour tester. Les deux méthodologies SDLC les plus utilisées sont Agile et Waterfall, et les tests sont très différents pour ces deux environnements.

Modèle de cascade

Par exemple, dans le modèle en cascade, les tests formels sont effectués dans la phase de test, qui commence une fois la phase de développement terminée. Le modèle en cascade pour les tests fonctionne bien pour les petits projets moins complexes. Cependant, si les exigences ne sont pas clairement définies au départ, il est extrêmement difficile de revenir en arrière et d'apporter des modifications dans les phases terminées.

Le modèle en cascade est populaire auprès des petits projets car il a moins de processus et d'acteurs avec lesquels s'occuper, ce qui peut accélérer l'achèvement du projet. Cependant, les bogues sont découverts plus tard dans le développement, ce qui les rend plus coûteux à corriger.

Modèle agile

Le modèle Agile est différent du modèle en cascade et convient mieux aux grands projets de développement. Les tests agiles sont un modèle incrémental où les tests sont effectués à la fin de chaque incrément ou itération. De plus, l'ensemble de l'application est testé à la fin du projet. Il y a moins de risques dans le processus de développement avec le modèle Agile parce que chaque membre de l'équipe comprend ce qui a ou n'a pas été réalisé. Les résultats des projets de développement sont généralement meilleurs avec Agile lorsqu'il y a un chef de projet fort et expérimenté qui peut prendre des décisions rapides.

Modèle itératif

D'autres modèles SDLC incluent le modèle itératif et le modèle DevOps. Dans le modèle itératif, les développeurs créent des versions de base du logiciel, révisent et améliorent l'application par itérations, par petites étapes. C'est une bonne approche pour les applications extrêmement volumineuses qui doivent être terminées rapidement. Les défauts peuvent être détectés plus tôt, ce qui signifie qu'ils peuvent être moins coûteux à résoudre.

Approche DevOps et tests continus

Lorsque vous prenez un Approche DevOps des tests, ou tests continus, il existe une collaboration avec les équipes opérationnelles tout au long du cycle de vie du produit. Grâce à cette collaboration, les équipes de développement et d'exploitation n'attendent pas que le logiciel soit construit ou presque terminé pour effectuer des tests. Cela signifie que le processus de livraison du logiciel est plus rapide, que les défauts sont détectés plus tôt et qu'ils sont moins coûteux à résoudre.

Les tests continus utilisent des tests automatisés et des outils d'automatisation en tant que composants du pipeline de développement logiciel pour fournir un retour immédiat sur tous les risques commerciaux qui pourraient exister.

Validation du modèle V

Quels sont les types de tests logiciels ?

Les types de tests de logiciels les plus courants incluent :

  • Analyse statique
  • Tests unitaires
  • Test d'intégration
  • Test du système
  • Test d'acceptation

Analyse statique

L'analyse statique n'implique aucune exécution dynamique du logiciel testé et peut détecter d'éventuels défauts à un stade précoce, avant l'exécution du programme. L'analyse statique est effectuée pendant ou après le codage et avant l'exécution des tests unitaires. Il peut être exécuté par un moteur d'analyse de code pour "parcourir" automatiquement le code source et détecter les règles non conformes, ou les erreurs lexicales, syntaxiques et même sémantiques.

Les outils d'analyse de code statique évaluent, compilent et vérifient les vulnérabilités et les failles de sécurité pour analyser le code en cours de test. Les outils d'analyse statique de Parasoft aident les utilisateurs à gérer les résultats des tests, y compris la hiérarchisation des résultats, la suppression des résultats indésirables et l'attribution des résultats aux développeurs. Ces outils prennent en charge un ensemble complet d'écosystèmes de développement à intégrer dans une longue liste de produits IDE pour effectuer une analyse statique pour C, C ++, Java, C# et VB.NET.

Apprenez à choisir un outil d'analyse statique moderne.

Tests unitaires

L'objectif des tests unitaires est d'isoler chaque partie du programme et de montrer que les parties individuelles sont correctes en termes d'exigences et de fonctionnalités.

Ce type de test est effectué par les développeurs avant que la configuration ne soit transmise à l'équipe de test pour exécuter formellement les cas de test. Les tests unitaires sont effectués par les développeurs respectifs sur les unités individuelles des zones de code source attribuées. Les développeurs utilisent des données de test différentes des données de test de l'équipe d'assurance qualité.

L'utilisation de Parasoft pour effectuer une couverture de branche, d'instruction et de MC/DC est une forme de test unitaire. Le logiciel est isolé pour chaque fonction et ces parties individuelles sont examinées. La limitation des tests unitaires est qu'ils ne peuvent pas détecter tous les bogues de l'application car ils n'évaluent pas un thread ou un chemin d'exécution dans l'application.

Automatisez pour des tests plus rapides et plus faciles.

Test d'intégration

Les tests d'intégration sont définis comme le test de parties combinées d'une application pour déterminer si elles fonctionnent correctement. Les tests d'intégration peuvent être effectués de deux manières :

  1. Tests d'intégration ascendants. Les tests commencent par des tests unitaires, suivis de tests de combinaisons d'unités de niveau progressivement supérieur appelées modules ou builds.
  2. Tests d'intégration descendants. Dans ce test, les modules de niveau le plus élevé sont testés en premier, et progressivement, les modules de niveau inférieur sont testés par la suite.

Test du système

Les tests de système testent le système dans son ensemble où il est considéré comme une boîte noire et il n'est pas nécessaire de comprendre le fonctionnement interne du système testé. Les tests du système sont effectués une fois tous les composants intégrés, l'application dans son ensemble est testée rigoureusement pour voir si elle répond aux exigences. Ce type de test est effectué par l'équipe de test d'assurance qualité.

  • Le test du système est l'endroit où le système ou l'application a été entièrement mis en œuvre et doit être testé dans son ensemble.
  • L'application est testée de manière approfondie pour vérifier qu'elle répond aux exigences fonctionnelles, aux exigences de qualité de service et aux exigences commerciales.
  • L'application est testée dans l'environnement de production final ou très proche de l'environnement de production où l'application sera déployée.
  • Les tests système permettent aux organisations d'avoir une idée du délai de mise sur le marché lorsque des résultats satisfaisants sont obtenus.

Test de réception

Il s'agit sans doute du type de test le plus important, car il est effectué par l'équipe d'assurance qualité pour évaluer si l'application répond aux spécifications prévues et répond aux exigences du client. L'équipe d'assurance qualité disposera d'un ensemble de scénarios et de cas de test pré-écrits qui seront utilisés pour tester l'application.

Plus d'idées seront partagées sur l'application et plus de tests pourront être effectués pour évaluer sa précision et les raisons pour lesquelles le projet a été lancé. Les tests d'acceptation ne visent pas seulement à signaler de simples fautes d'orthographe, des erreurs cosmétiques ou des lacunes dans l'interface, mais également à signaler tout bogue dans l'application qui entraînera des plantages du système ou des erreurs majeures dans l'application.

En effectuant des tests d'acceptation sur une application, l'équipe de test déduit comment l'application se comportera en production. Il existe également des exigences légales et contractuelles pour l'acceptation du système.

Découvrez les solutions de tests automatisés de Parasoft en action !

Quand les tests sont-ils terminés et terminés ?

Il est difficile de déterminer quand arrêter les tests, car les tests sont un processus sans fin et personne ne peut prétendre qu'un logiciel est testé à 100 %. Cependant, il existe des critères à considérer qui peuvent servir d'indicateurs pour arrêter le dépistage.

  1. Décision de gestion. Le moyen le plus simple et le plus courant de savoir que les tests sont interrompus est peut-être lorsque la direction décide d'arrêter le processus de test. La décision de la direction peut être due à des contraintes de temps ou de budget, ce qui peut compromettre la qualité. La décision peut simplement être que le projet a atteint l'étendue des tests requis, ce qui signifie que les délais de test ont été atteints.
  2. Achèvement de l'exécution du scénario de test. À la fin des cas de test, le taux de réussite des cas de test doit être de 95 % et tous les cas de test critiques ont réussi. Les 5 % qui échouent doivent être des cas de test de faible priorité.
  3. Achèvement des exigences et des tests de robustesse. Les développeurs et les testeurs peuvent analyser les données des résultats des tests pour s'assurer que l'application fonctionne comme prévu et reçoit un résultat satisfaisant pour chaque exigence définie. De plus, tous les principaux flux fonctionnels sont exécutés avec succès avec diverses entrées et fonctionnent bien.
  4. Couverture de code selon un pourcentage prédéfini. L'instrumentation de votre code et l'exécution de tous vos cas de test fourniront non seulement un pourcentage du code testé, mais exposeront également du code qui n'a pas été exécuté, qui a potentiellement des bogues cachés. Certaines organisations sont à l'aise d'obtenir une couverture de code de 80 % et plus, tandis que d'autres organisations exigent une couverture de 100 % des déclarations, des branches et des décisions de condition modifiée.
  5. Le taux de bug tombe en dessous d'un certain niveau. Lorsque les taux de bogues tombent en dessous d'un niveau prédéterminé et qu'aucun bogue hautement prioritaire n'est identifié, les tests peuvent être interrompus.

Comment Parasoft aide-t-il avec les tests ?

Parasoft vous aide à fournir des logiciels de qualité sûrs, sécurisés et fiables, à grande échelle avec des solutions de test automatisées qui couvrent chaque étape du cycle de développement. Les solutions d'automatisation des tests logiciels de Parasoft fournissent un ensemble unifié d'outils pour accélérer les tests en aidant les équipes à déplacer les tests jusqu'aux premières étapes du développement tout en maintenant la traçabilité, l'enregistrement des résultats des tests, les détails de la couverture du code, la génération de rapports et la documentation de conformité.

Fournissez des logiciels qui alimentent la modernité voitures, avion, dispositifs médicaux, les chemins de feret l'automatisation industrielle solutions en toute confiance à l'aide d'outils d'automatisation des tests.

Maximisez la qualité, la conformité, la sûreté et la sécurité avec l'automatisation intelligente des tests logiciels Parasoft.