Retour à l'accueil

CodeClone 2.0 : analyse de code de base de référence dans CI

CodeClone 2.0.0b1 évolue en un outil conscient de la base de référence pour surveiller la santé du code Python. Sépare la dette héritée des régressions via score de santé, code mort et résultats structurels. Prend en charge les rapports SARIF, HTML avec contrats CI déterministes.

CodeClone 2.0b1 : contrôle de la santé du code avec base de référence
Advertisement 728x90

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 :

Google AdInline article slot
  • 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 |

Google AdInline article slot

|----------------|--------------------------------------|

| Clones | Duplication structurelle |

| Complexité | Complexité cyclomatique des fonctions |

Google AdInline article slot

| 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-loc pour 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

Advertisement 728x90

Lire ensuite