|
|
|
| << | < | > | >> |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 XVQuando 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 121.4 I miti del softwareLa 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 87132.2 La portata del mutamentoI 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 87132.3 Le persone e la costruzione di sistemiIl 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 87332.4 Il "nuovo" processo di ingegneria del softwareSi 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 87432.5 Nuovi modi di rappresentare l'informazioneNegli 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.
|