Copertina
Autore Roger S. Pressman
Titolo Principi d'ingegneria del software
EdizioneMcGraw-Hill, Milano, 2000, Informatica professionale , pag. 886, dim. 168x240x53 mm , Isbn 978-88-386-4119-0
OriginaleSoftware Engineering. A Practitioner's Approach [2000]
LettoreRenato di Stefano, 2003
Classe informatica: linguaggi , informatica: sistemi
PrimaPagina


al sito dell'editore


per l'acquisto su IBS.IT

per l'acquisto su BOL.IT

per l'acquisto su AMAZON.IT

 

| << |  <  |  >  | >> |

Indice

Introduzione                                              XV

PARTE PRIMA. IL PRODOTTO E IL PROCESSO                     1


Capitolo 1  Il prodotto                                    3

1.1 L'evoluzione del ruolo del software                    5
1.2 Il software                                            6
1.3 Il software: una crisi all'orizzonte?                 11
1.4 I miti del software                                   12
1.5 Riepilogo                                             15

Capitolo 2  Il processo                                   19

2.1 L'ingegneria del software: una tecnologia stratificata20
2.2 Il processo software                                  24
2.3 Modelli di processo                                   27
2.4 Il modello sequenziale lineare                        30
2.5 La prototipazione                                     32
2.6 Il modello RAD                                        34
2.7 Modelli evolutivi del processo software               35
2.8 Sviluppo a componenti                                 44
2.9 Il modello dei metodi formali                         46
2.10 Tecniche di quarta generazione                       46
2.11 Tecnologia di processo                               48
2.12 Prodotto e processo                                  48
2.13 Riepilogo                                            50

PARTE SECONDA. GESTIONE DEI PROGETTI SOFTWARE             55


Capitolo 3  La gestione dei progetti                      57

3.1 Il panorama gestionale                                58
3.2 Le persone                                            60
3.3 Il prodotto                                           68
3.4 Il processo                                           70
3.5 Il progetto                                           74
3.6 Il principio W5HH                                     75
3.7 Pratiche critiche                                     76
3.8 Riepilogo                                             77

Capitolo 4  Metriche di processo e di progetto            81

4.1 Misure, metriche e indicatori                         83
4.2 Le metriche di processo e di progetto                 84
4.3 Misurazione del software                              90
4.4 Combinazione di metriche diverse                      96
4.5 Metriche per la qualità del software                  98
4.6 Integrazione delle metriche nel processo software    101
4.7 Gestione delle variazioni: controllo del processo
    statistico                                           103
4.8 Valutazioni metriche per piccole aziende             107
4.9 Definizione di un programma di valutazione metrica
    del software                                         109
4.10 Riepilogo                                           111

Capitolo 5  Pianificazione del progetto software         117

5.1 Osservazioni sul fare stime                          118
5.2 Obiettivi della pianificazione di progetto           120
5.3 La portata del software                              120
5.4 Le risorse                                           125
5.5 Stime nei progetti software                          128
5.6 Tecniche di scomposizione                            129
5.7 Modelli empirici di stima                            137
5.8 La scelta tra sviluppo e acquisto                    141
5.9 Strumenti automatici di stima                        145
5.10 Riepilogo                                           145

Capitolo 6  Analisi e gestione dei rischi                149

6.1 Strategie reattive e preventive                      150
6.2 I rischi del software                                151
6.3 Individuazione dei rischi                            152
6.4 Proiezione dei rischi                                154
6.5 Raffinamento dei rischi                              160
6.6 Riduzione, sorveglianza e governo dei rischi         161
6.7 Sicurezza e pericoli                                 162
6.8 Il piano RMMM                                        163
6.9 Riepilogo                                            163

Capitolo 7  Pianificazione temporale e controllo dei

            progetti                                     169
7.1 Concetti fondamentali                                171
7.2 Relazione fra personale e lavoro                     174
7.3 Definizione dei compiti di un progetto software      177
7.4 Scelta dei compiti                                   181
7.5 Raffinamento dei compiti principali                  183
7.6 Definizione di un reticolo di compiti                185
7.7 Pianificazione temporale                             186
7.8 Analisi del valore acquisito                         191
7.9 Controllo degli errori                               193
7.10 Il piano di progetto                                194
7.11 Riepilogo                                           195

Capitolo 8  Garanzia di qualità del software             199

8.1 La qualità: concetti di base                         201
8.2 Il movimento per la qualità                          205
8.3 La garanzia di qualità del software                  206
8.4 Le revisioni del software                            209
8.5 Revisioni tecniche formali                           211
8.6 Strategie formali di SQA                             216
8.7 Garanzia di qualità su base statistica               216
8.8 Affidabilità del software                            219
8.9 Verifica degli errori nel software                   222
8.10 Gli standard ISO 9000 per la qualità                224
8.11 Il piano SQA                                        226
8.12 Riepilogo                                           227

Capitolo 9  Gestione delle configurazioni software       233

9.1 Gestione delle configurazioni software               234
9.2 Il processo di gestione delle configurazioni         238
9.3 Individuazione degli oggetti nella configurazione    238
9.4 Controllo delle versioni                             241
9.5 Controllo del cambiamento                            242
9.6 Esami della configurazione                           247
9.7 Relazioni sulla situazione                           247
9.8 Standard di gestione delle configurazioni            248
9.9 Riepilogo                                            248

PARTE TERZA. METODI TRADIZIONALI PER
             L'INGEGNERIA DEL SOFTWARE                   253


Capitolo 10  Ingegneria dei sistemi informatici          255

10.1 Sistemi informatici                                 257
10.2 La gerarchia dei sistemi                            258
10.3 Ingegnerizzazione dei processi di lavoro:
     una panoramica                                      262
10.4 Ingegneria del prodotto: panoramica                 264
10.5 Ingegneria dei requisiti                            267
10.6 Modellazione di sistema                             272
10.7 Riepilogo                                           276

Capitolo 11  Analisi: concetti e principi                283

11.1 Analisi dei requisiti                               284
11.2 Individuazione dei requisiti per il software        286
11.3 Principi di analisi                                 295
11.4 Prototipazione                                      301
11.5 Specifica                                           303
11.6 Revisione della specifica                           306
11.7 Riepilogo                                           306

Capitolo 12  Modellazione concettuale                    311

12.1 Breve storia                                        313
12.2 Gli elementi del modello concettuale                313
12.3 Modellazione dei dati                               314
12.4 Modellazione funzionale e flusso delle informazioni 320
12.5 Modellazione del comportamento                      331
12.6 Meccanica dell'analisi strutturata                  332
12.7 Il dizionario dei dati                              343
12.8 Altri metodi di analisi                             345
12.9 Riepilogo                                           346

Capitolo 13  Concetti e principi di progettazione        351

13.1 La progettazione del software e l'ingegneria del
     software                                            352
13.2 Il processo di progettazione                        354
13.3 Principi di progettazione                           356
13.4 Concetti di progettazione                           357
13.5 Progettazione "effettivamente modulare"             369
13.6 Indicazioni progettuali per la modularità           372
13.7 Il modello progettuale                              374
13.8 Documentazione del progetto                         375
13.9 Riepilogo                                           376

Capitolo 14  La progettazione dell'architettura          381

14.1 L'architettura del software                         382
14.2 Progettazione dei dati                              384
14.3 Stili dell'architettura                             387
14.4 Analisi di progetti di architettura alternativi     392
14.5 Mappaggio dei requisiti in un'architettura software 395
14.6 Traduzione delle trasformazioni                     397
14.7 Traduzione delle transazioni                        407
14.8 Raffinamento del progetto dell'architettura         411
14.9 Riepilogo                                           414

Capitolo 15  Progettazione dell'interlaccia utente       419

15.1 Le regole d'oro                                     420
15.2 Progettazione dell'interfaccia utente               424
15.3 Analisi e modellazione delle operazioni             427
15.4 Attività di progettazione dell'interfaccia          429
15.5 Strumenti di implementazione                        434
15.6 Valutazione del progetto                            435
15.7 Riepilogo                                           437

Capitolo 16  La progettazione a livello dei componenti   441

16.1 La programmazione strutturata                       442
16.2 Confronto fra le notazioni di progettazione         451
16.3 Riepilogo                                           452

Capitolo 17  Tecniche di collaudo del software           455

17.1 Principi fondamentali                               456
17.2 Preparazione dei casi di prova                      461
17.3 Collaudo white-box                                  463
17.4 Collaudo per cammini di base                        463
17.5 Collaudo della struttura di controllo               472
17.6 Collaudo black-box                                  478
17.7 Collaudo di ambienti e applicazioni speciali        487
17.8 Riepilogo                                           491

Capitolo 18  Strategie di collaudo del software          495

18.1 Un approccio strategico al collaudo del software    496
18.2 Questioni strategiche                               502
18.3 Collaudo delle unità                                504
18.4 Collaudo di integrazione                            506
18.5 Prove di validazione                                514
18.6 Collaudo di sistema                                 516
18.7 L'arte del debugging                                518
18.8 Riepilogo                                           522

Capitolo 19  Metriche tecniche per il software           527

19.1 La qualità del software                             529
19.2 Un quadro di riferimento per le metriche tecniche
     del software                                        534
19.3 Metriche per il modello concettuale                 538
19.4 Metriche per il modello progettuale                 543
19.5 Metriche per il codice sorgente                     551
19.6 Metriche per il collaudo                            552
19.7 Metriche per la manutenzione                        553
19.8 Riepilogo                                           553

PARTE QUARTA. INGEGNERIA DEL SOFTWARE
              ORIENTATA AGLI OGGETTI                     559


Capitolo 20  Concetti e principi orientati agli oggetti  561

20.1 Il paradigma orientato agli oggetti                 562
20.2 Concetti orientati agli oggetti                     564
20.3 Individuazione degli elementi di un modello
     a oggetti                                           574
20.4 Gestione di progetti per software orientato agli
     oggetti                                             581
20.5 Riepilogo                                           587

Capitolo 21  Analisi orientata agli oggetti              591

21.1 Analisi orientata agli oggetti                      593
21.2 Analisi di dominio                                  597
21.3 Componenti generici del modello concettuale OO      600
21.4 Il processo di analisi OO                           601
21.5 Il modello oggetti-relazioni                        611
21.6 Il modello oggetti-comportamenti                    613
21.7 Riepilogo                                           619

Capitolo 22  Progettazione orientata agli oggetti        623

22.1 Progettazione di sistemi orientati agli oggetti     625
22.2 Il processo di progettazione di sistema             631
22.3 La progettazione degli oggetti                      638
22.4 Schemi progettuali (design pattern)                 644
22.5 Programmazione orientata agli oggetti               646
22.6 Riepilogo                                           647

Capitolo 23  Collaudo di sistemi orientati agli oggetti  653

23.1 Allargare la prospettiva                            654
23.2 Collaudo dei modelli concettuale e progettuale      656
23.3 Strategie di collaudo di sistemi orientati
     agli oggetti                                        658
23.4 Progettazione dei casi di prova per il software
     orientato agli oggetti                              660
23.5 Metodi di prova applicabili al livello delle classi 666
23.6 Progettazione di casi di prova interclasse          668
23.7 Riepilogo                                           671

Capitolo 24  Metriche tecniche per i sistemi orientati

             agli oggetti                                675
24.1 Scopi delle metriche orientate agli oggetti         676
24.2 La caratteristica distintiva delle metriche
     orientate agli oggetti                              677
24.3 Metriche per il modello progettuale orientato
     agli oggetti                                        679
24.4 Metriche orientate alle classi                      681
24.5 Metriche orientate alle operazioni                  687
24.6 Metriche per il collaudo orientato agli oggetti     687
24.7 Metriche per progetti orientati agli oggetti        688
24.8 Riepilogo                                           689

PARTE QUINTA. ARGOMENTI AVANZATI
              DI INGEGNERIA DEL SOFTWARE                 693


Capitolo 25  I metodi formali                            695

25.1 Concetti fondamentali                               696
25.2 Preliminari matematici                              704
25.3 Applicazione della notazione matematica alla
     specifica formale                                   710
25.4 Linguaggi di specifica formali                      712
25.5 L'uso di Z per rappresentare un componente software:
     un esempio                                          713
25.6 I dieci comandamenti dei metodi formali             715
25.7 Il futuro dei metodi formali                        716
25.8 Riepilogo                                           717

Capitolo 26  Ingegneria del software "in camera sterile" 721

26.1 La soluzione a camera sterile                       722
26.2 La specifica funzionale                             726
26.3 Progettazione in camera sterile                     730
26.4 Collaudo in camera sterile                          735
26.5 Riepilogo                                           738

Capitolo 27  L'ingegneria del software a componenti      743

27.1 Ingegnerizzazione di sistemi a componenti           745
27.2 Il processo di ingegneria del software a componenti 747
27.3 Ingegnerizzazione del dominio                       747
27.4 Sviluppo a componenti                               752
27.5 Classificazione e ricerca dei componenti            758
27.6 Aspetti economici dell'ingegneria del software
     a componenti                                        762
27.7 Riepilogo                                           765

Capitolo 28  Ingegneria del software per sistemi

             client/server                               769
28.1 La struttura dei sistemi c1ient/server              770
28.2 Ingegneria del software per sistemi c1ient/server   777
28.3 Questioni di modellazione concettuale               777
28.4 Progettazione di sistemi c1ient/server              778
28.5 Aspetti relativi al collaudo                        783
28.6 Riepilogo                                           786

Capitolo 29  Ingegneria del Web                          791

29.1 Gli attributi delle applicazioni basate sul Web     793
29.2 Il processo di ingegneria del Web                   797
29.3 Una struttura di base per l'ingegneria del Web      797
29.4 Formulazione e analisi di sistemi basati sul Web    799
29.5 Progettazione di applicazioni Web                   801
29.6 Collaudo delle applicazioni Web                     809
29.7 Problemi gestionali                                 810
29.8 Riepilogo                                           817

Capitolo 30  Reingegnerizzazione                         823

30.1 Reingegnerizzazione del processo aziendale          825
30.2 Reingegnerizzazione del software                    828
30.3 Reverse engineering                                 833
30.4 Ristrutturazione                                    837
30.5 Forward engineering                                 839
30.6 Aspetti economici del reverse engineering           843
30.7 Riepilogo                                           844

Capitolo 31  CASE                                        849

31.1 Che cos'è il CASE?                                  850
31.2 I mattoni del CASE                                  850
31.3 Una tassonomia degli strumenti CASE                 853
31.4 Ambienti CASE integrati                             858
31.5 L'architettura di integrazione                      859
31.6 Il repository CASE                                  861
31.7 Riepilogo                                           865

Capitolo 32  Il futuro                                   869

32.1 L'importanza del software: un nuovo punto di vista  870
32.2 La portata del mutamento                            871
32.3 Le persone e la costruzione di sistemi              871
32.4 Il "nuovo" processo di ingegneria del software      873
32.5 Nuovi modi di rappresentare l'informazione          874
32.6 La tecnologia come guida                            875
32.7 Commento conclusivo                                 876

Indice analitico                                         878
 

 

| << |  <  |  >  | >> |

Pagina XV

Introduzione



Quando un programma software ha successo, ovvero quando risponde alle esigenze delle persone che lo usano, si comporta senza problemi in un lungo arco di tempo, è facile da modificare e ancora più facile da utilizzare, cambia in meglio la nostra vita. Quando il software fallisce gli obiettivi, ovvero quando gli utenti sono insoddisfatti, quando il software è soggetto a errori, quando è difficile da modificare e ancora più difficile da utilizzare, si verificano varie situazioni negative. Tutti noi vogliamo realizzare del software che cambi in meglio il mondo, evitando tutto ciò che accade quando non si riesce a ottenere un buon risultato. Per ottenere ciò è necessario introdurre disciplina nella progettazione e nella realizzazione del software. Questo è il motivo per cui è necessario un approccio ingegneristico.

Nei venti anni trascorsi dalla prima edizione di questo volume, l'ingegneria del software si è evoluta trasformandosi da una vaga idea praticata da un numero relativamente ridotto di adepti per diventare una legittima disciplina dell'ingegneria. Oggi ha acquisito legittimità come disciplina degna di un serio impegno di ricerca, uno studio coscienzioso e un acceso dibattito. Nell'attività professionale il titolo di ingegnere del software ha sostituito il termine programmatore. I modelli di processo software, i metodi di ingegneria del software e gli strumenti di sviluppo sono stati adottati con successo in un ampia gamma di applicazioni.

Manager e professionisti riconoscono che esiste l'esigenza di un approccio più disciplinato al software ma continuano a scontrarsi sul modo in cui deve essere applicata questa disciplina. Molte persone e molte aziende continuano a sviluppare software senza criterio, anche quando devono realizzare sistemi di supporto per le tecnologie più avanzate oggi disponibili. Molti studenti e professionisti non conoscono neppure i metodi di progettazione più moderni. A risentirne è proprio la qualità del software. Inoltre, continua l'acceso e controverso dibattito sulla vera natura dell'ingegneria del software; lo studio prosegue tra i contrasti. Sono cambiate le attitudini, sono stati compiuti dei progressi, ma rimane parecchio da fare perché questa disciplina raggiunga una piena maturità.

La terza edizione di Principi di ingegneria del software (la quinta edizione americana) vuole rappresentare una guida per una disciplina ancora in fase di maturazione. Come le edizioni precedenti, anche questa si rivolge sia agli studenti che ai professionisti, mantenendo la propria validità come guida per i professionisti e come ampia introduzione per gli studenti degli ultimi anni universitari o dei primi anni dopo la laurea.

| << |  <  |  >  | >> |

Pagina 12

1.4 I miti del software


La malattia del software si può in gran parte far risalire a una mitologia nata agli inizi dell'informatica. Diversamente dai miti antichi, che spesso elargiscono lezioni degne di attenzione, i miti del software hanno diffuso disinformazione e confusione. Alcune loro caratteristiche li rendono insidiosi: in genere hanno la forma di affermazioni ragionevoli (talvolta non prive di elementi di verità), sono intuitivamente condivisibili e sono spesso stati diffusi da esperti del settore.

Oggi i professionisti riconoscono per lo più che quei miti non sono altro che atteggiamenti fuorvianti, che hanno provocato seri problemi a dirigenti e tecnici nella stessa misura. Con tutto ciò, sradicare abitudini e convinzioni è difficile e ancora oggi molti credono ad alcuni di quei miti.


Miti del management I manager con responsabilità legate al software, come in tutti gli altri campi, sono spesso sotto pressione per il budget, le scadenze e la qualità. Come un naufrago che si aggrappa a un fuscello, il manager software si aggrappa spesso ai miti che alleggeriscono la pressione, almeno temporaneamente.

"In assenza di standard significativo, una nuova industria come quella del software comincia a dipendere dal folclore." Tom De Marco

Mito Abbiamo già interi volumi di standard e procedure da seguire nello sviluppo. Non c'è forse tutto l'indispensabile?

Realtà Gli standard possono esistere, ma sono applicati? I programmatori li conoscono? Quegli standard riflettono i metodi moderni di sviluppo del software? Sono completi? È stato ottimizzato in modo da migliorare i tempi di consegna pur mantenendo l'attenzione sulla qualità? In molti casi reali, la risposta a tutte queste domande è "No".

Mito Abbiamo i più moderni strumenti di sviluppo. Dopo tutto, acquistiamo sempre i computer più recenti.

Realtà Lo sviluppo di software di alta qualità richiede ben più dell'ultimo modello di mainframe, workstation o personal computer. Gli strumenti di CASE (ingegneria del software assistita dal computer) sono più importanti dell'hardware per ottenere alta qualità e produttività; tuttavia, la più parte degli sviluppatori non se ne serve realmente.

Mito Se siamo in ritardo, possiamo sempre recuperare aumentando il numero di programmatori (concetto dell'orda mongola).

Realtà Lo sviluppo di software non è un processo meccanico come la produzione manifatturiera. Per citare Brooks (1975), "aggiungere persone a un progetto software in ritardo lo rallenta ulteriormente". A prima vista, questa affermazione può suonare controintuitiva, ma si deve considerare che i nuovi arrivati devono essere addestrati da chi lavorava già al progetto, togliendo così risorse allo sviluppo effettivo. È possibile inserire nuovo personale in un progetto, ma solo in modo pianificato e coordinato.

RIFERIMENTO La Software Project Managers Network all'indirizzo www.spmn.com aiuterà a sfatare questi ed altri miti.

Mito Se decido di far realizzare un progetto software a una terza parte, posso restare tranquillo perché tutto il lavoro verrà svolto esternamente.

Realtà Se un'organizzazione non sa come gestire e controllare internamente i progetti software, inevitabilmente incontrerà problemi se deciderà di fornire all'esterno lo sviluppo.


Miti della clientela Il cliente che chiede un prodotto software può essere il collega della stanza accanto, un reparto dell'azienda, il settore vendite o un'azienda esterna che lo ha commissionato. Spesso il cliente crede ai miti sul software perché manager e tecnici del settore fanno ben poco per eliminare la disinformazione. I miti generano nella clientela aspettative falsate e, di conseguenza, insoddisfazione nei confronti degli sviluppatori.

NOTA Si deve lavorare duramente per comprendere ciò che si deve fare prima di iniziare. Si può non essere in grado di individuare tutti i dettagli, ma più se ne sa e meno rischi si corrono.

Mito Un'affermazione generica degli scopi è sufficiente per cominciare a scrivere i programmi; i dettagli si possono trattare in seguito.

Realtà Una insufficiente descrizione preliminare è la causa principale di fallimento di un progetto software. La descrizione formale e dettagliata del dominio dei dati, delle funzioni, delle prestazioni, dell'interfaccia, dei vincoli progettuali e dei criteri di validazione è essenziale. Tutti questi aspetti si possono stabilire solo dopo una approfondita comunicazione fra cliente e sviluppatore.

Mito I requisiti di un progetto mutano di continuo, ma i mutamenti si gestiscono agevolmente grazie alla flessibilità del software.

Realtà È vero che i requisiti cambiano, ma l'effetto delle modifiche varia secondo la fase in cui vengono introdotte, come è illustrato nella Figura 1.3. Se si dedica particolare attenzione alla definizione preliminare, le richieste di modifiche nelle prime fasi si soddisfano facilmente: il cliente ha modo di esaminare i requisiti e di richiedere modifiche, senza effetti pesanti sui costi. L'effetto di modifiche richieste durante la fase di progettazione cresce rapidamente. Le risorse sono state già allocate e si è stabilita la cornice del progetto. Una modifica può comportare rivolgimenti che richiedono nuove risorse e correzioni importanti al progetto, cioè costi supplementari. Le modifiche alla funzionalità, alle prestazioni, all'interfaccia o ad altre caratteristiche durante l'implementazione (stesura del codice e collaudo) hanno un effetto pesante sui costi. Le modifiche richieste dopo l'entrata in esercizio del software possono rivelarsi più costose di un ordine di grandezza rispetto alle stesse modifiche richieste nelle fasi precedenti.

RIFERIMENTO La gestione e il controllo dei cambiamenti sono considerati in dettaglio nel Capitolo 9.


Miti del programmatore I miti ancora popolari fra i programmatori sono stati alimentati in 50 anni di cultura della programmazione. In origine la programmazione era considerata un'attività artigianale: le abitudini e le credenze sono dure a morire.

Mito Una volta scritto e messo in opera il programma, il nostro lavoro è finito.

Realtà È stato detto: "Prima cominci a stendere il codice, più tempo impiegherai a terminare il programma". Alcuni dati relativi all'industria (Lientz, 1980, Jones, 1991 e Putman, 1997) indicano che tra il 60 e l'80% del lavoro speso su un programma avviene dopo la consegna della prima versione al cliente.

Mito Fino a quando il programma non è in condizione di essere eseguito, non c'è modo di valutarne la qualità.

Realtà Uno dei metodi più efficaci di esame della qualità del software, la revisione tecnica formale, si applica già dall'inizio di un progetto. Le revisioni, descritte nel Capitolo 8, sono un "filtro della qualità", rivelatosi più efficace del collaudo nel rilevare alcuni tipi di errori del software.

Mito Il solo prodotto di un progetto concluso è il programma funzionante.

Realtà Un programma funzionante è solo una parte di una configurazione software che comprende più elementi. La documentazione è il fondamento di uno sviluppo riuscito e, cosa più importante, è la guida dell'attività di manutenzione.

Mito L'ingegneria del software ci farà scrivere un'inutile e voluminosa documentazione che inevitabilmente rallenterà le cose.

Realtà L'ingegneria del software non prevede la creazione di documenti. Si occupa di creare qualità. Una migliore qualità porta a minor lavoro. E un minor lavoro porta a tempi di consegna più rapidi.

| << |  <  |  >  | >> |

Pagina 871

32.2 La portata del mutamento


I progressi nell'informatica, negli ultimi cinquant'anni, sono stati sospinti dai progressi nelle scienze "materiali": fisica, chimica, scienza dei materiali e ingegneria. Nel prossimo futuro, progressi significativi in campo informatico potrebbero arrivare anche dalle scienze "umane": psicologia, neurofisiologia, sociologia, filosofia e altre. È molto difficile prevedere quale sia il periodo di gestazione per le innovazioni di questa origine.

"La miglior cosa che si può dire del futuro è il fatto che arriva un giorno alla volta." Abraham Lincoln

L'influenza delle scienze umane può contribuire a indirizzare la ricerca orientata all'informatica nelle scienze materiali. Ad esempio, la progettazione dei computer futuri potrebbe risultare guidata più dalle concezioni sulla fisiologia del cervello che dalle conoscenze di microelettronica.

I cambiamenti destinati a incidere sull'ingegneria del software nel prossimo decennio proverranno da quattro direzioni: (1) le persone che svolgono il proprio lavoro; (2) il processo che esse adottano; (3) la natura delle informazioni; (4) la tecnologia sottostante. Nei prossimi paragrafi si esaminano in dettaglio questi elementi: persone, processo, informazioni e tecnologia.

| << |  <  |  >  | >> |

Pagina 871

32.3 Le persone e la costruzione di sistemi


Il software per i sistemi ad alta tecnologia diventa sempre più complesso e la dimensione dei programmi cresce in proporzione. La rapida crescita delle dimensioni del programma "medio" presenterebbe pochi problemi se non fosse per un fatto: quando aumentano le dimensioni di un programma, aumenta anche il numero di persone che devono realizzarlo. L'esperienza suggerisce che, al crescere delle dimensioni di un team, la produttività totale soffre. Una possibile soluzione consiste nel formare diversi team (Capitolo 3), suddividendo le persone in piccoli gruppi di lavoro. Sorge così un nuovo problema: se aumenta il numero dei team, la comunicazione fra di essi si fa complessa e laboriosa quanto la comunicazione fra gli individui. Non solo: la comunicazione (fra individui o fra team) tende a diventare inefficiente: si spende troppo tempo per trasferire un contenuto informativo relativamente modesto, mentre spesso le informazioni significative si perdono per strada.

Se si vuole affrontare seriamente questo dilemma comunicativo, nell'ambito dell'ingegneria del software, occorre ripensare alla radice i modi di comunicazione fra singoli e fra gruppi.

| << |  <  |  >  | >> |

Pagina 873

32.4 Il "nuovo" processo di ingegneria del software


Si possono ragionevolmente caratterizzare i primi vent'anni dell'ingegneria del software come l'era del "pensiero lineare". Sospinta dal modello classico del ciclo di vita, l'ingegneria del software veniva affrontata come attività lineare, nella quale una serie sequenziale di passi si svolge al fine di risolvere un problema complesso. Tuttavia, le soluzioni lineari allo sviluppo di software sono opposte al modo in cui si costruisce effettivamente la maggior parte dei sistemi. Nella realtà, i sistemi complessi si evolvono iterativamente e in modo incrementale. Per questo motivo, un largo settore della comunità dell'ingegneria del software si sta spostando verso modelli evolutivi dello sviluppo di software.

I modelli evolutivi di processo riconoscono il ruolo dell'incertezza, preponderante nella maggior parte dei progetti; riconoscono che le scadenze sono spesso impossibili da rispettare e che in questi casi l'iterazione permette di consegnare versioni progressivamente più complete del prodotto. I modelli evolutivi pongono l'accento sulla necessità di una progressione nei lavorati, dell'analisi dei rischi, della pianificazione e della revisione dei piani, della reazione del cliente.

| << |  <  |  >  | >> |

Pagina 874

32.5 Nuovi modi di rappresentare l'informazione


Negli ultimi vent'anni è avvenuta una sottile transizione nella terminologia con la quale si descrive lo sviluppo di software per il mondo degli affari. Vent'anni fa, per descrivere l'uso dei computer in ambito aziendale, il termine preferito era "elaborazione di dati". Oggi il suo posto è stato preso da un'altra espressione: "tecnologia dell'informazione", che indica la stessa cosa, ma con un lieve spostamento d'accento. L'enfasi non è più solo sul trattamento di grandi quantità di dati, ma piuttosto sull'estrazione di informazioni utili da quei dati. Ovviamente, questo è sempre stato l'obiettivo, ma il mutamento della terminologia riflette un mutamento ben più importante, di ordine "gestionale".

In ogni discussione sulle applicazioni del software, le parole "dati" e "informazioni" compaiono ripetutamente. La parola "conoscenza" si affaccia nelle applicazioni dell'intelligenza artificiale, ma è di impiego relativamente raro. Quasi nessuno si occupa della "saggezza" nell'ambito dell'informatica.

I dati sono informazioni allo stato grezzo: una collezione di fatti che dobbiamo elaborare per dar loro un senso. L'informazione nasce dall'associare più fatti in un dato contesto. La conoscenza consiste nell'associare l'informazione ricavata in un contesto con quella ricavata in un contesto diverso. La saggezza, infine, consiste nel ricavare principi generali da conoscenze disparate. Questi quattro punti di vista sulla "informazione" sono schematizzati nella Figura 32.1.

"La saggezza è quella dote che ci consente di utilizzare la conoscenza a vantaggio di noi stessi e degli altri." Thomas J. Watson

Oggi, la grande maggioranza del software è destinata a elaborare dati o informazioni. Gli ingegneri del software del ventunesimo secolo dovranno occuparsi di sistemi che elaborano la conoscenza. La conoscenza è bidimensionale; le informazioni raccolte su vari argomenti, correlati o no, vengono collegate a formare un corpus di fatti, chiamato conoscenza. Il nocciolo della questione sta nella capacità di trovare connessioni non sempre evidenti fra informazioni provenienti da fonti diverse e nel combinare quelle informazioni in modo da produrre qualche vantaggio.

| << |  <  |