MODEL-DRIVEN TESTING PER L’ACCESSIBILITÀ

In questo post propongo di adottare i metodi del model-driven testing anche per testare aspetti di accessibilità di interfacce utenti web.

L’idea di base è di usare modelli della dinamica dell’interfaccia, basati su macchine a stati UML, e automaticamente compilare tali modelli producendo codice sorgente Java che pilota WebDriver di Selenium.

Nei suoi post Karl Groves sostiene che i test di accessibilità di un sito Web potrebbero essere inquadrati nel contesto dei test del software e quindi potrebbero essere basati sugli stessi strumenti e pratiche adottati dagli sviluppatori. In particolare suggerisce di utilizzare il servizio Tenon e di costruire script di test per l’accessibilità conformi a determinati standard in modo che questi script possano essere eseguiti automaticamente e produrre automaticamente rapporti di test; anche incluso in servizi di integrazione continua come Jenkins.

I vantaggi previsti per gli sviluppatori sono che possono eseguire questi test automaticamente ogni volta che viene resa disponibile una nuova build del sito, e quindi sapere se le modifiche applicate influiscono in qualche modo sullo stato di accessibilità del sito web.

In questo post vorremmo fare un passo avanti ed esplorare alcuni problemi relativi alle idee dei test basati su modelli. Il test model-driven è la pratica di utilizzare modelli e derivare automaticamente da essi il codice sorgente del sistema di test-harness (TH) (nel nostro caso gli script di test e l’eventuale infrastruttura di test) che può essere utilizzato per testare un altro sistema, il sistema -under-test (SUT), nel nostro caso il sito/webapp.

Il TH è necessario per far fronte alla fragilità degli script di test rispetto ai cambiamenti nei dettagli dell’implementazione dell’interfaccia utente. Se dovessimo seguire un approccio di registrazione e riproduzione (come quando si utilizza Selenium IDE per registrare una sessione di interazione dell’utente e quindi riprodurla di nuovo), gli script risultanti sarebbero entrambi:

non parametrici rispetto ai dati, richiedendoci di aggiungere variabili e parametri, oltre a dataset, in modo che lo stesso script possa essere riutilizzato più di una volta; come uno script di accesso che potrebbe accettare più di un set di credenziali e fragili contro i cambiamenti nella struttura del DOM: infatti, gli script di test registrati farebbero riferimento a ID di elementi specifici, espressioni XPATH o selettori CSS per identificare elementi nel DOM al fine di attivare collegamenti o pulsanti o valutare asserzioni di test. Qualsiasi modifica nel DOM potrebbe potenzialmente interrompere la maggior parte dei nostri script di test, richiedendoci di mantenere ed eseguire il debug non solo del SUT, ma anche degli script di test e del TH.

Il TH potrebbe aiutare a ridurre tale onere di manutenzione, fornendo astrazioni appropriate che isolano questi dettagli dal codice. Analogamente all’approccio degli oggetti di pagina utilizzato quando si applica Selenium ai siti Web, qui suggeriamo di seguire un approccio che potrebbe essere chiamato oggetti di stato, in cui ogni stato identifica uno stato dell’interfaccia utente di SUT.

Le caratteristiche e i benefici attesi da queste pratiche sono che:

il codice sorgente può essere generato automaticamente dai modelli, e quindi può essere eseguito gratuitamente tutte le volte che è necessario;

i casi di test sono indipendenti dai dettagli di come l’interfaccia utente è implementata; di conseguenza possono essere facilmente scritti, possono essere riutilizzati attraverso i cambiamenti dell’interfaccia utente, sono stabili contro molti cambiamenti dell’interfaccia utente;

i casi di test possono essere resi parametrici, con dati specificati separatamente dagli script, in modo che questi possano essere riutilizzati;

non sono necessarie particolari competenze per scrivere il TH né i casi di test.

Sebbene in molti casi queste pratiche basate su modelli siano utilizzate per test comportamentali o di accettazione, qui vogliamo esplorare la loro fattibilità nel contesto dell’accessibilità.

Concentriamoci su un esempio concreto.