1. Analisi del contesto
Al fine di condurre una corretta acquisizione di un package o insieme
di packages bisogna definire puntualmente le dipendenze che questi
hanno con l’hardware ed il software (System Calls, message passing e le
interazioni con l’utente) all’ambiente nativo.
Per effettuare una corretta e completa operazione di acquisizione bisogna
quindi disporre :
La review deve essere informale quanto basta onde consentire una disamina serena, ma nel contempo necessariamente critica per l'individuazione di eventuali errori.
2.2 Ciclo di Vita
Il ciclo di vita cui si fara’ riferimento e’ riportato in Fig.
1 Nei paragrafi successivi verranno descritte in dettaglio
tali fasi
Le singole fasi andranno opportunamente pianificate mediante strumenti
oggettivi ( Gant, Pert, ...) sia all'interno del singolo ente/gruppo sia
attraverso milestone verso altri enti aziendali/ gruppi .
Il processo di elaborazione di ogni fase si concludera’ con un output
costituito da documenti formalizzati secondo modelli standard.
Il modello proposto e' una variante al modello comunemente detto waterfall.
2.2.1 System Requirement Analysis
Questa fase viene attivata sulla base di un documento di Product Requirements
prodotto dal Marketing, in cui sono descritte le caratteristiche del prodotto
richieste dal mercato.
Sinteticamente si puo' dire che e' la fase in cui si comprendono e
si rappresentano i bisogni ( requirements ) di utente e del sistema.
Il prodotto di questa fase dovra' essere un documento in cui le esigenze
informative dell'utente vengono esposte in modo organico attraverso un
linguaggio, il piu' formale possibile, che consenta ai due interlocutori
di superare ambiguita' ed incomprensioni. Queste caratteristiche sono indispensabili,
infatti questo documento rappresentera' l'input per la seconda fase (quindi
strumento di lavoro per l'analista) ed inoltre dovra' essere comprensibile
all'utente che dovra' approvarlo.
L'esigenza della produzione di un documento di questo tipo e' motivata
dal fatto che i bisogni di utente sono il punto di partenza dello studio
seguente, impegnativo e costoso, e pertanto dovranno assicurare una solida
base per lo sviluppo dei passi successivi, saranno in realta' possibili
variazioni ai requirements iniziali ma e' auspicabile che non modifichino
nella sostanza le richieste originali.
La raccolta di queste informazioni necessarie alla stesura del documento
avviene, attraverso acquisizioni di normative, interviste con utenti e
management, questionari ecc.
Scopo di questa fase di analisi e' quello di produrre i seguenti documenti :
2.2.2 Prototyping
Da statistiche sui costi di manutenzione del software si ricava che
un errore introdotto nella fase di Requirement Analysis risulta essere
di almeno due ordini di grandezza piu' costoso di errori introdotti in
altre fasi. Tale considerazione suggerisce l'uso della tecnica di Prototipazione
al fine di oggettivare all'utente finale il risultato dell'analisi dei
Requirements.
Si intendera' per Prototipazione quel processo atto a realizzare un
modello delle funzionalita' del prodotto target, in modo da essere esercitato
dall'utente finale, prima che questo sia stato progettato.
Se l'esercizio copre tutte le funzionalita' si realizza la Simulazione.
Questa fase e' assimilabile ad un processo di review della fase di
Requirements Analysis, ed ha come input i documenti prodotti nella fase
precedente il suo output sono i documenti stessi revisionati. Questa fase
produce una milestone verso l'esterno costituita dall'accettazione formale
delle specifiche da parte dell'utente e del gruppo di Progetto.
Il processo di prototipazione e' sintetizzabile come in Fig.
2.
La prototipazione affinche' sia significativa deve essere Rapida e
deve essere in grado di combinare strumenti e tecnologie in modo tale che
( Fig. 4 ) partendo
da specifiche informali si riesca ad ottenere, per trasformazioni successive,
delle specifiche operazionali orientate al problema e poi all'ambiente
target.
2.2.3 Top Level Design
In questa fase viene definita l'architettura del sistema ( HW, SW,
FW ) in funzione dei requirements e delle opportunita' tecnologiche disponibili,
e si ha la scomposizione in moduli del sistema con una valutazione in termini
di pianificazione su cosa puo' essere sviluppato in modo proprietary e
su cosa va' acquisito dall'esterno. La possibilita' di esternizzare o internizzare
una produzione va' effettuata in funzione delle possibilita' di acquisisire
Know How riutilizzabile, e dei costi della realizzazione. L'output di questa
fase consiste in:
Tecniche Formal Specification ( FST )
2.2.4 Top Level Design Review
La review di validazione della fase di Top Level Design condotta secondo
quanto espresso in precedenza produrra' una o piu' proposte di modifica
da apportare all'Architettura o ai Requirements in dipendenza del livello
di inconsistenza rilevato; andra' inoltre verificata la consistenza degli
Integration Test con le specifiche funzionali del sistema.
Mentre in generale si fa' riferimento al sistema inteso nella sua globalits'
(HW, FW, SW, etc. ) le fasi di Detail Design, Coding, Module Test, OEM
Choiche, Acceptance e Reverse Engineering sono orientate ai singoli moduli,
ed in particolare nel seguito si fara' riferimento a moduli software .
2.2.5 Detail Design
In questa fase si effettua una microanalisi del singolo modulo o sottosistema,
producendo un documento di Detail Design che descrive la struttura del
singolo modulo; inoltre vanno specificati i Module Test da eseguire dopo
la fase di codifica.
La fase di Design deve essere vista come il cuore della software engineering,
in questa fase viene costruita la qualita' del software e solo un buon
design consentira' una corretta manutenzione, inoltre una corretta rappresentazione
e' l'unica a consentire una valutazione della qualita' del software prima
della codifica; pertanto verra' definito anche lo standard di produzione
del codice, in termini di linguaggio e di stile di codifica ( ad es. assenza
di goto, uso dei commenti, etc.), inoltre dovranno essere esplicitati in
chiaro tutti i processi di astrazione procedurale e di astrazione dei dati
onde evitare il mascheramento di conoscenza.
In funzione delle metodologie e tecniche adottate nella fase di Top
Level Design verra' scelta il metodo e la relativa tecnica di rappresentazione
per la fase di Detail Design.
In particolare risultano consolidate da tempo:
Structured Design
Object Oriented Design
2.2.6 Detail Design Review
La review di validazione della fase di Detail Design condotta secondo
quanto espresso in precedenza produrra' una o piu' proposte di modifica
da apportare alla struttura del modulo; andra' inoltre verificata la consistenza
dei tests prodotti con le specifiche funzionali dei moduli.
2.2.7 Coding
Si intende per Coding la fase di Stesura del Codice, e' evidente che
non esiste un netto confine con la fase di Detail Design; infatti spingendo
agli estremi la fase di microanalisi ed adottando un formalismo spinto
e rigoroso si riesce ad avere un dossier in termini di statement, facilmente
convertibile nel linguaggio scelto per la codifica; cio' ‚ tanto piu' vero
quanto piu' sono evoluti gli strumenti di CASE adottati in questa fase,
l'estemizzazione di questo concetto e' la Produzione Automatica del codice.
2.2.8 Code Review
L'obiettivo di questa fase e' la verifica del rispetto delle specifiche
di Detail Design, degli standard di codifica e di commento definiti dalla
fase di Detail Design stessa, mediante tecniche di Code Inspection o Walk
Trough.
Una review condotta con queste tecniche consente di ridurre drasticamente
i tempi di debugging.
2.2.9 Module Test
La fase di testing ‚ essenzialmente rivolta alla scoperta degli errori
tramite l'esecuzione del software.
Si ritiene opportuno precisare che per software di media complessita'
puo' essere arduo se non impossibile esercitare tutti i percorsi, per cui
andranno effettuati dei test basati su tecniche statistiche atte ad esercitare
tutti gli statement del codice.
Sono allo stato attuale consolidate le tecniche seguenti:
2.2.10 O.E.M. Choice
Avendo deciso, in fase di Top Level Design, di esternizzare la produzione
di uno o piu' sottosistemi, in questa succesiva fase viene operata la scelta
del prodotto e/o fornitore che meglio soddisfi i requirements precedentemente
definiti; di fatto trattasi di un'indagine di mercato del particolare settore
in cui l'applicazione si colloca.
2.2.11 Acceptance
Per l'accettazione del package O.E.M. verranno attivate le seguenti
azioni:
2.2.12 Reverse Engineering
Il termine REVERSE ENGINEERING si confonde comunemente, ma non propriamente,
con termini quali: il REUSE del software, la CONVERSION del software, il
RECYCLING del software, la RESTRUCTURING del software, la REENGINEERING
del software; ma si puo' affermare senza ombra di smentita che la reverse
engineering le ingloba tutte.
Si definisce processo di REVERSE ENGINEERING "quel processo in
grado di ricostruire, a partire dal codice, la conoscenza in essa implementata
ed il suo uso nel ciclo di vita del software ".
Un esempio tipico puo' essere quello di estrarre dal codice l'high
level design e low level design.
Reverse Engineering si tratta di eseguire un ciclo di produzione a
ritroso, partendo dal codice.
Analizzare il codice per estrarre da esso tutte le informazioni utili
a ripercorrere all'indietro una o piu' fasi del ciclo di vita del software
ricostruendo o costruendo in uno o piu' passi, auspicabilmente in modo
automatico e con l'aiuto di analizzatori, tutti i documenti ed i dati relativi
a tali fasi, verificandone la congruenza con quelli eventualmente gia'
esistenti .
Il processo di Reverse Engineering del software ‚ finalizzato alla manutenzione, riuso, o alla produzione, in modo da assicurare:
MAINT-DB PRODUCTION:
Inteso come sottosistema che mette a disposizione tecnologie (tools)
per la generazione di DATA-BASE usando i prodotti delle fasi del ciclo
di vita del software. Tale sottosistema includera' :
Deve consentire:
Vengono di seguito analizzati i costituenti del paradigma.
GOALS : e' la fase in cui si comincia l'analisi delle ragioni
per le quali si vuole allestire un processo di RE, si analizza il
ciclo di sviluppo e manutenzione del software nel quale i prodotti della
RE saranno usati.
L'obiettivo fondamentale di questa fase e' quello di definire i documenti
caratteristici che si vogliono produrre in funzione delle metodologie di
progetto adottate .
Gli obiettivi di RE possono essere :
LE CARTE Dl STRUTTURA : del sistema software (secondo le rappresentazioni
di Jackson, Yourdon-Costantaine,
Mayers, Yourdon-De Marco, Gane-Sarson, Ward-Mellor etc),
DATA FLOW DIAGRAMS,
SADT FLOW DIAGRAMS,
JSD FLOW DIAGRAMS,
JSP FLOW DIAGRAMS,
NASSY-SCHNEIDERMAN,
WARNIER-ORR,
PDL RAPPRESENTATION,
.....
MODELS : e' la fase in cui viene effettuata l'analisi
dei documenti che devono essere prodotti, in questa fase devono essere
definiti e scelti i modelli di rappresentazione del software che mettano
a disposizione le informazioni necessarie per la produzione dei documenti
definiti in precedenza, deve essere effettuata l'analisi di fattibilita'
delle produzione di questi modelli dal codice mediante opportuni tools.
I Modelli per RE; possono essere:
ALGEBRIC EXPRESSION MODULE,
D-GRAPHS ( control, data),
NESTING TREES,
CALL GRAPHS,
VARIABLE PROCEDURE MATRIX,
CALL REFERENCE MATRIX,
SYNTACTIC MODELS,
SEMANTICS MODEL,
.....
T O O L S : e' la fase in cui vengono definiti acquisiti
e/o progettati e/o costruiti i tools stessi; questi sono caratterizzabili
come:
INFORMATION EXTRACTOR TOOLS : i quali sono capaci di produrre
rappresentazioni del software corrispondenti ai models identificati; ovviamente
questi sono language dependent.
I Tools Extractor possono essere: STATIC ANALYZER, DYNAMIC
ANALIZER.
INFORMATION ABSTRACTOR TOOLS : i quali sono capaci di produrre
documenti richiesti a partire dai risultati prodotti dalla fase di information
extraction; ovviamente sono language independent, ma dipendenti dal tipo
di documento di progetto che si vuole produrre.
I Tools Abstractor possono essere:
ALGEBRIC REPRESENTATION MANIPULATORS,
DATA FLOW ANALYZER,
GRAPH GENERATOR AND ANALYZER,
GRAPHIC TOOLS,
.....
Una rappresentazione grafica del paradigma illustrato e' riportata
in FIG. 6
2.2.13 D's PHASES
Le D's phases individuano i successivi step
nello sviluppo dei delta quali sopra definiti; per queste fasi e' del tutto
valido quanto gia' detto per il ramo individuato per lo sviluppo di SW
proprietry.
2.2.15 System Test
L'obiettivo delle attivita' svolte per il System Test ‚ quello di verificare
tutte le funzionalita' cosi come specificate dai System Requirements e
secondo le modalita' indicate nelle System Test Specifications.
L'oggetto delle attivita' di System Test e' la Release ovvero l'insieme
dei componenti HW, FW, SW, documentazione, System Requirements e tutto
quanto concorre alla completa definizione del sistema cosi come questo
verra' poi rilasciato agli enti esterni a quelli di progetto.
Il risultato finale di questa fase sara' la validazione della release
o il rilevamento di malfunzionamenti; in tal caso se ne analizzeranno le
cause e le possibili soluzioni; il tutto andra' infine formalizzato con
dei Fault Reports & Change Proposal che serviranno per il riciclo del
Top Level Design .
2.2.16 Maintenance
In quest'ultima fase del ciclo di vita vengono gestiti tutti quegli
interventi sul prodotto successivi alla fine dello sviluppo.
I tipi di interventi generalmente eseguiti sono
Le attivita' che si scatenano sono funzioni dello stimolo che la ha motivata, in particolare l'insorgere di stimoli interni porta ad una revisione del prodotto partendo dalle fasi piu' a valle via via verso l'alto fino all'individuazione del punto critico che ha indotto l'errore o l'origine della modifica, a partire da tale punto critico si ripercorrono tutte le fasi previste operando gli opportuni interventi. per quanto riguarda invece le richieste di manutenzione motivate da stimoli esterni si dovranno ripercorrere in toto tutte le fasi del ciclo di sviluppo, apportando in ogni documento le modifiche che consentano di ottenere un prodotto rispondente alle nuove esigenze.
3 Funzioni di Supporto al Sw Engineering
Da quanto fin qui esposto si evince che anche per progetti medio piccoli
ci si ritrova con l'onere di gestire, oltre che produrre, una grossa mole
di informazioni; in particolare vogliamo evidenziare due aspetti di questo
problema: la memorizzazione di tutto quanto prodotto durante il processo
di sviluppo (sources e documentazione), al fine di rendere riproducibile
e riusabile il tutto;
la configurazione dei prodotti intermedi e finali, ovvero la definizione
esatta delle preÄreleases e releases in termini di system requirements,
specifiche funzionali, HW, FW, SW ecc.
Va notato che sia l'integrazione che il system test operano sull'insieme
di oggetti che in generale sono prodotti da gruppi diversi e che hanno
subito una certa evoluzione nelle fasi precedenti, pertanto in entrambi
i casi si ha bisogno di un ambiente definito in modo puntuale ovvero controllato;
va infine ricordato che anche per la gestione del progetto occorre una
visione di tutto il processo di sviluppo e di quanto da esso prodotto.
Per la soluzione di tali problemi occorre quindi individuare le funzioni
di Source Control e Configuration Control in modo chiaro e indipendentemente
dalla loro allocazione in team specifici o "embedded" negli strumenti di
sviluppo.
4 Finalita', Specifiche ed Effort Realizzativo Dei
Tools C.A.S.E.
Nell'ottica della gestione di progetto ci si pone il problema di aumentare
la qualita' e la produttivita':
5 Considerazioni
E' doveroso evidenziare che allo stato attuale non esiste un tool CASE
in grado di rispondere a tutte le esigenze, project management, system
analisys, re-engineering, ecc., ma esistono dei tools specifici che coprono
al meglio una o pi— fasi, ed i costruttori a livello mondiale sono orientati
alla realizzazione di sistemi di integrazione (IPSE) per la fornitura di
ambienti di sviluppo completi sia in termini di interscambio dei dati,
di gestione del cambio delle versioni e dei controlli. Va notato anche
un forte trend verso l'utilizzo di metodologie di Intelligenza Artificiale
in grado di offrire un'assistenza metodologica nelle fasi di Analisi e
Design, prototipazione, e nel riuso intelligente della conoscenza implementata
E' evidente che oltre allo sforzo dei costruttori di tools ‚ necessario
uno sforzo delle singole aziende per il rinnovo delle tecniche di produzione
SW e per il conseguente addestramento; alcune statistiche indicano i seguenti
dati sul periodo medio di training:
2/3 gg per introduzione di carattere generale,
3/5 gg sulle tecniche di analisi,
3/5 gg sulle tecniche di design;
il fruitore di questi corsi dovra' avere una buona conoscenza degli
approcci metodologici, di linguaggi di programmazione di architetture di
calcolatori; occorre infine una buona disposizione a diffondere le nuove
conoscenze acquisite.
6 Bibliografia
Pressman, R. S., Software Engineering: A Practitioner's Approach, 2nd
Edition McGrawÄHill 1987
Software Engineering Handbook, McGrawÄHill 1986
Sommerville, I., Software Engineering 3rd Edition Addison Wesley 1
g89
De Marco, T. Structured Analysis and Systems Specification, PrenticeÄHall
1 979
McMenamin, S and J. Palmer, Essential Systems Analysis, Yourdon Press
1 9 84
Ross, R.G. Entity Modeling: Techniques and Applications, Data Research
Group Inc. Boston 1988
Yourdon E., Modern Structured Analysis, PrenticeÄHall 1 989
Linger, R., H. Mills and B. Witt, Structured Programming, AddisonÄWesley
1979
Marca, D.A. and C.L. McGowan, SADT, McGrawÄHill 1988
Martin, J. and C. McClure, Diagramming Techniques for Analysts and
Programmers, PrenticeÄHall, 1985
Yourdon, E. and L. Costantine, Structured Design, PrenticeÄHall
1979
Shneiderman, B., Designing the User Interface, AddisonÄWesley
1987
Mayer, B. ObjectÄOriented Software Construction, PrenticeÄHall
1988
Hatley, D.J. and 1. A. Pirbhai, Strategies for Real Time Systems Specification,
Dover House 1987
Kaisler, S.H., The Design of Operating Systems for Small Computer Systems,
Wiley, 1983
Ward, P.T., and S.J. Mellor, Structured Development for Real Time,
3 volumes, Yourdon Press 1986
Beizer, B., Software Testing Techniques, Van NostrandÄReinhold,
1983
Freedman, D. and G. Weinberg, Handbook of Walktroughs, Inspections
and Technical Reviews, 3rd edition, Little, Brown & Co. 1982
Musa, J.D., A. Iannino and K. Okumoto, Sofware Reliability, McGrawÄHill
1 987
Myers G., The Art of Software Testing, Wiley 1979
Schulmeyer, C.D. and J.l. McManus, Handbook of Software Quality Assurance,
Van Nostrand 1987
Periodici e Riviste Specializzate
IEEE Transaction on Software Egineering
Computer (IEEE Computer Society)
IEEE Software (IEEE Computer Society)
Communications of the ACM
ACM Sigsoft Notes
CASE Outlook (mensile)
Computerworld (settimanale)
Software News (mensile)
Datamation (mensile)
Computer Decision (mensile)
BYTE (mensile)