Qualsiasi software, dopo il rilascio della prima release, avrà bisogno di essere modificato.
I sistemi software sono, per loro natura, sistemi evolutivi che cambiano durante la loro vita.
Ciò deriva dal fatto che, durante la vita del sistema, le caratteristiche che lo definiscono cambiano, cambiando sia le esigenze di chi usa il software, sia dell’ambiente del mondo reale in cui il sistema opera.
Più i requisiti del sistema sono instabili, o specificano un problema in maniera incompleta ed approssimativa, più il sistema avrà bisogno di cambiare.
L’evoluzione di un software è dunque inevitabile!
Le organizzazioni proprietarie hanno fatto grossi investimenti per I loro sistemi software, che sono risorse critiche!
Per preservare il valore di tali risorse, I sistemi devono necessariamente cambiare ed evolvere.
La manutenzione è un’attività costosa e la maggior parte del budget speso per il software è in genere speso per la sua manutenzione, piuttosto che per il suo sviluppo.
Un tipico progetto di sviluppo software mediamente dura tra 1 e 2 anni, mentre la durata del periodo di manutenzione può variare tra 5 e 6 anni [1]
[1] Parikh and Zvegintzov, Tutorial on Software Maintenance, IEEE, 1993.
La vita di un sistema evolve attraverso varie Release.
Ogni Release nasce dalla necessità di cambiare o far evolvere la Release precedente.
Fino a che punto si può continuare a far evolvere un sistema software?
Quando si deve decidere di gettare il vecchio sistema e sostituirlo con uno nuovo?
Alcune domande da porsi:
Ci sono delle regole valide in generale per i sistemi software, che ci permettono di capire cosa sta accadendo ad un sistema in evoluzione?
Una valida indicazione può giungerci dallo studio delle serie storiche di alcuni dati (es. dimensioni, complessità, risorse richieste, facilità di manutenzione).
Se l’evoluzione di tali dati seguisse un andamento ‘invariante’, dalla loro osservazione potremo dedurre cosa sta accadendo al software.
Proposte da Lehman e Belady [1] a partire dal 1976, in seguito a studi empirici basati inizialmente sull’osservazione dell’evoluzione di 4 versioni successive di un S.O. IBM.
Leggi iniziali
Leggi più recenti
[1] Lehman, Belady, Program Evolution: Process of Software Change. London: Academic Press (Cap. 21), 1985.
Modifiche continue
Complessità crescente
Evoluzione dei grandi sistemi
Stabilità organizzativa
Conservazione della familiarità
Crescita continua
Qualità deteriorata
Sistema feedback
Le leggi di Lehman sembrano applicabili a sistemi di grandi dimensioni e personalizzati, sviluppati da vaste organizzazioni.
Non è chiaro come dovrebbero essere modificate per:
Classificazione degli interventi di manutenzione
Fig.2: La distribuzione dello sforzo per classi di manutenzione. Da Lientz, Swanson, Problems in application software maintenance, 1981 Communication of the ACM.
In gran parte dipendono dalla mancanza di controllo e disciplina nelle fasi di analisi e progetto del Ciclo di Vita del Software.
Alcuni fattori tecnici:
Stabilità del team
Responsabilità contrattuale
Capacità dello staff
Età e struttura del programma
[v. anche G. Visaggio, "Giuseppe Visaggio: Ageing of a data-intensive legacy system: symptoms and remedies. Journal of Software Maintenance 13 (5): 281-308 (2001), Wiley]
Per una più efficace ed efficiente gestione di un sistema in evoluzione, è utile riuscire a:
Quali fattori possono essere considerati per fare tali previsioni?
Per prevedere i probabili cambiamenti del sistema occorre analizzare le sue dipendenze dall’ambiente esterno:
La manutenibilità può essere definita come la probabilità che, in determinate condizioni d’uso, una attività di manutenzione possa essere condotta entro un prefissato intervallo di tempo, usando definite procedure e risorse.
La manutenibilità può essere valutata da due diverse prospettive (interna ed esterna):
Molti studi hanno indagato la relazione fra attributi interni del software e manutenibilità.
Si è riscontrato che lo sforzo di manutenzione si concentrava sempre sui componenti più complessi.
Metriche di complessità usabili per predire:
Si usano dati sul processo di manutenzione per predire la manutenibilità
Altri dati utili:
Numero di problemi non risolti, tempo speso su problemi non risolti, % di modifiche che hanno introdotto nuovi difetti, numero di componenti modificati per implementare una modifica.
Si basa sulla previsione delle richieste di modifica e della manutenibilità del sistema.
Molti metodi di stima dei costi si basano sullo sforzo necessario per comprendere il software e per sviluppare nuovo codice (es. COCOMO2).
Es. Equazione di Lehman e Belady:
M= p+ K c-d
M= sforzo di manutenzione, p= sforzo di sviluppo totale, c è la complessità causata dalla mancanza di strutturazione e documentazione, d è il grado di familiarità del team di manutenzione col software.
In alcuni casi le richieste di manutenzione devono essere soddisfatte rapidamente:
In questi casi, le fasi di analisi e progetto della modifica potrebbero non essere eseguite, implementando direttamente il cambiamento.
2. Ciclo di Vita e Processi Software
3. Processi per lo sviluppo rapido del software
4. Sviluppo Agile del Software
5. Test Driven Development (TDD)
7. Component Based Software Engineering (CBSE): Generalità
8. Component Based Software Engineering (CBSE): Il processo di svi...
9. Ingegneria del Software orientato ai Servizi
10. Ingegnerizzazione dei Servizi
11. I Processi di Manutenzione del Software
12. Reengineering, Refactoring e Reverse Engineering del Software
13. Verifica e Convalida del Software. Richiami e concetti di base ...
14. Tecniche di Testing Dinamico
15. Testing di Sistemi Object Oriented
16. Automazione del testing e Analisi Mutazionale
17. Tecniche di Analisi Statica del codice e il Debugging
18. Stima dei costi nei progetti Software
19. Il Modello COCOMO per la stima dei costi Software – La gestio...
20. Gestione e Miglioramento dei Processi di Produzione del Softwar...
21. La Valutazione della Qualità dei Processi Software – Il Capa...
Sommerville, Ingegneria del Software, 8a ed., Capitolo 21
Ulteriori Letture Raccomandate
Grady Booch, Nine Things you can do with old software, IEEE Software, Sept/Oct 2008
Canfora, Di Penta “Frontiers of Reverse Engineering:a Conceptual Model”, FOSM08 – IEEE Comp. Soc. 2008