Ouvrir ses codes et logiciels

Bonnes pratiques de développement

Introduction

La mise en œuvre de bonnes pratiques de développement, quelque soit la taille du code, est essentielle pour faciliter le travail d’un scientifique pendant toute la durée de vie du logiciel et aider à la pérennité du logiciel. Cela devient indispensable lorsque le code est développé de façon collaborative. Ces bonnes pratiques s’appuient en particulier sur des outils qui aident à :

  • gérer les différentes versions, les évolutions, le développement collaboratif à travers l’utilisation de système de gestion de version (e.g. git) et de forges logicielles (e.g. gitlab)
  • construire des documentations utilisateurs et développeurs adaptées grâce à des outils de génération de documentation
  • suivre les standards (selon le langage de programmation) de construction / compilation / empaquetage pour faciliter sa portabilité et son déploiement
  • utiliser le logiciel simplement à travers des services de notebooks.

Pour aller plus loin, le programme de badge des meilleures pratiques de la Open Source Security Foundation (OpenSSF) de la Fondation Linux indique une liste des bonnes pratiques de base pour les projets de logiciels libres et open source (FLOSS) .

Cycle de vie du logiciel

Le cycle de vie du logiciel est très proche du cycle de vie des données et présente des étapes similaires :

  • la planification, qui peut se traduire par la rédaction de plan de gestion de logiciel
  • la publication et l’ouverture des codes à la communauté (voir page Datacc correspondante)

L’image ci-dessous représente l’ensemble des étapes du cycle de vie des logiciels.

source : Violaine Louvet, CNRS

Les questions scientifiques orientent le développement qui est complètement intégré au processus de recherche. Les cycles et sous-cycles sont itératifs et imbriqués. Selon le contexte, certaines étapes peuvent ne pas exister ou être juste esquissées (par exemple les tests et l’intégration continue). La temporalité est très variable : le cycle peut s’interrompre sur une durée plus ou moins longue (code dormant, voir mort) et reprendre si l’intérêt scientifique renaît. Pour aller plus loin, consulter le Research Software Lifecycle publié par EOSC en 2023 (DOI10.5281/zenodo.8324828).

Plan de gestion des logiciels

Pour anticiper les questions concernant le développement et la valorisation des codes et logiciels, il est possible de rédiger un plan de gestion des logiciels. Ce document permet de réfléchir en amont sur toutes les étapes du cycle de vie du logiciel. Il donne des recommandations sur les bonnes pratiques à avoir pour développer et diffuser un code ou un logiciel. Dans le cadre de projet de recherche impliquant la création de codes, un lien est fortement recommandé entre le plan de gestion logiciel et le plan de gestion de données correspondant. Au moment de la rédaction d’un plan de gestion des données, il est possible d’ indiquer, comme produit de recherche, un code ou un logiciel. Pour ce produit de recherche spécifique, le chercheur répondra à des questions particulières correspondant à la production de codes. En particulier, la dernière question du plan de gestion logiciel permet de faire le lien avec le plan de gestion des données. Il est prévu que le plan de gestion des logiciels soit intégré sur la plateforme DMP Opidor. Pour aller plus loin, il est possible de consulter ce billet.

Forges logicielles

Une forge logicielle est un système de gestion de rédaction, de partage et de maintenance collaborative de texte. Bien que son usage premier soit pour le développement de logiciels, une forge peut aussi être utilisée pour la rédaction de documentation, de rapports ou présentation (notamment via LaTeX ou Markdown), ainsi que pour la réalisation de sites web. C’est un environnement web constitué d’un ensemble d’outils, issus en particulier du génie logiciel, afin de faciliter le développement de codes sources, surtout lorsque la rédaction est collaborative ou distribuée. Une forge intègre les services suivants, essentiels pour la mise en œuvre des bonnes pratiques de développement :

  • système de gestion des versions, le plus utilisé étant Git
  • rédaction en ligne
  • gestionnaire de listes de discussion (et/ou de forums)
  • outil de suivi des bugs
  • gestion des tâches
  • gestionnaire de documentation (souvent sur le principe du wiki)
  • contrôle qualité …

Une forge générique ESR est mise à disposition de la communauté scientifique par RENATER. Ce service web de gestion de projet est accessible à tous les membres de la communauté de l’enseignement supérieur et des laboratoires de recherche français. Il est possible de créer un projet sur SourceSup et de le rendre public ou de le garder privé. De nombreux outils sont disponibles et peuvent être activés pour chaque projet (voir la documentation).

La communauté des physiciens et des chimistes utilisent largement des forges pour le développement des codes. Par exemple, en physique, à l’Institut Laue Langevin, au synchrotron Soleil (dont la documentation est accessible ici), à l’Observatoire de Paris Meudon, à l’ESRF.

Pour mieux appréhender en quoi consiste une forge et les bonnes pratiques associées, il est possible de consulter ici la documentation du service de forge basé sur gitlab proposé par l’Université Grenoble Alpes. D’autres ressources sont disponibles sur le web comme les séminaires du service d’Expérimentation et de Développement (SED) du centre Inria de Lyon : Introduction à Git et Git avancé. Le site data.code.gouv.fr propose un service API (Application Programming Interface) ouvert fournissant des métadonnées de dépôt pour de nombreux écosystèmes de logiciels open source.

Pour aller plus loin, il est possible de consulter le rapport sur les forges de l’Enseignement supérieur et de la Recherche : Daniel Le Berre, Jean-Yves Jeannas, Roberto Di Cosmo, François Pellegrini. Forges de l’Enseignement supérieur et de la Recherche – Définition, usages, limitations rencontrées et analyse des besoins. Comité pour la science ouverte. 2023. hal-04098702v6.

Documentation

La documentation d’un code est essentielle :

  • pour son/ses auteurs afin d’assurer la bonne compréhension des développements dans le temps
  • pour les contributeurs éventuels
  • pour ses utilisateurs : cela implique éventuellement plusieurs documentation selon le niveau des utilisateurs.

En lien avec de bonnes pratiques de développement, il est recommandé d’associer aux fichiers du code les documents suivants :

  • README : le point d’entrée sur le code. Ce fichier est automatiquement affiché lors de l’utilisation de forges logicielles. Il permet d’avoir une vue globale de toutes les informations pertinentes liées au logiciel
  • Éventuellement, les fichiers CONTRIBUTING (expliquant comment contribuer au code), CHANGELOG (pour décrire les évolutions majeures) et CITATION (pour expliquer comment citer le code dans une publication)
  • LICENSE : la licence du logiciel.

Il est à noter que GitLab permet d’intégrer très facilement ces fichiers dans un projet, à travers des modèles pré remplis. Outre ces fichiers génériques, des outils de génération de documentation permettent, à partir du code lui-même, d’accéder à des éléments de documentation technique. Voici quelques exemples d’outils très répandus qui permettent de créer automatiquement une documentation complète :

A noter aussi que, dans le cas de l’utilisation d’une forge gitlab, il est possible d’utiliser le mécanisme des gitlab-pages pour la génération de pages web pouvant mettre en forme la documentation du code. Il existe un peu d’information sur ce sujet sur le site de GRICAD. Les forges gitlab intègrent aussi une fonctionnalité de wiki qu’il est possible d’utiliser pour organiser la documentation du code. Cette page sur le site de GRICAD apporte des éléments d’information.

Quelques exemples d’outils en physique et en chimie

Physique

En astrophysique et astronomie, l’Astrophysics Source Code Library (ASCL) met à disposition un répertoire de codes et logiciels qui ont été utilisés dans la recherche et qui ont été mentionnés dans des publications scientifiques. L’ASCL est indexée par le SAO/NASA Astrophysics Data System (ADS) et Web of Science. Chaque code répertorié reçoit un identifiant unique qui le rend citable.

Développé en 2019, publié en 2021 et récompensé en 2023 par le prix du logiciel libre décerné dans le cadre du Plan national Science Ouverte, Fink propose des services pour les chercheurs en astrophysique travaillant sur les phénomènes variables et transitoires. Il s’appuie sur une communauté d’astrophysiciens.

Gammapy est un paquet Python open-source pour l’astronomie des rayons gamma construit sur Numpy, Scipy et Astropy. Il est utilisé comme bibliothèque de base pour les outils d’analyse scientifique du Cherenkov Telescope Array Observatory (CTAO) et il peut être utilisé pour analyser les données des télescopes à rayons gamma existants. Il est recommandé par la collaboration H.E.S.S. pour les publications scientifiques, et est largement utilisé dans l’analyse des instruments à rayons gamma existants, tels que MAGIC, VERITAS et HAWC.

Autre outil récompensé par un prix Science ouverte Codes et logiciels en 2023 et développé depuis 2014, Smilei est un outil de simulation pour la physique des plasmas chauds sur superordinateurs avec de nombreuses applications en physique.

Quant à WebObs, cet outil d’observation de phénomènes naturels en temps-réel utilisé notamment par des observatoires volcanologiques et sismologiques, créé en 2001, il a obtenu un prix Science ouverte en 2022.

Pour aller plus loin, une page wikipedia consacrée aux logiciels en physique donne accès à une centaine de liens vers des codes et logiciels dans ce domaine.

Chimie

Chemistry Development Kit (CDK) est une bibliothèque développée en Java distribuée sous licence LGPL. Elle est conçue pour réaliser des opérations de chimie et biochimie computationnelle : lecture et écriture de formats de données utilisés en chimie, algorithmique pour les graphes moléculaires, descripteurs QSAR, travail sur des structures chimiques, etc. Un article publié dans Journal of cheminformatics reprend les principales fonctionnalités de la version 2.0. Des ressources (livre, wiki) sont disponibles sur GitHub.

Open Babel est un projet open source orienté vers la conversion de données de formats différents (plus d’une centaine de formats sont supportés). Il propose une boîte à outils pour la conversion l’analyse de données de modélisation moléculaire en chimie organique et inorganique et en biochimie. Il permet le filtrage de fichiers utilisant le langage de description de patterns moléculaires SMARTS. Le site web et le repository GitHub du projet permettent l’accès au code et à la documentation. Pybel, facilite l’utilisation des fonctionnalités Open Babel dans les scripts Python.

Initiée en 2006, RDKit est une boîte à outils open source développée en C++. Elle intègre de nombreuses fonctionnalités utilisées en chimie computationnelle (recherche de sous structures, représentations 2D et 3D, génération de descripteurs pour l’apprentissage automatique, etc.). Elle est distribuée sous licence BSD.

ChemPy, est un package Python open source utilisé en chimie physique, organique, inorganique ou analytique pour des applications de cinétique chimique, calculs d’équilibres multiphase, etc. Le code est diffusé sous licence BSD. Le repository GitHub et le blog du projet présentent de nombreux exemples.

Certains outils ont des fonctionnalités plus spécifiques (analyse de spectres, reconnaissance optique de structures chimiques, fouille de texte, etc.). SpectraFit, par exemple, est un package open source développé en Python et diffusé sous licence BSD. Il peut être utilisé en ligne de commande ou sous environnement Jupyter pour réaliser l’ajustement de spectres en spectroscopie. Cet article décrit les fonctionnalités et le workflow de l’outil.
Il existe de nombreux outils de reconnaissance optique de structures chimiques (OCSR). Cet article publié dans Journal of Cheminformatics propose une revue de la littérature et un tableau comparatif des solutions disponibles.

D’autres outils utilisent des packages développés pour l’apprentissage automatique afin de réaliser des applications adaptées au domaine de la chimie. Voici quelques exemples.
ChemML est une boîte à outils développée en Python, conçue pour l’analyse, la fouille de données et la modélisation pour la chimie et la science des matériaux. Elle s’appuie sur des bibliothèques d’apprentissage automatique génériques (disponible via la distribution Anaconda) et des bibliothèques spécifiques à la chimie. Elle est distribué sous licence BSD. Un article publié dans Wires Computational Molecular Science présente le package et ses applications.
OpenChem est un package diffusé sous licence MIT. Il s’appuie sur la librairie d’apprentissage profond PyTorch et a été développé pour des applications en chimie computationnelle et pharmaceutique. Un article publié dans Journal of Chemical Information and Modeling décrit les modèles utilisés et propose des études de cas. Voir également le repository GitHub pour plus d’informations.

Les contenus de cette page sont inspirés de la rubrique codes du site science ouverte UGA, avec l’autorisation des auteurs.