Ingegneria del software

A cura di: Antonio Pizzarello

Ingegneria del software

Metodi e tecnologie per lo sviluppo di grandi sistemi informativi

Edizione a stampa

51,50

Pagine: 360

ISBN: 9788820423643

Edizione: 1a edizione 1988

Codice editore: 1290.14

Disponibilità: Nulla

Lo sviluppo dei grandi sistemi informativi ha consentito di mettere a punto metodi e tecnologie che hanno segnato notevoli progressi nell'ingegneria del software.

Di norma I grandi sistemi sono Il risultato di una serie di singoli programmi che si suppone consentano, nel loro Insieme, di raggiungere obiettivi globali. In ogni caso questi sistemi pongono problemi complessi, sono di dimensioni considerevoli e richiedono un impegno cooperativo di più persone. La rigidità Intrinseca del loro processo di sviluppo e manutenzione è causa di difficoltà sia per il progettista che per chi li gestisce. Ne consegue che la produzione di sistemi di questo genere è attività ingegneristica intrinsecamente complesso e ad atto rischio.

Questo libro offre metodi e tecnologie che consentono d'affrontare queste sfide e la cui conoscenza è indispensabile a programmatori, analisti e manager dell'informatica.

Esso: - dà conto del risultati delle ricerche più recenti sulla progettazione e verifica del sistemi di software e - interpreta le caratteristiche del sistemi di software alla luce degli studi più avanzati proponendo al lettore guidelines, indicazioni e strumenti per implementare nella pratica di tutti i giorni i risultati più significativi della ricerca scientifica.

Caratteristiche

* La trattazione va dal generale al particolare - dal principi scientifici alle applicazioni

* E' corredata da numerosi esempi e applicazioni e Vengono illustrate tecniche particolari, indicando i risultati con esse ottenuti

* Sono fornite tutte le conoscenze di base necessarie sulla semantica dei linguaggi di programmazione, le specifiche di programmi, la derivazione di programmi da specifiche e l'astrazione dei dati.

Antonio Pizzarello, laureato in ingegneria al Politecnico di Milano, lavora dei primi anni '70 negli Stati Uniti. E' chief scientist presso i laboratori della Honeywell Bull di Phoenix, Arizona. Ha oltre 25 anni d'esperienza nei sistemi di software, sia in ambienti di product devolopment che di ricerca.

Prefazione
1 Sistemi di software e loro problemi
1. Introduzione
2. L'importanza di una base concettuale per lo sviluppo del software
3. La crisi del software
4. Analisi del processo di sviluppo del software
4. 1. Problemi riguardanti il processo di sviluppo del
software
4.2. Le componenti di un processo di sviluppo
4.3. Verifica delle idee di un progetto di software
5. Caratteristiche del ciclo di vita del software
6. Produttività nei processi di sviluppo
6.1. Produttività dei programmatori
6.2. Uso dell'automazione
7. Qualità dei prodotti software: reliability, disponibilità, mantenibilità
8. Documentazione ed estensibilità del prodotto
9. Errori e prove
9.1. Errori di software
9.2. Il ruolo delle prove
10. Problemi di sviluppo del software
11. Sommario
12. Bibliografia
2. Esperienze relative allo sviluppo dei grandi sistemi
1. Introduzione
2. Misure di produttività
2.1. Produttività e dimensioni dei programmi
2.2. Produttività e linguaggio di programmazione
2.3. Produttività e tecniche. di sviluppo
2.4. Conclusioni
3. Esperienze sulla generazione di errori
3.1. Numero di errori e dimensioni del progetto
3.2. Numero di errori e linguaggio di programmazione
3.3. Numero di errori e tecniche di sviluppo
4. Propensione all'errore dei moduli
5. Comunicazione delle decisioni di progetto
6. Esperienze sul ciclo di vita del software
7. Sommario
8. Bibliografia
3. Matematica e software
1. Introduzione
2. Il ragionamento matematico
3. Matematica e linguaggio
3.1. Usi del linguaggio
3.2. Definizioni
4. La natura del metodo matematico
4.1. Lo sviluppo del pensiero matematico
4.2. Il metodo matematico
5. L'importanza del metodo matematico nello sviluppo del software
6. Correttezza dei programmi
7. Sommario
8. Bibliografia
4. Fondamenti delle specifiche di programmi
1. Introduzione
2. Il significato di un programma
2.1. Utilità del formalismo di specifica
2.2. Riassunto dei concetti esposti
3. Variabili e stati di un programma
4. Lo spazio degli stati
4. 1. Esempio
4.2. Condizioni
4.3. Termini, segni e loro interpretazione
5. Tipi di dati
6. Funzionalità «visibili all'utilizzatore» definite come tipi di dati
7. Significato delle operazioni di un tipo di dati
7.1. Definizione per enumerazione
7.2. Definizione per mezzo di altre operazioni
7.3. Definizione per mezzo di procedure
8. Sommario
9. Bibliografia
5. Il problema della programmazione
1. Introduzione
2. Il processo mentale usato dal programmatore
3. Il ragionamento enumerativo
3.1. Progettazione dei programmi per enumerazione
3.2. Note
4. Svantaggi dell'enumerazione
5. Induzione matematica
5.1. Definizione del principio di induzione
5.2. Esempio di progetto di programma con l'uso dell'induzione
6. Specifiche di stati del programma
7. Un esempio di dimostrazione della correttezza di un
programma: l'approccio di Floyd
7.1. Il programma
7.2. Dimostrazione
7.3. Note sulla dimostrazione
8. Sommario
9. Bibliografia
6. Costrutti di un linguaggio di programmazione
1. Introduzione
2. Il linguaggio di specifica dei programmi
3. Predicati
4. Specifiche di programmi espresse come predicati
5. Correttezza totale di programmi
6. Significato dei costruiti di un linguaggio di programmazione
7. Guarded commands
7.1. L'assioma Do-Nothing
7.2. L'assioma dell'assegnazione
7.3. L'assioma di concatenazione
7.4. L'assioma della selezione
7.5. Non determiniamo
7.6. Assegnazione simultanea
7.7. L'assioma di iterazione
8. Sommario
9. Bibliografia
7. Progettazione dei programmi
1. Introduzione
2. Un esempio elementare
2.1. Descrizione del problema
2.2. Soluzione del problema
3. Applicazione del teorema dell'invariante di loop
4. Un procedimento generalizzato per il progetto dei loop
5. La struttura di dati array
6. Un semplice esempio di programma
6.1. Il primo passo del progetto
6.2. Definizione dell'invariante del loop
6.3. Conclusione del progetto
6.4. Considerazioni sull'esempio precedente
7. Un altro esempio di uso dell'invariante dei loop: la selezione binaria
7.1. Postcondizione e precondizione
7.2. Invariante
7.3. Il programma completo
8. Esempio di elaborazione di testi
8.1. Precondizione e postcondizione
8.2. Invariante
8.3. Il programma risultante dalla prima scelta per l'invariante
8.4. Il programma
8.5. Un altro programma per la stessa invariante
9. Un'altra versione dell'esempio usando l'astrazione procedurale
10. Valutazione del calcolo di Dijkstra
11. Correttezza di programmi scritti secondo il metodo rigoroso
12. Sommario
13. Bibliografia
8. Prova del programmi
1. Introduzione
2. Scelta dei casi di prova
3. Prova di tutti i percorsi
4. Problemi di prova dei programmi
5. Uso di prototipi
6. Cause d'incertezza
7. Correttezza probabilistica
8. Sommario
9. Bibliografia
9. Lettura e comprensione del programmi
1. Introduzione
2. Tecniche per l'interpretazione dei programmi
3. Interpretazione del codice per mezzo di esecuzioni simulate
4. Specifiche formali create dal testo
4.1. Definizione del programma per la soluzione del
«Social Security Problem»
4.2. Lettura e interpretazione del programma
4.3. Valutazione della tecnica
5. Sommario
6. Bibliografia
10. Sviluppo del sistemi
1. Introduzione
2. Fattori che contribuiscono alle dimensioni dei sistemi
2.1. Servizi per l'utente
2.2. Tipi di dati dell'hardware
2.3. Trattamento delle eccezioni
2.4. Linguaggi di programmazione
3. La progettazione di sistemi attraverso l'enumerazione di invocazioni di subroutine
3.1. Crescita esplosiva della complessità
3.2. Accoppiamento attraverso i dati
4. Integrazione dei sistemi
5. L'uso di specifiche formali
6. Sommario
11. Astrazione dei dati
1. Introduzione
2. Astrazione dei concetti
3. Tipi di dati astratti
3.1. Macchine astratte
3.2. Definizione dei tipi di dati per una macchina astratta
3.3. Struttura di un tipo di dati
4. Notazione per tipi di dati
5. Oggetti e tipi di dati
6. Specifiche di tipi di dati astratti
6. 1. Parametri
6.2. Funzioni e invariante
6.3. Sintassi per la definizione dei tipi di dati
6.4. Un esempio tratto dal linguaggio umano
7 . Espressioni simboliche dei predicati
7. 1. Caratterizzazione di predicati astratti
7.2. Sintassi per la caratterizzazione
8. Utilizzazione delle funzioni
9. Sommario
10. Bibliografia
12. Gerarchie di macchine astratte. Parte I
1. Introduzione
2. Macchine astratte
3. Organizzazione delle macchine astratte
4. Decomposizione del progetto in livelli
5. Espansione dei dati
6. Un esempio di organizzazione a livelli
7. Corrispondenza (mapping) tra livelli
8. Notazione per il mapping
9. Sommario
10. Bibliografia
13. Livelli di macchine astratte. Parte Il
1. Introduzione
2. Rappresentazione dei dati
3. Un esempio di rappresentazione di dati
4. Ricapitolazione
5. Interpretazione nello spazio degli stati
6. Sommario
14. Un esempio di sviluppo a livelli
1. Introduzione
2. Descrizione del problema
3. Definizione del livello superiore
3.1. Identificazione dei componenti
3.2. Precondizione e postcondizione
3.3. Predicati astratti
3.4.

Collana: Quaderni di informatica

Livello: Testi per professional