Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Sergio Di Martino » 1.Introduzione all'Ingegneria del Software – La qualità del Software


Obiettivi della lezione

  • Cos’è l’Ingegneria del Software
  • Info sul Corso
    • Motivazioni, Programma, Modalità
    • Come superare l’esame…
  • Discutere i concetti di Prodotto Software
  • Introdurre il concetto di Qualità del Software

L’Ingegneria

L’ingegneria è una scienza applicata alla risoluzione di problematiche che concorrono alla soddisfazione dei bisogni umani; più in generale l’ingegneria è Scienza delle soluzioni.”

L’ingegneria, applicando le norme tecniche, fornisce metodi, progetti e specifiche per la produzione (costruzione) di un bene fisico, di un prodotto o di un servizio, e più in generale per lo sviluppo e il controllo di un processo industriale.”

L’ingegneria propone metodologie di sviluppo, che riassumono e formalizzano esperienze e conoscenze pregresse.

  • Edilizia
    • Marco Vitruvio Pollione, De Architectura (1° Secolo A.C.)
  • Aereonautica, Automobili, etc…
  • Elettronica
  • Nucleare

Da Wikipedia

Lo sviluppo software

Molti fattori hanno storicamente limitato l’utilizzo di approcci ingegneristici nella produzione di software:

  • l’intangibilità del software;
  • disciplina (relativamente) nuova;
  • approccio “artistico”, non strutturato allo sviluppo;
  • mancanza di formalismi e strumenti di supporto.

Si può continuare su questa strada?

L’Ingegneria del Software

Definizione PCWebopedia:
The computer science discipline concerned with developing large applications. Software engineering covers not only the technical aspects of building software systems, but also management issues, such as directing programming teams, scheduling, and budgeting.”

Definizione IEEE (2007):
L’ingegneria del software è la disciplina tecnologica e manageriale che riguarda la produzione sistematica e la manutenzione dei prodotti software entro tempi e costi preventivati“.

Informalmente: sviluppo cost-effective di software di qualità.

Il Software nell’economia moderna

Le economie di tutti i paesi sviluppati dipendono dal software, e la maggior parte dei sistemi sono controllati da software.

Le economie di tutti i paesi sviluppati dipendono dal software, e la maggior parte dei sistemi sono controllati da software.


Software vs. Altri Artefatti

Differenze con prodotti industriali classici:

  • intangibile;
  • malleabile;
  • ad alta intensità di lavoro umano;
  • spesso costruito ad hoc invece che assemblato;
  • manutenzione = cambiamento.

Il software ha costi elevati.
Sono i costi delle risorse usate: ore lavoro (manpower), hardware, software e risorse di supporto. Il manpower è dominante!
Il costo è espresso in mesi/uomo.
La manutenzione costa più dello sviluppo.
Per sistemi che rimangono a lungo in esercizio i costi di manutenzione possono essere svariate volte il costo di produzione.

Software e costi, oggi


Evoluzione della Produzione di Software

Arte: applicazioni sviluppate da singole persone e utilizzate dagli stessi sviluppatori.

Artigianato: applicazioni sviluppate da piccoli gruppi specializzati per un cliente.

Industria: diffusione del software in diversi settori; crescita di dimensioni, complessità e criticità delle applicazioni; mercato e concorrenza; necessità di migliorare la produttività e la qualità; gestione dei progetti; evoluzione del software.

Ingegneria del Software

L’informatica è una scienza: il “cuore” sono i fondamenti teorici: linguaggi – algoritmi – complessità – formalismi ecc. L’ingegneria del software ha a che fare con aspetti più “pratici”: come pianificare e sviluppare la produzione di software di qualità. Ad un ingegnere del software le conoscenze di base dell’informatica servono per avere la visione d’insieme necessaria a gestire con successo un progetto software. L’Ingegneria del Software quindi:

  • riguarda la costruzione di software:
    • di grandi dimensioni;
    • di notevole complessità;
    • sviluppati tramite lavoro di gruppo;
    • …mentre avvengono cambiamenti;
  • progetti software di questo tipo hanno tipicamente:
    • versioni multiple;
    • lunga durata;
    • frequenti cambiamenti;
    • eliminazione di difetti;
    • adattamento a nuovi ambienti;
    • miglioramenti e nuove funzionalità;
  • multi-person construction of multi-version software (Parnas).

Ingegneria del Software: Principi

Rigore e formalità
Rigore: concetto primitivo (precisione, accuratezza).
Formalità: oltre il rigore. Fondamento matematico.
In ogni fase del processo di produzione del SW bisogna definire il livello di rigore/ formalità necessario. Separazione di aspetti diversi: affrontare separatamente i vari lati di un problema complesso.
Esempio:

  • rispetto al tempo;
  • rispetto a diverse proprietà del sistema;
  • rispetto a diverse viste del sistema;
  • rispetto a diverse componenti del sistema, …

Modularità: suddividere un sistema complesso in parti più semplici.
Bottom-up vs. top-down
Obiettivi:

  • decomporre il problema (divide et impera);
  • comporre le soluzioni dei sottoproblemi;
  • comprendere meglio il sistema globale.

Astrazione: si identificano gli aspetti cruciali in un certo istante ignorando gli altri.
Anticipazione del cambiamento: la progettazione deve favorire l’evoluzione del SW.

Cos’è un prodotto software?

Qualcosa di più di un insieme di linee di codice…

Un insieme di:

  1. programmi per computer;
  2. tutta la documentazione che descrive la struttura del sistema;
  3. i dati di configurazione, che permettono di installarlo;
  4. il manuale utente.

Programma: l’autore è anche l’utente (e.g., non è documentato, quasi mai è testato, non c’è progetto) non serve approccio formale.
Prodotto software: usato da persone diverse da chi lo ha sviluppato è software industriale il cui costo è circa 10 volte il costo del corrispondente programma dobbiamo avere approccio formale allo sviluppo.

Tipologie di Prodotti Software

Prodotti generici (general purpose): sistemi stand-alone prodotti da una organizzazione e venduti a un mercato di massa.
Prodotti specifici (specific purpose): sistemi commissionati da uno specifico utente e sviluppati specificatamente per questo da un qualche contraente.

La fetta maggiore della spesa è nei prodotti generici ma il maggior sforzo di sviluppo è nei prodotti specifici.
La differenza principale?
Chi dà le specifiche del prodotto (il produttore o il consumatore).

Qualità del Software

Come si “misura” la qualità di un artefatto intangibile?
Per qualità del software si intende la misura in cui un prodotto software soddisfa un certo numero di aspettative rispetto sia al suo funzionamento sia alla sua struttura interna. [...] Gran parte della ricerca nel campo dell’ingegneria del software è dedicata, direttamente o indirettamente, al tema della qualità“. (Wikipedia)

Esistono varie classificazioni e metriche per la Qualità del Software:

  • qualità Esterna ed Interna;
  • modello di Qualità di McCall;
  • modello di Qualità di Bohem;
  • standard ISO/ IEC 9126:2001;

I fattori rispetto a cui si può misurare la qualità del software vengono classificati in:

  • fattori Esterni (o di Prodotto) - la qualità del software percepita dagli utenti;
  • fattori Interni (o di Processo) – la qualità del software percepita dagli sviluppatori.

Fattori Esterni

Correttezza

  • Un software si dice corretto se si comporta in accordo a quanto previsto dalla sua specifica dei requisiti.

Affidabilità

  • Un sistema è tanto più affidabile quanto più raramente, durante l’uso del sistema, si manifestano malfunzionamenti.

Usabilità

  • Un sistema è facile da usare se un essere umano lo reputa tale.

Scalabilità

  • Un sistema è scalabile se può essere adattato a diversi contesti con forti differenze di complessità (per esempio database molto piccoli o molto grandi) senza che questo richieda la riprogettazione dello stesso sistema.

Robustezza

  • La robustezza di un sistema è la misura in cui il sistema si comporta in modo ragionevole in situazioni impreviste, non contemplate dalle specifiche.

Fattori Interni

Efficienza

  • Un sistema è efficiente se usa le risorse HW/SW in modo proporzionato ai servizi che svolge.

Riparabilità

  • Un sistema è riparabile se la correzione degli errori è poco faticosa. La riparabilità si persegue attraverso la modularizzazione. Non conta tanto il numero, ma piuttosto il come sono organizzati tra loro e al loro interno.

Riusabilità

  • Facilità con cui è possibile riusare parti di sistema per realizzare un prodotto diverso.

Fattori Interni (segue)

Portabilità

  • Un sistema è portabile se è in grado di funzionare in ambienti diversi.

Verificabilità

  • Un sistema è verificabile se le sue proprietà: correttezza, affidabilità, sono facili da verificare.

Manutenibilità

  • Facilità di apportare modifiche a sistema realizzato.

Il modello di qualità di Mc Call


  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion