Powrót do strony głównej

CodeClone 2.0: analiza baseline kodu w CI

CodeClone 2.0.0b1 ewoluuje w narzędzie baseline-aware do monitorowania zdrowia kodu Python. Oddziela legacy-dług od regresji poprzez health score, dead code i structural findings. Obsługuje SARIF, raporty HTML z deterministycznymi kontraktami CI.

CodeClone 2.0b1: kontrola zdrowia kodu z baseline
Advertisement 728x90

CodeClone 2.0.0b1: analiza zdrowia kodu Python z uwzględnieniem baseline

CodeClone 2.0.0b1 przechodzi od prostego detektora klonów do narzędzia kontroli strukturalnego stanu projektów Python w CI. Teraz kluczowe jest porównanie z baseline — oddziela historyczny dług techniczny od nowych regresji. Obsługuje ocenę zdrowia, wykrywanie nieużywanego kodu i wyniki strukturalne z deterministycznymi kontraktami dla pipeline'ów.

Baseline jako podstawa kontraktu CI

W wersji 2.0 baseline ewoluował do walidowanego obrazu stanu projektu. Oddziela znane problemy od nowych zmian, uczestniczy w gatingu metryk i działa przewidywalnie w trybie CI.

Kluczowe zasady:

Google AdInline article slot
  • Walidacja według schematu z semantyką trust.
  • Rozdzielenie znanych vs nowych problemów dla klonów, złożoności i innych metryk.
  • Zapisanie aktualnego stanu jako baseline do blokowania nowych regresji w gałęzi main.

To pozwala wprowadzać quality gate bez blokowania całego projektu przez dług techniczny.

Ocena zdrowia: rozkładalna miara jakości

Nowa ocena zdrowia agreguje kilka sygnałów:

| Metryka | Opis |

Google AdInline article slot

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

| Klonowanie | Strukturalne duplikowanie |

| Złożoność | Złożoność funkcji |

Google AdInline article slot

| Powiązanie | Połączenie modułów |

| Spójność | Wewnętrzna spójność |

| Nieużywany kod | Kod nie używany |

| Zależności | Cykle zależności |

| Pokrycie testów | Pokrycie testami |

Ocena rozszerza się na szczegóły: wkład kodu produkcyjnego vs testów, obszary problemowe. Podsumowanie w raporcie HTML pokazuje miarkę, karty KPI i wykres radarowy.

Nieużywany kod bez heurystyki

Detektor nieużywanego kodu uwzględnia specyfikę Pythona: hooki frameworków, odbicie (reflection), ładowanie wtyczek. Zamiast niejawnych wykluczeń — wstawki inline:

# codeclone: ignore[dead-code]
def handle_exception(exc: Exception) -> None:
    ...

lub

class Middleware:  # codeclone: ignore[dead-code]
    ...

Wyłączenie lokalne wyłącza regułę, nie wpływa na inne analizy, elementy są widoczne w raportach, ale nie wpływają na ocenę zdrowia.

Wyniki strukturalne poza klonami

Dodano warstwę wczesnych sygnałów architektonicznych:

  • duplicated_branches — powtarzające się gałęzie.
  • clone_guard_exit_divergence — rozbieżności w węzłach końcowych klonów.
  • clone_cohort_drift — drenaż rodzin podobnych konstrukcji.

Core tworzy fakty w kanonicznym formacie JSON, UI je wizualizuje bez dodatkowych rysunków.

Formaty raportów z jednego źródła

Wszystkie wyniki to projekcje kanonicznego JSON:

  • HTML z podsumowaniem, zestawieniem wykonanym, rozkładem źródeł.
  • JSON do skryptów.
  • Text/Markdown do logów.
  • SARIF z baselineState, %SRCROOT%, artefaktami do IDE/code-scanning.

Determinizm zapewniony stabilną sortowaniem i kanonizacją danych.

Zredukowane progi i wydajność

Progi zostały złagodzone dla większego zakresu analizy:

  • --min-loc dla funkcji: 10 zamiast 15.
  • Mniej surowe bariery block/segment.

Cena: wzrost objętości analizy. Kompenowany optymalizacją cache contract i report contract.

Kontrakty pod kapotą

Ścisłe specyfikacje:

  • Kontrakt baseline: schemat + semantyka.
  • Kontrakt cache: przewidywalność.
  • Kontrakt raportu: spójność formatów.
  • Kod wyjścia CLI: jasna semantyka.

Minimalizuje awarie w pipeline'ach spowodowane ukrytymi zmianami.

Co ważne

  • Baseline rozdziela dług od regresji do rzeczywistego gatingu w CI.
  • Ocena zdrowia rozłożona na metryki z naciskiem na kod produkcyjny.
  • Wstawki inline dla nieużywanego kodu utrzymują przejrzystość analizy.
  • Wyniki strukturalne wykrywają problemy przed powstawaniem klonów.
  • Gotowość do SARIF do integracji z GitHub Actions, Azure DevOps.

— Editorial Team

Advertisement 728x90

Czytaj dalej