mercoledì, febbraio 15, 2006

Ingegneria del software: 28 febbraio 2005

Cos'é l'ingegneria del software:
Disciplina tecnologica e manageriale che riguarda la produzione sistematica e la manutenzione dei prodotti software che vengono sviluppati e modificati entro i tempi e i costi preventivati...


Inizialmente la produzione di software era di tipo artigianale, crescendo lo sviluppo é diventato più complesso ed ha iniziato a necessitare team di sviluppatori e coordinamento tra di essi.
La manutenzione di un software occupa circa il 70% del budget.
Obiettivi:
Rispetto di certe qualità del prodotto finale
Terminologia comune (tra gli informatici)
Lista di riferimento
Dare una definizione (difficile dare una definizione formale e difficile misurarla)

QUALITA'
4 categorie:
Qualità del processo (di solito implica la qualità del prodotto)
Qualità del prodotto
Qualità interne (di solito portano a anche a qualità esterne)
Qualità esterne (apparenza del prodotto)

Affidabilità (processo)
Vengono prodotti gli effetti voluti o con scostamenti "tollerabli"
Esistono definizioni statistiche sulla probabilità di affidabilità.
L'affidabilità NON E' SCONTATA (vedi disclaimer dei contratti software)

Correttezza (processo)
Rispetta le specifiche concordate (fa quello che deve fare).
Le specifiche rispettano i desideri del cliente?
R. Glass Law (L1): Deficienze nella raccolta dei requisiti é la prima ragione di fallimento dei progetti.

Robustezza (prodotto)
Capacità di funzionare anche in casi leggermente diversi da quelli previsti dalle specifiche.
Tolleranza degli errori (fault tollerance).
Innoquità (safety): non faccia danni in qualsiasi caso.

Prestazioni (prodotto)
Calcolo delle prestazioni: tempo di esecuzione e uso di memoria.
Non ci si può affidare esclusivamente alla crescita dell'hardware.
Si possono misurare:
empiricamente: monitor, profiler, analisi della complessità
simulazioni: modelli della teoria delle code
Tempi di risposta accettabili

Usabilità (prodotto)
(essere user friendly)
Capacità di essere usata facilmente dall'utente
Interfaccia intuitiva
Standardizzazione dei metodi di interazione
Importantissimo nel caso di applicazioni web
Nielsen-Norman (L6): L'usabilità é quantificabile
Quantità e tipo di errori che gli utenti compiono, movimenti degli occhi, del mouse, ecc.

Verificabilità (interna del prodotto)
E facile verificare la correttezza del mio prodotto?
Lunghezza media dei moduli, dei nomi, ecc.
Stili nei commenti, ecc.

Verificabilità (interna ed esterna del processo)
O Visibilità
Quanto dell'avanzamento del processo é visibile esternamente?

Manutenibilità (prodotto)
60, 70% dei costi é dopo il rilascio
Sottocategoria: correttiva
(riparabilità)
: é semplice riparare ad eventuali errori?
Sottocategoria: adattativa e perfettiva (evolvibilità): semplicità di aggiungere nuove parti o di adattarne altre già esistenti.
Nella maggior parte dei casi si modifica solo il codice dimenticandosi di aggiornare anche la documentazione, ecc. ecc.
Lehman's law (L27 e L28): Se un software é usato verranno chiesti dei cambiamenti. Un sistema che evolve aumenta la sua complessità interna (entropia) a meno che non si cerchi di contenerla.

Riusabilità (prodotto)
Riesco a riutilizzare parti del codice scritto?
Incapsulare parte del codice in componenti, classi, librerie riutilizzabili.
Mellroy's law (L15): La riutilizzabili del software aumenta la produttività.

Produttività (processo)
Unità prodotte / sforzo compiuto (potrebbe essere: linee di codice/ore di lavoro o punti funzione/ore di lavoro)
La cosa peggiore per un progetto in ritardo é dargli nuove risorse.

Tempismo (processo)
Rispettare i tempi contrattuali
Ritardi possono compromettere il successo di un prodotto
Difficile per i continui cambi di richieste da parte del cliente durante lo sviluppo
Soluzioni: consegnare e continuare a incrementare le funzionalità

Nessun commento: