Faites évoluer vos tests de logiciels critiques pour la sécurité avec l'automatisation des tests
Par Parasoft
8 septembre 2017
7 min lire
Nous sommes dans une crise de coûts avec les logiciels critiques pour la sécurité, ce qui signifie que les fonctionnalités accrues requises ont dépassé la capacité de payer pour son développement. Le Programme Boeing 787, par exemple, nécessitait 6.5 millions de lignes de code, dont la conception, le développement et les tests ont coûté 4 milliards de dollars. La tendance des grands projets critiques pour la sécurité montre une croissance exponentielle des coûts totaux, les logiciels représentant une part plus importante du budget de développement total d'une année sur l'autre. Le prochain grand programme aérospatial sera probablement inabordable en utilisant les mêmes techniques utilisées dans les programmes précédents. Alors, que pouvons-nous faire?
La certification de sécurité et les tests et vérifications requis représentent une grande partie du budget de développement logiciel. Test de décalage gauche des logiciels (c'est-à-dire plus tôt dans le cycle de vie du développement logiciel) tout en tirant parti de l'automatisation rapporte de gros dividendes en termes de coût, de risque et de calendrier. La figure 1 ci-dessous montre le coût en millions de dollars par mille lignes de code pour le développement de logiciels de compagnies aériennes commerciales (Données Boeing et Airbus), qui montre clairement l'augmentation exponentielle.
Figure 1: Coût de développement logiciel par lignes de code dans les projets d'aviation commerciale. Données tirées des métriques des projets Airbus et Boeing.
Où les bogues sont créés et trouvés, et leur impact sur les coûts
Sans surprise, la plupart des défauts sont introduits dans un projet au début, avant même que la première ligne de code ne soit écrite. La plupart des bogues sont trouvés et corrigés pendant les tests, mais un bon pourcentage (jusqu'à 20%!) Est découvert pendant le fonctionnement, après que le produit a été vendu et expédié. Dans les systèmes certifiés, cela signifie soit un cycle de réparation-test-re-certification extrêmement coûteux, soit des solutions de contournement du problème par l'opérateur. La figure 2 montre le pourcentage relatif de bogues introduits et détectés au cours de chaque phase du cycle de vie du développement logiciel.
Figure 2: Graphique montrant le pourcentage de défauts introduits et détectés au cours des différentes phases de développement.
Les défauts sont moins chers à corriger au début du cycle de vie, et ils deviennent exponentiellement plus chers à trouver et à corriger sur la durée du projet. En fonctionnement, une fois qu'un produit a été expédié entre les mains du client, il est le plus coûteux à réparer. Les coûts de réparation des défauts post-déploiement sont prudents et n'incluent pas les dommages à votre marque et la responsabilité en cas d'incidents de sécurité sur le terrain. La figure 3 montre le coût relatif pour réparer un défaut à chaque étape du cycle de vie. De toute évidence, l'objectif est de déplacer les défauts détectés et corrigés plus tôt dans le cycle de vie, en d'autres termes, de «décaler vers la gauche». De plus, il est souhaitable de réduire le nombre de défauts qui parviennent au client (une réalité dans tous les domaines).
Figure 3: Coût relatif pour trouver et corriger les bogues à chaque phase de développement. Lors des exigences et de la conception, la ligne de base (1x) et l'endroit le moins coûteux pour corriger les défauts. Source pour les figures 2 et 3: Présentation SAVI à la conférence INCOSE SE 2012.
Le rôle de l'automatisation des tests dans Shift-Left
L'industrie des logiciels critiques pour la sécurité reconnaît la nécessité de changer la façon dont les choses sont faites. Trop de projets réinventent la roue et la certification d'un tout nouveau logiciel prend du temps et coûte cher. La croissance de la connectivité et de la fonctionnalité des nouveaux produits signifie que les méthodes doivent changer. Dans cet article, nous ne couvrirons pas toutes les techniques proposées, mais nous nous concentrerons plutôt sur le rôle que joue l'automatisation des tests dans le transfert à gauche de la réduction, de la détection et de la correction des défauts et des vulnérabilités de sécurité.
Les tests constituent une grande partie de tout projet critique pour la sécurité, et l'automatisation est absolument nécessaire pour atteindre les objectifs de sûreté, de sécurité et de qualité. Voici un exemple de la manière dont les outils d'automatisation des tests prennent en charge de nouvelles méthodes de développement de logiciels et augmentent la productivité des tests et de la documentation:
Prise en charge des méthodes de développement agiles et itératives: Les problèmes de la méthode en cascade sont compris et de nombreuses équipes utilisent des méthodes de développement plus modernes pour améliorer la qualité et la sécurité. L'automatisation des tests est une partie importante de toute méthode de développement itérative, car des suites de tests sont exécutées à chaque nouvelle itération d'un module, d'un composant, etc. L'automatisation des tests prend en charge ces méthodes avec des tests automatisés répétables, fournissant des rapports à différents niveaux pour chaque test mais aussi cumulatifs résultats au fil du temps. Les outils d'analyse dynamique sont essentiels pour détecter les erreurs d'exécution difficiles à détecter, et l'analyse statique joue un rôle important dans la détection des défauts avant le début des tests.
Inspections logicielles de soutien: L'une des meilleures pratiques pour éliminer les défauts au début du cycle de vie du développement consiste à effectuer des inspections. Les inspections signifient tout examiner, pas seulement le code source. Par exemple, l'inspection des exigences et de la conception est essentielle pour prévenir la principale source de bogues dans le système (voir Figure 2). De nombreux bogues sont littéralement intégrés au système. Les outils jouent un rôle moindre à ce stade, mais améliorent l'efficacité des revues de code. Les tests unitaires automatisés, la détection dynamique des erreurs et l'analyse statique améliorent considérablement la détection des erreurs dans les premières étapes de codage d'un projet. Les résultats des tests automatisés peuvent être présentés dans les révisions de code, réduisant ainsi la dépendance à la détection manuelle des erreurs et laissant plus de temps pour détecter les exigences incorrectes et les décisions de conception.
Augmentation de la productivité des tests: Les tests manuels sont fastidieux et moins répétables. La collecte des résultats peut être ponctuelle et des erreurs peuvent être manquées malgré des résultats «corrects». Il est difficile de suivre la couverture du code requis, qui varie en fonction de la norme de sécurité et de la criticité du projet. L'automatisation des tests rend non seulement les tests beaucoup moins fastidieux et répétables, mais les capacités de reporting des outils de test avancés créent des informations de gestion importantes sur l'état du projet. L'ajout d'une analyse dynamique, qui analyse le code lorsqu'il est en cours d'exécution (pour détecter des erreurs d'exécution délicates), et d'une analyse statique, qui analyse le code avant son exécution, augmente considérablement la capacité de détection des bogues des outils de test.
Automatisation de la conformité aux normes de codage: De nombreux projets critiques pour la sécurité nécessitent des normes de code source. MISRA, par exemple, est courante dans les logiciels automobiles, mais a été acceptée dans d'autres industries. Certaines normes exigent que le code soit conforme à une norme d'entreprise qui répond à certains objectifs. Dans chaque cas, l'application manuelle de la conformité au codage est fastidieuse et sujette aux erreurs. Les outils d'analyse statique sont idéaux pour assurer la conformité et les outils avancés vont plus loin en détectant les erreurs qui vont au-delà des violations de format.
Automatisation de la documentation de certification: Une grande partie de la charge de travail liée à l'obtention des certifications de sécurité des logiciels consiste à documenter les processus, la validation et la vérification. L'automatisation des tests réduit considérablement le coût de la documentation des résultats des tests et de l'analyse de la couverture.
Accélération de la réutilisation de logiciels tiers: Une stratégie clé pour augmenter la productivité consiste à réutiliser les logiciels. Idéalement, des composants déjà certifiés peuvent être utilisés pour réduire les coûts de développement de ces sous-unités. Les projets doivent utiliser le logiciel COTS (commercial sur étagère) et éventuellement le code source ouvert et autre. L'automatisation de l'évaluation de ce logiciel avec des outils d'analyse statique et dynamique diminue le risque d'utilisation de ces composants.
Amélioration de la qualité, de la sûreté et de la sécurité: Même des schémas de test stricts peuvent manquer des erreurs critiques. La couverture du code à elle seule ne suffit pas pour garantir un bon comportement en cas d'attaques de sécurité ou de code multithread, par exemple. Les outils d'analyse statique peuvent détecter des erreurs dans le code source sans exécuter de test spécifique et peuvent trouver des bogues tels que des vulnérabilités de sécurité difficiles à découvrir lors des tests unitaires ou du système. Les outils d'analyse dynamique peuvent détecter des erreurs dans l'exécution du code pendant les tests qui pourraient se refléter dans les résultats des tests (par exemple, une fuite de mémoire lente). Les tests de fuzzing et de pénétration pendant les tests du système peuvent détecter des bogues manqués dans des conditions de fonctionnement normales. Dans l'ensemble, les défauts et vulnérabilités de sécurité supplémentaires découverts par les outils de pointe contribuent à réduire les coûts, les risques et bon nombre des quelque 20% de bogues qui en font la production.
Quel est l'effet du décalage vers la gauche?
Il est clair que quelque chose doit être fait pour résoudre les problèmes si clairement indiqués à la figure 2. Trop de défauts sont introduits et restent non détectés au début du cycle de vie, et trop sont laissés dans le produit lors de sa fabrication et entre les mains des clients (ou dans des avions ou des voitures selon le cas). L'adoption de nouvelles méthodes de développement, la réutilisation des composants, l'exploitation du COTS et de l'open source, et l'automatisation des outils sont autant d'étapes clés pour améliorer la productivité du développement.
En supposant un processus de développement utilisant des outils de pointe, où plus de défauts sont détectés et corrigés plus tôt dans le cycle de vie, les tests unitaires sont extrêmement efficaces, aidant moins de bogues à passer en production. Dans la figure 4, un exemple hypothétique montre le changement de détection des défauts au cours du cycle de vie - où l'essentiel de la détection et de la correction des défauts est déplacé vers la gauche, plus tôt dans le cycle de vie.
Figure 4: Un graphique montrant un processus de développement amélioré qui déplace la détection des bogues et des vulnérabilités de sécurité plus tôt dans le cycle de vie.
Nous savons d'après la figure 3 ci-dessus que les coûts augmentent considérablement à chaque phase de développement. La figure 5 ci-dessous montre la comparaison des coûts de correction des défauts dans la méthode traditionnelle par rapport à la nouvelle méthode améliorée illustrée à la figure 4. Trouver et corriger les bogues plus tôt, sans surprise, coûte moins cher que de les corriger plus tard. Dans la situation présentée ici, la différence de coût globale est d'environ 40% en faveur de l'approche de décalage à gauche.
Figure 5: Un graphique montrant le coût relatif pour corriger les bogues dans l'approche traditionnelle par rapport à l'approche de décalage vers la gauche. Même avec le même nombre de défauts totaux, la détection précoce réduit considérablement les coûts.
L'importance des chaînes porte-outils certifiées et de l'aide à la qualification
L'utilisation d'outils automatisés dans des projets critiques pour la sécurité nécessitait une confiance dans les outils eux-mêmes. Il incombe au fabricant du produit de s'assurer que les processus et les outils utilisés pour créer le logiciel répondent aux exigences de la norme. Les vendeurs d'outils peuvent y contribuer en faisant certifier les outils par des organismes de normalisation de sécurité avant la vente aux fabricants ou, dans les cas où une telle pré-certification n'est pas possible, fournir une assistance à la qualification. Ils peuvent ensuite utiliser les preuves de certification du fournisseur de l'outil dans leur propre soumission pour la certification et réduire les efforts nécessaires. (Par exemple, Parasoft C / C ++test a été certifié par TÜV SÜD pour être qualifié pour le développement de logiciels liés à la sécurité conformément aux normes CEI 61508 et ISO 26262.)
Dans certaines normes de sécurité logicielles, telles que DO-178B et DO-178C, la certification est effectuée au niveau du système et les outils et logiciels individuels ne sont pas certifiés indépendamment. Dans ces cas, le fournisseur d'outils fournit des kits de qualification et une assistance en termes de documentation et de services professionnels, réduisant considérablement les coûts et les efforts nécessaires pour qualifier les outils à utiliser sur le projet.
Conclusion
Les logiciels critiques pour la sécurité connaissent certainement une crise des coûts. Les nouveaux grands projets critiques pour la sécurité deviennent trop coûteux à développer, au point qu'ils peuvent ne pas être rentables. De nouvelles méthodes sont nécessaires pour développer des logiciels critiques pour la sécurité, et cet effort doit réduire le nombre d'erreurs trouvées tardivement dans le cycle de vie du développement logiciel. Déplacer la détection et la correction des défauts et des vulnérabilités de sécurité aussi tôt que possible dans le cycle de vie réduit considérablement les coûts. L'automatisation des tests joue un rôle dans l'amélioration de l'efficacité et des résultats des tests et constitue une partie importante d'une nouvelle approche du développement de logiciels critiques pour la sécurité.
« MISRA », « MISRA C » et le logo triangulaire sont des marques déposées de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Tous droits réservés.