Programmi per computer con la relativa documentazione, quale ad esempio requisiti, modelli di progetto, e manuali utente.
Non solo programmi, ma l’insieme degli ‘artifatti’ che lo compongono, prodotti durante il suo sviluppo:
La definizione IEEE (Institute of Electrical and Electronic Engineers): insieme di programmi, procedure, regole, e ogni altra documentazione relativa al funzionamento di un sistema di elaborazione dati
Il Software può essere:
Sempre più critico:
Sempre più complesso:
Sempre più diffuso:
I costi del Software spesso dominano i costi complessivi dei sistemi informatici. I costi del software per PC sono spesso maggiori dei costi dell’hardware stesso.
É più costoso manutenere il software piuttosto che svilupparlo, soprattutto per sistemi legacy.
Circa il 60% dei costi è speso per le attività di sviluppo, il 40% per il testing.
Per software personalizzato, I costi per l’evoluzione spesso superano quelli di sviluppo.
I costi variano in base al tipo di sistema sviluppato e ai requisiti di qualità richiesti quali le prestazioni o l’affidabilità.
La distribuzione dei costi dipende anche dal tipo di modello di sviluppo adottato.
Un software di qualità dovrebbe fornire le funzionalità e le prestazioni richieste essendo contemporaneamente manutenibile, fidato, efficiente, accettabile…
Qualunque sviluppatore (anche privo di adeguata preparazione) è in grado di scrivere codice che ‘funzionerà‘ (ma fino a che punto?)
I problemi di qualità del software sono difficili da rilevare:
I problemi del software:
- Vedi i fallimenti ‘famosi‘ dei progetti:
- ARIANE 5 (progetto aerospaziale)
- Therac25 (Sistema medico per la Radioterapia)
- …
L’ ingegneria del software è una disciplina ingegneristica che si occupa di tutti gli aspetti relativi allo sviluppo del sofware.
Gli ingegneri del software dovrebbero adottare:
Ingegnerizzazione
Programmazione
Un insieme di attività aventi per obiettivo lo sviluppo o l’evoluzione di un sistema software.
Ogni processo software deve includere le seguenti attività fondamentali:
Una descrizione semplificata del processo software, osservato da un determinato punto di vista.
Generici modelli di processo:
Senza adeguati sforzi, metodologie e conoscenze il software prodotto risulta di qualità scadente, destinata a peggiorare durante il suo ciclo di vita.
La richiesta di software è elevata e sempre crescente.
Siamo in perenne ‘crisi del software’.
É necessario imparare ad ‘ingegnerizzare’ il software.
Le sfide nel campo dell’Ingegneria del software sono quelle della Produttività, Affidabilità, e Semplicità.
Brooks in un articolo storico del 1987 [IEEE Computer, Aprile 87] afferma che non esiste (e non potrà mai esistere) alcun “Silver Bullet” (pallottola d’argento) che possa risolvere tutti i problemi dell’Ingegneria del Software.
I problemi derivano da quelle che Brooks definisce Difficoltà Essenziali ed Accidentali nel software.
Accidental difficulties: sono legate ad aspetti della produzione del software che generano la possibilità di commettere errori: linguaggi macchina complessi, lenti tempi di risposta di alcuni sistemi (es. Batch), etc..
Miglioramenti nel processo e negli strumenti di sviluppo del software possono però abbattere gli sforzi legati a tali difficoltà:
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...
I. Sommerville – Ingegneria del Software – 8a edizione – Cap.1
R. Pressman- Principi di Ingegneria del Software- 4 edizione- Cap. 1