Verifica e test dei sistemi combinatori | LottifyLab
Vai al contenuto
Lottify Combinatorial LabDashboard
Apri il menu

07 Guida alla sistemistica

Verifica e test:
fidarsi, poi contare.

Un sistema non diventa corretto perché è stato generato senza errori sullo schermo. Va controllato: prima la forma delle colonne, poi i vincoli, quindi la copertura dichiarata. Il test non rovina la magia. Evita soltanto che un refuso venga promosso a teoria.

Formasintassi e duplicati
Strutturabase, k e vincoli
Proprietàcopertura completa

Perché controllare

Generare una soluzione e dimostrarla sono due lavori diversi.

Il generatore cerca colonne che soddisfino un obiettivo. Il verificatore prende il risultato finito e ripete i controlli senza fidarsi del percorso usato per ottenerlo. Questa separazione aiuta a scoprire errori nel codice, nei dati importati e persino nelle definizioni.

Se lo stesso errore vive sia nel generatore sia nel controllo, i due programmi possono essere perfettamente d’accordo e perfettamente sbagliati. Per questo, quando la proprietà è importante, conviene usare logica indipendente e casi di prova di cui conosciamo già la risposta.

Principio operativo

Ogni dichiarazione misurabile dovrebbe avere un controllo ripetibile che restituisca lo stesso esito sugli stessi dati.

Controlli a strati

Prima gli errori economici. Poi quelli interessanti.

Livello 1

Sintassi

Ogni riga contiene numeri leggibili, separatori validi e la quantità prevista di simboli.

Livello 2

Struttura

I simboli appartengono alla base, non si ripetono nella colonna e le colonne duplicate vengono segnalate.

Livello 3

Proprietà

Si enumerano gli obiettivi e si dimostra quanti sono coperti, mostrando anche esempi dei buchi rimasti.

Controllare prima la copertura di un file con righe malformate è come misurare l’aerodinamica di una bicicletta senza ruota. Interessante, forse; prioritario, decisamente no.

03 Verificatore indipendente

Incolla le colonne. Lascia parlare i controlli.

Ogni riga rappresenta una colonna. Puoi modificare l’esempio, introdurre volontariamente un duplicato o togliere una riga: il rapporto distingue errori formali e copertura matematica.

Interi distinti separati da spazi, virgole o punto e virgola.
Una colonna per riga. Esempio: 1, 2, 3, 4, 5

Formato valido: 12 colonne distinte da 5 simboli.

Colonne valide120 duplicate
Obiettivi coperti100su 120
EsitoParzialelivello t = 3
Copertura ricalcolata83,3%

Restano 20 gruppi non coperti. Gli esempi sotto aiutano a vedere dove.

Obiettivo mancante1 · 4 · 10
Obiettivo mancante1 · 5 · 8
Obiettivo mancante1 · 5 · 10
Obiettivo mancante1 · 7 · 10
Obiettivo mancante2 · 5 · 6
Obiettivo mancante2 · 5 · 8
Obiettivo mancante2 · 5 · 9
Obiettivo mancante2 · 6 · 10

Tipi di test

Un esempio prova un caso. Una proprietà prova un comportamento.

TestDomandaEsempio
UnitarioUna funzione restituisce il risultato esatto noto?C(8,5) deve valere 56.
Di proprietàUna regola resta vera per molti input?Ogni combinazione generata contiene k simboli distinti.
Di regressioneUn errore già corretto è ricomparso?Una base con duplicati deve continuare a essere rifiutata.
Stress testIl sistema resta stabile vicino ai limiti?Base massima, molti obiettivi e tempo di calcolo controllato.
Monte CarloCome si comporta la soluzione su molti scenari casuali?Distribuzione dei risultati, non prova matematica della copertura.

Riproducibilità

Se non puoi rifarlo, puoi soltanto raccontarlo.

Un risultato è davvero verificabile quando un’altra persona — oppure noi stessi fra sei mesi, con meno memoria e più caffè — può ricostruire la stessa prova. Non basta conservare l’elenco finale delle colonne: bisogna ricordare da quali dati siamo partiti, quale metodo abbiamo usato e che cosa abbiamo misurato.

01

Salva l’input

Conserva la base utilizzata, il numero di simboli per colonna k, il livello di copertura t, i filtri applicati e il budget disponibile. Anche una sola differenza può produrre un sistema diverso: scrivere soltanto “ho usato dieci numeri” lascia alla verifica un po’ troppo lavoro investigativo.

02

Registra versione e metodo

Indica il nome dell’algoritmo, le sue impostazioni e la versione del programma che ha eseguito il calcolo. Due versioni possono applicare criteri di scelta differenti e restituire colonne diverse con gli stessi input; non è magia, è software che nel frattempo ha imparato un nuovo mestiere.

03

Fissa il seme casuale

Alcuni metodi esplorano le soluzioni introducendo scelte casuali. Il seme è il valore iniziale che rende ripetibile quella sequenza: usando di nuovo lo stesso seme, con gli stessi dati e la stessa versione, possiamo ottenere la medesima prova invece di una sua cugina somigliante.

04

Conserva il rapporto

Archivia il numero di colonne esaminate e conservate, la copertura ottenuta, gli obiettivi rimasti scoperti, i duplicati, gli errori e il tempo impiegato. Il rapporto permette di confrontare due esecuzioni e di capire se un risultato è realmente migliore oppure soltanto presentato con un entusiasmo più convincente.

Il rapporto di verifica fa parte del risultato. Le sole colonne dicono che cosa è stato scelto; il rapporto spiega perché possiamo attribuire loro una proprietà, entro quali condizioni e con quali eventuali buchi ancora aperti.

Che cosa non dimostra

Un test superato certifica la domanda del test. Non tutte le domande possibili.

Una copertura completa delle terne non implica una copertura completa delle quaterne. Un milione di simulazioni senza problemi non sostituisce una dimostrazione, e una dimostrazione strutturale non predice un evento casuale.

La verifica è potente proprio perché delimita il proprio significato. Quando qualcuno conclude più di quanto il controllo misuri, il problema non è nel test: è nella fantasia aggiunta dopo.

Si è verificato un errore inatteso. Ricarica ×

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.