CodeClone 2.0.0b1 : Analyse avancée de la santé du code Python avec prise en compte de la base
CodeClone 2.0.0b1 évolue d’un simple détecteur de clones vers un système de surveillance structurelle pour les projets Python dans les pipelines CI. L’accent est désormais mis sur la comparaison par rapport à une base, permettant de distinguer la dette technique historique des régressions récentes. Il prend en charge le scoring de santé, la détection du code mort, et des analyses structurelles avec des contrats déterministes pour une intégration fluide dans les pipelines.
La base comme fondement des contrats CI
Dans la version 2.0, la base s’est transformée en instantané validé de l’état du projet. Elle sépare les problèmes connus des modifications récentes, participe au contrôle des métriques, et se comporte de manière prévisible dans les environnements CI.
Principes clés :
- Validation de schéma avec sémantique de confiance.
- Séparation claire entre problèmes connus et nouveaux pour les clones, la complexité et autres métriques.
- Verrouillage de l’état actuel comme base afin d’éviter les régressions sur la branche principale.
Cela permet d’imposer des seuils qualité sans bloquer tout le projet à cause de la dette technique ancienne.
Score de santé : une métrique de qualité modulaire
Le nouveau score de santé agrège plusieurs signaux :
| Métrique | Description |
|----------------|--------------------------------------|
| Clones | Duplication structurelle |
| Complexité | Complexité cyclomatique des fonctions |
| Couplage | Dépendance entre modules |
| Cohésion | Consistance interne des modules |
| Code mort | Code inutilisé |
| Dépendances | Cycles de dépendances |
| Couverture | Couverture des tests |
Le score se décompose en détails : contribution du code production vs. des tests, zones à haut risque. Le rapport HTML inclut des jaugeages, des cartes KPI et des graphiques radar pour une lecture rapide.
Détection du code mort sans heuristiques
Le détecteur de code mort tient compte des spécificités du Python : hooks de framework, réflexion, chargement de plugins. Au lieu de supprimer implicitement certains cas, il utilise des suppressions inline :
# codeclone: ignore[dead-code]
def handle_exception(exc: Exception) -> None:
...
ou
class Middleware: # codeclone: ignore[dead-code]
...
La suppression désactive la règle localement sans affecter les autres analyses. Les éléments apparaissent dans les rapports mais n’impactent pas le score de santé.
Découvertes structurelles au-delà des clones
Une nouvelle couche détecte des signaux architecturaux précoces :
duplicated_branches— branches de flux conditionnel répétées.clone_guard_exit_divergence— divergence dans les points de sortie des blocs dupliqués.clone_cohort_drift— écarts au sein de familles de constructions similaires.
Le noyau génère des faits au format JSON canonique ; l’interface les visualise sans besoin de rendu supplémentaire.
Rapports issus d'une seule source
Toutes les sorties sont des projections du JSON canonique :
- HTML avec Vue d’ensemble, Résumé exécutif et Découpage source.
- JSON pour scripts automatisés.
- Texte/Markdown pour les logs.
- Format SARIF avec
baselineState,%SRCROOT%et artefacts IDE/analyse de code.
Le déterminisme est assuré par un tri stable et une normalisation du contenu.
Seuils abaissés & performances
Les seuils sont relâchés pour une couverture plus large :
--min-locpour les fonctions : passé de 15 à 10.- Portes douces pour les blocs/segments.
Compromis : volume d’analyse accru. Compensé par des optimisations dans le cache et les contrats de rapport.
Contrats en coulisse
Spécifications rigoureuses :
- Contrat base : schéma + sémantique.
- Contrat cache : prévisibilité.
- Contrat rapport : format cohérent.
- Codes de sortie CLI : sens clair.
Ces éléments minimisent les échecs de pipeline dus à des changements cachés.
Ce qui compte
- La base isole la dette des régressions pour un contrôle CI réaliste.
- Le score de santé est granulaire, avec accent sur le code production.
- Les suppressions inline préservent la transparence dans l’analyse du code mort.
- Les découvertes structurelles détectent les problèmes avant que les clones ne se forment.
- Prêt pour SARIF, intégrable à GitHub Actions, Azure DevOps.
— Editorial Team
Aucun commentaire pour le moment.