Applications embarquées de traitement de données pour un calculateur de réacteur nucléaire
Contexte
Conception, évolution et maintenance de plusieurs applications logicielles destinées au traitement et à l’exploitation des données acquises par un calculateur de réacteur nucléaire. Ces applications s’inscrivaient dans un système embarqué développé et maintenu sur plusieurs générations de matériel par le bureau d’études Hardware du service MCO (Maintien en Conditions Opérationnelles).
Au sein du bureau d’études Software, dans le cadre des LPM de 2018, j’ai participé à la modernisation de l’architecture logicielle, le renforcement de la sécurité du système, l’évolution de l’interface homme-machine et la migration progressive des applications historiques. Le projet se situait à l’interface entre logiciel applicatif, système Linux, drivers, communications inter-processus et matériel embarqué, avec des contraintes fortes liées à la pérennité et à la maintenabilité d’un système industriel existant.
Le projet était mené selon un cycle en V imposé par le client. J’étais chargé de la rédaction des conceptions détaillées, appuyées sur les commentaires du code existant ainsi que sur les graphes d’appels et d’héritage générés par Doxygen. La complexité et la sensibilité du système ne permettent pas d’en détailler davantage l’architecture ici, mais ses étapes essentielles étaient : acquisition (électronique), passerelle entre l’électronique et des langages plus évolués (assembleur propriétaire), traitement (C++) et affichage (QML) — mon intervention portant sur ces deux dernières étapes.
Démarche
Le système était constitué de plusieurs briques logicielles communiquant avec le calculateur, les périphériques matériels et les différents services du système d’exploitation, réparties sur plusieurs niveaux de la pile logicielle : applications métier (traitement, exploitation et visualisation des données acquises), interface graphique Qt (notamment sur écran tactile), services système, communication inter-processus via D-Bus, drivers d’accès aux équipements matériels, et système d’exploitation Linux (configuration et durcissement de la plateforme).
Cette architecture nécessitait une collaboration permanente avec le BE Hardware, notamment lors des évolutions de la carte électronique, des périphériques ou des interfaces matérielles — un développement multi- couches, du driver jusqu’à l’application graphique, permettant d’intervenir sur l’ensemble de la chaîne logicielle tout en préservant un patrimoine logiciel et matériel important.
Pour faciliter les développements futurs, j’ai travaillé sur la simulation de l’étape d’acquisition, pendant qu’un autre développeur de l’équipe construisait un simulateur de l’étape de préacquisition — de quoi découpler les évolutions applicatives des contraintes du matériel réel.
Solution
Une part importante du projet consistait à faire évoluer des applications historiques développées en Java vers une architecture C++/Qt : analyse et compréhension du comportement des applications existantes, reprise des fonctionnalités en C++, conception des interfaces graphiques en QML, intégration avec les services système et les communications D-Bus et les drivers, validation du comportement de la nouvelle implémentation par rapport à l’existant, et maintenance des deux générations d’applications pendant la période de transition.
Dans le cadre des évolutions consécutives à la LPM de 2018, le système a fait l’objet d’un renforcement de ses mécanismes de sécurité : chiffrement des communications entre systèmes, durcissement du système d’exploitation avec adaptation de la configuration de la plateforme aux nouvelles exigences de sécurité, prise en compte de ces contraintes dans les applications et les communications inter-processus, et adaptation des composants existants pour rester compatibles avec la nouvelle architecture sécurisée.
Le déploiement des applications s’appuyait sur Puppet. J’ai participé à la mise en place de Squish pour Qt au sein d’environnements Docker de pré-production, afin d’automatiser des processus lourds de validation et d’intégration allant au-delà des seuls tests unitaires. Le réseau du site restant isolé, ces environnements étaient construits et validés sans connexion vers l’extérieur.
La fiabilité, la qualité du code et la sécurité étant des exigences fortes pour ce client, SonarQube a été intégré au cycle de développement pour analyser en continu la qualité et la sécurité du code produit.
Résultat
Cette position à l’interface entre les bureaux d’études Hardware et Software a permis d’intervenir sur une large partie de la chaîne technique, depuis l’accès bas niveau au matériel jusqu’aux applications C++/QML utilisées par les opérateurs, en passant par les drivers, les mécanismes de communication inter-processus et le système Linux. Le système a été modernisé (migration Java → C++/Qt, IHM tactile) et sécurisé (chiffrement des échanges, durcissement de l’OS) tout en restant en exploitation continue sur un système industriel critique dont le matériel et le logiciel évoluent conjointement au fil des générations. Le déploiement outillé (Puppet), les tests automatisés (Squish) et des environnements de pré-production reproductibles (Docker) ont fiabilisé ce cycle de modernisation, sans jamais déroger aux contraintes de réseau isolé propres à un site nucléaire. L’intégration de SonarQube au cycle de développement et la rédaction des conceptions détaillées, appuyées sur les graphes d’appels et d’héritage Doxygen, ont renforcé la qualité et la traçabilité attendues par le client dans le cadre du cycle en V.