Forum Sicurpas...
09 – Manutenibilità del software - Versione stampabile

+- Forum Sicurpas... (http://www.sicurpas.it/forum)
+-- Forum: Ingegneria informatica, i crimini informatici (http://www.sicurpas.it/forum/Forum-Ingegneria-informatica-i-crimini-informatici)
+--- Forum: Ingegneria informatica (http://www.sicurpas.it/forum/Forum-Ingegneria-informatica)
+--- Discussione: 09 – Manutenibilità del software (/Thread-09-%E2%80%93-Manutenibilit%C3%A0-del-software)



09 – Manutenibilità del software - Mariano - 28-06-2012

Come avremo modo di vedere in dettaglio, col termine manutenzione, nel gergo dell’ingegneria del software, indichiamo tutte le attività che seguono, temporalmente, il momento del rilascio di un applicativo. Tali attività possono essere stimate oltre il 50% dei costi complessivi di un’applicazione, alcune valutazioni autorevoli riferiscono mediamente intorno dal 60 al 70%.

Con il termine manutenibilità intendiamo dunque la facilità tramite la quale, tali attività, vengono eseguite oltre all’economicità inerente i corrispondenti processi.
Per meglio comprendere la natura di questa peculiarità è bene scomporre la prassi inerente la manutenzione nei suoi principali fattori costitutivi. Uno dei motivi che induce ad una difficoltà iniziale nel comprendere il fenomeno è da ricercarsi nel confronto fra manutenzione nei settori dell’ingegneria tradizionale e ciò che invece accade in ambito produttivo per quanto riguarda il software. Infatti nei settori tradizionali dell’ingegneria la manutenzione è un fenomeno legato all’usura e all’obsolescenza dei materiali costituenti il prodotto, mentre, e questo è indubbiamente un paradosso, usura ed obsolescenza sono dei fenomeni totalmente assenti nel software, un applicativo non si deteriora certamente in relazione al numero di volte in cui viene eseguito.

Questa breve introduzione ci porta inevitabilmente a formulare una specifica domanda: in cosa consiste la manutenzione del software? Relazionandoci a particolari studi sfociati in una rigorosa analisi interpretativa, è possibile classificare le attività inerenti il post – rilascio di un applicativo nel modo seguente:

  • Manutenzione correttiva
  • Manutenzione adattativa
  • Manutenzione perfettiva


La manutenzione correttiva riguarda l’intervento sul software in modo tale da correggere gli errori residui sfuggiti al controllo di qualità che ha preceduto il rilascio. Si ritiene che questo tipo di intervento grava intorno al 20% sui costi di manutenzione: il fenomeno è assai preoccupante ed indica, inesorabilmente, quanto poco affidabili siano mediamente i software al momento del rilascio e quanto sia ancora ben lontano, con le odierne prassi progettuali, l’obbiettivo di creare e rilasciare applicativi privi di errori. Ed ancor più osserviamo che l’elevato tasso di difettosità nelle applicazioni rilasciate dal processo di sviluppo si referenzia come indicatore negativo in merito alla maturità dell’industria del software rispetto ad altri settori industriali più tradizionali.

La manutenzione adattativa costituisce un ulteriore 20% dei costi e consiste in quelle modifiche apportate all’applicazione per renderla adattabile all’ambiente in cui la medesima opera. Non si tratta pertanto di eliminare errori, modificare o aggiungere funzionalità, ma semplicemente di rendere l’applicativo idoneo a funzionare in relazione ai possibili mutamenti di contorno ambientale. I cambiamenti potrebbero essere legati all’hardware o alla configurazione software in cui il programma opera, oppure alle caratteristiche di un compilatore nuovo con il quale l’applicativo stesso viene progettato.

Affinché l’applicazione abbia a trarre tangibili vantaggi dalla macchina astratta deve chiaramente subire i necessari adeguamenti, poiché i mutamenti possono essere determinati da fattori esterni di natura socio – economica: modifiche delle aliquote IVA, detrazioni di natura fiscale, passaggio da una moneta ad un’altra, come nel caso dell’euro, che comporta una contabilità non più basata su numeri interi ma decimali.

La manutenzione perfettiva, che costituisce oltre il 50% dei costi, contempla ogni restante tipo di intervento, volto quindi all’eliminazione o aggiunta di nuove funzionalità, al miglioramento di particolari caratteristiche di qualità, come ad esempio l’interfaccia utente, l’efficienza ed altro ancora. Un esempio classico di manutenzione perfettiva è dato dal nostro programma: dalla versione 3.0.1 l’interfaccia grafica di Sicurpas implementa il set di icone Nuvola.

Si osservi in merito che, sovente, con il termine manutenzione, si accompagnano interventi di modifica che potrebbero rivelarsi radicali dell’applicazione! A voler fare un parallelo con l’ingegneria civile, è come se una semplice casa ad uso familiare venga manutenuta per essere trasformata in un palazzo a molteplici piani e siccome la manutenzione perfettiva costituisce la parte preponderante della prassi, questo parallelo pone in risalto come il termine manutenzione in ambito software denoti un concetto completamente differente da come possa essere in ambito dell’ingegneria tradizionale. In pratica, onde evitare confusione con altri settori dell’ingegneria, si potrebbero più appropriatamente utilizzare i termini di evoluzione e riparazione per le due componenti di manutenzione perfettiva e adattativa da un lato, e correttiva dall’altro. Purtroppo il termine manutenzione è ormai ben radicato nel gergo informatico con il significato sopra descritto, per cui nel seguito degli articoli anche noi ci adatteremo a tale incombenza, seppur ricorrendo alle cautele sin qui descritte.

Il motivo per il quale la manutenzione perfettiva grava in modo così accentuato sui costi del software è dovuto alla malleabilità del medesimo, peraltro già descritta nei precedenti articoli. Niente è più facile da plasmare del software, infatti, piuttosto che rivedere il progetto iniziale, si preferisce evolvere l’applicazione inglobando le nuove caratteristiche richieste. Le necessità ad evolvere di un’applicazione è un fatto sovente connaturato con le applicazioni software, in modo particolare con quelle che stanno a contatto diretto con gli utenti finali inesperti: le applicazioni sono infatti chiamate ad evolvere in modo esponenziale rispetto ad un utilizzo proficuo. Questo apparente paradosso può essere spiegato osservando innanzitutto che un applicativo utilizzato di rado difficilmente richiederà eventuali modifiche, mentre un software che viene utilizzato nel lavoro quotidiano provoca immediatamente dei riflessi sul modus operandi a tal punto da richiedere modifiche all’applicazione. Ecco quindi che si manifesta una classica situazione di retroazione: l’organizzazione del lavoro impone esigenze di automazione mediante applicazioni software le quali provocano delle modifiche ulteriori in suddetta organizzazione e così discorrendo.

Chiaramente non tutte le applicazioni fanno parte di questa tipologia caratterizzata da elevata evolvibilità, esistono software i cui requisiti funzionali permangono stabili, formalizzati sin dall’inizio, pertanto l’esigenza di una manutenzione perfettiva si concretizza in episodi alquanto marginali. Attenzione, non è il caso di crogiolarsi in facili entusiasmi, anche in situazioni di apparente stabilità, come ad esempio il progetto di un compilatore per un determinato linguaggio, la necessità ad evolvere è comunque latente. Oltre alla necessità di evoluzione adattativa che può manifestarsi nell’esigenza di scrivere del codice portabile su differenti macchine, l’esigenza di manutenzione perfettiva sorge quando si vogliono inglobare nel compilatore nuove tecniche legate all’ottimizzazione del codice oppure una diagnostica più efficiente o delle tecniche di correzione automatica dell’errore. Può accadere inoltre che il linguaggio di programmazione al quale il compilatore fa capo debba a propria volta subire degli adeguamenti, pertanto questo condurrebbe ad una evoluzione e non alla riprogettazione totale del compilatore medesimo.

Quanto sin qui esposto è relativo al prodotto, ma può tranquillamente essere applicato al processo. Da un lato infatti la manutenzione del prodotto deve supportarsi con un processo di manutenzione che impone il dispendio di risorse umane e finanziarie. Possiamo però parlare di manutenzione del processo stesso alfine di indicare la necessità di apportare modifiche ai piani inizialmente previsti o per correggere impostazioni iniziali rivelatesi erronee.
Quanto alla distinzione tra caratteristiche di qualità interne ed esterne, la manutenibilità è indubitabilmente accostabile ad entrambe le categorie. Da una parte è possibile apprezzare la manutenibilità di un prodotto dall’esterno, misurando il tempo necessario per compiere determinate modifiche, dall’altra la manutenibilità del prodotto viene ottenuta operando nel progetto ricorrendo ad una metodologia in grado di facilitare eventuali modifiche.