La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi...

46
La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – http://info.bazarinfo.info

Transcript of La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi...

Page 1: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

La Programmazione Strutturata

Uno stile di programmazione per la costruzione di programmi complessi

Mario Capurso – http://info.bazarinfo.info

Page 2: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

La Programmazione Strutturata

• E’ uno stile di programmazione …• Introdotto da Edsger W. Dijkstra tra il 1968 e il

1969 (Università di Eindhoven-NL) …• Durante le due Conferenze N.A.T.O. (1968, 1969)

sull’Ingegneria del Software …• Per produrre programmi usando tecniche di

decomposizione simili a quelle usate in ingegneria meccanica o elettronica

Page 3: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Per capirne di più - Un po’ di storia

• La storia dell’informatica moderna viene di solito fatta iniziare dal 1950

• Diciotto anni dopo, nel 1968, i principali utenti di tecnologia informatica, i comandi militari dei paesi occidentali riuniti nella N.A.T.O. , decidono di fare il punto della situazione

Page 4: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Le due Conferenze N.A.T.O.

• Vengono organizzate due Conferenze sulla Ingegneria del Software nel 1968 a Garmisch(D) e nel 1969 a Roma (I)

• I partecipanti rappresentano il mondo dell’industria, della ricerca e degli utenti

• Sotto accusa sono costi e qualità del software• L’obiettivo è di mettere a punto tecniche

ingegneristiche che migliorino costi e qualità

Page 5: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

1968 - Garmisch

Dijkstra GilletteNaur

Randell

Gries

Page 6: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

1969 - Roma

Dijkstra Brinch Hansen Hoare

LampsonWirth

Randell

Perlis

Page 7: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Ingegneria

• “Studio e realizzazione delle tecniche con cui si applicano le enunciazioni teoriche e le norme di funzionamento di una disciplina, allo scopo di evitare uno sviluppo casuale e frammentario” (Vocabolario Zingarelli)

Page 8: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

I Risultati

• Le due conferenze puntualizzano tendenze e situazioni che richiedono un cambiamento di indirizzo nella produzione del software

• Esse avranno un impatto fondamentale nell’evoluzione dell’Informatica

Page 9: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

L’andamento dei costi

• Gillette: “…The economics of software development are such that the cost of maintenance frequently exceeds that of the original development…”

• Gillette: “…Gli aspetti economici dello sviluppo del software sono tali che il costo della manutenzione frequentemente supera quello dello sviluppo originale…”

Page 10: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Distribuzione dei costi del Software - 1

50%

50%

Produzione

Manutenzione

Page 11: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Distribuzione dei costi del Software - 2

15%20%

40%

25% Analisi eProgettazione

Programmazione

Documentazione

Testing

Page 12: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

L’ Aumento della complessità del software

• “…d’Agapeyeff: In 1958 a European general purpose computer manufacturer often had less than 50 software programmers, now they probably number 1,000-2,000 people; what will be needed in 1978?…”

• “…d’Agapeyeff: Nel 1958 un costruttore di computer aveva spesso meno di 50 programmatori, oggi (1968) probabilmente ne ha 1000 o 2000. Di quanti ne avrà bisogno nel 1978 ?…”

Page 13: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Il peso della complessità – Troppi fattori da considerare

Page 14: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Il peso della complessità – Troppi livelli informatici da padroneggiare

Page 15: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Il peso della complessità –

Troppe linee di codice da

produrre

Page 16: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

L’alto costo degli errori

• “…David and Fraser: Particularly alarming is the seemingly unavoidable fallibility of large software, since a malfunction in an advanced hardware-software system can be a matter of life and death…”

• “…David and Fraser: Allarma in maniera particolare la apparentemente inevitabile fallibilità di un software enorme, poiché un malfunzionamento in un sistema hardware e software avanzato può essere una questione di vita o di morte…”

Page 17: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Il confronto con l’hardware Legge di Moore e raddoppio dei

transistor a parità di costo

Page 18: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Il rapporto fra i costi di hardware e software

Page 19: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

La mancanza di metodo

• “…Graham: Today we tend to go on for years, with tremendous investments to find that the system, which was not well understood to start with, does not work as anticipated. We build systems like the Wright brothers built airplanes— build the whole thing, push it off the cliff, let it crash, and start over again…”

• “…Graham: Oggi tendiamo a continuare per anni con tremendi investimenti fino a scoprire che il sistema, non ben capito all’inizio, non funziona come previsto. Costruiamo sistemi come i fratelli Wright facevano gli aeroplani – li costruivano, li gettavano dalla collina, li distruggevano e li ricostruivano…”

Page 20: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

La Crisi del Software

• Difficolta’ di reggere il confronto con l’hardware:– Nella diminuzione dei prezzi– Nella maturita’ come prodotto industriale– Nella qualita’

• Necessita’ di metodi ingegneristici paragonabili a quelli usati nello sviluppo dell’hardware

Page 21: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

L’Industria del Software ha da imparare dall’Industria dell’Hardware

• Bisogna considerare il software come prodotto industriale

• Bisogna definire un ciclo produttivo ripetibile

• Bisogna definire il concetto di qualità

• Bisogna imparare a preventivare (e rispettare) tempi e costi

Page 22: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Serve Ingegneria e Qualita’ nel Software

• Qualita’ nel Prodotto

• Qualita’ nel Processo

• Qualita’ nel Progetto

Ingegneria e Qualita’ sono i segni di una Disciplina che matura

Page 23: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Hardware e Software come prodotti industriali

Hardware• Costa produrlo• E’ prodotto da aziende• Ha un ciclo di vita• E’ materiale• Replicarlo costa

Software• Costa produrlo• E’ prodotto da aziende• Ha un ciclo di vita• E’ immateriale• Replicarlo non costa

Page 24: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Suggerimento 1 – Programmare per Moduli

• La produzione hardware usa il concetto di modulo• Un modulo ha un nome, un obiettivo, inputs ed

outputs• Il modulo viene progettato, costruito, ordinato,

venduto, comprato, riusato, sostituito• Il modulo viene integrato per fare ulteriori moduli

Costruendo programmi integrando moduli, la qualità ed i costi dovrebbero

migliorare

Page 25: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Modulo

• Un modulo nasconde la sua realizzazione (Decision hiding)

• Un modulo si può impilare ed annidare

Il modulo entra nel software con

il concetto di sottoprogramma

A B A

B

Page 26: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Caratteristiche di un Modulo

• Ha un obiettivo chiaro e semplice

• E’ indipendente da altri moduli

• Le interfaccia sono documentate

• Non è più grande di una pagina

• Nasconde i dettagli realizzativi

• L’algoritmo usato è semplice e documentato

Page 27: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Suggerimento 2 – Definire la Qualità del Software

• Lo Standard ISO 9126 sulla Qualità del Software– Funzionalità– Affidabilità– Manutenibilità– Portabilità– Efficienza– Usabilità

Page 28: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Suggerimento 3 – Definire un Processo produttivo

Page 29: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Il Ciclo di Sviluppo Waterfall

• Analisi

• Progettazione

• Programmazione

• Test (Ricerca e correzione degli errori)

• Documentazione

• Installazione

• Manutenzione

Page 30: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Qualità del Processo e ISO 9001/2000

• Standard ISO (Internazionale)

• In grado di certificare la qualita’ di un processo

• Definisce due stati (Certificato/Non Certificato)

• Usato a livello internazionale

• Obbligatorio per chi lavora per enti che richiedono qualità certificata

Page 31: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Le difficolta’ di fare Software

• Analizzare, Progettare, Testare il progetto con l’utente: DIFFICILE

• Programmare: RELATIVAMENTE FACILE

Facciamo ancora errori di sintasssi, ma sono banali rispetto agli errori concettuali

(Fonte: Frederick Brooks – No Silver Bullett)

Page 32: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Le Proprieta’ della Essenza del Software

• Complessita’

• Conformita’

• Cambiabilita’

• Invisibilita’

Page 33: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Complessita’

Le entita’ software sono complesse per:

• la dimensione

• la mancanza di oggetti ripetuti

• la quantita’ enorme di stati

• la mancanza di scalabilita’

Page 34: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

La complessita’ fa parte della essenza, e determina...

• Difficolta’ di comunicazione in un team• Errori nei prodotti• Esplosione nei costi• Ritardi nelle consegne• Difficolta’ nell’uso • Difficolta’ di manutenzione• Difficolta’ di apprendimento• Difficolta’ nella sostituzione del personale

Page 35: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Conformita’

• Non ci sono principi unificanti

• Il Software deve conformarsi ai voleri di molte istituzioni umane

• Il software deve interfacciarsi a molti sistemi

• Deve conformarsi perche e’ l’ultimo arrivato o e’ ritenuto il piu’ malleabile

Page 36: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Cambiabilita’ - 1

• Il Software e’ sotto continua pressione per il cambiamento

• Anche i prodotti tangibili cambiano, ma meno frequentemente

• Il Software incorpora la funzione, che e’ cio’ che risente di piu’ del cambiamento

• Il Software e’ pensiero puro, infinitamente malleabile

Page 37: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Cambiabilita’ - 2

• Il Software di successo viene cambiato

• L’utente lo prova in nuovi casi

• L’utente vuole nuove funzioni

• Il Software sopravvive all’hardware

• Il Software e’ inserito in una matrice culturale di leggi, usi, utenti, macchine, situazioni che cambiano in continuazione

Page 38: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Invisibilita’

• Il Software e’ invisibile

• Gli oggetti sono visualizzabili, il Software puo’ essere rappresentato da una molteplicita’ di grafi sovrapposti

• Il Software e’ non visualizzabile

• Questo rende difficile la comunicazione tra menti differenti

Page 39: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Se il Software è cosi’…

• Va fatto in maniera da essere il più semplice possibile (Usabilità)

• Va fatto in maniera da essere cambiato il più facilmente possibile (Manutenibilità)

Page 40: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

L’Hardware non è il Software, ma alcune idee sono trasportabili

Page 41: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Programmazione Strutturata

• Dijkstra:”…I have grown to regard a program as an ordered set of pearls, a “necklace”. The top pearl describes the program in its most abstract form, in all lower pearls one or more concepts used above are explained (refined)… The pearl seems to be a natural program module.

• Dijkstra:”…Sono cresciuto guardando a un programma come a un insieme ordinato di perle, una collana. La perla superiore descrive il programma nella sua forma astratta, mentre in tutte le perle inferiori uno o più concetti usati sopra sono spiegati (raffinati)…La perla sembra un modulo naturale

Page 42: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Un programma è fatto di Moduli

• La struttura del programma deve essere ad albero

• I costrutti di collegamento usati devono essere

• Sequenza• Selezione• Ripetizione

• Il programma deve essere costruito top-down per raffinamenti successivi

Page 43: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Ad Albero perché…

• La struttura è più semplice• Ci sono meno scelte (nn-1 invece che 2n*n)• Costruito top-down (prima il padre, poi i figli)

• Testato top-down (prima il padre, poi i figli)

• Compreso top-down• Posso parallelizzare lo sviluppo e il test dei figli• Il programma nasce modulare con moduli annidati• La struttura è più semplice (niente più programmi spaghetti)

• Il modulo padre chiama i moduli figli passando i parametri• Al modulo padre non interessa l’interno del modulo figlio

(decision hiding: Parnas)

Page 44: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

I costrutti devono essere solo tre

• Più semplice da capire• Più semplice imparare a programmare• E’ possibile (Teorema di Bohem-Jacopini)• Un ingresso-una uscita• Impilabili e annidabili• Leggibili dall’alto in basso-da sinistra a destra• Esprimibili con pseudocodice• Il goto è pericoloso (Dijkstra)

Page 45: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

I costrutti

• Sequenza– A– B

• Selezione– If (P) then

• A

– Else• B

• Ripetizione– While (P) A

A

B

P

P A

A B

Vero Falso

Vero

Page 46: La Programmazione Strutturata Uno stile di programmazione per la costruzione di programmi complessi Mario Capurso – .

Programma e modulo

• Il programma nasce per raffinamenti successivi (Wirth)

• Ogni modulo si concentra sulla realizzazione del proprio obiettivo

• Ogni modulo ha precondizioni e post-condizioni (come trova il mondo e come lascia il mondo)

• Si rimandano le decisioni dettagliate ai livelli successivi di raffinamento