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
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Porfirio Tramontana » 12.Progettazione e qualità


Il Processo della progettazione

Definizione:
Progettare significa eseguire un processo di risoluzione di un problema il cui obiettivo è trovare e descrivere un modo:

  • Per implementare i requisiti funzionali…
  • Rispettando i vincoli imposti dai requisiti non funzionali
    • inclusi i vincoli sul budget
  • In conformità con una serie di principi di buona qualità.

Progettare significa prendere una serie di decisioni

Un progettista affronta una serie di problemi di design

  • Sono sotto-problemi specifici del problema complessivo della progettazione;
  • Ciascun problema ha normalmente una serie di soluzioni alternative:
    • design options.
  • Il progettista effettua una serie di design decision per risolvere ciascun problema
    • Significa scegliere la migliore fra le alternative possibili.

Prendere decisioni

Per prendere una decisione di progetto, l’ingegnere del software usa:

  • La conoscenza …
    • Dei requisiti;
    • Del progetto realizzato fino a quel punto;
    • Delle tecnologie disponibili;
    • Dei principi di progettazione software e di ‘best practices’;
    • Di ciò che ha funzionato bene in passato.

Design space: lo spazio delle possibili scelte

Lo spazio dei possibili progetti che saranno implementabili scegliendo tra le varie alternative viene spesso chiamato design space.

Lo spazio dei possibili progetti che saranno implementabili scegliendo tra le varie alternative viene spesso chiamato design space.


Progettazione Top-down e bottom-up

Top-down design

  • Si parte col progettare la struttura di altissimo livello del sistema
    • Es. definire l’architettura del software e il tipo di database che sarà impiegato.
  • Quindi si procede gradualmente con decisioni più dettagliate riguardanti aspetti di più basso livello, quali:
    • Il formato di particolari dati;
    • Gli algoritmi che saranno usati.

Progettazione Top-down e bottom-up (segue)

Bottom-up design

Si parte progettando i componenti basilari di basso livello e si decide poi come collegarli insieme per ottenere i componenti di più alto livello.

Si procede dunque per livelli di astrazione (layers of abstraction).

In genere è normale usare un misto dei due approcci:

  • La progettazione Top-down è necessaria per definire una buona struttura del sistema;
  • La progettazione Bottom-up serve a progettare componenti riusabili in altri punti del sistema.

Differenti aspetti della progettazione

  • Progetto concettuale
  • Progetto dell’architettura
  • Progetto di dettaglio delle classi
  • User interface design
  • Database design
    • Il progetto dei dati persistenti
  • Algorithm design
    • Progetto dei meccanismi computazionali.
  • Protocol design
    • Progetto dei protocolli di comunicazione.

La Qualità del Software

  • La qualità di un prodotto software si caratterizza
    • Attraverso un insieme finito e definito di attributi
      • ragionevolmente esaustivi
        • in modo che per una qualsiasi richiesta di caratteristica di qualità, sia possibile associarvi un sottoinsieme degli attributi definiti in modo da poterla valutare
      • privi di reciproche sovrapposizioni:
        • per evitare che più attributi riguardino la stessa caratteristica del software
  • Un tale insieme forma un Modello di Qualità (MQ) del software
    • È uno schema di riferimento che, con una opportuna distribuzione di pesi per ciascun attributi, va adeguato e tarato per la rappresentazione dei requisiti di qualità desiderati dal committente o posseduti dal software.
  • Il modello maggiormente accettato ad oggi è il modello ISO 9126.

ISO 9126

È suddiviso in 4 parti:

  1. Quality Model
    • un insieme di caratteristiche di qualità esterne che possano essere in grado di descrivere I principali fattori di qualità di un prodotto software;
  2. External Metrics
    • Un insieme di metriche indirette attraverso le quali sia possibile valutare la conformità di un prodotto software al modello di qualità;
  3. Internal Metrics
    • Un insieme di metriche direttamente misurabili che possano essere utilizzate allo scopo di valutare le External Metrics;
  4. Quality In Use Metrics
    • Metriche dirette rivolte alla valutazione del sottoinsieme di caratteristiche di qualità legate all’utente.

Approccio ISO alla qualità

La qualità del processo contribuisce a migliorare la qualità del prodotto, influenzando direttamente I valori degli attributi interni di qualità (misurati tramite le internal measures).

Gli attributi di qualità esterni sono influenzati da insiemi di attributi di qualità interni.
Gli attributi di qualità esterni influenzano gli attributi di qualità in uso (percepiti dall’utente).

In definitiva, migliorare la qualità del processo di sviluppo software e del prodotto software fa migliorare la qualità percepita dall’utilizzatore.

Fattori di qualità

Sei fattori di qualità esterna:

  1. Functionality
  2. Reliability
  3. Usability
  4. Efficiency
  5. Maintainability
  6. Portability

Per ogni fattore di qualità esterna viene definito un insieme di fattori di qualità interni.

Funzionalità (functionality)

La capacità del prodotto software di fornire funzioni che soddisfano esigenze stabilite ed implicite quando il software è usato sotto condizioni specificate:

  • Appropriatezza (suitability): la capacità del prodotto software di fornire un appropriato insieme di funzioni all’utente per i compiti e gli obiettivi specificati.
  • Accuratezza (accuracy): la capacità del prodotto software di fornire i giusti o concordati risultati o effetti.
  • Interoperabilità (interoperability): la capacità del prodotto software di interagire con uno o più sistemi specificati.
  • Sicurezza (security): la capacità del prodotto software di proteggere informazioni e dati in modo che persone o sistemi non autorizzati non possano leggere o modificarli e che a persone o sistemi autorizzati non sia negato l’accesso ad essi.
  • Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni in leggi e prescrizioni similari.

Affidabilità (reliability)

La capacità del prodotto software di mantenere uno specificato livello di prestazioni quando usato sotto condizioni specificate.

Maturità (maturity): la capacità del prodotto software di evitare malfunzionamenti, quali risultati di anomalie nel software.
Tolleranza all’errore (fault tolerance): la capacità del prodotto software di mantenere uno specificato livello di prestazioni in caso di anomalie software o di violazione delle sue specificate interfacce.
Recuperabilità (recoverability): la capacità del prodotto software di ristabilire uno specificato livello di prestazioni e di ripristinare i dati direttamente intaccati in caso di malfunzionamenti.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente all’affidabilità.

Usabilità (usability)

La capacità del prodotto software di essere capito, appreso, usato e gradito all’utente, quando usato sotto condizioni specificate.

Comprensibilità (understandability): la capacità del prodotto software di mettere in grado l’utente di comprendere se il software è appropriato, e come esso possa essere usato per particolari compiti e condizioni d’uso.
Apprendibilità (learnability): la capacità del prodotto software di permettere all’utente di imparare la sua applicazione.
Operabilità (operability): la capacità del prodotto software di permettere all’utente di operare con esso e di controllarlo.
Attrattività (attactiveness): la capacità del prodotto software di essere attraente all’utente (cioè avere un livello di gradimento nell’utilizzo).
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni, stili guida o regolamentazioni relativamente all’usabilità.

Efficienza (efficiency)

La capacità del prodotto software di fornire appropriate prestazioni relativamente alla quantità di risorse usate, sotto condizioni stabilite.

Comportamento rispetto al tempo (time behaviour): la capacità del prodotto software di fornire un appropriato responso e tempi di elaborazione e velocità di ‘attraversamento’ nell’eseguire le sue funzioni sotto specificate condizioni.
Utilizzo di risorse (resource utilisation): la capacità del prodotto software di usare appropriate quantità e tipo di risorse quando il software esegue le sue funzioni sotto specificate condizioni.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente all’efficienza.

Manutenibilità (maintainability)

La capacità del prodotto software di essere modificato. Le modifiche possono includere correzioni, miglioramenti o adattamenti del software per cambiamenti nell’ambiente operativo, nei requisiti e nelle specifiche funzionali.

Analizzabilità (analysability): la capacità del prodotto software ad essere diagnosticato per deficienze o cause di malfunzionamenti nel software o per l’identificazione delle parti da modificare.
Modificabilità (changeability): la capacità del prodotto software di permettere l’implementazione di una specificata modifica.
Stabilità (stability): la capacità del prodotto software di evitare effetti inaspettati derivanti da modifiche ad esso.
Testabilità (testability): la capacità del prodotto software di permettere a software modificato di essere validato.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente alla manutenibilità.

Portabilità (portability)

La capacità del prodotto software di essere trasferito da un ambiente ad un altro.

Adattabilità (adaptability): la capacità del prodotto software di essere adattato per differenti e specificati ambienti senza dover applicare altre azioni o mezzi diversi da quelli forniti per tale scopo per il software considerato.
Installabilità (installability): la capacità del prodotto software di essere installato in uno specificato ambiente.
Coesistenza (co-existence): la capacità del prodotto software di coesistere con altri software indipendenti in un ambiente comune condividendo risorse comuni.
Sostituibilità (replaceability): la capacità del prodotto software di essere usato al posto di un altro specificato prodotto software per gli stessi scopi e nello stesso ambiente.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente alla portabilità.

Qualità in uso (quality in use)

La capacità del prodotto software di abilitare specificati utenti ad ottenere specificati obiettivi con efficacia, produttività, sicurezza (safety) e soddisfazione in uno specifico contesto.

Efficacia (effectiveness): la capacità del prodotto software di mettere in grado gli utenti di raggiungere gli obiettivi specificati con l’accuratezza e la completezza in uno specificato contesto d’uso.
Produttività (productivity): la capacità del prodotto software di mettere in grado gli utenti di spendere una quantità di risorse appropriate in relazione all’efficacia ottenuta in uno specificato contesto d’uso.
Sicurezza (safety): la capacità del prodotto software di raggiungere accettabili livelli di rischio di danni a persone, al software, ad apparecchiature od all’ambiente operativo in uno specificato contesto d’uso.
Soddisfazione (satisfaction): la capacità del prodotto software di soddisfare gli utenti in uno specificato contesto d’uso.

I materiali di supporto della lezione

I. Sommerville – Ingegneria del Software – 8a edizione – Cap. 11, 13, 14.

International Standard ISO/IEC 9126.

T. Lethbridge, R. Laganière - Object-Oriented Software Engineering: Practical Software Development using UML and Java – Capitolo 9 (http://www.site.uottawa.ca/school/research/lloseng/).

  • 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