L’ottimizzazione del codice permette di migliorare l’attività di manutenzione, ridurne i costi e contenere il debito tecnico

Refactoring del codice

Ottimizzare il funzionamento di un applicativo con il refactoring del codice

Il refactoring è l’attività di ottimizzazione del codice che mira a renderlo più snello e “pulito” e, di conseguenza, a rendere più facile e meno costosa l’attività di manutenzione. Si tratta di un processo sistematico di miglioramento del codice, che non prevede l’aggiunta di nuove funzionalità o il cambiamento del comportamento esterno dell’applicativo.

Devo rifattorizzare il codice se l’applicativo funziona? Le due cose non sono correlate poiché il refactoring non incide sul funzionamento del software: punta invece a migliorare la qualità del codice, a renderlo più facilmente manutenibile e a evitare l’accumulazione di debito tecnico. In particolare, il codice diventa più leggibile, riutilizzabile ed estendibile.

Quando è necessario richiedere un intervento di refactoring?

Quando il codice necessita di essere rivisto, solitamente presenta alcune caratteristiche che sono dei segnali di allarme per gli sviluppatori:

–        Presenza di codice duplicato e ripetitivo;

–        Difficoltà di lettura del codice;

–        Presenza eccessiva di bug.

Inoltre, è buona norma procedere a un processo di refactoring ogni volta che si decide di installare nuove funzionalità.

Il bad code è quindi il risultato di uno sviluppo di pessima qualità? Spesso è così, soprattutto a causa di una mancata o inadeguata fase di progettazione, ma è anche vero che durante la stessa scrittura del codice, potrebbero accumularsi delle strisce di codice duplicate o dipendenze tra classi diverse, troppe responsabilità per metodo o classe, ecc.

Ogni sviluppatore ha uno stile diverso di scrittura e la collaborazione tra team diversi potrebbe essere un’altra ragione di duplicazioni e, in generale, di codice complesso che necessita di essere ottimizzato. Inoltre, il codice diventa “vecchio” perché le componenti all’esterno evolvono.

Inoltre, tra il business e l’area tecnica spesso non c’è una visione comune e condivisa delle capacità ed evoluzioni progettuali e, di conseguenza, vengono effettuate richieste che, per essere soddisfatte, portano all’accumulo di debito tecnico.

La revisione del codice dovrebbe avvenire in maniera continuativa, per evitare l’accumulazione di bad code ma, per diverse ragioni, spesso questo non è possibile.

Di fronte quindi a un codice che necessita un intervento di ristrutturazione, il refactoring è l’attività giusta da richiedere.

Come si esegue il refactoring?

Questo processo può essere eseguito in diverse modalità a seconda delle esigenze. Per eliminare la ridondanza del codice, spesso di agisce con l’abstract refactoring che permette l’estrazione di codice e lo spostamento dello stesso tra classi, inferiori o superiori (metodo Push-Up/Push-Down). Questo metodo è ideale quando l’ammontare di strisce di codice da rifattorizzare è molto alto.

Per semplificare la gestione del codice nel tempo e allungare i tempi di vita degli applicativi, si procede invece con il composing method che, sfruttando sempre l’estrazione, semplifica il codice ed eventuali modifiche successive.

Come menzionato prima, è molto importante che il refactoring venga svolto ogni volta che si aggiunge una qualche funzionalità all’applicativo: in questo caso si parla di refactoring preparatorio, un metodo per aggiornare il codice ed evitare l’accumulo di debito tecnico. Spesso, a seguito dell’implementazione della nuova funzionalità, il codice potrebbe non essere così chiaro (soprattutto ad altri membri del team) e un nuovo intervento di refactoring potrebbe essere necessario.

Il refactoring come strategia di modernizzazione del software per combattere il debito tecnico

Sebbene il lavoro di refactoring possa avvenire in maniera continuativa, nella pratica questo succede raramente. Per questo motivo, spesso le aziende si trovano di fronte a sistemi applicativi con altissimi livelli di debito tecnico e il refactoring del codice diventa un lavoro urgente da svolgere.

Per questo motivo, il refactoring è inserito tra le tecniche di software modernization, ossia il processo di modernizzazione degli applicativi.

Ottimizzare il codice permette infatti di rendere l’applicativo più stabile e sicuro e previene l’accumulo di debito tecnico. Il debito tecnico funziona esattamente come i debiti finanziari: se il debito non viene ripagato, gli interessi si accumulano nel tempo. Questo comporta un calo della produttività dell’applicativo e un aumento dei costi di manutenzione. Spesso, individuare alti livelli di debito tecnico non è facile, ma esistono strumenti ad hoc che un’azienda di consulenza informatica può utilizzare per ottimizzare il lavoro di riduzione del debito, individuando gli hotspot ad alto interesse di debito.

Se l’applicativo presenta malfunzionamenti e inefficienze operative o impone limiti e vincoli tecnologici, il refactoring non è sufficiente: in questo caso, potresti avere bisogno di processi di modernizzazione più incisivi come la software replatform o software rebuild.

Per un ulteriore approfondimento sul refactoring e sulle diverse strategie di modernizzazione del software, puoi leggere questo articolo blog di Omnia Group, azienda di consulenza informatica specializzata in software modernization.