Introduzione
2
Modeling Language) ed i paradigmi programmativi quali MVC (Model -
View - Control) forniscono il necessario supporto teorico ad una corretta
formalizzazione.
Nonostante quanto appena affermato, nella pratica molte delle numerose
esperienze di riutilizzo del software a livello industriale intraprese negli
ultimi anni si sono rivelate fallimentari dal punto di vista pratico, che in
ambito industriale si traduce in termini di scarso ritorno economico. Le
cause del fallimento di queste iniziative sono da ricercarsi principalmente in
due fattori: la mancanza di un’adeguata cultura nell'ambito della ingegneria
del software, e la mancanza di strumenti specifici a supporto delle attività di
riutilizzo.
La presente Tesi di Laurea, nata dalla collaborazione della Università di
Pavia con l’IBM Italia S.p.A. (sede di Vimercate - MI), ha lo scopo di
fornire una soluzione ad uno degli aspetti legati alla carenza di strumenti a
supporto del riutilizzo del software.
Il sistema da sviluppare deve fornire un’applicazione funzionante in
ambiente distribuito e multi piattaforma, che realizzi un supporto grafico per
la visualizzazione delle metriche di prodotto.
La possibilità di accedere in modo semplice e standardizzato ad
informazioni quantitative su un componente software potenzialmente
riutilizzabile, garantisce un livello di confidenza superiore. E’ così dato un
valido supporto decisionale qualora siano disponibili più componenti con
caratteristiche analoghe.
L'applicazione, denominata "FCM Viewer", complementa il lavoro svolto
nell'ambito del programma ESSI (European System and Software Initiative)
dal progetto SURF (Software re - Use: a process improvement experiment at
an IBM Italia Facility).
Introduzione
3
La base teorica della applicazione, frutto di un precedente progetto
finanziato dalla Comunità Europea (REBOOT), si appoggia al modello FCM
(Fattori- Criteri- Metriche). Questo modello utilizza una gerarchia ad albero
per descrivere i principali attributi di un prodotto software.
L’applicazione dovrà consentire la personalizzazione dell’albero delle
metriche, sia nel numero di livelli sia nel numero e tipo di misurazioni
effettuate.
L’implementazione dovrà essere eseguita secondo una metodologia, basata
su criteri di "progetto per il riutilizzo" definita dallo stesso progetto Surf.
Tale metodologia di progetto del software, una volta approvata ed
opportunamente adeguata sarà adottata come protocollo ISO.
L’architettura software sarà sviluppata secondo il paradigma MVC e
documentata con UML.
Il sistema di visualizzazione deve essere implementato seguendo lo standard
Java Bean, in modo da essere immediatamente riutilizzabile all'interno di un
ambiente di sviluppo grafico.
L’applicazione sviluppata dovrà funzionare anche su Network Computer
(NC) perché queste macchine, pensate per diminuire i costi, permettono di
sfruttare al meglio l’hardware a disposizione, aumentando la sicurezza dei
dati.
Questi particolari prodotti hardware offrono diverse risorse ma sono stati
ideati come client leggeri.
Il sistema deve basarsi sul funzionamento di un Internet Server e di un
numero qualsiasi di client che si collegano tramite browser utilizzando come
supporto TCP/IP (Transmission Control Protocol/Internet Protocol) e
protocollo http (Hyper Text Transfer Protocol).
Il lavoro di tesi si è evoluto in fasi successive, i capitoli costituenti
l’elaborato rappresentano tali fasi.
Introduzione
4
In particolare il primo capitolo tratta il linguaggio UML impiegato per la
documentazione del software.
Questo nuovo linguaggio standard è presentato in diversi documenti, spesso
molto complessi. Qui ne è data una spiegazione generale fissando
l’attenzione sui grafici del linguaggio, essi sono la documentazione
principale, necessaria all’individuazione dei componenti da progettare
durante le fasi di implementazione del sistema.
Il secondo capitolo tratta della metodologia che si è progettata, raffinata ed
utilizzata per la realizzazione del sistema di visualizzazione. Essa individua
i documenti in notazione UML da redigere, la sequenza logica di passi da
seguire e consiglia gli strumenti da utilizzare in ogni fase.
Il successivo capitolo tratta del Network Computer, un prodotto hardware di
recente introduzione, al quale molte industrie stanno dedicando vaste
risorse. In questo capitolo si spiegano l’importanza del server, della rete e le
caratteristiche dei client che utilizzeranno lo strumento di visualizzazione.
Il quarto capitolo vuole dare una panoramica delle caratteristiche principali
del linguaggio Java.
In esso sono state riportate oltre alle particolarità del linguaggio, quelle
utilizzate nella realizzazione e le scelte effettuate per la stesura
dell’applicazione. Al termine del capitolo è data una breve indicazione degli
strumenti utilizzati e delle loro caratteristiche principali.
Il quinto é il capitolo in cui è spiegata la teoria della “misurazione” del
software. Oltre a spiegare le difficoltà di interpretazione delle misure
ottenute, si conclude con le motivazioni delle scelte effettuate e le soluzioni
adottate.
L’ultimo capitolo è l’insieme di tutte le fasi, individuate nella metodologia
spiegata nel capitolo due, e qui applicate per lo sviluppo della tesi. In questo
Introduzione
5
capitolo è riportata parte della documentazione prodotta per la realizzazione
del sistema.
E’ aggiunta anche parte della documentazione prodotta da Rational Rose che
secondo la metodologia è parte integrante del progetto software realizzato.
L’elaborato comprende un’appendice, glossario delle sigle utilizzate
comunemente in ambito informatico o semplicemente delle abbreviazioni
impiegate nella tesi.
E’ quindi inserita una bibliografia, elenco dei libri consultati per
l’approfondimento delle tecnologie adottate oltre ai principali libri specifici
per le varie tematiche. Spesso tali libri sono sottoforma di pubblicazioni
html e per questi sarà riportato il link Internet.
Quindi è riportata l’appendice in cui è inserito l’indice di tutti i metodi, le
classi, e gli attributi implementati per tutte le classi dell’applicazione.
Tale risultato si è ottenuto grazie all’uso del tool Javadoc nella versione 1.2.
L’ultima appendice riporta le tabelle in cui sono spiegate le caratteristiche
delle metriche utilizzate e i filtri associati ad ognuna di esse.
Capitolo 1: Il Linguaggio di Modellazione Unificato
6
1.1 Introduzione
Questo capitolo intende dare una spiegazione di cosa tratta il linguaggio di
modellazione unificato o l’Unified Modeling Language (UML). Questa sigla
ultimamente in ambito specialistico è divenuta molto comune e per questo
motivo sono stati pubblicati vari libri su questo argomento. Si rimanda a
questi libri (alcuni dei quali riportati in bibliografia) per un
approfondimento sull’argomento. Qui intendo dare una traccia di cosa è
l’UML e come è stato utilizzato per la realizzazione del progetto.
Una citazione riportata praticamente in tutti i documenti che trattano questo
argomento è: "UML è un linguaggio per specificare, visualizzare e realizzare
i prodotti di sistemi software e per il business modeling. L’UML rappresenta
una collezione delle migliori pratiche ingegneristiche, che si sono
dimostrate utili nella progettazione di sistemi complessi e di grandi
dimensioni."
L’Object Management Group (OMG), un consorzio internazionale di
standardizzazione, alla fine del 1996 chiese la pubblicazione di una
notazione standard che permettesse la documentazione dei sistemi ad oggetti
e che agevolasse l’interscambio di dati tra strumenti o team di sviluppo
Capitolo 1: Il Linguaggio di Modellazione Unificato
7
eterogenei. A questa richiesta aderirono diverse industrie e il prodotto che
ne scaturì alla fine di accordi e trattative fu proprio UML.
Questo standard è nato per essere indipendente dai linguaggi di
programmazione ed addirittura dalla programmazione stessa poiché può
essere utilizzato in tutti i contesti, infatti, la documentazione del linguaggio
stesso è redatta proprio in UML per dimostrare che è adatta a tutto ma
soprattutto che è autoesplicativa.
Questo linguaggio è stato costruito per adattarsi alla produzione iterativa di
software. Come ben noto tutti i progettisti prevedono più release di un
prodotto, anche se spesso la linea decisionale ed i clienti non condividono
questo metodo.
Solo seguendo questa tecnica è possibile avere prodotti testabili nel minor
tempo possibile anche se non contenenti tutte le funzionalità richieste.
Il fatto di non stimare in maniera preventiva tali tempi può portare o a
ritardi nel rilascio dei prodotti o alla distribuzione di software
malfunzionante.
1.2 Storia di UML
Il processo di standardizzazione ed unificazione che ha portato ad UML ha
avuto origine nei primi anni ‘90 quando Booch iniziò la pubblicazione dei
suoi metodi con il marchio Rational.
Nel 1994 con l'ingresso di Jim Rumbaugh nella società Rational è proseguito
lo sviluppo di metodi atti alla documentazione del software. La svolta
decisiva è avvenuta con l'arrivo nella stessa società, ad ottobre del 1995, di
Ivar Jacobson la cui ditta Objectory fu acquistata dalla Rational. Il grafico
successivo è tratto dal sito Web di Rational e rappresenta la cronologia per
lo sviluppo del linguaggio.
Capitolo 1: Il Linguaggio di Modellazione Unificato
8
Booch ´91
Booch ´93
Unified Method 0.8
UML 1.0
OMT - 2
OMT - 1 OOSE
UM L 0.9 & 0.91
OOPSLA ´95
June ´96 & Oct ´96
Submission of UML 1.0 to OMG
for adoption, Jan ´97
Other methods
public
feedback
Publication of
UM L 1.0, Jan ´97
UML Partners’
Expertise
Industrialization
Standardization
Unification
Fragmentation
Figura 1. Cronologia di UML
La cronologia di UML in dettaglio è:
• Ottobre 1995: è introdotto Unified Method versione 0.8 (Booch e
Rumbaugh) come unificazione dei loro due metodi. (nello stesso periodo è
acquistata Objectory).
• Giugno 1996: nasce UML versione 0.9 sviluppata da Booch, Rumbaugh e
Jacobson. UML non è più una metodologia ma diventa un linguaggio.
• Ottobre 1996: esce la versione UML 0.91 revisione della precedente
sempre frutto dei tre “amigos” Booch, Rumbaugh e Jacobson.
• Novembre 1996: l’OMG chiede di “costruire una notazione standard che
permetta la documentazione dei sistemi ad oggetti e che agevoli
l’interscambio di dati tra strumenti o team di sviluppo eterogenei”.
Capitolo 1: Il Linguaggio di Modellazione Unificato
9
• 16 gennaio 1997: è depositata all’OMG la versione UML 1.0 di Booch,
Rumbaugh, Jacobson e le prime aziende produttrici di software al mondo,
tra cui Microsoft, Oracle, Hewlett Packard, Digital e Texas Instruments.
• Gennaio 1997: all'OMG arrivano anche altre proposte; OCL di IBM e una
di Platinum.
• Settembre 1997: dopo aver raggiunto accordi con Platinum, IBM e le altre
case, la versione 1.1 dello Unified Modeling Language è sottoposta
all'approvazione di OMG la proposta appartiene a Rational Software,
Microsoft, Hewlett Packard, Oracle, Sterling Software, MCI Systemhouse,
Unisys, ICON Computing, IntelliCorp, i-Logix, IBM, ObjecTime,
Platinum Technology, Ptech, Taskon, Reich Technologies, Softeam, ed
altri.
• 16 novembre 1997: UML 1.1 diventa ufficialmente uno standard OMG
(con il nome ufficiale di "UML OMG 1.0")
1.3 Il Linguaggio
L’UML è un linguaggio visuale di modellazione che permette ai progettisti
di definire gli artefatti della programmazione necessari a rappresentare il
sistema da gestire. E’ data la possibilità di utilizzare uno strumento di
documentazione, svincolato da rigide sequenze, dalle caratteristiche
tecnologiche e dei requisiti utente che consente di descrivere il progetto fino
all’allocazione dei componenti software su diversi processori in
un’architettura distribuita. Il linguaggio consente di rappresentare uno
stesso sistema a diversi livelli di astrazione, corrispondenti ai diversi
professionisti ed ai diversi interlocutori: committenti, utenti, addetti
all’utilizzo od allo sviluppo, che comunicano per giungere alla definizione
dei requisiti che il software dovrà contenere. Il linguaggio si propone di
seguire tutte le diverse fasi di un progetto.
Capitolo 1: Il Linguaggio di Modellazione Unificato
10
Gli autori ed i proponenti di UML hanno evitato di associare al linguaggio la
proposta di un processo che suggerisse una sequenza di passi da compiere
per lo sviluppo dei sistemi. Questa caratteristica è stata introdotta già dalla
versione 0.9 per vincolarne il meno possibile l’accettazione e l’uso da parte
dei vari settori del mondo informatico e per rendere il più globale possibile
l’uso di tale linguaggio. Ma UML non è riducibile a una semplice notazione
grafica, infatti, il metamodello su cui gli autori hanno trovato un accordo è
estremamente ricco e complesso sotto il profilo semantico. Le caratteristiche
dei vari elementi del modello e le associazioni possibili tra loro sono
definite in modo particolareggiato, anche grazie a una serie di vincoli
espressi mediante un linguaggio formale, Object Constraint Language
(OCL), che consentono di verificare se un enunciato definito in UML è ben
formato.
IBM, che ha sviluppato OCL, dispone di un parser che verifica la correttezza
della semantica utilizzata. Il “compilatore” indica quindi se le notazioni
introdotte per descrivere il sistema sono definite correttamente ed inoltre
dimostra che il linguaggio è estremamente ricco. Questo non deve
scoraggiarne l’uso, ma al contrario facilitarlo perché UML è stato pensato
con un “core” non molto complesso che deve essere appreso e da estensioni
che permettono di adattare le notazione a tutti i dettagli desiderati ma la cui
conoscenza non è fondamentale per la comprensione dei modelli costruiti.
Per visualizzare e diagrammare correttamente i sistemi software sono
necessari tre elementi: un processo, una notazione ed un tool di
modellizzazione e queste sono proprio le tre caratteristiche principali di
UML.
Esso permette la scomposizione di grandi programmi in sottoprogrammi che
possono essere sviluppati indipendentemente, e soprattutto di redigere una
documentazione chiara e comprensibile. In questo modo è agevolato il
Capitolo 1: Il Linguaggio di Modellazione Unificato
11
lavoro dei team ma soprattutto è incrementata la possibilità di riutilizzare
quanto sviluppato.
L’UML si basa su diversi linguaggi preesistenti e li estende ed unifica: uno
di questi è Object Oriented Software Engineering (OOSE) sviluppato da Ivar
Jacobson che ha un approccio orientato agli USE CASE e da un eccellente
supporto all’analisi delle richieste del cliente (Requirements), si adatta
all’ingegneria d’impresa. Questo metodo conteneva la parte di metodologia
di Objectory un altro metodo sviluppato sempre da Jacobson. Un altro
linguaggio incluso è Object Modeling Technique 2 (OMT-2) sviluppato da
Jim Rumbaught particolarmente adatto all’analisi di sistemi informativi per
la gestione di grandi quantità di dati. Nell’UML è compreso inoltre
Booch’93 sviluppato da Grady Booch particolarmente adatto alla fase di
Design e costruzione del progetto per applicazioni che richiedono
particolare sforzo ingegneristico. Oltre alle idee dei suoi tre principali
autori, accoglie quelle di numerosi altri metodologi: David Harel per i
diagrammi di stato, Bertrand Meyer per le precondizioni e postcondizioni
per l’ammissibilità di avvio degli eventi.
Sally Shlaer & Stephen Mellor hanno sviluppato i grafici per esprimere il
Ciclo di Vita degli Oggetti e Rebecca Wirfs-Brock è intervenuta nello studio
delle responsabilità e collaborazioni delle classi.
Per concludere attorno a questo linguaggio si sono sviluppati molti tool
grafici, anche complessi, che permettono di gestire tutti i diagrammi e di
redigere anche della documentazione testuale da allegare ai prodotti
sviluppati.
In questo campo è da ricordare Rational Rose prodotto dalla ditta dei tre
‘guru’ del linguaggio che, seppure con le sue pecche, la considerevole
complessità ed il costo molto elevato, è un prodotto adatto a dimostrare che
Capitolo 1: Il Linguaggio di Modellazione Unificato
12
è possibile utilizzare UML per facilitare la progettazione e soluzione di
molti problemi.
Questo tool è quello utilizzato per la stesura dei diagrammi del progetto, nel
capitolo sei vengono riportarti i principali diagrammi costruiti durante tale
fase.
1.4 Perché non metodo?
A questo punto è giunto il momento di chiedersi come mai UML, che era
nato col nome “Unified Method”, è passato da "metodo" a "linguaggio" con
l’obiettivo di divenire "universale". Una spiegazione citata dai suoi autori
più volte è: "Un solo processo universale buono per tutti gli stili di sviluppo
non sembra possibile e tanto meno desiderabile. Ciò che va bene per un
progetto è probabilmente sbagliato od inutilizzabile per un altro. Tuttavia
UML può essere usato per esprimere gli artefatti di tutti i processi, in
particolare i modelli prodotti".
Ma ciò non significa che UML trascuri i processi. In realtà quello che i suoi
autori hanno sviluppato è un processo basato sui Casi d'Uso, incentrato
sull'architettura, iterativo e incrementale.
"L'esperienza insegna che i dettagli di questo processo di tipo generale
vanno adattati alle peculiarità della cultura dello sviluppo applicativo in
ciascuna organizzazione".
Siccome non si collega ad una metodologia predefinita, UML può essere
definito universale: "Universale nel senso che può esprimere contenuti di
natura differenti e si presta a scopi anche assai diversi, esattamente come un
linguaggio di programmazione, non naturale, può essere usato in modi molto
diversi".
Ci vorrà ancora del tempo per sapere se questo linguaggio sarà adottato
massicciamente. In molte aziende, e chiunque ha esperienza di un progetto
Capitolo 1: Il Linguaggio di Modellazione Unificato
13
lo può affermare, la produzione di software è basata su una definizione delle
specifiche di analisi in formato testuale, e sulla loro immediata
implementazione in righe di codice. Spesso le specifiche sono in formato
vocale e le modifiche che avvengono dal primo accordo alla soluzione sono
molteplici. In alcune aziende, i flow chart costituiscono la documentazione
di corredo al software. In altre, l'avvento e l'utilizzo di linguaggi visuali e di
tool IDE (Integrated Development Environment), oltre alla necessità di
limitare la massimo ulteriori spese ha spinto l’attività di documentazione a
divenire un'operazione trascurabile.
Per tutte le aziende in cui esiste la certezza che lo sviluppo e la
manutenzione del software sono attività complesse, come per tutti gli altri
settori ingegneristici, la definizione e l’utilizzo di modelli formali per le
specifiche di analisi e progetto è un requisito essenziale alla produzione di
tutti i componenti.
Non bisogna dimenticare che diversi studi hanno appurato che in un’azienda
l’acquisto di un nuovo programma software corrisponde solo ad un terzo
della spesa complessiva che l’azienda stessa dovrà sostenere per la
successiva manutenzione ed i futuri aggiornamenti.
Le società più importanti, che documentano i prodotti utilizzando le tecniche
affinate con la progettazione tradizionale, sono alla ricerca di tecniche di
sviluppo orientate agli oggetti. La confusione riguardante la scelta di
metodologie e documentazione da redigere è notevolmente aumentata in
questo decennio poiché sono nate più di cinquanta metodologie il cui
obiettivo era quello di documentare i prodotti software ma che hanno fallito
o perché troppo complesse o perché non adatte a seguire tutte le fasi della
progettazione.
Oggi le tecnologie cambiano sempre più spesso, a un ritmo sempre
maggiore. Dagli ambienti centralizzati si è passati alle architetture
Capitolo 1: Il Linguaggio di Modellazione Unificato
14
distribuite ed ora sembra si stia ritornando a quelle centralizzate (Network
Computer). La tecnologia non è più omogenea e soprattutto è molto meno
stabile che in passato, quando la scelta di un sistema operativo, di un
linguaggio, di un data base determinavano per anni le caratteristiche
dell’ambiente di sviluppo in un azienda. Normalmente ora diversi linguaggi
e soprattutto numerosi data base coesistano in un unico ambiente operativo e
colloquiano tra loro. In questi ambienti, la standardizzazione portata
dall'UML, supportata dagli strumenti di sviluppo, costituirà senza dubbio un
elemento fondamentale per l'unificazione delle tecniche di progetto.
1.5 I diagrammi di UML
L’UML non è formato solo da diagrammi ma essi ne sono la parte più
importante. Ne esistono diversi tipi, pensati per facilitare la comprensione
dei comportamenti degli elementi appartenenti al sistema da descrivere. I
diagrammi sono stati utilizzati perché la programmazione software, ed in
particolare quella ad oggetti, richiede una documentazione particolare per
rendere facilmente comprensibili a coloro che dovranno effettuare la
manutenzione del software, dove effettuare le modifiche o meglio come
utilizzare i componenti già sviluppati. Questi documenti previsti da UML
assistono tutte le fasi di sviluppo e possono essere separate in un due
insiemi.
Il primo insieme può essere definito come “descrittivo”, in cui cioè si cerca
di comprendere a fondo il problema da risolvere senza pensare a come si
risolverà.
Infatti le soluzioni che si adottano devono essere indipendenti dal
linguaggio e dalle caratteristiche specifiche del sistema da sviluppare, si
deve cioè cercare di ottenere dei componenti che abbiano la possibilità di
essere utilizzati in ambienti diversi e su problemi differenti dallo specifico
Capitolo 1: Il Linguaggio di Modellazione Unificato
15
sotto osservazione. Questi obiettivi permetteranno di realizzare soluzioni più
semplici e probabilmente riutilizzabili.
Naturalmente la fase di sviluppo dovrebbe iniziare dalla verifica
dell’esistenza di problemi simili già risolti o parzialmente risolti.
Il secondo insieme di grafici lo chiameremo “implementativo” poiché questi
diagrammi sono rivolti alla fase di realizzazione effettiva del progetto.
Questi ultimi infatti servono a descrivere come sarà fisicamente distribuita
l’elaborazione e permette anche la rappresentazione di componenti
hardware. Solo in questa fase è necessario pensare alla soluzione definitiva
con la relativa allocazione dei componenti che si sono progettati, al tipo di
linguaggio stesso in cui sviluppare il progetto se non erano state fatte
richieste particolari dall’utente.
1.6 Insieme Descrittivo
1.6.1. Diagramma dei casi d’uso
Come probabilmente riscontrato da tutti i programmatori uno dei passi più
complicati nella progettazione è capire a fondo tutte le esigenze del cliente
per poterle soddisfare.
A questo punto sorge una domanda: “Ma a cosa serve imparare ed utilizzare
una notazione grafica magari anche piacevole che costa però molto, visto
che al cliente interessa solo l’output del sistema sviluppato?”
La risposta è molto semplice, la notazione è stata introdotta per ovviare alla
difficoltà di comunicazione tra committente e progettista e tra tutti i
collaboratori allo sviluppo di un sistema. Infatti spesso essi sembrano
parlare lingue differenti, e quasi sempre i risultati ottenuti nelle prime
versioni dei prodotti software sono completamente differenti da quelli attesi
dal cliente.