AgileRanking : un classement sur l'agilité des projets Open Source

AgileRanking est un classement mensuel réalisé à partir d’une sélection de projets open source hébergés sur la plateforme GitHub.

Il est conçu à partir d’une quarantaine d’indicateurs qui définissent la santé globale des projets suivis : Activité de l’équipe de développement (variété des contributeurs, réactivité du support, etc.), adoption par la communauté et qualité du code (dette technique, respect des standards, etc/). Décryptage des premiers résultats.

Inspiré par le Manifeste Agile, le classement AgileRanking entend contribuer à l’évaluation et la valorisation des développements logiciels communautaires, en permettant une analyse inédite des projets, quelle que soit leur technologie.

Pour la première édition de ce ranking, 10 projets open source, bien connus dans leur domaine, ont été sélectionnés et suivis : CodeIgniter, Django, Elasticsearch, Jenkins, Joomla, JUnit, Mongo, PyroCMS, Spring et Symfony.

Le modèle AgileRanking

Le modèle AgileRanking a été conçu par les consultants de Squoring Technologies pour permettre à ses utilisateurs de suivre, d’évaluer et de comparer l’état de santé global d’un projet ou ensemble de projets open source.

Son objectif est de fournir à un instant-T ou sur une période, les informations nécessaires à la prise de décision, aussi bien pour l’utilisateur final (pérennité du projet, qualité du produit et de sa communauté…) que pour les équipes de développement (identifier les risques du projet, prioriser les actions, optimiser le pilotage, etc.).

Reposant sur la méthodologie « Goal Question Metrics » de Victor Basili, le modèle AgileRanking s’articule autour de trois axes d’analyse correspondant aux principaux critères d’évaluation et de sélection d’un logiciel open source :

§  Team Activity : le projet est-il actif ? Quelle est sa pérennité dans le temps ? Quel niveau de réactivité fourni par la communauté de contributeurs ?

§  Code Quality : le code source est-il conforme aux standards ? Le logiciel est-il facilement maintenable et évolutif ? Quelle est la densité de dette technique contenue dans le code ?

§  Community Adoption : le logiciel est-il effectivement utilisé ? Est-il apprécié et supporté par la communauté ? Quelle est sa popularité sur les réseaux sociaux ?

Dans le cadre d’une application Open Source destinée à être utilisée par une large population (utilisateurs finaux, intégrateurs, contributeurs, etc.), c’est l’alignement et le juste équilibre de ces trois axes qui garantit l’efficacité à moyen et long terme du projet.

Le classement

Première observation du classement, ce sont les outils à destination des équipes de développement (développeurs, architectes, DevOps, etc.) qui semblent profiter d’un état de santé global supérieur à celui des CMS. Pas moins de 3 projets de ce type sont dans le « carré gagnant », à savoir JUnit (framework de gestion de tests unitaires), Spring (framework de développement d’applications Java) et Jenkins (outil d’Intégration Continue), avec respectivement un indicateur de santé global « Health » à 62.2, 55.8 et 52.6.

Une tendance confirmée, puisqu’à l’exception d’Elasticsearch, l’ensemble des outils de développement se classent parmi les 5 meilleurs projets. Nous tenterons dans les pages suivantes d’en identifier les raisons, notamment par l’observation des différents indicateurs du modèle.

Notons enfin que la santé des projets est globalement homogène, puisque l’écart entre JUnit (1er du classement) et CodeIgniter (10ème position) est d’une vingtaine de points environ sur une échelle allant de 0 à 100.

Activité des équipes


Comme son nom l’indique, l’indicateur « Team Activity » évalue le dynamisme et le niveau d’activité de l’équipe interne au projet. Il se décline en quatre sous-indicateurs :

§  Evolutivity : indique le volume d’activité dédiée à l’évolution du projet, notamment en termes de commits et de correctifs apportés par l’équipe et les contributeurs du projet

§  Exchange : évalue le niveau d’activité sur la mailing list du projet (nombre de messages et commentaires associés)

§  Reactivity : mesure la réactivité de l’équipe quant à la réponse aux problèmes (ratio entre les « Closed Issues » et « Opened Issues », délai de réponse sur la mailing list, etc.

§  Vivacity : évalue la récence du projet, en fonction de l’âge du projet, sa dernière mise à jour, la date des derniers messages postés sur la mailing list, etc.

Contributeurs : le nombre ne fait pas tout

Là encore, ce sont les projets d’outils orientés « développeurs » qui occupent le haut du classement (Spring, JUnit, et Jenkins), portés par un indicateur d’évolutivité tous supérieurs à 45.0. Sur cet axe, les écarts sont remarquables puisque 35 points séparent le premier (Spring à 65.0) et les derniers (CodeIgniter et Elasticsearch, tous deux à 30.0)

Notons néanmoins que les équipes des projets PyroCMS et CodeIgniter – pourtant en 8ème et 9ème position – semblent plus réactives que la moyenne.

Par ailleurs, ce n’est pas tant le nombre absolu de contributeurs qui impactera l’activité d’un projet, mais bien la productivité de chacun d’eux (ex : moyenne du nombre de fichiers committés ou nombre de problèmes résolus par contributeur). Ainsi, malgré ses 864 contributeurs, Symfony se voit classé dernier sur l’indicateur « Evolutivity », tout comme Django (508 contributeurs). Alors que MongoDB et Elasticsearch se classent tout deux deuxièmes avec seulement 153 contributeurs chacun.

Qualité du code


La qualité du code applicatif est un enjeu majeur à moyen et long termes pour l’agilité et l’efficience des équipes de développement et de maintenance. Selon la norme ISO-9126, la maintenabilité d’un logiciel est décomposée en 4 indicateurs (analysabilité, changeabilité, stabilité et testabilité), définissant les caractéristiques d’un code source maintenable, facile à corriger et à faire évoluer techniquement et fonctionnellement.

Qualité du code : un enjeu impactant l’agilité des projets

Si la qualité du code peut impacter l’efficacité de l’équipe interne (« Core Users »), elle joue également un rôle important auprès des utilisateurs techniques de ces projets. En effet, si un code est peu maintenable, les intégrateurs (dans notre modèle « Technical Users ») peineront à s’approprier le code pour le personnaliser et le faire évoluer en fonction de leur contexte. Un projet dont le code est complexe et non conforme aux standards aura tendance à s’attirer les foudres des techniciens, même si la solution répond pleinement aux besoins sur le plan fonctionnel.

Dans notre classement, la qualité du code est évaluée par les analyseurs de l’outil Squore qui ont parcouru l’ensemble du code source de la dernière version de chaque projet. Ils permettent de calculer les métriques logicielles (complexité cyclomatique, taux de commentaire, etc.), de comptabiliser les non-conformités en regard des bonnes pratiques de développement, pour en déduire notamment le montant de Dette Technique du projet.

Maintenabilité : Des résultats homogènes

Globalement, nos 10 projets sont de bonne qualité. Sans surprise, JUnit et Jenkins (des outils « cœur de cible » dès lors que l’on parle de qualité, de testabilité et d’automatisation d’inspection code) se distinguent par un excellent niveau de maintenabilité. L’adage « Eat Your Own Dog Food » semble se vérifier.

Une note de 80.0 pour JUnit à pondérer tout de même avec sa dette technique, en regard du nombre total de lignes de code (voir sa densité de dette technique dans le tableau ci-dessous).

Dans le bas du tableau, MongoDB (base de données orientée « documents ») se distingue par la dette technique totale la plus importante des 10 projets (673 jours), alors que CodeIgniter présente la densité la plus élevée (1.6 jours / KLOC).


Projet Maintenabilité

Dette Technique
Jours / Homme

Densité *
Jours / Homme / KLOC

JUnit 80.0 26 1.08
Django 65.0 158 0.87
Jenkins 60.0 83 0.80
Symfony 55.0 100 0.86
CodeIgniter 50.0 31 1.60
Elasticsearch 50.0 251 0.70
Joomla 50.0 180 0.81
MongoDB 50.0 673 0.77
PyroCMS 50.0 69 0.72
Spring 50.0 303 0.69

* La densité de dette technique est le temps estimé pour corriger l’ensemble des non-conformités pour 1000 lignes de code. La dette technique est calculée sur la base d’une journée de 7 heures.

Adoption par la communauté


L’adoption d’une solution par la communauté est sans doute l’élément le plus souvent mis sous le feu des projecteurs. A juste titre, la diffusion et la popularité plus ou moins grandes d’un projet communautaire stigmatisent son succès (ou son échec). Mais il serait réducteur de résumer la réussite d’un outil open source par son nombre de téléchargements.

Ici, l’axe « Community Adoption » est décomposé en quatre sous-indicateurs évaluant l’adoption auprès des différents types d’utilisateurs :

§  Core Users : il s’agit du premier cercle d’utilisateurs puisque sont regroupés dans les Core Users les committers (développeurs « officiels » du projet) et les contributeurs

§  Technical Users : bien souvent les développeurs, ceux qui déploient, personnalisent et maintiennent la solution.

§  End Users : les utilisateurs à qui est destinée la solution

§  Peripheral Users : cet axe est renseigné par des indicateurs n’ayant pas un lien direct avec l’utilisation de la solution, mais contribuant fortement à sa notoriété et à sa réputation (ex : nombre de followers du compte Twitter du projet, nombre de tweets mentionnant le projet avec un hashtag)

En tête du classement, MongoDB semble être adopté par l’ensemble des utilisateurs, porté par une forte activité sur les réseaux sociaux (plus de 65,000 followers sur Twitter, ) et vraisemblablement par les projets de dématérialisation engagés par de nombreuses entreprises.

A l’inverse, les outils techniques (JUnit, Spring ou Jenkins) sont globalement moins visibles sur Twitter, la population concernée étant logiquement moins large qu’un CMS destiné bien souvent au grand public.

Concernant l’évolution du nombre de committers par projet, il est important de remarquer les projets qui enregistrent une tendance à la baisse (voir le graphique d’évolution dans les fiches projets à partir de la page suivante), à savoir PyroCMS, CodeIgniter et Symfony. A l’inverse, les projets voyant le nombre de leurs committers sur une tendance haussière sont MongoDB, Django, Elasticsearch et Joomla.

Pour affiner l’adoption par la communauté, nous aurions pu pondérer ces indicateurs par l’importance du budget marketing alloué à certains projets supportés par une entreprise commerciale. Malheureusement, nous n’avons pas (encore ?) ces informations à disposition.