Introduzione
La complessità è una questione centrale nello sviluppo di software. Aumentare il livello di astrazione
aiuta a ridurre la complessità oltre alla quantità di documentazione richiesta dal progetto. Ciò si
ottiene mediante il riutilizzo, l'uso di tool di modellazione di alto livello e stabilizzando presto
l'architettura.
|
|
Vantaggi
|
-
Produttività
-
Complessità ridotta.
|
Pattern
|
-
Riutilizzare le risorse esistenti
-
Utilizzare dei tool e dei linguaggi di livello superiore per ridurre la quantità di
documentazione prodotta
-
Concentrare l'attenzione prima sull'architettura
-
Creare un'architettura tenendo presente l'elasticità, la qualità, la
comprensibilità, il controllo della complessità.
|
Anti-pattern
|
-
Passare direttamente da vaghi requisiti di alto livello al codice personalizzato:
-
Poiché vengono utilizzate poche astrazioni, molte delle discussioni vengono
effettuate a livello del codice, piuttosto che ad un livello più
concettuale, che, fra le altre cose, perde molte opportunità di riutilizzo.
-
Requisiti catturati informalmente ed altre informazioni richiedono ripetute
revisioni delle decisioni e delle specifiche
-
Un limitata enfasi sull'architettura comporta una significativa
rilavorazione successivamente nel progetto.
|
|
Discussione
Uno dei problemi principali da affrontare nello sviluppo di software è la complessità. E' noto che la riduzione della
complessità ha un forte impatto sulla produttività. Lavorare ad un livello superiore di astrazione riduce la
complessità e facilita la comunicazione.
Un approccio efficace per la riduzione della complessità è il riutilizzo delle risorse esistenti, come i
componenti riutilizzabili, sistemi preesistenti, processi di business esistenti, pattern o software 'open source'. Due
grossi esempi di riutilizzo che hanno avuto un forte impatto sull'industria software nell'ultimo decennio sono:
-
Il riutilizzo del middleware, ad esempio i database, i server web ed i portali, e più recentemente
-
Il software open source, che fornisce moti componenti più grandi e più piccoli che possono essere potenziati.
Andando avanti i servizi Web avranno un maggiore impatto sul riutilizzo, poiché forniscono dei modi semplici per
riutilizzare delle grosse parti di funzionalità in piattaforme disparate e con un accoppiamento libero di un servizio
fra consumer e provider. Questo significa che è possibile potenziare facilmente differenti combinazioni di servizi per
risolvere le esigenze di business. Il riutilizzo è facilitato anche dagli standard aperti (open standard), come RAS,
UDDI, SOAP, WSDL, XML e UML.

Riutilizzo di risorse esistenti nelle architetture orientate sui servizi.
Uno dei problemi con il riutilizzo è che due componenti devono conoscere l'esistenza dell'altro al momento dello
sviluppo. Le architetture orientate sui servizi alleviano il problema fornendo quella che viene definito un
'accoppiamento libero' (loose coupling): un consumer di un servizio può individuare dinamicamente un provider di
un servizio. E' quindi possibile abbinare dei componenti o dei sistemi preesistenti ai servizi, consentendo ad altri
componenti o applicazioni di accedere dinamicamente alle loro capacità mediante un'interfaccia basata sugli standard,
indipendente dalla piattaforma e dalla tecnologia di implementazione.
Un altro approccio per ridurre la complessità e migliorare la comunicazione consiste nel potenziare tool, framework
e linguaggi di livello superiore:
-
Linguaggi standard, come UML (Unified Modeling Language), e linguaggi di applicazione rapidi, come
EGL, forniscono la possibilità di esprimere dei costrutti di alto livello, come i processi di business e i
componenti di servizi, che facilitano la collaborazione presente intorno ai costrutti ad alto livello,
nascondendo i dettagli non necessari.
-
I tool di progettazione e costruzione possono automatizzarsi passando da costrutti ad alto livello
a codice operativo:
-
-
Forniscono delle procedure guidate che automatizzano le attività di progettazione, costruzione e
test generando del codice e consentendo l'utilizzo di frammenti di codice,
-
Convertono l'integrazione e la verifica in attività di sviluppo senza interruzioni attraverso lo
sviluppo integrato, la build e gli ambienti di test.
-
Tool di gestione portfolio, che abilitano la gestione finanziaria ed altri aspetti di più
progetti come un'unica entità, di contro ad un insieme di entità separate.
In breve, i tool di livello superiore catturano graficamente le informazioni chiave sulla modellazione, che è un modo
potente e attraente di riepilogare e presentare le informazioni. I vantaggi della modellazione visiva vengono esplorati
con maggiori dettagli in Materiale di supporto: Modellazione visiva.
Un terzo approccio per la gestione della complessità è di focalizzare l'attenzione sull'architettura, per
definire un business o sviluppare un sistema o un'applicazione. Nello sviluppo di software si tende a progettare,
implementare e testare l'architettura nella fase iniziale di un progetto. Questo significa che, all'inizio del
progetto, l'attenzione si concentra sui seguenti obiettivi:
-
Definire dei blocchi di costruzione ad alto livello ed i componenti più importanti, le loro responsabilità e le
relative interfacce.
-
Progettare ed implementare i meccanismi strutturali, vale a dire, soluzioni già pronte per problemi comuni, ad
esempio come gestire la persistenza e la raccolta di dati obsoleti.
Creando l'architettura all'inizio, si fornisce al sistema una struttura di base, rendendo più facile la gestione della
complessità quando si aggiungono persone, componenti, capacità e codice al progetto. Si identificano anche quali
risorse riutilizzabili potenziare e quali aspetti del sistema devono essere creati in modo personalizzato.
|