STF 2018 – ETHEREUM SMART CONTRACT E IOT TESTING

La terza e ultima giornata dell’Italian Software Testing Forum 2018, organizzato da ITA-ISTQB e tenutosi a Milano lo scorso giugno, con la partecipazione di diverse aziende esperte nel settore del testing, si è articolata in due parti. Se da un lato gli argomenti trattati nelle sessioni mattutine hanno dato particolare peso all’importanza del continuous testing (CA, Micro Focus) e del crowdtesting (AppQuality, Applause), come tecniche per l’implementazione di cicli di test più veloci e il rilascio di applicazioni “defect free”, la seconda parte della giornata è stata dedicata ad una serie di incontri più mirati e organizzati in tre distinti percorsi paralleli.

Nello specifico, affronteremo due argomenti che sono emersi per particolarità e attualità nel corso del secondo track pomeridiano: il testing degli Ethereum Smart Contracts e quello in ambito AGILE IoT.

Nel primo intervento (AlmavivA) abbiamo visto come alcune nuove architetture e tecnologie, basate su large-scale data processing e distribuite computing, pongono nuove sfide ai processi di Test e Quality Assurance. Ethereum, nella fattispecie, è una piattaforma basata su Blockchain destinata all’esecuzione di applicazioni decentralizzate su una rete peer-to-peer globale, priva di single point of failure: in pratica, se un punto subisce un guasto, questo non preclude il funzionamento complessivo del sistema. L’Ethereum Virtual Machine (EVM) diventa quindi un “World Computer”, un sistema distribuito su scala mondiale che permette di eseguire operazioni di elaborazione ed archiviazione di informazioni.

Alla base del funzionamento di EVM c’è il concetto di transazione, che, nella sua forma più elementare, è dato dallo scambio di Ether (ETH), la criptomoneta di riferimento per Ethereum. L’esecuzione del software avviene tramite Smart Contract, un protocollo di negoziazione ed esecuzione di contratti, che fornisce alcune importanti garanzie: si esegue automaticamente alle condizioni prestabilite, garantisce che il codice sia esattamente quello definito in fase di creazione, permette la sua modifica solo attraverso l’autorizzazione di tutte le parti coinvolte. La computazione di uno Smart Contract ha un costo, espresso in Ethereum Gas. Concettualmente, esso non è differente dall’uso dei Kw per misurare il consumo di elettricità.

Ma quali sono gli aspetti da considerare a livello di testing su questa piattaforma?  Le performance del singolo Smart Contract, innanzitutto, che hanno un impatto diretto sui costi e possono quindi decretare il successo o il fallimento del contratto. Considerando che il codice rilasciato generalmente non può essere modificato, è necessario adottare a monte tecniche di analisi statica e di continuous integration che garantiscano una copertura totale del codice, oltre all’utilizzo di framework di supporto come Truffle.

Inoltre, è importante garantire la qualità e la sicurezza del codice attraverso opportune revisioni, in quanto bug e falle, oltre a comportare danni economici rilevanti, possono intaccare la credibilità dell’ecosistema su cui si basa l’architettura.

Per un testing efficace, inoltre, l’utilizzo di reti locali o simulazioni virtuali non è sufficiente. Esistono perciò alcune reti di test, come Ropsten, che permettono di verificare la bontà dello Smart Contract prima di rilasciarlo sulla rete principale.

Nel secondo intervento che qui riassumiamo, AgileIoT ha affrontato alcune importanti problematiche di testing tipiche dell’ambito IoT (Internet of Things), un contesto in cui la connettività si estende ad oggetti reali, provvisti di un proprio indirizzo IP pubblico.  La creazione di una soluzione IoT richiede quindi un’attenzione particolare, considerato il numero di variabili coinvolte, rispetto ai casi tradizionali. Garantire la sostenibilità e diminuire i rischi annessi alla qualità e all’usabilità di tali applicazioni non è per niente banale.

Per raggiungere tali obbiettivi, AgileIoT sfrutta un insieme di valori, principi e pratiche, attingendo a piene mani dal mondo Agile. Ciò che ne deriva è l’AgileIoT Funnel, una rappresentazione degli aspetti portanti, suddivisi per ambito ed elementi caratterizzanti.

Per quanto concerne il testing, AgileIoT individua 12 famiglie di test che permettono di verificare e validare una soluzione IoT sia dal punto di vista tecnico che di business. I test, oltre a validare i requisiti funzionali del prodotto, coprono altri importanti aspetti, tra cui: l’interoperabilità tra le componenti coinvolte, la sicurezza e la privacy, le prestazioni della rete d’appoggio, l’autonomia delle componenti, l’usabilità, la localizzazione dei contenuti, il carico, le prestazioni e la compatibilità.

Inoltre, in questo ampio contesto va affrontato l’IoT Production Dilemma, che nasce dalla necessità di capire se sia possibile andare in delivery con un Evaluation Kit (ad esempio, utilizzando soluzioni entry level come un Raspberry e generalmente adottate in fase di prototipizzazione) o sia necessario ricorrere alla produzione di componenti ad hoc, che vanno opportunamente progettate, realizzate ed integrate nell’ambiente di funzionamento previsto.

Concludendo, abbiamo affrontato due scenari diversi per contesto ma accomunati da un alto livello di challenge tecniche. La complessità delle architetture coinvolte si ripercuote significativamente sull’approccio al testing richiesto e determina pesantemente le tecniche da adottare. Tali scenari sono estremamente attuali e diventano sempre più ricorrenti nella nostra società. È quindi fondamentale che l’evoluzione delle tecniche di verifica e validazione dei software e dei sistemi coinvolti proceda di pari passo.