Accélérer le développement logiciel de manière fiable grâce à l'IA

L'intelligence artificielle (IA) peut constituer un outil puissant pour le développement de systèmes sûrs et sécurisés, en particulier ceux reposant sur des puces-systèmes (SoC) multicœurs. Toutefois, compte tenu de la complexité croissante des logiciels embarqués et de la pression pour livrer et déployer les logiciels plus rapidement, une utilisation inappropriée de l'IA peut accroître les risques liés à la sûreté et à la sécurité. Tasking examine ici comment l'IA peut accélérer le développement logiciel tout en garantissant la confiance des développeurs.

Auteur : Jay Thomas

Directeur principal de l'ingénierie terrain

Tasking

 

 

Lorsque l'IA est utilisée pour écrire du code ou créer des tests, on travaille avec une “boîte noire” dont les mécanismes internes restent opaques. Prenons l'exemple de la consigne suivante : « Réécris ce code pour qu'il s'exécute plus vite. »

Une telle demande, même assortie de contraintes détaillées, comporte un risque : celui d'obtenir le résultat escompté tout en passant totalement à côté de l'objectif réel. Par exemple, du code critique pourrait être supprimé pour accélérer l'exécution.

L'IA étant un outil automatisant une tâche au sein d'un processus de sûreté, une intervention humaine est alors nécessaire pour vérifier l'exactitude du résultat produit. De même, l'IA peut aider à définir des tests pour vérifier et valider le code. Cependant, la question se pose de savoir si un test généré offre une couverture suffisante ou s'il est même pertinent.

L'humain dans la boucle

Les développeurs doivent donc s'assurer que les tests générés par l'IA sollicitent pleinement le code et respectent correctement les exigences. Là encore, la présence d'un humain dans la boucle reste indispensable. Les tests fondés sur les exigences - y compris ceux portant sur les exigences de sûreté et de sécurité - sont fondamentaux pour garantir la sûreté et la sécurité, ainsi que pour obtenir la certification.

Par conséquent, la traçabilité des exigences est essentielle à la mise en œuvre du code, à la création des tests et au suivi (rapports et analyses) concernant le code ou les tests manquants, le code ou les tests superflus, ainsi que les tests non réalisés ou devant être répétés suite à une modification.

Le défi réside dans le fait que, sans cadre de processus ni garde-fous appropriés, les développeurs risquent de passer tellement de temps à examiner et corriger le travail de l'IA qu'ils finissent par réduire leur efficacité au lieu de l'améliorer. Cela peut également éroder la confiance globale dans le système.

A terme, les développeurs pourraient donc rencontrer des difficultés pour faire certifier leurs conceptions selon des normes industrielles strictes.

Un cadre de processus fiable

L'essentiel est de ne pas se retrouver dans une situation où l'on est obligé de faire aveuglément confiance à l'IA. Cette approche peut être réalisé en travaillant au sein d'un cadre de processus fiable qui encadre les activités fondées sur l'IA.

Plutôt que de chercher à remplacer les développeurs par l'IA, la stratégie consiste à utiliser l'IA pour démultiplier leurs capacités en effectuant des tâches clairement définies, de manière transparente, traçable et vérifiable. Pour les applications critiques en matière de sécurité, l'IA doit se limiter à assister l'exécution de tâches dans un cadre où la portée de son impact est parfaitement maîtrisée.

En d'autres termes, ce cadre de processus comporte trois volets 

- Définir clairement les processus auxquels l'IA participe et les tâches qu'elle doit accomplir

- Prévoir des garde-fous pour empêcher l'IA de sortir du périmètre de ces tâches

- S'appuyer sur la supervision et le discernement humains pour valider le travail de l'IA.

Autrement dit, un humain est responsable de la conception du système et il lui incombe d'évaluer la contribution de l'IA et de se l'approprier.

Prenons l'exemple de l'évaluation du temps d'exécution dans le pire des cas (WCET, Worst Case Execution Time) pour un système multicœur. Pour rapple, le WCET joue un rôle crucial pour vérifier que le système est déterministe et respecte toutes ses échéances critiques en temps réel.

L'un des défis liés à l'évaluation du WCET sur des SoC multicœurs réside dans la complexité engendrée par le couplage temporel et les interférences. Même si les cœurs et les tâches qu'ils exécutent sont indépendants - c'est-à-dire sans partage de données ni couplage de contrôle - des conflits d'accès à des ressources partagées - comme la mémoire cache - peuvent survenir et nuire aux performances d'exécution ainsi qu'au déterminisme.

Imaginons par exemple une tâche A ayant une faible empreinte mémoire cache et une tâche B en ayant une importante. Exécutée seule, la tâche A offre d'excellentes performances car son code n'entraîne pas de vidage du cache. En revanche, si la tâche B s'exécute simultanément sur le même SoC, son empreinte cache élevée provoque des vidages fréquents du cache.

Ainsi, bien que les tâches A et B soient par ailleurs indépendantes, la tâche B peut engendrer une variabilité considérable des performances de la tâche A.

Mais dans ce cadre, grâce à un cadre de processus intégrant l'IA, les développeurs peuvent accélérer l'évaluation du WCET en toute confiance.

Par exemple, la chaîne d'outils Tasking qui regroupe des fonctionnalités de compilation, de débogage et de test permet d'automatiser le passage en revue de différentes options de compilation et de varier l'affectation des tâches aux cœurs, afin d'évaluer l'impact du couplage temporel sur le WCET.

Le débogueur peut être automatisé pour capturer des données de performance spécifiques, lesquelles sont ensuite transmises automatiquement aux outils de test pour évaluation.

A ce niveau, un agent d'IA peut contribuer à automatiser bon nombre de ces tâches manuelles.

En fait, l'IA agentique ne consiste pas tant à faire produire des résultats par l'IA qu'à définir des processus sur lesquels l'agent d'IA peut itérer. Cette approche s'intègre mieux aux flux de travail de certification, surtout si l'IA peut solliciter l'aide d'un humain en cas de besoin.

Par exemple, si une combinaison spécifique entraîne une erreur, l'IA peut évaluer le problème et y remédier pour reprendre les tests sans interruption, ou bien demander une intervention humaine.

Les agents d'IA peuvent également suggérer des cas de test qu'une personne aurait pu négliger ou ne pas envisager. Il convient de noter ici que l'IA ne fournit pas la totalité des combinaisons suggérées : elle complète plutôt les choix du développeur afin de déceler d'éventuels angles morts. En d'autres termes, on voit ici que l'IA doit s'appuiyer sur l'expertise du développeur.

 

 

L'automatisation assistée par l'IA accroît l'efficacité et la rapidité des tests

 

Au-delà, l'utilisation d'une chaîne d'outils intégrée simplifie la coordination de l'IA entre les différents outils. Les développeurs peuvent également étendre les tests au cloud. Résultat : ils sont en mesure d'évaluer davantage de combinaisons parmi un éventail de possibilités plus large que ce qu'ils pourraient faire seuls, sans l'aide de l'IA.

Des tests plus exhaustifs renforcent la précision ainsi que la confiance dans la sûreté, la sécurité et la fiabilité du système. A ce niveau, la traçabilité des exigences est un élément essentiel du modèle de vérification et de validation utilisé pour développer des logiciels sûrs et sécurisés.

Une certification plus rapide

Le modèle de vérification et de validation utilisé pour le développement de logiciels sûrs et sécurisés illustre la manière dont les tests sont planifiés parallèlement au développement, plutôt que d'être effectués uniquement à la fin du projet. La traçabilité des exigences joue un rôle clé dans ce processus, car elle permet de vérifier comment les exigences ont été mises en œuvre à chaque étape du développement.

Cela s'applique non seulement à la vérification et à la validation, mais aussi à d'autres types d'analyses, notamment l'analyse des vulnérabilités ainsi que l'analyse des flux de données et de contrôle. L'utilisation de l'IA d'une manière qui complique la traçabilité rend, par ricochet, la vérification plus complexe, ce qui réduit la fiabilité et rend la certification plus difficile et plus coûteuse.

En soi, l'IA n'est pas directement certifiable au sens traditionnel des systèmes critiques pour la sécurité, car les implémentations actuelles sont probabilistes, difficiles à délimiter entièrement et manquent souvent de la transparence nécessaire pour instaurer la confiance dans la manière dont les résultats sont générés.

Toutefois, lorsque l'IA est utilisée dans le cadre d'un processus clairement défini et que ses résultats sont examinés, encadrés et gérés par des outils qualifiés pour la certification, ces résultats peuvent devenir des éléments certifiables.

Dans ce modèle, l'IA n'est pas l'autorité de confiance. C'est la chaîne d'outils qualifiée et le processus d'ingénierie défini qui constituent le périmètre de confiance. Le code généré par l'IA, les exigences dérivées, les cas de test, les résultats d'analyse et autres artefacts peuvent être acceptés s'ils sont capturés, examinés, tracés, vérifiés et contrôlés à l'aide d'outils certifiés ou certifiables.

Les organisations peuvent ainsi tirer parti du développement assisté par l'IA tout en conservant la traçabilité, les preuves et la rigueur de vérification requises pour la certification. Un cadre de processus assisté par l'IA accélère non seulement la conception tout au long du cycle de vie du développement logiciel, mais facilite également la vérification et la validation, et permet une certification plus rapide grâce à une traçabilité complète des exigences.

En définissant clairement le rôle de l'IA, en mettant en place des garde-fous et en comprenant l'importance de la supervision humaine, les équipes de développement peuvent bénéficier de l'automatisation par l'IA de nombreuses tâches manuelles, permettant ainsi aux développeurs de produire un code de meilleure qualité plus rapidement et avec moins de risques.