saverioriotto.it

L'importanza della tracciabilità nel ciclo di vita del software

La tracciabilità dei requisiti è una tecnica utilizzata nei progetti di sviluppo software per garantire che le esigenze degli utenti siano pienamente soddisfatte e che i difetti siano ridotti al minimo.

L'importanza della tracciabilità nel ciclo di vita del software

Molti team di ingegneri che utilizzavano una metodologia di sviluppo a cascata hanno effettuato un'attenta analisi sul rilascio di nuove revisioni, quasi obbligatoria, nell'ottimizzare il ciclo di vita dello sviluppo del software (SDLC). Adottando Agile e DevOps, il team di ingegneri ha sostituito i processi manuali con processi automatici tale che le revisioni che prima richiedevano giorni o settimane ora vengono eseguite in pochi minuti. 

Con Agile e DevOps, l'attenzione si è spostata dal controllo alla velocità. L'idea è di fornire il software agli utenti in anticipo, ottenere feedback prima e ripetere il feedback per rendere il software migliore, più veloce. Più velocemente un team può distribuire le versioni, maggiori saranno le prestazioni di distribuzione del software.

I team ottengono prestazioni di consegna elevate rimuovendo i colli di bottiglia, aumentando l'autonomia degli sviluppatori, automatizzando i flussi di lavoro e codificando e ospitando tutto su controlli del codice sorgente decentralizzati come Git (chiamato anche "GitOps"). Ma l'autonomia e l'automazione si traducono in una maggiore decentralizzazione, e quindi in complessità; hai più codice, più repository e più responsabilità per gli sviluppatori. Coordinare e garantire l'allineamento tra gli sviluppatori diventa molto difficile senza controlli.

Ma non è nemmeno consigliabile implementare un controllo eccessivo, poiché è in conflitto con i fondamenti culturali di Agile e DevOps (rimuovendo i colli di bottiglia, ricordate?) e di conseguenza influisce negativamente sulla velocità di consegna del software. Questo è un problema complicato quando stai cercando di imporre pratiche di sviluppo come la tracciabilità.

Che cos'è la tracciabilità?

La "tracciabilità" è la capacità di descrivere e seguire la vita di un requisito sia in avanti che all'indietro, dai requisiti al codice e viceversa. Se eseguita in modo efficace, la tracciabilità consente di tenere traccia degli elementi di lavoro durante il ciclo di vita dello sviluppo fino al punto in cui i requisiti vengono implementati nel codice, svolgendo un ruolo cruciale nel framework di controllo dell'organizzazione.

Perché hai bisogno di tracciabilità

Facendo una breve analisi su molti team di sviluppo e le loro pratiche, si è appreso che ci sono tre ragioni principali per cui le software house dovrebbero implementare la tracciabilità.

1. Raggiungere la conformità

La ragione più ovvia per implementare la tracciabilità ha a che fare con le normative. Questo è in genere vero per le aziende che operano nei settori dei servizi finanziari, della sanità e del governo. La capacità di tracciare il codice in base ai requisiti è un criterio prerequisito tra i framework di conformità più diffusi: ad esempio, il requisito di integrità del processo SOC2 non può essere soddisfatto senza un'intera catena di prove per ogni modifica nel codice sorgente dell'applicazione.

2. Riduci i difetti del software (bug)

Esiste una relazione statisticamente significativa tra la completezza delle informazioni di tracciabilità acquisite e il tasso di difetto del codice sorgente sviluppato. Una tracciabilità più completa riduce il tasso di difetti previsto nel software sviluppato. Il forte impatto della tracciabilità sul tasso di difetti suggerisce che la tracciabilità è di grande valore pratico per qualsiasi tipo di progetto di sviluppo software, anche se non è richiesto da uno standard o da un regolamento.

3. Aumenta la velocità e la manutenibilità del codice

Uno studio sulla rivista Empirical Software Engineering mostra che un gruppo di sviluppatori che hanno implementato la tracciabilità ha eseguito una determinata attività il 24% più velocemente e ha creato in media il 50% di soluzioni più corrette, suggerendo che la tracciabilità non solo fa risparmiare fatica, ma può migliorare notevolmente la qualità della manutenzione del software. Un codice ben mantenuto può aiutare gli sviluppatori ad apportare modifiche al codice scritto da altri team e a riutilizzare il codice di altre persone e aiuta anche a ridurre il debito tecnico. 

Questo primi punti sono obbligatori se la tua organizzazione è tenuta a rispettare le normative. Ma anche se la conformità non è un requisito, i processi abilitati attraverso la tracciabilità da requisito a codice possono migliorare significativamente le prestazioni del tuo team riducendo il numero di difetti nella produzione e aumentando la velocità di sviluppo.

Implementazione della tracciabilità nell'era agile e DevOps

Tieni presente che i framework di conformità esistevano anche nell'era pre-DevOps, il che significa che gli standard di conformità erano realizzati tenendo presente il metodo a cascata. Quando si implementa la tracciabilità come requisito "a livello di organizzazione", è necessario farlo con attenzione. Non cadere nella trappola di applicare il metodo di conformità a cascata, che crea colli di bottiglia e influisce sulla velocità.

A questo punto potresti essere convinto del "cosa" e del "perché" della tracciabilità, ma voglio anche affrontare la parte più complicata: come garantire che la pratica della tracciabilità sia adottata dai team di sviluppo della tua organizzazione, senza l'eccessivo controllo di un approccio per fasi. 

Le organizzazioni spesso rispondono ai problemi con le versioni del software introducendo processi (fasi) aggiuntivi nell'SDLC. Quindi lottano per farli rispettare in modo efficace. Ad esempio, comunicare le pratiche da seguire senza introdurre aggiustamenti del flusso di lavoro e affidandosi efficacemente agli sviluppatori per ricordarsi di seguire i passaggi o, peggio, creare un pesante processo di gestione delle modifiche per ottenere il controllo a scapito della velocità e dell'autonomia. Questi metodi stanno aumentando il carico mentale per il team e sono anti-pattern Agile e DevOps!

Allora qual è la soluzione? Ecco come "modificare" i principi DevOps per soddisfare i requisiti di tracciabilità:

Passaggio 1: scrivi una leggera guida per il processo di modifica

Un documento di linee guida aiuta gli sviluppatori ad acquisire una chiara comprensione di ciò che è loro richiesto quando inviano il codice per la revisione e l'approvazione. Sii breve e semplice e non trascurare il "perché": è sempre più facile introdurre nuovi passaggi del flusso di lavoro se gli sviluppatori comprendono l'importanza di seguire le pratiche a livello di organizzazione come definite. Nel documento, spiega in che modo la tracciabilità avvantaggia il team - collega gli studi sopra menzionati - e fornisci esempi sia buoni che cattivi.

Passaggio 2: implementare la tracciabilità "a misura di sviluppatore".

Buono - integrazione: autonomia dello sviluppatore significa anche dare agli sviluppatori la libertà di scegliere quali strumenti utilizzare. Non forzare una soluzione specifica al team di ingegneri, invece, implementa la tracciabilità creando integrazioni con i loro strumenti e flussi di lavoro esistenti. 

Migliore - automazione: implementa controlli automatici per rilevare e notificare agli sviluppatori se il loro codice non è tracciabile. Pratiche come il test continuo e l'integrazione continua (CI) utilizzano tali controlli automatici. Se stai utilizzando CI o test automatizzati, ti consigliamo di aggiungere un controllo di tracciabilità. 

Eccellente - shift-left: fornisci un feedback allo sviluppatore il prima possibile se il suo codice non è rintracciabile. I team di progettazione ad alte prestazioni lo stanno facendo come parte del processo CI, ma i team di progettazione eccellenti aggiungono indicazioni in una fase ancora precedente, quando il codice viene inviato al repository.

Come sarebbe questo nel mondo reale? Se stai utilizzando Jira, dovrai assicurarti che ogni modifica al codice menzioni un ticket Jira e che gli sviluppatori abbiano la possibilità di seguire questa pratica senza problemi, attraverso integrazioni con il controllo del codice sorgente e l'istanza Jira. Quindi, aggiungi controlli automatici come parte del processo CI per verificare che ogni modifica del codice menzioni un numero di ticket Jira e impostalo per avvisare gli sviluppatori se mancano ticket quando stanno inviando il codice al repository.

Conclusioni

DevOps mira a rimuovere i colli di bottiglia per consentire una distribuzione del software più rapida, motivo per cui l'autonomia e l'automazione degli sviluppatori sono le nuove norme per i moderni team di software. Ma maggiore velocità significa maggiore complessità e difficoltà nell'implementazione di standard e best practice come la tracciabilità. La tracciabilità è particolarmente importante ai fini della conformità, ma se implementata correttamente, gli studi hanno dimostrato che aiuta effettivamente ad aumentare le prestazioni di distribuzione del software attraverso rilasci più rapidi e una migliore manutenibilità del codice. La chiave per garantire l'adozione della tracciabilità risiede nell'integrazione con gli strumenti esistenti e nei controlli automatizzati come parte del flusso di lavoro esistente.




Commenti
* Obbligatorio