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