Les systèmes électroniques se sont multipliés ces dernières années. Leur présence est partout : dans la téléphonie, les systèmes embarqués tels que l’automobile ou l’avionique, mais aussi dans les systèmes industriels. On les retrouve également dans des produits auxquels on pense moins tels que les thermostats connectés et tous les objets dits intelligents (IoT, ou Internet des objets).

Chaque produit va être soumis à des contraintes plus ou moins fortes. Il peut s’agir de la sécurité des données, leur vulnérabilité face à des actes malveillants. Ou simplement leur résistance face à une erreur dans le développement embarqué. Alors si pour certains produits, les dysfonctionnements n’ont pas grand impact sur notre vie, d’autres peuvent au contraire avoir des conséquences catastrophiques.

Qu’est-ce qu’un système critique ?

Un bug dans le système de programmation du mode silencieux de votre téléphone, ça peut être gênant. En effet, pas très agréable de se faire réveiller à 5h du matin par la notification d’un message de votre collègue en Asie. Est-ce critique ? Non.

Un bug dans un équipement embarqué comme le système de navigation d’un avion commercial transportant 700 personnes avec le risque de se retrouver face au Mont Blanc plutôt qu’au-dessus ? Là, ça devient critique.

La gestion des risques liée à un système va donc dépendre de son niveau de criticité.

Les conséquences des vulnérabilités d’un système

Les systèmes critiques, ce sont au final tous ces logiciels ou puces qui peuvent engendrer de graves conséquences en cas de panne ou de dysfonctionnement. Les conséquences sont de plusieurs types :

  • il peut d’agir de pertes humaines, lors de dysfonctionnements dans les systèmes autonomes aéronautiques
  • ou alors de pertes financières, si par exemple les systèmes bancaires connaissent un bug 
  • ainsi que de pertes matérielles, telles que le crash d’une sonde spatiale qui n’atterrit pas au bon endroit 
  • et enfin de dégâts environnementaux.

Les exigences

Selon le type de pertes subies, le niveau de criticité du système sera différent. Une perte humaine aura ainsi une criticité supérieure à une perte matérielle. En fonction de cette criticité, il existe plusieurs niveaux d’exigence de sécurité par rapport à la tolérance aux incidents qui sont définies dans des normes.

Chaque domaine a ainsi développé sa propre norme, par exemple DO 254 pour l’aviation ou ISO 26262 pour l’automobile. Mais établir des systèmes qui répondent aux spécifications d’une norme n’est pas si simple que ça. En effet, un système seul peut être considéré comme à faible criticité, mais associé à d’autres, il aura un niveau plus élevé.

Dans la mise à la norme d’un produit, l’accent est donc souvent mis sur les aspects vérification et validation afin d’assurer la conformité entre le produit développé et le cahier des charges spécifiés.

Contraintes de vérification pour un système critique

Afin de s’assurer que les exigences définies dans les normes sont respectées, il faut donc réaliser un audit de sécurité et vérifier les systèmes critiques.


Cette vérification va inclure différentes étapes.

Documentation

Même si la documentation est présente dans tout type de projet, pour développer des systèmes critiques, elle s’avère essentielle et extrêmement détaillée. Basée sur les exigences du système, ce document va décrire tous les besoins, tous les cas d’utilisation du système, toutes les interactions entre les différents composants, avec une déclinaison des exigences à chaque niveau des systèmes en partant du plus haut niveau jusqu’aux tests.

Traçabilité

Travailler sur des systèmes critiques, cela implique l’implémentation d’une traçabilité. Elle permet de vérifier que toutes les exigences sont traitées lors de la conception de systèmes. Chaque spécification doit pouvoir être suivie dans sa mise en œuvre. Il s’agit de mettre en place une chaine complète de traçabilité. Pour cela, on utilise une méthodologie basé sur le cycle en V.

Le Cycle en V

Le cycle en V est un modèle qui permet d’un côté de décrire les différents besoins pour concevoir des systèmes en partant du niveau le plus haut et le plus général pour aller vers un niveau de détail de plus en plus fin. La finalité étant le codage de chaque bloc constituant le système.

De l’autre côté, dans la phase ascendante, le modèle décrit, en concordance avec les éléments précédents, les différents tests et étapes d’intégration du projet. On trouve au niveau le plus bas les tests unitaires. Une fois que ceux-ci sont passés, on réalise des tests d’intégration, puis de validation jusqu’à réaliser les opérations de maintenance.

Utilisation d’outils de développement et de vérification sûrs et développement de tests

Pour valider les exigences, on développe des bancs de tests. Ceux-ci permettent de réaliser des tests aléatoires ou dirigés. Ces tests doivent pousser les exigences dans leurs limites (tests des corner cases).

Parmi les outils les plus utilisés, UVM est une méthodologie standardisée pour la vérification qui apporte de l’automatisation au langage SystemVerilog.

Cette solution permet de développer des séquences de tests dans des simulateurs des grands fournisseurs d’EDA. Les checkers associés vont vérifier la validité des différentes propriétés du design. Les points de coverage vont quant à eux vérifier que toutes les exigences ont été couvertes.

 On introduit ensuite ces séquences de tests dans un framework (ensemble d’outils logiciels pour faire tourner les tests, les analyser et générer un rapport). Cela permet de piloter une analyse des risques de systèmes complexes de manière efficace.

Si les tests sont validés et les exigences couvertes, alors les exigences sont validées. Au final, la vérification va permettre de proposer des systèmes plus sécurisés.