Un nuovo approccio alla generazione di suite di test, adattato da una tecnica CLI comporta l’utilizzo di un sistema di pianificazione. La pianificazione è una tecnica ben studiata dal dominio dell’intelligenza artificiale (AI) che tenta di risolvere problemi che coinvolgono quattro parametri:
- uno stato iniziale,
- uno stato obiettivo,
- un insieme di operatori e
- un insieme di oggetti su cui operare.
I sistemi di pianificazione determinano un percorso dallo stato iniziale allo stato obiettivo utilizzando gli operatori. Come semplice esempio di un problema di pianificazione, dato due parole e una singola operazione che sostituisce una singola lettera in una parola con un’altra, l’obiettivo potrebbe essere quello di cambiare una parola in un’altra.
Negli autori usato il pianificatore IPP per dimostrare questa tecnica. L’interfaccia utente del sistema viene prima analizzata per determinare le possibili operazioni. Questi diventano gli operatori utilizzati nel problema di pianificazione. Successivamente viene determinato uno stato iniziale del sistema e viene specificato uno stato obiettivo che il tester ritiene consentirebbe l’esercizio del sistema. Il sistema di pianificazione determina un percorso dallo stato iniziale allo stato obiettivo, che diventa il piano di test.
L’utilizzo di un pianificatore per generare i casi di test presenta alcuni vantaggi specifici rispetto alla generazione manuale. Un sistema di pianificazione, per sua stessa natura, genera soluzioni ai problemi di pianificazione in un modo che è molto vantaggioso per il tester:
- I piani sono sempre validi. L’output del sistema è un piano valido e corretto che utilizza gli operatori per raggiungere lo stato obiettivo o nessun piano. Questo è utile perché molto tempo può essere sprecato quando si crea manualmente una suite di test a causa di casi di test non validi che il tester pensava avrebbe funzionato ma non lo ha fatto.
- Un sistema di pianificazione presta attenzione all’ordine. Spesso per testare una determinata funzione, il caso di test deve essere complesso e seguire un percorso attraverso la GUI in cui le operazioni vengono eseguite in un ordine specifico. Quando fatto manualmente, questo può portare a errori e può anche essere molto difficile e richiede tempo da fare.
- Infine, e soprattutto, un sistema di pianificazione è orientato agli obiettivi. Il tester si sta concentrando generazione suite di test su ciò che è più importante, testare la funzionalità del sistema.
Quando si crea manualmente una suite di test, il tester è più focalizzato su come testare una funzione (ad esempio il percorso specifico attraverso la GUI). Utilizzando un sistema di pianificazione, il percorso è curato e il tester può concentrarsi su quale funzione testare. Un ulteriore vantaggio di questo è che un sistema di pianificazione non è limitato in alcun modo durante la generazione del percorso e può spesso trovare un percorso che non è mai stato anticipato dal tester. Questo problema è molto importante da combattere.
Un altro metodo di generazione di casi di test GUI simula un utente inesperto. Un utente esperto di un sistema tende a seguire un percorso diretto e prevedibile attraverso una GUI, mentre un utente inesperto seguirebbe un percorso più casuale. È quindi probabile che un utente inesperto esplori più stati possibili della GUI di un esperto.
La difficoltà sta nel generare suite di test che simulano l’utilizzo del sistema “novizio”. Utilizzando algoritmi genetici sono stati proposti per risolvere questo problema. I percorsi dei principianti attraverso il sistema non sono percorsi casuali. In primo luogo, un utente inesperto imparerà nel tempo e generalmente non farà gli stessi errori ripetutamente, e, in secondo luogo, un utente inesperto sta seguendo un piano e probabilmente ha qualche dominio o conoscenza del sistema.
Gli algoritmi genetici funzionano come segue: un insieme di “geni” viene creato casualmente e quindi sottoposto a qualche compito. I geni che completano al meglio il compito vengono mantenuti e quelli che non vengono scartati. Il processo viene nuovamente ripetuto con i geni sopravvissuti replicati e il resto del set riempito con geni più casuali. Alla fine un gene (o un piccolo insieme di geni se c’è qualche soglia impostata) sarà l’unico gene nel set ed è naturalmente la soluzione migliore per il problema dato.
Nel caso di test GUI, il metodo funziona come segue. Ogni gene è essenzialmente un elenco di valori interi casuali di una certa lunghezza fissa. Ognuno di questi geni rappresenta un percorso attraverso la GUI. Ad esempio, per un determinato albero di widget, il primo valore nel gene (ogni valore è chiamato allele) selezionerebbe il widget su cui operare, i seguenti alleli riempirebbero l’input del widget in base al numero di possibili input del widget (ad esempio una casella di riepilogo a discesa avrebbe un input-il valore dell’elenco selezionato). Il successo dei geni sono segnati da un criterio che premia il miglior comportamento ‘novizio’.
Un sistema per eseguire questo test per il sistema X window, ma estensibile a qualsiasi sistema a finestre è descritto in. Il sistema X Window fornisce funzionalità (tramite XServer e il protocollo degli editori) per inviare dinamicamente input GUI e ottenere output GUI dal programma senza utilizzare direttamente la GUI. Ad esempio, si può chiamare XSendEvent() per simulare un clic su un menu a discesa, e così via. Questo sistema consente ai ricercatori di automatizzare la creazione e il test del gene, quindi per qualsiasi applicazione in prova, è possibile creare una serie di casi di test per utenti inesperti.