Un nouveau cœur pour OVADO
Depuis plus de 10 ans le département MOP réalise des prestations de validation de données avec l’outil OVADO²® propriété de la RATP, qui est maintenu et distribué par Systerel.
Contexte¶
L’outil OVADO²® est principalement utilisé pour vérifier de manière automatisée des règles sur des données de paramétrage de systèmes ferroviaires. Après avoir réalisé un modèle des données et des règles à vérifier dans un langage formel (le langage B OVADO), on utilise l’outil sur un jeu de données à vérifier. Classiquement l’outil sert à vérifier que :
- les données du système respectent certaines règles de niveau système,
- les données des équipements ont été calculées correctement à partir des données système,
- les données des équipements respectent certaines contraintes de niveau équipement.
L’outil OVADO²® se compose de deux chaînes indépendantes lui permettant d’être utilisé dans un processus SIL4.
La chaîne 1 est développée en Java sous Eclipse. Son cœur est un moteur d’évaluation qui sait calculer à partir d’un jeu de données, la valeur d’une formule exprimée dans le langage B OVADO à la manière d’une calculatrice évoluée. Ses objectifs sont que le résultat soit correct et que le calcul soit suffisamment rapide.
Refonte¶
Après plus de 12 ans d’utilisation intensive de la part de la RATP et de Systerel, le retour d’expérience sur la chaîne 1 d’OVADO montre que celle-ci est rapide, mais qu’au cours des années, il a été détecté successivement plusieurs anomalies d’évaluation qui ont érodé la confiance dans l’outil. Systerel a alors réalisé une étude sur l’architecture de cette chaîne qui a conclu qu’elle comportait de très bons principes, mais aussi une erreur majeure et quelques mauvais principes qui ne pouvaient pas être corrigés de manière satisfaisante sans revoir toute la conception existante. Il a donc été décidé de refondre entièrement le cœur d’évaluation de la chaîne 1 en repartant de zéro et en reconstruisant une architecture tirant parti de ce retour d’expérience. C’est ainsi que début 2024 l’opération a pu avoir lieu, l’ancien cœur de la version 11 d’OVADO a été retiré et remplacé par un nouveau cœur version 12.
Si l’on avait confiance dans la nouvelle conception mise en œuvre, il restait à évaluer si elle produisait bien des résultats corrects dans un temps acceptable. Les tests, issus de l’existant ou nouvellement créés donnent tous des résultats corrects sur la version 12. Très peu d’erreurs de jeunesse ont été détectées et aucune ne remettait en cause la nouvelle conception.
L’objectif de rapidité semblait plus difficile à tenir, car le mécanisme lié à l’erreur fondamentale de l’ancienne conception permettait une mise en cache locale des expressions du langage B OVADO à faible coût améliorant la rapidité d’évaluation et, bien sûr, ce mécanisme erroné a été supprimé. Après une analyse amont, nous avions décidé de se passer dans un premier temps complètement du cache local et de suivre une approche pragmatique de mesure des performances sur plusieurs gros projets existants en itérant sur la conception afin de gagner petit à petit en rapidité.
En effet, l’élément principal concernant le temps d’évaluation n’est pas la mise en cache locale, mais la mise en cache des définitions du langage B OVADO. Les définitions sont des expressions nommées réutilisables qui offrent au langage un mécanisme de décomposition. Le concepteur sait généralement facilement dire si une définition doit être mise en cache ou non. Par exemple, le calcul du segment suivant un certain segment dans une certaine direction est clairement à mettre en cache, car c’est une information complexe à calculer, mais susceptible d’être réutilisée un grand nombre de fois. Ce mécanisme de mise en cache des définitions à l’aide d’un attribut fourni par l’utilisateur était déjà présent en version 11, il a donc été repris.
Cette stratégie s’est avérée gagnante. Au final, nous sommes restés sans cache local. Par contre, nous nous sommes rendu compte de l’intérêt d’améliorer l’efficacité de la manipulation des expressions de bas niveau (celles qui sont le résultat d’évaluation des formules du langage B OVADO). Ainsi, nous avons même réussi à obtenir sur les gros projets de test des temps d’évaluation bien inférieurs à la version précédente dans 99% des cas. En ce qui concerne le 1% de cas restants, nous avons établi qu’ils pouvaient être traités par une reprise du modèle B OVADO. Comme les codeurs le savent, si une donnée est réutilisée un grand nombre de fois, il est intéressant de la stocker dans une variable locale au lieu de la recalculer, c’est vrai en programmation classique, mais aussi en B.
Enfin un gros travail a également été réalisé pour rebrancher ce nouveau cœur sur le reste de l’infrastructure existante dans la chaîne 1. Cela a concerné les plugins de lecture des données d’entrées, la bibliothèque de fonctions réutilisables, le plugin de génération de données en sortie, le plugin de génération de contre-exemples et la « calculette d’évaluation » qui est tellement importante qu’elle est maintenant intégrée nativement à la version 12.
Désormais tous les nouveaux projets OVADO seront préférentiellement développés sur la base de ce nouveau cœur d’évaluation, comme c’est le cas pour le projet qui vient d’être lancé par Systerel de vérification des données du projet NExTEO (RER E) au titre du second regard pour SNCF Réseau.
Et pour la suite, que nous réserve OVADO²® ?¶
Après ces travaux de refonte, plusieurs évolutions pourraient être traitées prochainement. Voici quelques un des sujets identifiés :
- évolutions du langage B OVADO (amélioration du support des nombres
rationnels, ajout de structures utiles
LET
,WHILE
,choice
), - amélioration de l’expérience utilisateur (édition et navigation dans le modèle B OVADO, usage en ligne de commande mieux adapté aux besoins),
- et bien plus encore (couplage avec la solution Systerel d’affichage de plans de voies, …).