# Lua/Collaudo del software

Lua
Copertina Tutti i moduli · Sviluppo
* IntroduzioneLua/Introduzione
* Installare LuaLua/Installare Lua
* EspressioniLua/Espressioni
* IstruzioniLua/Istruzioni
* FunzioniLua/Funzioni
* TabelleLua/Tabelle
* Librerie standardLua/Librerie standard
* Collaudo del softwareLua/Collaudo del software
* GlossarioLua/Glossario
Modifica il sommario
chiudi indice
Quando si parla di collaudo del software (software testing) si intende a una serie di metodi e processi utilizzati per scoprire bug ed errori di programmazione in un software. Il collaudo del software può essere effettuato in modo statico, nel qual caso si parla di test statico (static testing) e si effettua senza eseguire il software, oppure in modo dinamico, nel qual caso si parla di test dinamico (dynamic testing) e si effettua durante l'esecuzione del programma.

## Controllo del tipo

    « In informatica, un sistema dei tipi è un framework sintattico per la classificazione di espressioni secondo i tipi che esse calcolano. Un sistema dei tipi associa tipi a ogni valore computato. Esaminando il flusso di questi valori, un sistema dei tipi tenta di dimostrare che non avvengano errori di tipo. Il sistema stesso determina che cosa costituisce un errore di tipo, garantendo che le operazioni che si aspettano un certo tipo di valore non siano utilizzate con valori per i quali quell'operazione non ha senso. » (Wikipedia, voce Sistema dei tipi)
Il controllo dei tipi (type-checking) può essere eseguito in fase di esecuzione o in fase di compilazione. Se viene eseguito in fase di compilazione, il compilatore, quando compila il codice sorgente, verificherà la sicurezza dei tipi del programma e garantirà che il programma soddisfi determinate proprietà di sicurezza dei tipi: in genere, i type-checker statici verificheranno semplicemente che le variabili abbiano sempre valori dello stesso tipo e che gli argomenti passati alle funzioni abbiano il tipo giusto.
L'approccio statico consente di scoprire i bug all'inizio del ciclo di sviluppo. L'approccio dinamico, al contrario, consiste nel verificare che il programma segua i vincoli di tipo quando è in esecuzione. Sebbene questo significhi che i type-checker dinamici dovrebbero essere in grado di verificare un maggior numero di vincoli, la maggior parte dei linguaggi tipizzati dinamicamente non ha molti vincoli di tipo. Lua è un linguaggio tipizzato dinamicamente: in Lua i valori hanno un tipo, ma le variabili no. Ciò significa che il valore di una variabile può essere un numero a un certo punto dell'esecuzione del programma, e una stringa in un altro punto.
Il sistema di tipi di Lua è molto semplice rispetto alla maggior parte degli altri linguaggi. Esegue un controllo di tipo quando si usano gli operatori (il tentativo di sommare due valori dei quali almeno uno non è un numero, per esempio, solleva un errore di tipo) e quando si chiamano le funzioni delle librerie standard (le funzioni della libreria standard rifiutano gli argomenti che non hanno il tipo giusto e danno errore).
Poiché Lua non ha funzionalità per specificare un tipo per i parametri di funzione, la funzione type può essere utile per verificare che gli argomenti passati alle funzioni siano del tipo appropriato. Ciò è particolarmente utile per le funzioni a cui verranno passati argomenti forniti dagli utenti mentre un programma è in esecuzione (ad esempio, in un ambiente interattivo per chiamare funzioni Lua predefinite), poiché l'aggiunta di codice per il controllo del tipo alle funzioni le rende più verbose e aggiunge sovraccarico di manutenzione.

## White-box testing

Con white-box testing (test della scatola bianca) si intende la pratica di sfruttare la conoscenza del funzionamento interno del software per creare casi di test volti a verificarne la funzionalità. È rilevante a tre livelli di test del software, ma quello più interessante per i programmi Lua è il livello unitario, poiché i programmi Lua sono solitamente parte di un'applicazione più grande, nella quale avvengono i test di integrazione e di sistema.
Sono disponibili molti framework per il test unitario in Lua. Il testing a livello unitario è particolarmente adatto per le librerie, poiché consiste generalmente nello scrivere casi di test che passano argomenti specifici alle funzioni e generano un avviso quando una funzione restituisce un valore inatteso. Questo richiede la scrittura di casi di test per le nuove funzionalità, ma ha il vantaggio di rendere più facile individuare gli errori introdotti nel codice quando modificano il comportamento delle funzioni in modo tale da far fallire i test.
Esistono diversi framework per il test unitario in Lua. Uno di questi, busted, supporta la macchina virtuale standard di Lua così come LuaJIT, e può essere utilizzato anche con MoonScript e Terra: il primo è un linguaggio che viene compilato in Lua, mentre il secondo è un linguaggio di basso livello interoperabile con Lua. Un altro framework per il test unitario in Lua, Luaunit, è scritto interamente in Lua e non ha dipendenze. Shake è un framework di test più semplice, inizialmente parte del Kepler Project, che utilizza le funzioni assert e print, ma non è più attivamente sviluppato.

## Ulteriori letture

Il wiki degli utenti di Lua, un'eccellente risorsa per trovare informazioni su Lua, fornisce il seguente materiale sul collaudo del software. Alcune di queste pagine contengono link ad altre pagine o a progetti che possono essere utili per vari compiti.
* Lua Type Checking
* Unit Testing
* Debugging Lua Code
* Program Analysis
* Debugging and Testing