SXXXXXXX_PyUCC/doc/Italian-manual.md
2025-12-01 09:49:28 +01:00

8.6 KiB

Manuale Utente PyUCC

Versione Documento: 1.0 Applicazione: PyUCC (Python Unified Code Counter)


1. Introduzione

PyUCC è uno strumento avanzato per l'analisi statica del codice sorgente. Il suo obiettivo principale è fornire metriche quantitative sullo sviluppo software e, soprattutto, tracciare l'evoluzione del codice nel tempo attraverso un potente sistema di Differing (confronto).

A cosa serve?

  1. Contare: Sapere quante righe di codice, commenti e righe vuote compongono il tuo progetto.
  2. Misurare: Calcolare la complessità e la manutenibilità del software.
  3. Confrontare: Capire esattamente cosa è cambiato tra due versioni (file aggiunti, rimossi, modificati e come la complessità è variata).

2. Concetti Fondamentali

Prima di iniziare, è utile comprendere i termini chiave utilizzati nell'applicazione.

2.1 Baseline

Una Baseline è una "fotografia" istantanea del tuo progetto in un preciso momento.

  • Quando crei una baseline, PyUCC salva una copia dei file e calcola tutte le metriche.
  • Le baseline servono come punto di riferimento (o "pietra di paragone") per i confronti futuri.

2.2 Metriche Supportate

  • SLOC (Source Lines of Code):
    • Physical Lines: Totale righe del file.
    • Code Lines: Righe che contengono codice eseguibile.
    • Comment Lines: Righe di documentazione.
    • Blank Lines: Righe vuote (spesso usate per formattazione).
  • Complessità Ciclomatica (CC): Misura quanto è complesso il flusso di controllo (quanti if, for, while, ecc.). Più è bassa, meglio è.
  • Maintainability Index (MI): Un indice da 0 a 100 che stima quanto il codice sia facile da mantenere. Più è alto, meglio è (sopra 85 è ottimo, sotto 65 è problematico).

2.3 Profilo

Un Profilo è una configurazione salvata che dice a PyUCC:

  • Quali cartelle analizzare.
  • Quali linguaggi includere (es. solo Python e C++).
  • Cosa ignorare (es. cartelle venv, build, file temporanei).

3. Interfaccia Utente (GUI)

L'interfaccia è divisa in zone funzionali per mantenere il flusso di lavoro ordinato.

  1. Top Bar (Barra Superiore):
    • Selezione del Profilo.
    • Accesso alle impostazioni (Settings) e gestione profili (Manage).
  2. Actions Bar (Azioni): I pulsanti principali per avviare le operazioni (Scan, Countings, Metrics, Differing).
  3. Progress Area: Barra di avanzamento e contatore dei file elaborati.
  4. Results Table: La grande tabella centrale dove appaiono i dati.
  5. Log & Status: In basso, un pannello di log per vedere cosa sta succedendo e una barra di stato con il monitoraggio risorse (CPU/RAM).

4. Guida Passo-Passo

4.1 Primo Avvio e Configurazione Profilo

Non appena apri PyUCC, la prima cosa da fare è dire al programma cosa analizzare.

  1. Clicca su ⚙️ Manage... in alto.
  2. Clicca su 📝 New per pulire i campi.
  3. Inserisci un Nome per il profilo (es. "Mio Progetto Backend").
  4. Nella sezione Paths, usa Add Folder per selezionare la cartella radice del tuo codice.
  5. Nella sezione Filter Extensions, seleziona i linguaggi che ti interessano (es. Python, Java).
  6. Nella casella Ignore patterns, puoi lasciare i default (che escludono già .git, __pycache__, ecc.).
  7. Clicca 💾 Save.

4.2 Analisi Semplice (Scan, Countings, Metrics)

Se vuoi solo analizzare lo stato attuale senza confronti:

  • 🔍 Scan: Verifica semplicemente quali file vengono trovati in base ai filtri del profilo. Utile per controllare se stai includendo i file giusti.
  • 🔢 Countings: Analizza ogni file e ti dice quante righe di codice, commenti e vuote ci sono.
  • 📊 Metrics: Calcola la complessità ciclomatica e l'indice di manutenibilità per ogni file.

Tip: Puoi fare doppio click su un file nella tabella dei risultati per aprirlo nel File Viewer integrato, che evidenzia la sintassi e mostra una minimappa colorata (blu=codice, verde=commenti).

4.3 Il Flusso di Lavoro "Differing" (Confronto)

Questa è la funzione più potente di PyUCC.

Passo A: Creare la prima Baseline

  1. Seleziona il tuo profilo.
  2. Clicca su 🔀 Differing.
  3. Se è la prima volta che analizzi questo progetto, PyUCC ti avviserà: "No baseline found".
  4. Conferma la creazione. PyUCC scatterà una "foto" del progetto (Baseline).

Passo B: Lavorare sul codice Ora puoi chiudere PyUCC e lavorare al tuo codice (modificare file, aggiungerne, cancellarne).

Passo C: Confrontare

  1. Riapri PyUCC e seleziona lo stesso profilo.
  2. Clicca su 🔀 Differing.
  3. Questa volta, PyUCC vedrà che esiste una Baseline precedente e ti chiederà con quale confrontare (se ne hai più di una).
  4. Il risultato sarà una tabella con colori specifici:
    • Verde: File aggiunti o metriche migliorate.
    • Rosso: File cancellati o metriche peggiorate (es. complessità aumentata).
    • Giallo/Arancio: File modificati.
    • Colonne Δ (Delta): Mostrano la differenza numerica (es. +50 righe di codice, -2 complessità).

Visualizzatore Differenze: Se fai doppio click su una riga nel risultato del Differing, si aprirà una finestra che mostra i due file affiancati, evidenziando esattamente le righe cambiate.


5. Casi d'Uso Esemplificativi

Caso 1: Refactoring del codice

  • Obiettivo: Vuoi pulire il codice e assicurarti di non aver aumentato la complessità.
  • Azione: Fai una Baseline prima di iniziare. Fai il refactoring. Esegui il Differing.
  • Verifica: Controlla la colonna Δ avg_cc. Se è negativa (es. -0.5), ottimo! Hai ridotto la complessità. Se la colonna Δ comment_lines è positiva, hai migliorato la documentazione.

Caso 2: Code Review

  • Obiettivo: Un collega ha aggiunto una nuova feature. Cosa è cambiato?
  • Azione: Esegui il Differing rispetto alla versione master precedente.
  • Verifica: Ordina per "Status". Vedi subito i file Added (A) e Modified (M). Apri il Diff Viewer sui file modificati per vedere le righe esatte.

6. Filosofia di Sviluppo (Per Sviluppatori)

PyUCC è stato scritto seguendo principi di ingegneria del software rigorosi, che si riflettono nella stabilità dell'uso.

6.1 Codice Pulito e Standard PEP8

Il codice rispetta lo standard PEP8 di Python. Questo garantisce che, se un giorno volessi estendere il tool o scriverne degli script di automazione usando i moduli core, troveresti un codice leggibile, standardizzato e prevedibile.

6.2 Separazione delle Responsabilità (SoC)

L'applicazione è divisa nettamente in due parti:

  1. Core (pyucc.core): Contiene la logica pura (scansione, calcolo metriche, algoritmi di diff). Non sa nulla dell'interfaccia grafica.
  2. GUI (pyucc.gui): Gestisce solo la visualizzazione. Filosofia: Questo permette di cambiare la grafica senza rompere la logica, o usare la logica da riga di comando senza avviare la grafica.

6.3 Non-Blocking UI (Worker Manager)

Hai notato che l'interfaccia non si blocca mai, anche analizzando migliaia di file? Questo è grazie al WorkerManager. Tutte le operazioni pesanti vengono eseguite in thread separati (background). L'interfaccia grafica riceve aggiornamenti tramite una coda sicura (queue).

  • Per l'utente significa: Puoi sempre premere "Cancel" se un'operazione è troppo lunga.

6.4 Algoritmo di Matching Intelligente (Gale-Shapley)

Nel Differing, PyUCC non guarda solo se il nome del file è identico. Usa un algoritmo ispirato al "problema del matrimonio stabile" (Gale-Shapley) combinato con la distanza di Levenshtein sui percorsi.

  • Filosofia: Se sposti un file da una cartella all'altra, il sistema cerca di capire che è lo stesso file spostato, invece di segnarne uno come "Deleted" e uno come "Added".

6.5 Determinismo

Il sistema usa l'hashing (SHA1/MD5) del contenuto dei file per ottimizzare i calcoli (caching) e per determinare se un file è veramente cambiato, ignorando la data di modifica del file system se il contenuto è identico.


7. Risoluzione Problemi Comuni

  • Il programma non trova file: Controlla nel Profile Manager se l'estensione del file è nella lista dei linguaggi o se la cartella è inclusa negli "Ignore patterns".
  • Lentezza estrema: Se hai incluso cartelle con migliaia di file piccoli non di codice (es. node_modules o cartelle di immagini), aggiungile agli "Ignore patterns".
  • Diff Viewer vuoto: Assicurati che i file sorgente esistano ancora sul disco. Se hai cancellato la cartella del progetto dopo aver fatto la baseline, il viewer non potrà mostrare il file corrente.