Manutenzione dei sistemi Legacy

Manutenzione dei sistemi Legacy

Manutenzione dei sistemi Legacy

Per manutenzione si intende il complesso delle operazioni necessarie a conservare la conveniente funzionalità, efficienza e modificabilità del sistema. La manutenzione è un elemento strategico per il software, e ancora oggi, nonostante il miglioramento dei processi produttivi, rappresenta oltre il 70% della spesa per i sistemi informatici; inoltre una manutenzione non strutturata e caotica porta al rapido degrado di un sistema, e quindi alla sua totale ingestibilità (accelera il diventare legacy di un sistema).

La manutenzione ha tutta una serie di problematiche, dovute principalmente al fatto che  è estremamente complicato capire il software realizzato da altri (in funzione inversa alla quantità di documentazione) e che l’autore del software in genere non è disponibile per collaborare alla risoluzione del problema. Inoltre, soprattutto nel caso di sistemi molto vecchi, la documentazione spesso non esiste o è fortemente inadeguata, ed i criteri di progettazione del software seguiti (spesso semplicemente dei criteri “spontanei”) non tengono conto della caratteristica di modificabilità: un “programma”, o meglio ciò che rappresenta oggetto di possibile modifica al più basso livello di astrazione, dovrebbe essere comprensibile anche a chi non ha partecipato alla sua creazione. In particolare, l’ineguatezza viene deriva dal fatto che la documentazione deve essere realmente  utilizzabile,  quindi  deve essere disponibile un modo per renderla “navigabile”, ovvero per capire dove trovare le informazioni di volta in volta di interesse, tenendo conto che l’utilizzazione delle informazioni risponde caso per caso a logiche diverse; inoltre le informazioni devono essere coerenti.

Generalmente in letteratura si distinguono vari tipi di manutenzione:

  • Correttiva: serve per la rimozione di difetti (un difetto genera un comportamento del sistema diverso da quanto stabilito dalle specifiche o errato perchè le specifiche sono inadeguate). Tale tipo di manutenzione è fondamentale perchè un qualsiasi software, anche il miglior progettato, presenta degli errori.
  • Adeguativa: il suo fine è l’adeguamento del sistema ai mutamenti intervenuti nell’ambiente tecnico a livello infrastrutturale o tecnologico (cambio di DBMS, o di versione del sistema operativo, ecc.).
  • Migliorativa: serve a migliorare principalmente gli elementi che servono a soddisfare i requisiti non funzionali (prestazioni, uso di  risorse,  manutenibilità, ecc.).
  • Evolutiva: il suo fine è di migliorare il sistema dal punto di vista dei requisiti funzionali di natura non essenziale (ovvero gli obiettivi primari della applicazione e le sue caratteristiche tecnologiche di base rimangono inalterate).

Talvolta si parla anche di manutenzione Preventiva per riferirsi ad interventi, periodici o derivanti da determinati eventi, finalizzati ad evitare il degrado del sistema (esecuzione casi di test, “quadrature”, ecc.) o per evitare i malfunzionamenti che possono intervenire a fronte di nuovi “run” di una procedura; essi possono implicare la produzione di software ad hoc. Una quadratura di fatto consiste nella verifica che esistano congruenze, soprattutto a livello di dati, tra gli output dello stesso sistema ovvero tra output di sistemi diversi ma collegati.

In generale si può dire che la manutenzione è la base di tutti gli interventi che si possono operare su un sistema, sia perché la velocità con cui esso tende a diventare legacy dipende molto dall’adeguatezza e qualità del processo di manutenzione,  sia  perché spesso diventa poi difficile dare una chiara separazione tra intervento di manutenzione e di altro tipo. Alcuni talvolta vedono il reverse engineering come un intervento di manutenzione perfective, ed addirittura il wrapping può essere visto come un tipo di manutenzione evolutiva (proprio perchè non agisce profondamente sulla struttura del sistema).

In linea di massima si può assumere che si è in presenza di manutenzione quando, nonostante le modifiche, il sistema rimane strutturalmente costante e continua a giocare lo stesso ruolo nell’ambito del contesto d’uso.

Nonostante le metodologie e gli strumenti resi disponibili dall’Ingegneria del Software, mediamente i costi della manutenzione stanno crescendo, in termini percentuali, rispetto a quelli dello sviluppo, sia perchè i sistemi sono sempre più grandi e complessi, la base di sistemi obsoleti si ampia sempre di più, ecc., sia per cause meno ovvie, ad esempio proprio la disponibilità di tool di alta produttività a disposizione di un’ampia base produttiva (come i 4GL) provoca la frammentazione della produzione e quindi un minor controllo da parte di unità centralizzate.

Fattori che influenzano la Manutenzione dei sistemi Legacy

Alcuni fattori influenzano negativamente i costi di manutenzione:

  • età del sistema;
  • dimensioni;
  • complessità dei programmi;
  • volatilità dell’applicazione;
  • carenza di documentazione;

mentre altri hanno una influenza positiva:

  • l’uso di tecniche strutturate o formali;
  • la presenza di una metodologia di sviluppo e quindi di una documentazione standard e controllata;
  • la disponibilità di casi di test (per effettuare i test di regressione dopo l’intervento);
  • l’utilizzo di tool automatici
  • la presenza di un buona concezione di database administration;
  • l’esperienza dei manutentori;
  • la natura degli strumenti tecnologici utilizzati (a partire dai linguaggi di programmazione);
  • la “pulizia” del codice.

Oltre ai costi diretti, la manutenzione implica un insieme di costi indiretti:

  • i nuovi sviluppi devono essere rimandati o ritardati ed in genere perturbati perchè le risorse sono impegnate nel mantenere qualcos’altro o perchè l’intervento  deve essere realizzato dallo stesso gruppo che ha costruito l’oggetto da modificare;
  • il tempo di attesa per un intervento è sempre troppo lungo per l’utente e quindi si può generare disaffezione verso il sistema;
  • le probabilità di introdurre errori latenti con l’intervento sono altissime.

Quanto all’incidenza, il tipo di manutenzione che risulta di maggior costo è chiaramente quella migliorativa, seguita da quella adeguativa, ovvero quei tipi di manutenzioni che possono rendere necessari gli interventi potenzialmente più “pericolosi”.

Precedente Approcci ingegneristici per sistemi Legacy Successivo Reverse Engineering per sistemi Legacy

Lascia un commento

*