• Non ci sono risultati.

Programmazione Procedurale in Linguaggio C++

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione Procedurale in Linguaggio C++"

Copied!
15
0
0

Testo completo

(1)

G. Mecca – Università della Basilicata – mecca@unibas.it

Programmazione Procedurale in Linguaggio C++

Sottoprogrammi Parte 6

Metodologia di Sviluppo - b

versione 2.3

Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

2

Sommario

m

Ricapitolando

m

Tecniche di Test

m

Linee Guida per la Scrittura del Codice

Sottoprogrammi: Metodologia di Sviluppo >> Sommario

(2)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 3

Ricapitolando

m

In sintesi, ci sono buone e cattive notizie

m

Buone notizie

ðil metodo suggerito aiuta concretamente ad affrontare la soluzione di problemi complessi ðsequenza di passi sistematica

ðcentrata sulla scrittura del codice

m

Cattive notizie

ðnon rappresenta di per sé la soluzione a tutti i problemi

Ricapitolando

m

Il metodo è utile

ðnella soluzione di problemi “standard”

ðche rappresentano la maggioranza dei casi

m

Ma, per essere un ottimo programmatore

ðoccorre anche essere “creativi”

ðessere in grado di concepire soluzioni a volte originali a problemi meno usuali

Sottoprogrammi: Metodologia di Sviluppo >> Ricapitolando

(3)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 5

Ricapitolando

m

Statisticamente, al giorno d’oggi

ðil 90% circa del software sviluppato al giorno d’oggi è software client-server

ðcon una logica applicativa molto semplice (interfaccia utente per sistemi di basi di dati) ðcompetenze standard

m

Il resto del software

ðapplicazioni particolari che richiedono seria riflessione dal punto di vista della soluzione

Sottoprogrammi: Metodologia di Sviluppo >> Ricapitolando

6

Tecniche di Test e Correzione

m

Dopo la scrittura del codice

ðè necessario condurre le verifiche (test) ðed eliminare gli eventuali errori logici

m

Il metodo tipico di test

ðtest manuale e interattivo

ðil programmatore esegue manualmente i test ðe verifica che il comportamento sia quello

atteso

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

(4)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 7

Tecniche di Test e Correzione

m

Piano dei test

ðè necessario mettere a punto un test per ciascuna condizione tipica di utilizzo del programma

ðche copra anche i casi particolari

m

Nota

ðdopo ogni modifica al codice è necessario ripetere tutto il piano dei test

ðpotrebbero essere stati introdotti errori

Tecniche di Test e Correzione

m

Un esempio

ðsovrapposizione di rettangoli

m

Caratteristiche del problema

ðlogica applicativa complessa

ðvari raffinamenti nella scelta della soluzione (concepimento della formula)

ðpiano di test elaborati

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

(5)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 9

Tecniche di Test e Correzione

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

TEST n. 1

rettangolo 1: (1, 2) – (7, 6) rettangolo 2: (3, 1) – (8, 5)

rettangolo 1: (-2, 3.5) – (3, 5.5) rettangolo 2: (2, 1) – (6.2, 3) sovrapposizione: 12 cm2 sovrapposizione: 0

TEST n. 2

10

Tecniche di Test e Correzione

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

TEST n. 3

rettangolo 1: (-1, 1) – (7, 6) rettangolo 2: (3, 2) – (6, 5)

rettangolo 1: (-2, 1) – (3, 5.5) rettangolo 2: (3, 1) – (7.2, 3) sovrapposizione: 9 cm2 sovrapposizione: 0

TEST n. 4

(6)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 11

Tecniche di Test e Correzione

TEST n. 5

rettangolo 1: (-1, 1) – (7, 6) rettangolo 2: (4, 2) – (7, 5)

rettangolo 1: (-2, 3) – (3, 5.5) rettangolo 2: (3, 1) – (7.2, 3) sovrapposizione: 9 cm2 sovrapposizione: 0

TEST n. 6

Tecniche di Test e Correzione

m

Che fare nel caso di errori logici ?

ðtest in cui il codice si comporta in modo

diverso da quello atteso

m

In questi casi

ðè necessario capire la causa dell’errore ðcorreggere il codice

ðripetere l’esecuzione del piano dei test

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

(7)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 13

Tecniche di Test e Correzione

m

Le tecniche semplici

ðispezione visiva del codice

ðsimulazione su carta del funzionamento ðmetodo delle stampe

m

Metodo delle stampe

ðprevede l’aggiunta di istruzioni di stampa al codice per verificare i valori delle variabili

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

14

Metodo delle Stampe

m

Idea

ðin caso di comportamento scorretto,

aggiungo stampe per la correzione (“debug”) ðstampe che dicono quando comincia ciascun

sottoprogramma

ðstampe dei valori dei parametri e delle variabili, all’inizio, durante e alla fine

ðstampe che dicono quando finisce il sottopr.

ðal termine della correzione elimino le stampe

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

>> indovina1Errori.cpp

(8)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 15

Metodo delle Stampe

int scegliNumero() {

cout << “***** inizio scegliNumero *****\n”;

int range;

int numero;

int seed = time(NULL);

srand(seed);

numero = rand() % 200 + 1;

cout << “***** numero = “ << numero << endl;

cout << “***** fine scegliNumero *****\n”;

return numero;

}

Tecniche di Correzione

m

Queste tecniche

ðfunzionano per programmi dalla logica applicativa semplice

ðcon un piano dei test semplici

m

Principale svantaggio

ði test sono eseguiti interattivamente

ðil programmatore è costretto a ripeterli tutte le volte che effettua modifiche

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

(9)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 17

Tecniche di Correzione

m

In casi più complessi

ðprogrammi con logica applicativa complessa ðin cui il codice viene sottoposto a frequenti

modifiche

ðè opportuno adottare tecniche alternative ðe strumenti alternativi

m

Test di Regressione (>>)

m

Debugger (>>)

Sottoprogrammi: Metodologia di Sviluppo >> Tecniche di Test e Correzione

18

Linee Guida per Scrivere il Codice

m

Obiettivo

ðscrivere codice di qualità

m

Qualità del codice, in ordine di importanza

ðcorrettezza (sintattica e semantica)

ðusabilità (facilità ed efficacia nell’uso) ðmanutenibilità (facilità di adattamento ai

cambiamenti)

ðefficienza (consente di risolvere i problemi più rapidamente)

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

(10)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 19

Linee Guida per Scrivere il Codice

m

Qualità accessorie

ðche contribuiscono ad ottenere quelle principali

m

In questa lezione

ðsemplicità

ðleggibilità

ðmodularità, ovvero buona organizzazione

Semplicità e Leggibilità

m

Linea guida n. 1

ðadottare sempre la soluzione più semplice tra quelle che potrebbero funzionare

ðnon complicare mai inutilmente il codice

m

In generale

ðla prima soluzione ad un problema non è mai la migliore

ðconviene migliorarla e renderla più generale

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

(11)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 21

Semplicità e Leggibilità

m

Linea guida n. 2

ðadottare regole di stile

ðscegliere accuratamente gli identificatori per variabili e sottoprogrammi - notazione

cammello

ðindentare il codice

ðadottare regole per la posizione delle parentesi

ðutilizzare sempre le parentesi

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

22

Semplicità e Leggibilità

m

Linea guida n. 3

ðscrivere moduli brevi

ðnel caso di problemi complessi, spezzarli in più passi per frammentare la soluzione

ðil codice di un sottoprogramma non dovrebbe mai richiedere più di 30 secondi per essere interpretato da un altro programmatore

ðdi fatto questo può rendere inutili i commenti ðtranne che nel caso di librerie

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

(12)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 23

Modularità

m

Linea guida n. 4

ðadottare la metodologia incrementale ðprocedere per raffinamenti successivi

m

Linea guida n. 5

ðcompilare progressivamente e frequentemente il codice

ðverificare progressivamente il codice eseguibile

Modularità

m

Linea guida n. 6

ðragionare accuratamente sui parametri ðscegliere con cura quali e quanti parametri

(evitare parametri inutili)

ðscegliere con cura il tipo dei parametri (standard o per riferimento)

ðadottando le linee guida discusse per la scelta dei parametri

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

(13)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 25

Modularità

m

Linea guida n. 7

ð“minimizzare l’accoppiamento” tra i sottoprogrammi

ðanalizzare il diagramma delle chiamate ðverificare che la logica applicativa del

programma sia chiara ed ordinata

m

Linea guida n. 8

ðnon utilizzare mai variabili globali

ðè consentito di utilizzare costanti globali

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

26

Modularità

m

Linea guida n. 9

ð“massimizzare la coesione” all’interno di un sottoprogramma

ðogni sottoprogramma deve avere una funzione precisa nell’applicazione

ðdeve risolvere un problema ben preciso ðe non fare due o più cose diverse

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

(14)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 27

Modularità

m

Linea guida n. 10

ðseparare i sottoprogrammi “orientati all’elaborazione” dai sottoprogrammi

“orientati all’interazione con l’utente”

ði secondi (tipicamente chiamati “schermi”) sono meno riutilizzabili, sia nella stessa applicazione che in applicazioni diverse

ði primi dovrebbero essere pensati per essere per quanto possibile riutilizzabili

Modularità

m

Linea guida n. 10 (cont.)

ðogni applicazione dovrebbe avere una collezione di sottoprogrammi per le elaborazione che non interagiscono con l’utente

ðed una collezione di sottoprogrammi per la gestione dell’interazione con l’utente

>> sottoprogrammi di interfaccia

ðle funzionalità dovrebbero essere ben

Sottoprogrammi: Metodologia di Sviluppo >> Linee Guida

(15)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 29

Riassumendo

m

Metodologia suggerita

ðper raffinamenti successivi

m

Tecniche di Test

m

Linee Guida di Carattere Metodologico

ðper la scrittura di codice di qualità

Sottoprogrammi: Metodologia di Sviluppo >> Sommario

30

Termini della Licenza

m This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit

http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Termini della Licenza

m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare

http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Riferimenti

Documenti correlati

Concetti Introduttivi: Linguaggi &gt;&gt; Ciclo di Vita di un Programma.. Mecca - Programmazione Procedurale in Linguaggio

il sottoprogramma lavora su tre dati di tipo float chiamati a,b,c attraverso cui è possibile modificare i corrispondenti argomenti. istruzione

ðil numero e il tipo degli argomenti (1 argomento di tipo double) &gt;&gt; parametri ðil tipo del risultato restituito (double). m Intestazione di

Sottoprogrammi: Conclusioni &gt;&gt; Errori Frequenti. giocataComputer

ðDefinizione di Funzioni ðDefinizione di Procedure ðChiamata di Funzioni ðChiamata di Procedure ðPassaggio dei Parametri ðProgrammazione Modulare. Termini

Strutture di Dati: Lista &gt;&gt; Rappresentazione con Record e Array. ATTENZIONE ai

Strutture di Dati: Lista &gt;&gt; Inserimenti e Cancellazioni. Mecca - Programmazione Procedurale in Linguaggio

Strutture di Dati: Lista &gt;&gt; Gestione dei File. i conta il numero di valori prelevati dal