Rejoignez-nous le 30 avril : dévoilement de Parasoft C/C++test CT pour l'excellence en matière de tests continus et de conformité | En savoir plus

Processus de développement de logiciels pour les systèmes critiques pour la sécurité

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
13 septembre 2023
7 min lire

Examiner les meilleures pratiques pour le développement de logiciels critiques pour la sécurité. Découvrez les facteurs importants, les technologies avancées et les tendances du secteur pour développer des systèmes sûrs, sécurisés, fiables et conformes.

Lorsqu'il s'agit de concevoir et de programmer des logiciels pour des choses comme les voitures à conduite autonome, vous devez considérer la sécurité comme une priorité absolue. Cela s’applique à bien plus que des idées futuristes en matière de transport. En fait, cela s’applique à de nombreux articles que des millions de personnes utilisent chaque jour. Avions et lignes ferroviaires. Un appareil IRM. Le clignotant ou l'essuie-glace de votre propre voiture.

Tous ces systèmes complexes (et bien d’autres encore) dépendent de logiciels critiques pour la sécurité développés en tenant compte d’autant de scénarios de défaillance que possible pour en atténuer les conséquences. Mais qu’est-ce qui distingue ce type de développement des autres ? Les défis, les meilleures pratiques et les normes de sécurité impliqués impliquent des enjeux bien plus importants et des frictions avec les méthodologies modernes. Alors, quel est le problème avec le développement de logiciels critiques pour la sécurité ?

Qu’est-ce qu’un logiciel critique pour la sécurité ?

Un logiciel considéré comme critique pour la sécurité est généralement une application logicielle intégrée spécialement conçue pour les systèmes pour lesquels, en cas de panne, des mesures existent pour éviter les blessures et les pertes de vies. Cela signifie que tout logiciel de ce type nécessite une vérification, une validation et une fiabilité intégrées à chaque étape du cycle de vie de développement.

Quels sont les exemples de dispositifs critiques pour la sécurité ?

Un exemple de système critique pour la sécurité serait un stimulateur cardiaque ou d’autres dispositifs de santé et médicaux. D'autres types incluent des fonctionnalités avancées de sécurité automobile comme une caméra de recul ou des systèmes d'assistance de voie. Des exemples plus complexes sont les commandes de vol des avions et les systèmes nucléaires.

En quoi le développement de logiciels critiques pour la sécurité est-il différent ?

Les systèmes critiques pour la sécurité nécessitent que tout logiciel associé respecte des normes de sécurité rigides pendant le développement. Les normes de sécurité sont également régulièrement mises à jour pour résoudre les problèmes et les vulnérabilités à mesure qu’ils surviennent. Cela nécessite que les développeurs de logiciels de systèmes critiques pour la sécurité se tiennent au courant et restent agiles en matière de développement.

De plus, l’objectif de ce type de développement n’est pas la vitesse ni même les fonctionnalités, mais la sécurité. Au cours du cycle de vie, les développeurs doivent envisager autant de scénarios de défaillance réels que possible, en plus de respecter les normes de sécurité de leur secteur. Cela nécessite également des tests, une validation et une vérification robustes.

Développement de logiciels dans les industries ayant des exigences de sécurité élevées

Si des industries telles que celles des dispositifs médicaux et des systèmes nucléaires peuvent nous venir à l’esprit, bien d’autres encore utilisent des normes de sécurité rigoureuses. Les industries, où les pannes peuvent entraîner des pertes catastrophiques, doivent s'appuyer sur des normes de sécurité qui facilitent l'utilisation des logiciels les plus sûrs possibles. Cela inclut bien sûr l’automobile et l’aérospatiale. Cependant, cela s’applique également à des secteurs tels que le rail et même à la cybersécurité ou aux systèmes financiers.

Quels sont les secteurs dans lesquels les logiciels critiques pour la sécurité sont largement utilisés ?

Comme mentionné précédemment, les industries automobile et aérospatiale dépendent fortement de systèmes critiques pour la sécurité pour fonctionner. Des éléments tels que les freins ABS, le conducteur autonome en constante évolution et même de simples éclairages jouent tous un rôle dans la sécurité des véhicules en termes de développement logiciel. Dans l'aérospatiale, les développeurs doivent tenir compte des normes de sécurité applicables à une variété de systèmes, du recyclage de l'oxygène et de l'air à la combustion des moteurs et à la communication télémétrique.

Mais d’autres secteurs ont également largement recours à des exigences de sécurité élevées, comme les soins de santé, les transports, l’énergie nucléaire et la défense. Un échec pourrait entraîner la perte de vies humaines, des dommages matériels ou des dommages environnementaux, même à petite échelle. C'est inacceptable lorsqu'il s'agit de développement de logiciels dans ces secteurs.

Quelles sont les normes et réglementations régissant le développement de logiciels critiques pour la sécurité ?

L'Organisation internationale de normalisation (ISO), créée en 1947, établit des normes de sécurité dans de nombreux secteurs avec la contribution de plus de 160 membres de nombreux pays. Aux côtés d'autres organismes, l'ISO travaille constamment à développer et à réévaluer ses normes de sécurité sur des milliers de systèmes dans de nombreux secteurs.

Chaque secteur dispose de ses propres organismes qui exercent la surveillance et la réglementation des appareils et logiciels critiques pour la sécurité. Par exemple, dans l’industrie automobile, il existe la norme internationale ISO 26262 pour sécurité fonctionnelle et la norme ISO/SAE 21434 pour la sécurité automobile. Pour les dispositifs médicaux, vous disposez des normes CEI 62304 et CEI 62443 pour la sécurité. Il existe également des normes de codage telles que MISRA et AUTOSAR C++ 14, connues pour être appliquées à diverses autres industries telles que l'aérospatiale, l'armée, le ferroviaire et le médical. D'autres normes de sécurité pour divers types d'applications incluent CERT, CWE et OWASP.

Essentiellement, il existe des normes de référence distinctes que les développeurs doivent suivre au sein de chaque secteur – et certaines sont intersectorielles. Ces normes sont constamment mises à jour en fonction des dernières technologies et des moyens d'exploiter cette technologie.

Meilleures pratiques pour le développement de logiciels dans les systèmes critiques pour la sécurité

Il existe cinq piliers essentiels pour les exigences en matière de développement de logiciels critiques pour la sécurité.

  1. Non ambigu. Dans la documentation comme dans le code lui-même, il doit y avoir un accord sur la signification des exigences, sans interprétation ni conjecture.
  2. Traçable. Les programmeurs et les gestionnaires doivent être capables de retracer les exigences de haut en bas lors de la révision du code ou pendant le processus de test.
  3. Répétable. Faire en sorte que le programme et le logiciel renvoient les résultats attendus est le strict minimum. Les appareils doivent fonctionner selon les exigences, tout en renvoyant également les données et les sorties attendues lors de tout type de panne.
  4. Cohérent. Il ne devrait pas y avoir de caractéristiques d'exigences contradictoires en matière de calendrier, de performances, de priorisation, etc. La terminologie est également uniforme et cohérente dans la documentation, pour éviter toute confusion.
  5. Testable. Des programmes critiques pour la sécurité bien développés répondront aux exigences de tous les types de tests.

De plus, il existe cinq autres bonnes pratiques à garder à l'esprit lors du développement de logiciels pour des systèmes critiques pour la sécurité.

  1. Maintenir des enregistrements précis et une trace historique ou une traçabilité documentée.
  2. Former les programmeurs aux meilleures pratiques, à la méthodologie et à l'importance de la documentation.
  3. Travaillez avec les normes de codage les plus appropriées et les meilleures pour votre projet.
  4. Réduisez la complexité du code, car le code complexe dans des systèmes complexes est difficile à tester, ce qui pourrait entraîner davantage d'erreurs.
  5. Développez le logiciel en pensant à l’utilisateur final.

Quelles sont les conséquences potentielles des erreurs dans le fonctionnement d’un logiciel critique pour la sécurité ?

Les conséquences des erreurs critiques pour la sécurité ne sont pas aussi simples qu’une ampoule qui ne fonctionne pas quand elle le devrait. Les erreurs peuvent aller d’une batterie trop chaude pendant le fonctionnement à quelque chose comme une panne catastrophique du moteur d’un avion. Il peut également y avoir un bilan humain, des dommages matériels et environnementaux, des pertes financières, voire des menaces pour la sécurité nationale.

C'est pourquoi suivre les meilleures pratiques ci-dessus n'est pas seulement conseillé, mais obligatoire. L’obtention de l’approbation réglementaire n’est pas une situation où « assez bien » fonctionnera.

Facteurs à garder à l’esprit lors du développement de logiciels pour les systèmes critiques pour la sécurité

N'oubliez pas : l'objectif du développement de logiciels critiques pour la sécurité n'est pas la vitesse ou les fonctionnalités, mais la sécurité. Il s’agit de l’aspect le plus important à retenir lors du codage des normes de sécurité. L’échec du développement de logiciels critiques pour la sécurité dans ces systèmes peut conduire à des choses comme le Mars Climate Orbiter de la NASA qui entre trop rapidement et trop bas dans l’atmosphère martienne, provoquant sa destruction. Des problèmes comme celui-ci se résument à plusieurs facteurs importants que les équipes doivent garder à l'esprit pendant le cycle de vie du développement afin d'atténuer les pannes logicielles critiques pour la sécurité.

En plus des respecter les exigences de sécurité et les méthodes formelles, gardez ces choses à l'esprit :

  • Tenez compte de l'architecture logicielle, car une bonne conception peut faciliter la mise à niveau.
  • Les problèmes de sécurité, l’atténuation des dangers et le respect des réglementations rendront votre projet plus complexe.
  • Une conception de sécurité signifie que votre appareil et/ou logiciel peut tomber en panne de manière sûre ou attendue et prévisible.
  • Seul un niveau spécifique de danger et de défaillance est autorisé.
  • Le développement de logiciels critiques pour la sécurité peut être effectué à l'aide de diverses méthodologies de cycle de vie de développement telles que Spiral, Waterfall, Agile et en tandem.
  • Allez plus loin que vous ne le pensez nécessaire en termes de tests de votre logiciel, puis continuez.
  • Des données pratiques sur le terrain sont nécessaires pour améliorer les logiciels système critiques pour la sécurité.

Favoriser le développement de logiciels critiques pour la sécurité grâce à des outils et technologies avancés

La certification est un piège majeur que les développeurs peuvent éviter lorsqu'il s'agit d'outils de développement de logiciels critiques pour la sécurité. L’utilisation d’un outil certifié par l’organisation appropriée peut offrir une tranquillité d’esprit. Les outils certifiés permettent d’atteindre la conformité de manière fiable. Cependant, les logiciels conformes nécessitent des méthodologies de développement adaptées pour éviter des délais et des coûts de développement prolongés. C'est également là que état d'esprit de gauche entre en scène.

Un bon exemple de méthodologies Agile est la coexistence de DevOps CI/CD et Scrum en parallèle, supprimant les silos, favorisant la communication, permettant la productivité et automatisant la vérification et la validation.

Maintenir la qualité et l’abordabilité sont devenus des priorités et des défis uniques pour de nombreuses équipes de développement. Un exemple est l’automatisation des tests logiciels intégrée à un déploiement DevOps CI/CD automobile. Les pipelines CI/CD offrent des tests continus qui peuvent réduire les coûts et les délais du projet. Même en respectant des normes de sécurité rigoureuses telles que la norme ISO 26262, les tests automatisés apportent une couverture de code, une sécurité et des données exploitables supplémentaires.

Doter vos développeurs des meilleurs outils pour leur travail ne peut que rendre leur travail plus simple. Ceci, à son tour, peut conduire à davantage documentation simplifiée, la cohérence et la livraison de votre produit dans les délais et dans les limites du budget, voire même en avance et en dessous du budget.

Le rôle de Parasoft dans le processus de développement de logiciels pour les systèmes critiques pour la sécurité

Parasoft propose une variété de solutions dans de nombreux secteurs lorsqu'il s'agit de développer des logiciels critiques en matière de sûreté et de sécurité. Ces systèmes complexes nécessitent une documentation cohérente et sans ambiguïté, des données de test exploitables et des outils qui responsabilisent les développeurs.

Les tests unitaires, les tests basés sur les exigences, les tests de régression, les tests de sécurité et les tests d'intégration doivent tous inclure la traçabilité et la répétabilité des exigences. Automatisé et certifié TÜV SÜD des solutions comme le test C/C++ peut réduire la charge de travail des développeurs et des testeurs tout en améliorant la qualité du code, la couverture et la qualité globale du produit.

Nos outils prennent directement en charge de nombreuses normes de sécurité, notamment :

  • ISO 26262
  • IEC 62304
  • DO-178C
  • IEC 61508
  • UL 2900
  • DISA TSA STIG
  • OWASP
  • MISRA
  • AUTOSAR
  • CERT
  • CWE
  • PCI DSS

Des outils tels que C/C++test permettent aux équipes de détecter les défauts plus tôt, d'automatiser la conformité aux normes de l'industrie et de tester intelligemment. Un excellent exemple concret de la façon dont les solutions Parasoft s'intègrent dans des systèmes critiques pour la sécurité est la façon dont un entrepreneur du ministère américain de la Défense dans l'industrie de l'aérospatiale et de la défense a exploité un pipeline DevOps pour améliorer la couverture du code, la rigueur des tests et la durabilité.

Comment les logiciels critiques pour la sécurité évoluent-ils en réponse aux tendances du secteur ?

Comme pour toute chose, la tendance visible que tout le monde peut constater lors du développement de systèmes critiques pour la sécurité est la hausse des coûts d’exploitation. De plus, la complexité ne cesse de croître. Cela signifie que les développeurs devront être plus diligents avec la documentation et que les managers devront être disposés à former leurs équipes selon leurs besoins en ce qui concerne les normes de sécurité, et ce de manière régulière pour garantir des connaissances à jour.

Cependant, lorsqu’il s’agit de savoir comment le logiciel lui-même devra répondre aux tendances du secteur, les eaux deviennent un peu plus troubles. Nous pouvons remercier l’Internet des objets, l’apprentissage automatique et l’IA pour cela, de manière à la fois bénéfique et fastidieuse. S’il est utile de disposer de plus d’éléments pour pouvoir se parler ou même s’adapter selon les besoins à différents scénarios, cela peut conduire à des vulnérabilités de sécurité supplémentaires. La planification de l’exploitation inévitable de ces nouveaux vecteurs de menace rend les systèmes déjà complexes du génie logiciel encore plus complexes. L’automatisation des tests a commencé à s’étendre à l’IA et à l’apprentissage automatique pour combler cette lacune avant qu’elle ne devienne trop importante.

Conclusion

Edsger W. Dijkstra nous a donné la clé du développement logiciel moderne avec cette citation :

"Ceux qui veulent un logiciel vraiment fiable découvriront qu'ils doivent d'abord trouver le moyen d'éviter la majorité des bugs..."

Après tout, il est plus facile de prévenir les problèmes dès le départ que de lutter contre les incendies dès leur apparition. Cet aspect de la méthodologie Agile change la donne en matière de développement de logiciels critiques pour la sécurité. Les bons outils peuvent rendre le processus encore plus rationalisé.

Construire une architecture de code solide, maintenir un langage cohérent et systématique pour la documentation et effectuer des tests continus et appropriés peuvent aider votre équipe à respecter les normes de conformité.

Le guide essentiel de la génération automatisée de tests pour les systèmes embarqués