SeaCoral : Automatisation avancée des tests pour le code C critique
Le Défi
Thales développe des logiciels embarqués critiques en C, où une couverture de code totale et des tests rigoureux sont essentiels pour répondre aux normes réglementaires. À mesure que les systèmes gagnent en complexité, les équipes s'appuient de plus en plus sur des composants open source qui n'ont pas suivi un cycle de développement strict en V et sont souvent peu couverts par les tests.
Écrire des tests manuellement pour ces composants est chronophage et source d'erreurs. Le défi consistait à créer un outil capable de générer automatiquement des tests unitaires complets tout en orchestrant plusieurs techniques de test avancées, par ailleurs difficiles à utiliser individuellement ou de manière combinée.
Pourquoi nous avoir choisis ?
Thales a sélectionné Titagone pour notre expertise prouvée en méthodes formelles, en tests automatisés et en vérification de systèmes critiques. La compréhension profonde de notre équipe en matière d'exécution symbolique, de model checking et d'analyse de programmes, alliée à notre expérience dans l'aéronautique et la défense, nous a rendus particulièrement qualifiés pour relever ce défi. Notre capacité à concevoir et implémenter une orchestration d'outils sophistiquée tout en garantissant la fiabilité pour les systèmes de sûreté critique a été essentielle pour cette mission.
Notre Solution : SeaCoral
En 2023, Thales s'est associé à Titagone pour développer SeaCoral, un outil logiciel qui génère automatiquement des tests unitaires pour le code C en orchestrant plusieurs techniques avancées : fuzzing, tests concoliques et model checking. L'objectif était de maximiser la couverture de code, de détecter le code inatteignable et d'identifier les erreurs d'exécution (RTE), tout en produisant des rapports intégrables dans les workflows de développement.
SeaCoral fonctionne en coordonnant plusieurs outils d'analyse, s'assurant qu'ils partagent des hypothèses cohérentes sur les entrées du programme, les structures de mémoire et les labels de couverture. Par exemple, il génère des harnais de test personnalisés pour KLEE, CBMC et libFuzzer, leur permettant de gérer des tableaux symboliques, de la mémoire dynamique et d'autres structures de données complexes. Des stratégies d'orchestration avancées priorisent d'abord les analyses dynamiques rapides, puis les outils de couverture statiques, et enfin la détection précise de code mort, optimisant à la fois la performance et l'exhaustivité.
Résultats
- Génération de tests automatisée maximisant la couverture de code.
- Orchestration du fuzzing, des tests concoliques et du model checking.
- Détection des erreurs d'exécution et du code inatteignable.
- Intégration dans les pipelines CI/CD pour des tests continus.
Impact
L'impact de SeaCoral est multiple. Dans les projets exigeant une couverture totale, l'outil complète les suites de tests existantes avec de nouveaux tests générés automatiquement. Dans les applications à cycle de vie long, ces tests protègent contre les régressions au fil des évolutions du code.
Dans les environnements d'intégration continue, SeaCoral s'exécute automatiquement à chaque build, mettant en lumière les erreurs d'exécution ou le code mort dès leur apparition. Au-delà de la sûreté, il aide également aux tests de sécurité en révélant des vulnérabilités potentielles via une exploration systématique des chemins d'exécution. Le projet SeaCoral combine recherche de pointe et ingénierie logicielle pratique pour aboutir à une plateforme robuste et extensible qui accélère la qualification logicielle.
Les outils derrière ce projet
Besoin de solutions de tests complètes ?
Discutons de la manière dont la génération de tests automatisés peut améliorer votre couverture de code et la fiabilité de vos logiciels.