Table of Contents Table of Contents
Previous Page  114 / 134 Next Page
Information
Show Menu
Previous Page 114 / 134 Next Page
Page Background

GIUGNO-LUGLIO 2017

AUTOMAZIONE OGGI 399

114

AO

SOFTWARE

Aggiungere parallelizzazione

alla simulazione

L’organizzazione del processo è solo una parte del processo

stesso. È anche fondamentale l’utilizzo di una struttura parallela

di testing per la riduzione dei tempi di CI. Utilizzando Jenkins

come server CI, i target di test devono anche essere vagliati.

Una delle scelte più note è l’utilizzo di Simics di Wind River, che

funziona come un simulatore in grado di replicare una modalità

dell’hardware target. Utilizzando Jenkins e Simics insieme, gli in-

gegneri possono decidere quale ambiente testare e individuare

quali casi necessitano di essere ricompilati ed eseguiti, in base

alle modifiche apportate al codice sorgente.

Gli sviluppatori possono effettuare il set up di differenti configu-

razioni della stessa scheda, per eseguire test equivalenti, il che

consente complete attività di coverage dei test.

Dunque Simics rende il testing più affidabile, dato che, avendo

la possibilità di testare un modello dell’hardware (a volte per-

sino prima che questo sia disponibile), vi sono meno possibilità

di incorrere in errori con i test effettivi, che potrebbe far sprecare

tempo prezioso. Simics offre anche la possibilità di registrare e

riprodurre i valori di input, il che supporta la CI consentendo l’ac-

cesso alle informazioni e al loro utilizzo da parte di altri membri

del team. Per agevolare un ambiente completo di CI è poi neces-

saria una piattaforma unificata, che metta insieme tutti questi

elementi in un solo luogo. La soluzione ideale è una piattaforma

che possa organizzare tutti i test case in gruppi che consentono

agli sviluppatori di mappare l’architettura dell’applicazione e che

permetta di testare singoli stack, anticipando i test di sistema e

accelerando la versione pronta per la distribuzione.

Effettuare test solo su ciò che lo richiede

Ora che abbiamo un ambiente che possa eseguire una suite

completa di test, il più rapidamente possibile, si possono otte-

nere prestazioni software maggiori soltanto effettuando gli spe-

cifici test richiesti per ripristinare al 100% la totalità del testing

quando viene apportata una modifica al codice sorgente. Il prin-

cipio dell’analisi di impatto di un cambiamento (Change-Impact

Analysis) è ben conosciuto e documentato ed è l’ingrediente fi-

nale nella creazione di un sistema di CI davvero evoluto.

In VectorCart è presente una funzionalità di Change-Based Te-

sting che identifica automaticamente i test minimi necessari da

eseguire per ogni variazione del codice. Ciò significa che, invece

di eseguire 10.000 test, è richiesto che solo una frazione dei test

venga eseguita nuovamente quando avviene un cambiamento,

il che riduce notevolmente i tempi da giorni a minuti.

Un esempio per capire

Per contestualizzare tutto questo, possiamo prendere a esempio

un ipotetico scenario che si può anche trovare sul sito web di

Vector Software. Immaginiamo un piccolo progetto di 20 am-

bienti, per un totale di 122 test di unità, che utilizza l’ambiente

di analisi mostrato in Figura 3, che contiene VectorCast, un server

di Jenkins con nove nodi slave distribuiti su tre host di prova,

ognuno con tre ambienti di board simulati. Abbiamo un riferi-

mento di 47 minuti per compilazione ed esecuzione combinate,

utilizzando un singolo nodo slave e scheda Simics per eseguire

un set completo di test.

Per dimostrare la potenza del parallelismo, creiamo i processi dei

20 ambienti test utilizzando VectorCast, che li invia a una coda

di compilazione Jenkins. Jenkins eseguirà i primi nove processi

sui nodi slave, dove vengono eseguiti sulle schede Simics; ciò

prosegue fino a quanto la compilazione non è completa. Il risul-

tato è un tempo complessivo di ricompilazione ripartito di 7:47

secondi. Ciò equivale a una compilazione sei volte più veloce o

l’85% di risparmio sui tempi.

Apportiamo alcune modifiche a due dei moduli e avviamo una

ricompilazione. Tra VectorCast e Jenkins, il sistema eseguirà solo

quei test che hanno bisogno di essere nuovamente eseguiti e

invierà i processi in coda e sui nodi slave. Ciò che accade è che

il primo modulo ha bisogno di una completa ricompilazione e

analisi dei tre casi di test, mentre il secondo modulo deve solo

completare una ricompilazione incrementale e l’esecuzione di

due dei nove casi. Il risultato è che solo per cinque test case è

necessaria l’esecuzione, su un totale di 122. Ne consegue un

tempo di esecuzione per la ricompilazione inferiore ai 2 minuti.

In termini di tempo risparmiato rispetto al riferimento stabilito,

stiamo parlando di circa il 95%. Questo dimostra chiaramente la

potenza di un ambiente di testing distribuito parallelizzato, in

grado di supportare continue variazioni dei requisiti.

Vector Software

www.vector.com

-

www.vectorcast.com/it

Figura 3 - Impiegando VectorCast e Jenkins, il sistema

eseguirà solo i test che occorre realmente rieseguire,

risparmiando tempo

Figura 4 - Scopo di un sistema di CI evoluto è abilitare i test

subito e spesso: si parla di Agile Development o Test-Driven

Development