ORACOLO DEL TEST

Unisciti anche tu alla prima grande comunità italiana dedicata al TEST!!!

Blockchain e le sfide del testing

Categoria: Blog Pubblicato: Domenica, 05 Giugno 2022 Scritto da La Redazione dell'Oracolo

Ciao,

se ne parla tanto ma poche volte si entra davvero nel merito, sopratutto per la parte relativa al Testing per cui ecco un elenco delle sfide che ci aspettano

Una breve intro

La blockchain è un elenco collegato di record chiamati blocchi.
I blocchi sono collegati tramite crittografia: ogni blocco contiene l'hash del blocco precedente e le informazioni sulle transazioni correnti.

I blocchi sono immutabili e vengono replicati tra i nodi della rete peer-to-peer blockchain.
L'implementazione più famosa della blockchain, per ora, è Bitcoin. Ma la blockchain non è limitata solo alle criptovalute.

Poiché la blockchain offre immutabilità, integrità e trasparenza, può memorizzare qualsiasi dato, non solo le transazioni. Dall'inizio del rilascio di Bitcoin, molte aziende esplorano costantemente nuovi modi per applicare la blockchain ai processi in corso nel mondo.

La creazione degli smart contract in Ethereum ha permesso di simulare molti processi aziendali sulla blockchain in un codice (con esecuzione manuale o automatica). Di conseguenza, ora è possibile costruire applicazioni basate su blockchain che consentono di comunicare con una determinata blockchain per memorizzare dati, effettuare transazioni o eseguire smart contract.

Tutte queste applicazioni blockchain trattano la valuta (token) o memorizzano e conservano i dati sulla catena. Quindi non dobbiamo solo costruirle, ma anche assicurarci che le applicazioni funzionino come previsto (dal punto di vista funzionale, delle prestazioni e della sicurezza).

In questo post descriverò le sfide del testing delle applicazioni basate su blockchain, basandomi sulla mia esperienza e su un'importante ricerca di Chhagan Lal e Dusica Marijan - "Blockchain Testing: Challenges, Techniques, and Research Directions".

Architettura e testing

Le moderne applicazioni basate su blockchain non implementano blockchain "da zero". In genere utilizzano le reti blockchain come uno dei componenti del sistema.

Ecco un esempio di diagramma di architettura dell'applicazione basata su blockchain:


Secondo il diagramma, è necessario testare i seguenti componenti:

  • test unitari per la logica aziendale
  • integrazione tra l'applicazione e i componenti della blockchain (API)
  • test funzionali dei componenti della blockchain (test dei smart contract)
  • integrazione tra l'applicazione e il livello di archiviazione dei dati (API)
  • test end-to-end (UI e API).

Alcune note:

L'integrazione tra applicazione e rete blockchain è tipicamente testata tramite API (REST, gRPC, riga di comando).

Se gli sviluppatori di applicazioni utilizzano una rete blockchain esistente, potrebbero non testarne gli interni (lo stesso vale per i sistemi di database o le librerie di messaggistica)

La verifica dei smart contract comprende

  • test funzionali (se la logica aziendale funziona come previsto)
  • test delle prestazioni (verifica dell'esecuzione e della complessità temporale)
  • test di sicurezza (protezione dei dati e vulnerabilità)

Poiché la blockchain e i smart contract sono una tecnologia relativamente nuova, i test engineer devono affrontare diverse sfide durante il collaudo delle applicazioni basate sulla blockchain:

  • mancanza di pratiche
  • mancanza di strumenti
  • immutabilità
  • prestazioni
  • affidabilità

Mancanza di pratiche (sviluppo e test)

Conoscenze. Per sviluppare e testare applicazioni basate su blockchain, gli ingegneri devono conoscere diversi ambiti (tecnici, non tecnici, legali). Ma è difficile trovare sul mercato persone con tali conoscenze. Ad esempio, nella nostra azienda, gli ingegneri addetti ai test devono conoscere sistemi distribuiti, crittografia, blockchain, test, programmazione, matematica e finanza.

Varietà. Attualmente sono disponibili sul mercato quasi 40 diverse blockchain. Non si può "imparare" solo una blockchain: esiste un ecosistema di strumenti per ogni particolare blockchain. Alcune blockchain utilizzano linguaggi di programmazione noti come C++, Go, Javascript o Java per implementare i smart contract. Altre utilizzano linguaggi di programmazione unici (Solidity per Ethereum o Plutus per Cardano), quindi è necessario imparare anche questi.

Standard.Inoltre, mancano procedure, standard o strategie guida per la progettazione, lo sviluppo e il test di applicazioni basate su blockchain.

Mancanza di strumenti

Librerie. Poiché esistono molti linguaggi di programmazione per i smart contract, mancano strumenti maturi di debug e test per questi linguaggi.

Automazione. Se si vuole garantire che l'applicazione funzioni come previsto, è necessario testare i componenti (isolatamente) e il sistema (nel suo complesso). Attualmente mancano strumenti di distribuzione e automazione che consentano di distribuire e configurare blockchain in "modalità di test" all'interno dei confini di una macchina.

La configurazione dell'ambiente richiede molto tempo. Quindi l'unica cosa da fare ora è scaricare il nodo completo in locale, sincronizzarlo con altri nodi e poi testarlo tramite riga di comando o API. Di conseguenza, la configurazione richiede un'enorme quantità di tempo. Se l'applicazione utilizza alcune funzionalità del portafoglio, è necessario scaricare e configurare anche queste.

Immutabilità

La blockchain è una struttura di dati immutabile e aperta (a meno che non sia autorizzata). Quindi, non appena una modifica viene apportata alla rete, non è possibile tornare indietro. Davvero. Tutti i dati di prova rimarranno per sempre sulla catena :). Inoltre, i dati di prova possono essere visti da chiunque tramite gli esploratori di transazioni.

I dati di test devono essere trattati con particolare attenzione perché sono disponibili su una blockchain pubblica. Assicuratevi di non utilizzare informazioni sensibili nei test.

Convalidare sempre di più gli smart contract prima di distribuirli sulla catena. Qualsiasi errore che si verifichi nel contratto dopo la distribuzione non può essere risolto facilmente: in alcuni casi, è necessario creare un altro contratto per inviare denaro ai conti non funzionanti (o addirittura cambiare l'intera rete dopo un attacco di hacker).

Non è possibile cancellare i dati dalla catena. Quindi, se la vostra applicazione deve rispettare il GDPR (in particolare il diritto all'oblio), dovete considerare quali dati memorizzare.

Prestazioni

Le prestazioni dell'applicazione basata su blockchain sono fortemente legate alle prestazioni dei componenti della blockchain stessa. Alcune blockchain hanno una latenza e un tasso di transazioni in ingresso limitati, quindi devono essere considerate nella strategia di test complessiva.

Il tempo di convalida delle transazioni dipende dai protocolli di consenso di una particolare catena: in alcuni casi, possono essere necessari minuti o anche più per memorizzare un dato.

I carichi di lavoro della blockchain nel mondo reale sono difficili da prevedere a causa della volatilità della popolarità della blockchain, degli attacchi di hacker e di altri eventi.

Dipendibilità

Le fault-injections sono una tecnica potente per testare sistemi altamente distribuiti. Ma a causa della natura dispersa dei sistemi blockchain, è difficile separare i carichi di errore a livello di sistema, di rete e di utente. Per questo motivo mancano strumenti in quest'area, soprattutto perché ogni blockchain ha le sue API e i suoi componenti.

Conclusioni

Le applicazioni basate sulla blockchain pongono una nuova serie di sfide al mondo dei test. Sono necessarie molte conoscenze e competenze.

Ma non c'è da preoccuparsi. Immaginate che 20 anni fa nessuno sapesse come implementare test automatizzati per il web e il mobile. Erano tempi in cui Selenium Webdriver o Appium non esistevano.

Se noi, come tester, vogliamo avere successo nel mondo della blockchain e portare la qualità "in tavola", dobbiamo approfondire gli aspetti tecnici dei sistemi e applicare tecniche e strumenti di test noti (e forse ancora sconosciuti).

ecco il link all'articolo originale