Skip to content

pl Architecture & Heuristics

Krzysztofci edited this page Jun 26, 2026 · 1 revision

Jak działa logic-cov? (Pod maską)

Narzędzie analizuje strukturę kodu źródłowego bez konieczności jego faktycznego uruchamiania, wykorzystując wbudowany w standardową bibliotekę Pythona moduł ast (Abstract Syntax Tree – Abstrakcyjne Drzewo Składniowe). Dzięki takiemu podejściu proces analizy jest całkowicie bezpieczny dla systemu, niezwykle lekki i błyskawiczny.

🧠 Algorytm Klasyfikacji Funkcji

Każda funkcja zlokalizowana w badanym projekcie jest mapowana przez klasę Analyzer(ast.NodeVisitor), gdzie przypisywane są jej punkty (wagi) w dwóch niezależnych kategoriach: GUI oraz LOGIC.

  1. Nazewnictwo Funkcji:
    • Słowa kluczowe takie jak build, show, ui, widget dodają punkty do kategorii GUI (pod warunkiem, że plik importuje powiązane biblioteki okienkowe).
    • Słowa kluczowe takie jak calc, parse, load, process automatycznie inkrementują licznik LOGIC.
  2. Wywołania wewnątrz ciał funkcji (Method Calls):
    • Metody typu .pack(), .grid(), .bind() czy bezpośrednie instancje komponentów UI (np. Button, Frame) stanowią silne wskaźniki przynależności do warstwy GUI.
    • Wywołania systemowe, operacje na plikach (open, json, subprocess, os, re) kierują wagę funkcji w stronę LOGIC.

📊 Matematyczne Reguły Triage

Ostateczna kategoria, do której zostaje zakwalifikowana dana funkcja, determinowana jest przez proporcje zebranych punktów:

  • UNKNOWN: Łączna suma wag wynosi dokładnie 0 (np. metody abstrakcyjne, puste interfejsy).
  • GUI / LOGIC: Jeden z typów dominuje nad drugim o co najmniej $1.5\times$ (lub waga drugiego wynosi 0).
  • MIXED: Funkcja posiada cechy obu typów, ale żadna z warstw nie osiągnęła wymaganej przewagi $1.5\times$. Oznacza to silne powiązanie widoku z logiką biznesową (tzw. tight coupling) — kod oznaczony tym statusem jest bezpośrednim kandydatem do refaktoryzacji architektonicznej.

Clone this wiki locally