Ingegneria del caos: migliorare il software, generando errori
Con i termini ingegneria del caos si fa riferimento a una metodologia di testing dei sistemi informatici, volta a scovare eventuali falle o punti deboli. La particolarità che la distingue dai comuni stress test, è che la stessa si basa sui principi della teoria del caos e punta a generare eventi normalmente caratterizzati da una bassa probabilità di verificarsi.
In pratica si tratta di esperimenti controllati e capaci di migliorare la sicurezza informatica, rilevando anomalie non immediatamente visibili o bug che possono comparire in maniera casuale. L’obiettivo primario è impedire agli hacker di sfruttare tali vulnerabilità per arrecare danni all’infrastruttura.
Migliorare il sistema attraverso test controllati
Il concetto principale dell’ingegneria del caos si incentra sul rompere un sistema di proposito per raccogliere informazioni che aiutino a migliorarne la resilienza. Quello in questione risulta essere un metodo molto efficiente per testare software e applicativi, ma anche sistemi distribuiti (cioè una rete di computer collegati fra loro, che condividono risorse in locale o in remoto).
Più un network è ampio e articolato, più è probabile che sia soggetto a “rotture”. I punti in cui lo stesso può fallire sono tanti e spesso sembrano generati da eventi all’apparenza casuali (l’impressione della casualità tende ad aumentare a seconda di quanto più è strutturato l’intero sistema).
I test che seguono i principi della teoria del caos sono pensati per dare intenzionalmente vita a situazioni imprevedibili, così da trovare punti deboli di cui non si sospetta l’esistenza. Alcuni esempi di problemi potenzialmente identificabili dalle suddette operazioni di testing sono:
- punti ciechi: posti dove il software di monitoraggio non può raccogliere dati adeguati;
- bug nascosti: glitch o altri problemi che possono causare il malfunzionamento del software o della rete;
- colli di bottiglia delle prestazioni: situazioni in cui l’efficienza e le prestazioni potrebbero essere migliorate.
Rilevare qualunque malfunzionamento è molto importante, soprattutto se si pensa che le infrastrutture di rete e i metodi di programmazione diventano ogni giorno più complessi e articolati.
Un’azienda che intende tutelare a dovere il proprio reparto IT deve, dunque, tassativamente ricorrere alle strategie appena descritte, per adattarsi e riuscire a controllare il più possibile l’inevitabile caos generato da determinati imprevisti.
Funzionamento dell’ingegneria del caos
Come per i comuni stress test, anche l’ingegneria del caos si pone l’obiettivo di scoprire e correggere i malfunzionamenti di un sistema, di una rete o di un programma. Tuttavia, la differenza sostanziale sta nel fatto che, invece di concentrare le risorse su un singolo componente alla volta, essa lavora su una scala di possibilità praticamente infinita.
Guarda oltre i bug ovvi e testa i sistemi distribuiti contro problemi o insiemi di problemi che hanno meno probabilità di accadere. Per farla breve, l’idea è quella di ottenere nuove conoscenze sul sistema, attraverso un processo che tipicamente si suddivide in diversi passaggi:
- stabilire una linea di base: i tester devono comprendere come il sistema dovrebbe funzionare in condizioni ottimali e specificare cosa costituisce uno stato di lavoro normale;
- creare un’ipotesi: si considerano una o più potenziali debolezze e vengono formulate ipotesi sui loro effetti (per esempio, i tester del software potrebbero voler sapere cosa succederebbe se si verificasse un grande picco di traffico);
- eseguire la fase di testing: si fanno esperimenti per valutare le conseguenze della teoria formulata. Le prove svolte potrebbero rivelare un errore in un processo critico o una relazione causa-effetto inaspettata (usando sempre l’ipotetico caso precedente, la simulazione di un picco di traffico potrebbe mostrare un problema di prestazioni dello storage);
- valutare l’effettiva veridicità dell’ipotesi: si determinano le criticità da risolvere.
I team che si occupano di ingegneria del caos usano quindi (principalmente) scenari di tipo “what if” per innescare errori e malfunzionamenti casuali. Ciò gli permette di identificare gli interventi più significativi da eseguire, in modo da migliorare le prestazioni del sistema e garantirne l’integrità.
