Tecniche e strumenti per lo sviluppo di un programma

Transcript

Tecniche e strumenti per lo sviluppo di un programma
LEZIONE 3
Tecniche e
strumenti per
lo sviluppo di
un programma
In questa lezione impareremo...
◗◗
◗◗
◗◗
◗◗
le diverse fasi della produzione del software
che cos’è la programmazione strutturata
quali sono gli strumenti per programmare
in che cosa consiste la manutenzione◗
del software
■■ Scrivere un programma
La scrittura di un programma in un linguaggio di programmazione si conclude con la codifica di un algoritmo nel linguaggio utilizzato dal programmatore per essere trasformato
in formato opportuno comprensibile al calcolatore; la scrittura dell’algoritmo è l’ultimo
passo della progettazione dell’algoritmo che, in generale, è una operazione complessa che
richiede l’esecuzione di più fasi.
Una prima scomposizione individua i seguenti “momenti”:
definizione e comprensione del problema (analisi del problema);
ricerca della soluzione (strategia risolutiva);
descrizione/elencazione delle operazioni da eseguire nel linguaggio “umano” o semiformale dell’algoritmo;
codifica in un linguaggio di programmazione.
Tutte le fasi sopra elencate hanno la medesima importanza e in ciascuna di queste sono
richieste conoscenze e abilità oltre che tecniche operative specifiche.
La prima fase, cioè quella generalmente definita come fase di analisi del problema, è
forse la più delicata e in essa possiamo sintetizzare le seguenti operazioni:
◗◗ comprensione del problema;
◗◗ modellizzazione del problema.
La seconda fase prende anche il nome di progettazione: una volta individuato cosa deve
essere fatto nella fase di analisi, la fase di definizione della strategia individua la stra2
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
Tecniche e strumenti per lo sviluppo di un programma • AL
Lezione 3
tegia risolutiva, cioè come risolvere il problema individuando l’“idea”, il procedimento
operativo, che permette di raggiungere la soluzione.
A volte queste due fasi vengono eseguite contemporaneamente, per esempio nella soluzione dei problemi cosiddetti banali, oppure richiedono una ripetizione ciclica, quando, per
esempio, in fase di progettazione si individua una parte del problema che in prima analisi è
stata trascurata (o ritenuta erroneamente non influente) e quindi di questo “componente”
non si hanno abbastanza informazioni.
In questo caso si “ritorna” alla fase di analisi e via di seguito.
(Alle tecniche di analisi e definizione della strategia sarà dedicato interamente un’unità di
apprendimento.)
Il dizionario italiano attribuisce alla parola banale i seguenti significati: “molto diffuso, comune, e quindi privo di originalità, di poco conto, piccolo ma anche sciocco”.
In informatica, con il termine ”banale” intendiamo i problemi che vengono risolti mediante un
procedimento semplice, già noto da altre discipline o nella vita quotidiana, che non richiede
la ricerca di un algoritmo specifico perché esso è già di uso comune (per esempio i problemi
matematici ecc.).
Scrittura dell’algoritmo: l’algoritmo consiste nelle descrizione delle operazioni che devono essere effettuate indicandone l’ordine di esecuzione.
In generale ogni problema ammette molteplici soluzioni e la strategia risolutiva e/o il dettaglio con cui questa viene descritta è anche in funzione di chi dovrà effettivamente eseguire
l’algoritmo: l’esecutore.
Dato che l’esecutore deve essere in grado di “eseguire le operazioni”, queste devono essere
scritte tenendo presente le capacità dell’esecutore e in una forma tale da non consentire
ambiguità di interpretazioni.
Per esempio, se il mio problema è quello di produrre una torta alla crema, il mio esecutore sarà probabilmente un cuoco e se la ricetta richiede una porzione di crema pasticcera
non è necessario descrivere (insegnare!) al cuoco come si prepara tale crema in quanto è
un’operazione a lui nota e quindi è un’operazione per lui elementare.
Così se il problema è quello di costruire un muro di mattoni, una volta individuata la
posizione, l’altezza e la forma, non è necessario dire al muratore come deve preparare la
“malta” in quanto è un’operazione per lui elementare.
Anche quando l’esecutore è un calcolatore, è impensabile effettuare direttamente la codifica in un linguaggio di programmazione: la prima stesura dell’algoritmo avviene in un
linguaggio semiformale, chiamato linguaggio di progetto. Per semplicità spesso si segue
proprio un procedimento costituito dalla riscrittura dell’algoritmo da uno pseudolinguaggio a un altro, per passare gradatamente da un linguaggio naturale a un linguaggio formale.
Noi inizieremo a codificare gli algoritmi utilizzando i diagrammi di flusso per poi tradurli in
pseudolinguaggio adottando una tecnica chiamata “per affinamenti successivi”, o top-down.
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
3
UdA 6
AL • Il software: dal linguaggio alla applicazione
Zoom su...
OPERAZIONE ELEMENTARE
I concetti di operazione elementare e di esecutore sono strettamente collegati e direttamente
in relazione.
L’elencazione delle operazioni da eseguire può essere fatta mediante diverse modalità, anch’esse in funzione degli interlocutori:
 nel caso di persone “umane” può essere il linguaggio parlato oppure un metodo semiformale:
◗ grafico/pittorico;
◗ diagramma a blocchi (o diagrammi di flusso);
◗ pseudocodice (pseudolinguaggio o linguaggio di progetto);
 nel caso di calcolatore deve essere rigorosamente formale.
Il linguaggio di progetto è un linguaggio “che non esiste”: ogni programmatore generalmente, nel corso degli anni, personalizza il proprio metodo di descrizione intermedia dell’algoritmo in base alla propria esperienza maturata sul campo.
Inoltre, di solito, il linguaggio di progetto è anche abbastanza vicino al linguaggio di programmazione che il programmatore ha adottato.
In questo testo si è cercato di utilizzare uno pseudolinguaggio “il più comune possibile”,
molto vicino al linguaggio di programmazione C: inoltre si è adottato l’inglese unito a una
rappresentazione grafica per i termini sintattici (parole chiave) delle istruzioni in quanto tutti
i linguaggi attualmente utilizzati adottano i termini in inglese e ci è sembrato inutile effettuare il doppio lavoro di “tradurli prima in italiano per poi ritradurli in inglese”.
 L’ultima fase è la codifica vera e propria in un linguaggio di programmazione. Il passaggio dalla pseudocodifica al linguaggio di programmazione consiste nella semplice traduzione delle istruzioni scritte nel linguaggio di progetto (e quindi non rigorosamente
formali) nella sintassi specifica del Pascal, del C, del Visual Basic o di qualunque altro
linguaggio imperativo.
Questa operazione richiede esclusivamente la conoscenza della sintassi specifica del
linguaggio ed è una vera e propria fase di “conversione”, senza momenti di creatività o
di progettazione.
■■ Elementi di qualità del software
Per molti anni si è sottovalutata l’importanza di una specifica formalizzazione delle tecniche di sviluppo e produzione del software (ingegneria del software) lasciando al programmatore, generalmente autodidatta, un “fai da te” frutto solo della personale esperienza e/o
del consiglio di colleghi e altri programmatori.
4
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
Tecniche e strumenti per lo sviluppo di un programma • AL
◀ GO TO (o GOTO, tradotto
dall’inglese “vai a”) è un’istruzione che permette di saltare
da una istruzione all’altra all’interno del codice rendendolo di
fatto incomprensibile per la difficoltà nel seguire la sequenza
delle istruzioni e comprendere
l’algoritmo che descrive. ▶
Lezione 3
Infatti per anni si è scritto il “codice spaghetti”, cioè si è
programmato male e senza regole sfruttando al massimo le
possibilità offerte dai diversi linguaggi, anche a scapito della
leggibilità (ricordiamo l’utilizzo indiscriminato della istruzione di ◀ GO TO ▶, la scrittura di programmi senza commenti e documentazione, la codifica “artigianale per tentativi”, cioè senza la realizzazione di una fase progettuale organica).
O
11010011
01010110 G
10011001
00010101
OT
TO
G
11010011
G
01010110 O T O
10011001
TO
GO
00010101
G
In molte occasioni tali fallimenti furono nascosti e sottaciuti: nacquero “leggende metropolitane” e fobie,
come la sindrome del 90 percento, una “malattia”
endemica nei progetti di sviluppo di software (tutt’oggi ancora non del tutto debellata) i cui sintomi sono:
◗■ il puntuale “quasi completamento” del progetto;
◗■ l’indefinito protrarsi del suo completamento effettivo che comporta dispendio di energie e risorse
ben superiori a quelle preventivate e lo sforamento
del budget.
10011001
00010101
GO T
O
11010011
01010110
10011001
00010101
O TO
Il problema della mancanza di tecniche e regole formalizzate per
la produzione di un “buon” software cominciò a manifestare la
sua importanza cruciale man mano che i progetti aumentavano
di dimensione e regolarmente i tempi e i costi preventivati per il loro sviluppo si dimostravano sottovalutati cau11010011
sando talvolta effetti catastrofici che in molte situazioni
01010110
furono le cause del fallimento del progetto.
11010011
01010110
10011001
00010101
O
I primi passi dell’informatica teorica furono posti da Corrado Böhm,
che si dedicò allo studio delle tecniche per formalizzare la scrittura degli algoritmi e formulò
con Giuseppe Jacopini uno tra i principali teoremi della programmazione strutturata.
Essi dimostrarono che l’uso del GOTO non è indispensabile per la scrittura di un programma formulando il teorema che porta il loro nome.
Anticipiamo questo fondamentale teorema che verrà presentato nel seguito della trattazione.
Ogni algoritmo può essere descritto utilizzando unicamente tre tipologie di istruzioni: la sequenza, la selezione e l’iterazione.
COSTRUZIONE DI UN PROGRAMMA
Per costruire un programma sono necessari tre soli blocchi:
◗ blocco di elaborazione (assimilabile a una sola istruzione o un solo blocco con un
ingresso e un’uscita);
◗■meccanismo di decisione binaria, o test (selezione con blocco di scelta SÌ/NO);
◗■meccanismo di ripetizione (o loop): possibilità di “ritornare indietro” mediante archi orientati.
(La progettazione di algoritmi utilizzando queste tre figure, che prendono il nome di figure strutturali fondamentali, sarà l’argomento trattato nel volume.)
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
5
UdA 6
AL • Il software: dal linguaggio alla applicazione
L’assenza di GOTO rende il codice più facile da analizzare, da seguire ed eventualmente da
modificare e integrare.
I primi linguaggi avevano le istruzioni numerate (vedi, per esempio, il BASIC) ed era molto
“comodo” utilizzare l’istruzione “GOTO numero di riga”; sempre nelle prime versioni del
BASIC questa modalità operativa era anche l’unica possibile, in quanto non era presente la
selezione doppia ed era necessario “costruirla” effettuando un doppio salto:
...
10 IF A>B
20 THEN GOTO 80
30 <ramo ELSE>
40 GOTO 100
80 <ramo THEN>
Nei linguaggi moderni è quindi sempre possibile effettuare la scrittura di ogni codice evitando di ricorrere all’utilizzo dell’istruzione di GOTO: in un linguaggio di programmazione
questa istruzione è quindi “inutile e dannosa” e potrebbe anche essere eliminata. Di fatto
tutti i linguaggi di programmazione la contemplano anche se le moderne tecniche di programmazione ne escludono l’utilizzo (programmazione strutturata).
Zoom su...
PROGRAMMAZIONE STRUTTURATA
Come sarà ampiamente descritto in seguito, sono state ridotte al minimo le istruzioni da utilizzare (strutture fondamentali) definendo quella che prende il nome di programmazione strutturata
(teoria messa a punto nel 1965 dall’olandese E.W. Dijkstra che denunciò la precarietà dell’istruzione GOTO per saltare, cioè effettuare il branching): si basa sull’eliminazione dei salti (condizionati e incondizionati) e, più generalmente, sulla definizione di restrizioni per la descrizione
degli algoritmi che però hanno il beneficio di rendere la scrittura dei programmi e la loro manutenzione più semplici, migliorandone la leggibilità.
Molta strada per migliorare la produzione del software è stata fatta, soprattutto sotto la
spinta di esigenze economiche. L’evoluzione tecnologica portò a una riduzione dei costi per
le apparecchiature hardware in generale, sia calcolatori sia periferiche, mentre contemporaneamente aumentò la richiesta di programmi; inoltre, spesso il patrimonio software era
sviluppato in linguaggio macchina o in uno equivalente, rendendo impossibile lo scambio
di programmi tra utilizzatori di computer diversi per marca o per modello e rendeva addirittura traumatica la conversione quando si fosse deciso di passare a un nuovo computer.
Se molti computer, in tutto il mondo, furono mantenuti in esercizio ben oltre il limite di
obsolescenza tecnologica e di economicità d’impiego, lo si dovette proprio alla gravosità
dello sforzo di conversione del loro corredo di software, al quale veniva così implicitamente riconosciuto un valore prevalente rispetto all’hardware.
6
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
Tecniche e strumenti per lo sviluppo di un programma • AL
◀ Per ridurre i costi e i tempi
di produzione è stata sviluppata la tecnica del software
reuse: naturalmente per poter
riutilizzare il software questo
deve essere di “buona qualità” e deve essere organizzato
in modo tale che si possano
“prelevare” da un progetto
singole sottoparti autonome
(moduli funzionali) che svolgano le attività richieste dai nuovi
progetti.
In fase di progetto è necessario, quindi, svolgere un insieme di attività supplementari
per organizzare lo sviluppo in
segmenti o “componenti software” con tecniche di progettazione particolari, indispensabili per consentire un effettivo
riutilizzo del software. ▶
Lezione 3
I diversi obiettivi orientarono gli studi alla ricerca delle
risposte alla necessità di:
◗◗ programmare meglio: mediante l’utilizzo di metodologie e tecniche di tipo ingegneristico, come la “programmazione strutturata discendente”;
◗◗ programmare meno: non “gettare” un codice già scritto, ma riutilizzare programmi o segmenti di programmi
(sottoprogrammi) per la realizzazione di nuovi progetti;
creare vere e proprie librerie contenenti codice di “sovente utilizzo” (componenti software elementari) e fornirle ai programmatori o a corredo dei calcolatori stessi
(nasce il concetto di riutilizzo, ◀ software reuse ▶, e
di mattoni software propri della programmazione orientata agli oggetti);
◗◗ programmare con standard: utilizzo di linguaggi e protocolli comuni a tutti i programmatori, condividendo a
ogni livello standard universalmente riconosciuti (linguaggi “evoluti”, “ad alto livello” e “orientati al problema).
■■ Gli ambienti di sviluppo
Per scrivere i programmi il sistema più semplice è quello di utilizzare un elaboratore di
testi, che permetta di scrivere righe di codice una di seguito all’altra; per agevolare il lavoro dei programmatori sono stati progettati e realizzati degli strumenti che lo coadiuvano
durante la realizzazione dei programmi, che possono essere suddivisi in:
◗◗ IDE;
◗◗ Framework;
◗◗ SDK.
IDE
Gli ambienti di sviluppo (IDE, Integrated Development Environment) sono software che
aiutano i programmatori nella codifica di un programma.
Normalmente consistono in un
editor per la scrittura del codice sorgente, un compilatore, un
generatore automatico di codice
e un debugger. Sebbene siano
in uso alcuni IDE multilinguaggio, come Eclipse, NetBeans e
Visual Studio, generalmente gli
IDE sono rivolti a uno specifico
linguaggio di programmazione,
come per esempio Delphi o Apple XCode.
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
7
UdA 6
AL • Il software: dal linguaggio alla applicazione
Framework
I framework vengono usati per descrivere tutta la struttura operativa nella quale
viene elaborato un programma. Un framework, a differenza di un IDE, consente
al programmatore di realizzare applicazioni senza scrivere neanche una riga di codice. Un tipico esempio di framework è rappresentato dall’ambiente .NET di Microsoft
oppure da PHP Zend, nel quale si possono
disegnare pagine web senza dover necessariamente scrivere il programma sorgente.
Un framework consente al programmatore
di risparmiare tempo evitando la riscrittura di codice già steso in precedenza per
compiti simili. Il termine inglese framework significa intelaiatura o struttura, che ne
definisce infatti la funzione; grazie ad esso al programmatore rimane solo la creazione
del contenuto vero e proprio dell’applicazione.
SDK
SDK (Software Development Kit) è un termine che può essere tradotto
come pacchetto di sviluppo per applicazioni e indica un insieme di strumenti adatti allo sviluppo e alla documentazione del software. Gli SDK
possono variare considerevolmente in quanto a dimensioni e tecnologie
utilizzate, ma tutti possiedono alcuni strumenti fondamentali:
◗◗ un compilatore, per tradurre il codice sorgente in eseguibile;
◗◗ le librerie standard chiamate API (Application Programming Interface). Le librerie sono
raccolte di procedure disponibili al programmatore, di solito raggruppate a formare un
set di strumenti specifici per un determinato compito;
◗◗ la documentazione sul linguaggio di programmazione per il quale l’SDK è stato sviluppato
e sugli strumenti a disposizione nell’SDK stesso;
◗◗ le informazioni sulle licenze da utilizzare per distribuire programmi creati con l’SDK.
Rispetto agli IDE e ai framework, gli SDK non possiedono editor di scrittura del codice. Gli
SDK più noti sono: Java SDK, Android SDK, IPhone SDK.
■■ Il ciclo di vita del software
Il programma che abbiamo scritto generalmente fa parte di un prodotto software, chiamato
pacchetto, che è costituito da un insieme di programmi che possono essere collegati tra
loro oppure anche solo condividere un database o altre risorse hardware o software.
Per ottenere il prodotto finito è necessario che più persone collaborino tra loro, ciascuna
con le proprie competenze, utilizzando tecniche specifiche.
L’ingegneria del software, che definisce le tecniche e le strategie per la produzione dei
programmi, ha indicato con ciclo di vita del software l’insieme di tutte le attività connesse alla produzione di un programma e le ha indicate come segue, secondo un modello a
cascata.
8
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
Tecniche e strumenti per lo sviluppo di un programma • AL
Lezione 3
Zoom su...
INGEGNERIA DEL SOFTWARE
L’ingegneria del software è una disciplina che si occupa delle teorie, dei metodi e degli strumenti per sviluppare, gestire e far evolvere i prodotti software. I problemi principali che affronta
riguardano:
 i metodi di analisi e progettazione dei prodotti software;
 lo studio del processo di sviluppo del software;
 lo sviluppo degli strumenti di produzione del software;
 gli aspetti economici dei prodotti e dei processi;
 la standardizzazione di processi e tecnologie.
È tuttavia anche una disciplina empirica, cioè basata sull’esperienza e sulla storia dei progetti
passati.
Il modello a cascata (o modello waterfall) è così definito in quanto ogni singola attività viene
completata prima del passaggio alla successiva. Secondo il modello di sviluppo a cascata, il
processo di realizzazione di un’applicazione informatica è scomposto in una
Pianificazione
sequenza di fasi successive ognuna delle quali ha lo scopo di trasfordel sistema
mare la descrizione di un problema da una versione a un’altra, di consentire l’analisi e la verifica della conformità dei comportamenti del software ai requisiti dell’utente e di consentire un
Analisi
miglioramento, una correzione e un adattamento dell’applicazione sviluppata. In questo modello, ogni sinProgettazione
golo passo viene svolto solo se i passi che lo
hanno preceduto sono stati completati.
Codifica
Pianificazione del sistema
In questa fase il programmatore identifica gli obiettivi che il software deve raggiungere. Si tratta di individuare le parti del sistema da realizzare con il software.
Test
Installazione
Analisi
Stabilisce le caratteristiche dell’applicazione informatica, delineandone gli
Manutenzione
aspetti di interfacciamento, di prestazione e di funzionalità; nella fase di
analisi si decide che cosa il progetto dovrebbe realizzare, senza alcun riferimento diretto a come il programma realizzerà i suoi obiettivi.
Il prodotto della fase di analisi è un elenco di requisiti che descrive in tutti i particolari che
cosa il programma sarà in grado di fare una volta che sarà stato portato a termine.
Generalmente viene prodotto un vero e proprio documento, noto come “specifiche dei
requisiti”, fondamentale per le fasi successive; omissioni, errori, sviste e “superficialità”
commessi nella fase di stesura di tale documento sono causa di criticità e portano spesso
al fallimento di tutto il progetto.
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
9
UdA 6
AL • Il software: dal linguaggio alla applicazione
Quello che ha
chiesto il cliente
Quello che ha
capito l’analista
Come è stato tradotto
in fase di progetto
Prototipo costruito
in fase di realizzazione
Modifiche apportate
in fase di test e debug
Esigenza reale
che aveva il cliente
In questo documento sono presenti anche altre due parti:
il manuale per l’utente, che indica in che modo l’utente utilizzerà il programma per
ricavarne i vantaggi desiderati;
le prestazioni richieste al sistema e le risorse utilizzate, cioè quanti e quali dati in ingresso il programma dovrà essere in grado di gestire e in quali tempi, la tipologia degli
archivi o le connessioni in rete locale o remota, i fabbisogni massimi di memoria e di
spazio su disco richiesti.
Progettazione
Sulla base dei requisiti espressi dall’utente e focalizzati con l’analisi, la progettazione incorpora tutte le attività connesse all’ideazione e alla definizione della strategia che porta alla
soluzione e quindi all’individuazione, tra tutte le possibili strategie, di quella più efficace ed
efficiente. In particolare, nella fase di progettazione si individuano i seguenti due obiettivi:
si sviluppa un piano di realizzazione del sistema, che comprende e descrive le diverse
modalità operative da effettuare;
si individuano le strutture dati e archivi necessari alla soluzione del problema; se si ricorre
alla progettazione orientata agli oggetti vengono stabilite le classi necessarie e i loro metodi
più importanti, producendo il diagramma delle classi e di relazione tra di esse.
Codifica (realizzazione)
Nella fase di realizzazione si scrive e si compila il codice sorgente eseguendo la vera e propria codifica delle istruzioni in linguaggi di programmazione. Questa fase è scomposta in
un’attività umana e in una serie di attività svolte dalla macchina:
nella prima fase, prettamente umana, si traducono in un programma le informazioni
fornite dalla formalizzazione;
nella seconda fase il programma viene elaborato automaticamente per produrre il codice che l’esecutore è in grado di interpretare: il linguaggio macchina.
Si realizzano quindi le classi complete di tutti i loro metodi individuati durante la fase
di progettazione, ottenendo come risultato il programma finito.
Test e debug
Hanno come obiettivo quello di verificare l’assenza di errori; dato che è praticamente im10
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
Tecniche e strumenti per lo sviluppo di un programma • AL
Lezione 3
possibile programmare senza errori, è necessaria una specifica fase, quella di test, nella quale viene verificata la correttezza dei risultati dell’elaborazione su un campione di dati di prova: l’eventuale presenza di errori innesca la fase di debug, cioè la ricerca dell’istruzione (o
segmento di codice) errata per procedere alla sua correzione e all’eliminazione del “baco”.
Installazione, verifica e collaudo
È un’unica fase articolata in tre momenti:
con installazione si intende la consegna del software al cliente mediante l’installazione
fisica del programma sul sistema del cliente stesso;
la verifica viene effettuata dagli utenti del programma e consiste nell’accertare che il
software sia corretto rispetto alle specifiche individuate dall’analista e quindi conforme
a quanto specificato nelle loro richieste, cioè se il risultato è un prodotto corrispondente
allo scopo per il quale è stato richiesto;
il collaudo accerta che, eseguendo prove con dati reali, il programma funzioni correttamente.
Al termine di questa fase si redige un documento sottoscritto da entrambe le parti, committente ed esecutore, che attesta la bontà del prodotto e la sua aderenza alle richieste
del cliente e descrive i collaudi che sono stati eseguiti e i loro risultati.
Manutenzione
È la fase permanente di supporto al sistema dopo la consegna all’utente; le attività svolte
in questo passo del ciclo di vita di un’applicazione riguardano:
◗◗ l’aspetto correttivo, che consiste nell’eliminare gli errori individuati;
◗◗ l’aspetto adattativo, che ha l’obiettivo di apportare le modifiche necessarie per il trasferimento dell’applicazione informatica su altri sistemi, anche a seguito di innovazione tecnologica;
◗◗ l’aspetto migliorativo, che si propone di aggiungere nuove funzionalità o di ottimizzare
quelle esistenti.
Elenchiamo un insieme di cause che portano al fabbisogno di modifiche:
◗◗ innovazione tecnologica e quindi necessità di upgrade al nuovo hardware;
◗◗ modifiche legislative e/o nuove procedure contabili;
◗◗ aumento delle esigenze (in termini di maggiori prestazioni richieste dall’utente);
◗◗ nuovi fabbisogni (reali e/o presunti) individuati dall’utente;
◗◗ adempimenti fiscali e/o richieste della Pubblica amministrazione;
◗◗ necessità di collegamento/integrazione con nuovi sistemi informatizzati;
◗◗ semplice desiderio di innovazione.
Da quanto appena detto possiamo affermare che un aspetto particolare del software è quello
di non essere mai finito! Qualunque prodotto software ha una vita propria che generalmente non termina mai ma confluisce in una nuova versione più completa e aggiornata del
programma stesso.
La manutenzione risulta agevolata se nelle fasi precedenti si è adottato un buon stile di programmazione e si è prodotta un’adeguata documentazione interna (commenti) ed esterna
(manuale d’uso e manuale tecnico) per il programma. Questa fase risulta agevolata se nelle
fasi precedenti si è adottato un buon stile di programmazione e si è prodotta un’adeguata
documentazione interna (commenti) ed esterna (manuale d’uso e manuale tecnico) per il
programma.
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
11
UdA 6
AL • Il software: dal linguaggio alla applicazione
■■ Conclusioni
Negli anni successivi sono stati sviluppati altri modelli per cercare di definire un processo
in grado di soddisfare tutte le esigenze di progettazione: di seguito sono riportati i principali modelli e viene descritta sinteticamente la loro principale caratteristica, a partire dal
modello a cascata appena descritto.
Il modello a cascata non è l’unico modello di sviluppo software, ma è il primo modello codificato; nel corso degli anni ’80 è stato utilizzato come base per la definizione di successivi
modelli meno rigidi e più adeguati alle nuove esigenze del software legate allo sviluppo tecnologico. Sono nati i modelli evolutivo, trasformazionale, a spirale, a prototipazione rapida, a
fontana, agile ecc., che sono oggetto di studio da parte dell’ingegneria del software.
ABBIAMO IMPARATO CHE...
• La scrittura dell’algoritmo è l’ultimo passo della progettazione dell’algoritmo che è una
operazione complessa che richiede l’esecuzione di più fasi:
◗◗ definizione e comprensione del problema (analisi del problema);
◗◗ ricerca della soluzione (strategia risolutiva);
◗◗ descrizione/elencazione delle operazioni da eseguire nel linguaggio “umano” o semiformale dell’algoritmo;
◗◗ codifica in un linguaggio di programmazione.
• Böhm e Jacopini formularono il principale teorema della programmazione strutturata:
“ogni algoritmo può essere descritto utilizzando unicamente tre tipologie di istruzioni: la
sequenza, la selezione e l’iterazione.
• L’ingegneria del software ha indicato con ciclo di vita del software l’insieme di tutte le
attività connesse alla produzione di un programma e le ha indicate come segue, secondo
un modello a cascata (o modello waterfall).
• Secondo il modello di sviluppo a cascata, il processo di realizzazione di un’applicazione
informatica è scomposto in una sequenza di fasi successive:
◗◗ pianificazione del sistema
◗◗ analisi
◗◗ progettazione
◗◗ codifica (realizzazione)
◗◗ test e debug
◗◗ installazione, verifica e collaudo
◗◗ manutenzione
• Il software ha sempre bisogno di modifiche per un insieme di cause:
◗◗ innovazione tecnologica e quindi necessità di upgrade al nuovo hardware;
◗◗ modifiche legislative e/o nuove procedure contabili;
◗◗ aumento delle esigenze (in termini di maggiori prestazioni richieste dall’utente);
◗◗ nuovi fabbisogni (reali e/o presunti) individuati dall’utente;
◗◗ adempimenti fiscali e/o richieste della Pubblica amministrazione;
◗◗ necessità di collegamento/integrazione con nuovi sistemi informatizzati;
◗◗ semplice desiderio di innovazione.
12
P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
Tecniche e strumenti per lo sviluppo di un programma • AL
Lezione 3
Verifichiamo le conoscenze
1. Risposta multipla
1 Un‘operazione elementare:
a. è molto semplice
b. viene eseguita in poco tempo
c. dipende dall’esecutore
d. può essere eseguita da un elaboratore
2 Il linguaggio di progetto:
a. è un linguaggio di basso livello
b. è un linguaggio che non esiste
c. viene interpretato dall’esecutore
d. è un antenato dei linguaggi di programmazione
3 L’istruzione GOTO:
a. è una istruzione a basso livello
b. non è presente nei moderni linguaggi
c. viene utilizzata nella pseudocodifica
d. è responsabile del “codice spaghetti”
4 Il framework:
a. è un compilatore veloce
b. è un editor visuale
c. aiuta il programmatore con esempi
d. genera codice un maniera automatica
5 Gli SDK non includono:
a. un compilatore
b. le librerie
c. la documentazione
d. il run-time
e. le informazioni sulle licenze
6 Il test di un programma consiste:
a. nelle operazioni che eliminano un errore
b. nelle operazioni che eliminano un baco
c. nelle operazioni che individuano un errore
d. nelle operazioni che correggono un
malfunzionamento
7 Quale tra i seguenti aspetti non riguarda la manu–
tenzione?
a. adattivo
b. applicativo
c. correttivo
d. migliorativo
8 Quale tra i seguenti eventi può richiedere un intervento
di manutenzione di un pacchetto applicativo?
a. sostituzione del personale
b. sostituzione di un terminale
c. nuova legge di stabilità (finanziaria)
d. aggiornamento del sistema operativo
2. Ordina
1 Ordina cronologicamente secondo il modello a cascata:
a. codifica (realizzazione)
b. progettazione
c. pianificazione del sistema
d. test e debug
e. analisi
f. manutenzione
g. installazione, verifica e collaudo
3. Vero o falso
1 Esistono molti linguaggi di programmazione.
2 I linguaggi di programmazione sono di diverso livello.
3 L’algoritmo risolve uno specifico problema. 4 I linguaggi di programmazione usati dai programmatori servono per scrivere codice in binario. 5 I linguaggi di programmazione descrivono gli algoritmi. 6 L’esecutore umano utilizza il linguaggio naturale. 7 Il linguaggio di programmazione è un linguaggio formale con una sintassi e una semantica. 8 Il linguaggio orientato alla macchina è composto da istruzioni estremamente semplici. 9 I programmi scritti in linguaggio C devono avere suffisso .C. 10Prima di mandare un programma in esecuzione questo deve essere compilato. 









P. Camagni, R. Nikolassy Corso di informatica Linguaggio C e C++, Vol. 1, Nuova Edizione OPENSCHOOL, © Ulrico Hoepli Editore S.p.A. 2015
13