Le test de système est le test logiciel de bout en bout, basé sur les performances, d'un système entier. Cette solution de test de bout en bout comprend des aspects des tests fonctionnels, non fonctionnels, d’interface, de résistance et de récupération.
Imaginez que vous observiez un système logiciel au microscope, en commençant par le niveau de grossissement le plus extrême, à savoir l'unité. Il s'agit de l'élément de base du système logiciel. La vue s'élargit ensuite vers l'extérieur pour inclure le niveau d'agrandissement suivant, à savoir les modules créés par ces unités individuelles. Enfin, en dézoomant complètement, vous arrivez au niveau du système. À ce niveau d'agrandissement, vous pouvez voir tout ce qui se trouve dans le système et comment tous les composants créés par ces modules fonctionnent ensemble.
D'une certaine manière, les tests système s'apparentent à cette vision microscopique, mais avec une différence essentielle. Les tests système sont une forme de tests boîte noire, ce qui signifie que les testeurs s'intéressent moins à la vision des composants impliqués dans son assemblage qu'à la fonctionnalité globale du système. Dans cette perspective de « réussite/échec », le comportement du système n'est remarquable dans ce contexte que dans la mesure où il est lié aux performances du système. (Les tests en boîte blanche permettent de mieux comprendre la nature des composants d'un système.)
Les tests de systèmes impliquent souvent l'analyse de plusieurs systèmes logiciels distincts qui peuvent ou non fonctionner à l'unisson au sein d'un système logiciel particulier.
Newsletter sectorielle
Restez au fait des tendances les plus étonnantes du secteur dans le domaine de l’IA, de l’automatisation, des données et bien d’autres avec la newsletter Think. Consultez la Déclaration de confidentialité d’IBM.
Vous recevrez votre abonnement en anglais. Vous trouverez un lien de désabonnement dans chaque newsletter. Vous pouvez gérer vos abonnements ou vous désabonner ici. Consultez la Déclaration de confidentialité d’IBM pour plus d’informations.
Considérons le compte à rebours qui précède les lancements spatiaux. Si tout le monde se souvient du compte à rebours dramatique en 10 temps qui précède l'allumage et le décollage, peu se rappellent les nombreuses vérifications demandées par le chef de vol et auxquelles il répond par l'affirmative en donnant son feu vert. Lors d'un lancement spatial classique, les chefs de département sont consultés sur les opérations prévues, la sécurité de la mission, les systèmes du véhicule et les conditions météorologiques attendues, parmi de nombreux autres sujets. Chaque département est interrogé et chaque chef de département répond à son tour.
De même, les tests de systèmes peuvent être considérés comme la chacklist finale qui précède le lancement d'un nouveau système logiciel. La dernière phase de correction des bogues logiciels connus a été achevée. À l'instar des checklists historiques créées par les pionniers de l'espace, tout repose désormais sur le feu vert final de chaque « département » impliqué dans les tests du système.
Chaque requête est ombrée en fonction de la fonctionnalité du système :
Lorsque nous parlons de tests de systèmes, nous rencontrons naturellement le sujet des dépendances, qui sont des relations qui existent entre les cas de test. Dans de telles situations, le résultat d'un cas de test peut dépendre partiellement ou entièrement des résultats d'autres cas de test. Les dépendances peuvent également concerner la fonctionnalité, les environnements de test ou les politiques de sécurité, et peuvent même avoir un impact sur l'ensemble du processus de test mis en place par une entreprise.
Les méthodologies de test des systèmes ne permettent pas d'examiner en détail leur fonctionnement interne (rappelons qu'il s'agit d'une forme de test boîte noire), mais elles permettent de déterminer si une application particulière fonctionne correctement. L'idée était de tester le système afin de détecter les lacunes, les erreurs ou les exigences manquantes, car cela détermine la fonctionnalité globale de l'application logicielle.
Les tests système sont généralement effectués après l'integration testing, mais avant les tests d'acceptation, afin de garantir que tous les composants fonctionnent correctement ensemble. Comme nous le verrons, ils englobent souvent à la fois les aspects fonctionnels et non fonctionnels du système. Parce qu'ils reposent à la fois sur des domaines strictement fonctionnels et non fonctionnels, ils couvrent des aspects aussi vastes que l'intuitivité, la sécurité et les performances.
L'un des principaux objectifs des tests de système est de vérifier que le langage de codage d'un logiciel peut être traduit en un programme utilisable. Cependant, l'objectif principal des tests de systèmes est de s'assurer que le logiciel évalué répond aux exigences professionnelles des utilisateurs qui s'en serviront.
Le processus de test est censé refléter le même environnement de production que celui qui sera utilisé, afin de garantir que le logiciel fonctionne comme il se doit malgré l'évolution des conditions réelles. De même, les données de test sont créées pour imiter des données et des situations réelles. Une fois les tests effectués, les défauts du logiciel peuvent être localisés et corrigés.
Les tests de systèmes peuvent être classés dans l'un des trois groupes principaux. Le premier, le functional testing, s'intéresse à la performance du système, mais ne cherche pas de réponse plus approfondie que de savoir si le logiciel fonctionne comme promis. Voici quelques-uns des principaux types de functional testing :
Bien que les tests fonctionnels fournissent des informations extrêmement importantes, ces données sont en gros limitées à un vote pour ou contre basé strictement sur le fait que le système fonctionne comme il le devrait. Cela ne tient pas compte d'un grand nombre de variables pertinentes, telles que la sécurité du système, l'interface utilisateur et les performances.
Les tests de systèmes non fonctionnels permettent d'évaluer le fonctionnement du système. La différence essentielle entre le functional testing et le non-functional testing peut se résumer à la comparaison suivante :
Dans cette optique, voici quelques-unes des principales formes de non-functional testing du système :
D'autres types de tests du système sont utiles, même s'ils n'entrent pas dans les catégories des functioning ou non-functioning tests. Voici quelques-unes des méthodologies les plus remarquables :
Bien que le processus de test système offre les tests de performance en boîte noire les plus complets qui soient, la réalisation de tests système n'est pas sans poser certains problèmes potentiels :
Les exigences auxquelles doivent satisfaire les tests système sont nombreuses, qu'il s'agisse d'exigences commerciales propres à l'entreprise, d'exigences fonctionnelles propres au logiciel ou d'exigences spécifiques pouvant s'appliquer à son fonctionnement. En effet, les exigences système que les systèmes d'exploitation doivent absorber semblent toujours nombreuses. Les exigences qui changent souvent peuvent perturber un système et le laisser avec un ensemble incomplet de cas de test.
Il n'est un secret pour personne que les délais peuvent causer des difficultés dans un environnement professionnel. Les délais sont réputés pour avoir des répercussions importantes, car les calendriers de travail entrent en conflit avec les attentes liées au calendrier. Dans le domaine du développement logiciel, la pression liée aux délais se manifeste souvent par le fait que les tests système appropriés et suffisants sont négligés, réalisés de manière incomplète ou ignorés complètement. Cela nécessite souvent de nouveaux tests à un stade ultérieur du cycle de développement du logiciel.
Les tests système ne se font pas dans le vide ni sans effort. Ils nécessitent le travail qualifié d'équipes de test, des outils de test pour faciliter ce travail et un budget adéquat pour les rendre possibles. Sans ces éléments, il est facile de prendre des raccourcis, ce qui conduit à des tests incomplets. Si l'un des éléments de cette équation est modifié ou supprimé, cela peut avoir un impact négatif sur la couverture des tests résultant des tests système de cette application ou de ce produit logiciel.
De nombreuses vulnérabilités potentielles peuvent être évaluées au cours du processus de test, mais le personnel d'ingénierie logicielle ne peut effectuer ces évaluations que s'il est soutenu et qu'il contrôle l'environnement de test dans lequel il travaille. Lorsque les testeurs ne travaillent pas dans des environnements stables, il devient plus facile pour eux de passer à côté de défauts logiciels potentiels. Et si, dans des environnements instables, les testeurs trouvent des bogues de logiciels qui doivent être réparés, ils ont souvent plus de mal à reproduire ces bogues par la suite.
Lorsque votre travail implique l'assurance qualité des logiciels, la révision des lignes de code informatique peut s'avérer être une tâche minutieuse, fastidieuse et chronophage. Ce qui peut rendre ce travail encore plus désagréable, c'est le manque de communication entre les testeurs, les développeurs et les autres parties prenantes. Comme dans toute entreprise, les problèmes de communication engendrent des malentendus et créent un environnement de production dans lequel les défauts peuvent échapper à la détection et s'enraciner dans les systèmes d'exploitation.
Les techniques de test varient et les résultats des tests sont très divers, allant de données de test faciles à comprendre à des ensembles de données vastes et complexes qui nécessitent une gestion plus rigoureuse pendant et après la phase de test. Le niveau de complexité des projets augmente davantage lorsque les environnements de test ne reflètent pas entièrement leurs homologues de production. La stratégie de test mise en œuvre au cours du processus de développement du logiciel doit tenir compte de la manière de résoudre au mieux ces problèmes.
Service entièrement géré et à locataire unique pour le développement et la livraison d’applications Java.
Utilisez les logiciels et outils DevOps pour créer, déployer et gérer des applications cloud natives sur de nombreux appareils et environnements.
Le développement d’applications cloud implique de les créer une fois, de les itérer rapidement et de les déployer n’importe où.