Lezione 7: Riuso del Software
Riferimenti:
I.Sommerville, Ingegneria del Software, 8°
edizione- Cap. 18 (Riuso)
Ingegneria del Software 2 – Riuso del Software
1
Outline
•
•
•
•
•
•
Vantaggi del riuso
Panoramica sulle forme di riuso
Design Pattern
Riuso basato su generatori
Application Frameworks
Riuso di COTS
Ingegneria del Software 2 – Riuso del Software
2
1
Riuso del Software
• Nella maggior parte delle discipline ingegneristiche, I
sistemi si progettano a partire da componenti che
sono usati anche da altri sistemi.
• L’Ingegneria del Software si è originariamente
preoccupata soprattutto dello sviluppo di software exnovo, ma oggi è ben noto che occorre adottare
processi di sviluppo basati su un riuso sistematico del
software:
– per ottenere software migliore e
– per ottenere software più rapidamente ed
economicamente.
Ingegneria del Software 2 – Riuso del Software
3
Vantaggi del riuso
•
Riusare software esistente può consentire di:
–
–
•
Ridurre i costi di sviluppo/ testing
Produrre software che rifletta il livello di affidabilità
dei software riusati: in presenza di software riusabili
di grande qualità può essere una ottima opzione
Riusare è possibile a diversi livelli e dimensioni:
–
–
–
Riuso di intere applicazioni (es. COTs)
Riuso di componenti (v. CBSE)
Riuso di oggetti e funzioni
Ingegneria del Software 2 – Riuso del Software
4
2
Quali cose possono essere riusate?
• Non bisogna pensare solo al codice!
• È possibile riusare anche:
–
–
–
–
–
L’Architettura di un sistema
I progetti
L’analisi
La documentazione (sia tecnica che utente)
I test
Ingegneria del Software 2 – Riuso del Software
5
Benefici del Riuso
• Maggiore affidabilità
– Il software riusato è, generalmente, più affidabile (in
quanto già provato e testato) di quello prodotto exnovo.
• Minori rischi di progetto
– Se si può riusare software, piuttosto che svilupparlo
ex-novo, si possono fare stime più accurate sui costi
del progetto
• Sviluppo più rapido
– I tempi di sviluppo si accorciano ed è possibile
consegnare il software più rapidamente
Ingegneria del Software 2 – Riuso del Software
6
3
Problemi legati al riuso
• Maggiori costi di manutenzione
– Se si riusa software di cui non si possiede il codice, il
sistema complessivo potrà risultare meno flessibile e
meno manutenibile
• Mancanza di strumenti CASE
– Spesso i CASE non forniscono funzionalità che
consentono un efficace riuso di librerie di componenti
software
• Diffidenza verso software prodotto da altri
– Spesso si preferisce risviluppare per avere un maggior
controllo sul software prodotto
Ingegneria del Software 2 – Riuso del Software
7
Problemi legati al riuso
• Difficoltà nel creare e Mantenere librerie di
componenti riusabili
– Popolare librerie di componenti riusabili può essere
costoso, e le tecniche disponibili per classificare,
catalogare e ricercare componenti software non sono
ancora mature.
• Difficoltà nel trovare, comprendere ed adattare
componenti riusabili
– Non sempre si è disposti a spendere tempo per
cercare, comprendere ed eventualmente adattare un
componente riusabile.
Ingegneria del Software 2 – Riuso del Software
8
4
Panoramica di approcci per il Riuso
Design
patterns
Component
frameworks
Component-based
development
Application
product lines
Aspect-oriented
software development
COTS
integ ration
Legacy system
wrapping
Prog ram
generators
Configurable ver tical
applications
Service-oriented
systems
Prog ram
libraries
Ingegneria del Software 2 – Riuso del Software
9
Approcci per il Riuso (1)
Design patterns
Generic abstractions that occur across appli cations are
represented as design patterns that show abstract and concrete
objects and interactions.
Component-based
development
Systems are developed by integrating components
(collectio ns of objects) that conform to component-model standard
.
Application
frameworks
Collections of abstract and concreteclasses that can be
adapted and extended to create application systems.
Legacy system
wrapping
Legacy systems (see Chapter 2) that can be wrapped b y
defining a set of interfaces and providing access to these
legacy systems through these interfaces.
Service-oriented
systems
Systems are developed by linking shared services that may be
externally provided.
Ingegneria del Software 2 – Riuso del Software
10
5
Approcci per il Riuso (2)
Applicat ion product
lines
An application type is general ised around a co mmo n
architecture so that i t can be adapted in different wa ys for
different cus tom ers.
COTS integrat ion
Syst ems are dev eloped by int egrating exist ing application
syst ems.
Configurable verti cal
applica tions
A generic s ystem is desi gned so that it ca n be c onfigured to
the nee ds of sp ec ific sy stem custom ers.
Program l ibra ries
Class and function libraries imp lementing com m onl y-used
abstract ions are a vailable for reuse.
Program gener ators
A generator s ystem emb eds knowledge of a particul ar types
of applicat ion and can generate sys tems or syst em fragm ents
in that dom ain.
Aspec t-oriented
soft ware devel opment
Share d com ponents are woven int o an application at different
place s when the program is compiled.
Ingegneria del Software 2 – Riuso del Software
11
Diversi Approcci possibili per il Riuso
•
Design Patterns
•
•
•
•
•
•
Component-based development
Application Framework
Wrapping di sistemi legacy
Sistemi orientati ai servizi
Linee di prodotto applicative
Integrazione di sistemi COTS (Commercial Off The Shelf)
•
•
•
•
Applicazioni verticali configurabili
Librerie di programmi
Generatori di programmi
…
Ingegneria del Software 2 – Riuso del Software
12
6
Fattori di cui tener conto nel
pianificare il riuso
•
•
•
•
•
•
Tempistica richiesta per lo sviluppo
Durata prevista per la vita del software
Background, capacità ed esperienza del team di
sviluppo nelle tecnologie di riuso
Criticità del software e altri requisiti non funzionali
Dominio di applicazione
Piattaforma sulla quale eseguire il sistema
Ingegneria del Software 2 – Riuso del Software
13
1. Riuso a livello Concettuale
•
Il Riuso di componenti già implementati obbliga ad
ereditare le scelte di progetto e di sviluppo di chi ha
realizzato I componenti (es. algoritmi, interfacce,
linguaggi,…), limitando le situazione nelle quali il riuso è
possibile…
•
Ad un maggiore livello di astrazione, è possibile invece
riutilizzare “concetti”, progetti astratti, privi di dettagli
implementativi
–
–
–
Es. Riuso di schemi di progettazione usati per Algoritmi
fondamentali, tipi di dato astratto;
Design patterns
Generative programming
Ingegneria del Software 2 – Riuso del Software
14
7
Riuso di schemi di progettazione
• Alcuni esempi:
• Algoritmi Fondamentali
– Ricerca, Ordinamento, Visita di Alberi, etc…
• Tipi di Dato Astratto
– Pila, coda, albero, lista, tabella
Ingegneria del Software 2 – Riuso del Software
15
Design Pattern
• Un Pattern
– individua un’IDEA, uno schema GENERALE E RIUSABILE
• schema di problema,
• schema di soluzione, etc.
– Rispetto ai componenti riusabili
• non è un “oggetto” fisico
• non può essere usato così come è stato definito, ma deve
essere contestualizzato all’interno del particolare problema
applicativo
– Due istanze/contestualizzazioni di uno stesso pattern (ad esempio
in problemi diversi) tipicamente sono diverse proprio per la
contestualizzazione in domini differenti
Ingegneria del Software 2 – Riuso del Software
16
8
Scopo dei Patterns
• Scopo dei pattern
– Catturare l’esperienza e la “saggezza” degli esperti
– Evitare di reinventare ogni volta le stesse cose
• Cosa fornisce un design pattern al progettista
software?
– Una soluzione codificata e consolidata per un problema ricorrente
– Un’astrazione di granularità e livello di astrazione più elevati di una
classe
– Un supporto alla comunicazione delle caratteristiche del progetto
– Un modo per progettare software con caratteristiche predefinite
– Un supporto alla progettazione di sistemi complessi
Ingegneria del Software 2 – Riuso del Software
17
Definizione
• Ogni pattern descrive:
– un problema specifico che ricorre più volte
– e il nucleo della soluzione a quel problema, in modo da
poter utilizzare tale soluzione un milione di volte, senza
mai farlo allo stesso modo.
• Abbastanza astratti
– in modo da poter essere condivisi da progettisti con
punti di vista diversi
• Non complessi nè domain-specific
– non rivolti alla specifica applicazione ma riusabili in
parti di applicazioni diverse
Ingegneria del Software 2 – Riuso del Software
18
9
Caratteristiche
• Un Design Pattern Nomina, Astrae, e Identifica
– gli aspetti chiave di una struttura comune di design che la
rendono utile nel contesto del riuso in ambito object-oriented
• Un Design Pattern identifica
–
–
–
–
le classi (e le istanze) partecipanti
le associazioni ed i ruoli
le modalità di collaborazione tra le classi coinvolte
la distribuzione delle responsabilità nella soluzione del
particolare problema di design considerato
Ingegneria del Software 2 – Riuso del Software
19
Elementi fondamentali dei Design Patterns
(secondo Gamma et al.)
Un pattern è descritto da quattro elementi essenziali
1.
Il nome del pattern, è utile per descrivere la sua funzionalità in una o due
parole.
2.
Il problema nel quale il pattern è applicabile.
3.
La descrizione della soluzione. È un modello che descrive gli elementi
che compongono il design, le loro responsabilità e le collaborazioni.
4.
Le conseguenze portate dall'applicazione del pattern. Spesso sono
tralasciate ma sono importanti per poter valutare i costi-benefici
dell'utilizzo del pattern.
Ingegneria del Software 2 – Riuso del Software
20
10
Esempio.
Il problema: ottenere diverse visualizzazioni
dello stato di un oggetto
30
25
15
30
20
1
2
15
3
Serie1
4
25
5
10
10
20
5
0
1
2
3
4
5
Soggetto
Dato1: 15
Osservatore 1
Dato2: 25
Osservatore 2
Dato3: 20
Dato4: 10
Dato5: 30
Il problema di ottenere diverse visualizzazioni di uno stesso soggetto
Ingegneria del Software 2 – Riuso del Software
21
Descrizione del Pattern Observer
•
•
Nome: Observer.
Descrizione:
– Separa la visualizzazione dello stato di un oggetto dall’oggetto stesso.
Quando lo stato dell’oggetto cambia, le sue visualizzazioni sono
avvertite del cambiamento e sono aggiornate automaticamente
•
Descrizione del problema
– Usato quando sono richiesti più formati di visualizzazione di stato di
un oggetto, e si vuole che l’oggetto non conosca tali formati.
•
Descrizione della soluzione
•
Conseguenze
– Consultare la seguente descrizione in UML.
– C’è accoppiamento minimo fra osservato ed osservatori, pertanto uno
svantaggio è sulla impossibilità di ottimizzare le prestazioni dei
visualizzatori .
Ingegneria del Software 2 – Riuso del Software
22
11
Observer
La classe Subject conosce I suoi osservatori
e fornisce una interfaccia per attaccare e
staccare oggettiObserver e una per
notificare a tutti gli Observer i cambiamenti
del Subject.
La classe Observer definisce
una interfaccia per oggetti a cui
dovrà essere notificata una
modifica del Subject.
observerState= subject->GetState();
return subjectState ;
Lo schema UML del Pattern Observer
Ingegneria del Software 2 – Riuso del Software
23
Observer: comportamento dinamico
:
ConcreteObserver
:
ConcreteSubject
External
Source
attach(Observer)
setState( )
update( )
notify( )
getState( )
Ingegneria del Software 2 – Riuso del Software
24
12
Categorie di Pattern
•
Un esempio di catalogo DP è presente nel libro Erich Gamma,
Richard Helm , Ralph Johnson, John Vlissides , “Design Patterns:
Elements of Reusable Object Oriented Software“.
– I pattern qui descritti sono spesso denominati pattern GoF (Gang of
Four), per ricordarne i 4 autori
•
Esistono diverse categorie di pattern, che descrivono la
funzione (purpose) e il dominio (scope) del pattern.
•
Funzione (purpose), ovvero cosa fa il pattern:
– Creazionali (creational): forniscono meccanismi per la
creazione di oggetti
– Strutturali (structural): gestiscono la separazione tra interfaccia
e implementazione e le modalità di composizione tra oggetti
– Comportamentali (behavioral): consentono la modifica del
comportamento degli oggetti minimizzando le necessità di
cambiare il codice
Ingegneria del Software 2 – Riuso del Software
25
2. Riuso basato su Generatori
•
•
•
Un generatore è un software che è in grado di
generare, a sua volta, software parametrizzato in
base a delle specifiche fornite dall’utente
I generatori possono essere utilizzati nell’ambito di
quei problemi per I quali esistono soluzioni ben
consolidate che però dipendono notevolmente dai
dati in ingresso
I dati in ingresso al generatore di programmi vanno
a descrivere la conoscenza relativa al dominio per il
quale debba essere utilizzato il programma da
generare
Ingegneria del Software 2 – Riuso del Software
26
13
Generative programming
• È un paradigma di ingegneria del software basato sulla
modellazione di famiglie di sistemi che, data una particolare
specifica dei requisiti, ottiene automaticamente un sistema
customizzato ed ottimizzato
•
•
– A partire da componenti elementari riusabili
– Adottando processi automatici di trasformazione e configurazione
– La specifica del sistema viene eseguita mediante Domain
Specific Languages (DSL)
Consente di ridurre il time-to-market, e migliorare la qualità del
software prodotto e la produttività
Gli strumenti di Generative programming usano le tecnologie dei
parser e dei compilatori
– http://www.programtransformation.org/ Transform/GenerativeProgrammingWiki
Ingegneria del Software 2 – Riuso del Software
27
Riuso basato su Generatori
Conoscenza
Conoscenzadel
del
Dominio
Dominioapplicativo
applicativo
Descrizione
Descrizione
dell’applicazione
dell’applicazione
Generatore
Di programma
Programma
generato
Database
Database
La generazione di un programma attraverso un generatore di codice
Ingegneria del Software 2 – Riuso del Software
28
14
Esempi di generatori di codice (1)
•
Generatori di applicazioni per gestione dati aziendali
–
•
I dati di dominio servono semplicemente alla
personalizzazione del prodotto;
Parser e analizzatori lessicali per analisi di codice:
–
–
–
L’input è una grammatica del linguaggio da analizzare;
l’output è l’analizzatore del linguaggio.
Es. Antlr
Lex&Yacc (per codice C) e JavaCC (per codice Java)
Ingegneria del Software 2 – Riuso del Software
29
Esempi di generatori di codice (2)
• Generatori di codice basati su modelli
– Ad esempio componenti software, inclusi in strumenti CASE per la
modellazione di software, che generano frammenti di codice a
partire da modelli (ad esempio da modelli UML)
– DPAToolkit
• Genera uno scheletro di codice java/cpp che istanzia un design
pattern
– http://dpatoolkit.sourceforge.net/
– Web Ratio
• Genera un’applicazione web a partire da un modello codificato
in WEBml, che a sua volta estende modelli delle classi e
modelli E-R
– http://www.webratio.com/Home.do?link=oln489d.redirect
Ingegneria del Software 2 – Riuso del Software
30
15
Vantaggi e svantaggi dei generatori
•
•
Il riuso basato su generatori riduce notevolmente il costo di
sviluppo e produce codice molto affidabile
Tramite generatori di codice si possono ottenere programmi più
versatili e performanti di quanto si possa ottenere limitandosi a
leggere direttamente dal database, a tempo di esecuzione, I dati
relativi alla personalizzazione
– Non tutti I generatori di codice, però, sono in grado di generare
codice che sia anche efficiente
•
Scrivere una descrizione di dominio per un utente
programmatore è più semplice che sviluppare programmi da
zero (anche se lo skill richiesto non è minimo)
•
•
La loro applicabilità si limita a poche tipologie di problemi
Spesso il linguaggio col quale descrivere il problema al
generatore ha una semantica molto limitata
Ingegneria del Software 2 – Riuso del Software
31
Model Driven Architectures (MDA)
• Famiglia di standard di modellazione (basata su UML e
standardizzata da OMG [1]), pensati allo scopo di
generare codice eseguibile a partire da modelli
– MDA si basa sulla separazione fra livelli di astrazione
(dominio, tecnologia, codice)
– MDA si basa sulla automazione della trasformazione fra
modelli di diverso livello
• L’approccio MDA ha l’obiettivo di fornire uno standard
completo per la creazione di modelli indipendenti
dall'implementazione, in modo che possano essere "mappati" su
qualsiasi piattaforma, presente o futura
[1] Specifiche di MDA: http://www.omg.org/docs/omg/03-06-01.pdf
[2] Elenco di MDA tools: http://www.modelbased.net/mda_tools.html
Ingegneria del Software 2 – Riuso del Software
32
16
Modelli nell’MDA
• modello PIM (Platform Independent Model)
– definisce le funzionalità di business ed il
comportamento del sistema, indipendentemente dalla
sua implementazione tecnologica
• modelli PSM (Platform Specific Model)
– consente di "mappare" il PIM su una specifica
tecnologia (Java, CORBA, web ...), senza alterare il
PIM stesso.
• Il linguaggio UML è usato per specificare PIM e PSM
Ingegneria del Software 2 – Riuso del Software
33
MDA- processo di sviluppo
•La definizione di PIM e PSM si avvale di Patterns predefiniti,
personalizzabili e riusabili, così come la trasformazione da PIM a
PSM (patterns tecnologici) e la generazione del software (patterns
di implementazione) a partire dal PSM.
Pattern di
Trasformazione
Pattern Funzionali
PIM
patterns
Patterns
tecnologici
PSM
patterns
Patterns
implementativi
Codice
Ingegneria del Software 2 – Riuso del Software
patterns
34
17
Famiglie di strumenti necessari per l’MDA
•
•
•
•
•
•
Tool di modellazione
Tool di analisi del modello
– Per la verifica di presenza di inconsistenze, incompletezze,
errori nei modelli
Tool di test
– Per eseguire verifiche model-based dei modelli
Tool di traduzione che attuino le regole di traduzione previste
per passare
– da modelli PIM verso modelli PSM
– dal PSM verso il codice.
…
Molte implementazioni degli standard di modellazione OMG
sono presenti nell’ Eclipse Modeling Framework (EMF) e
Graphical Modeling Framework (GMF).
Ingegneria del Software 2 – Riuso del Software
35
3. Application Framework
•
I framework rappresentano modelli astratti di progetto
di sotto-sistemi. Le applicazioni si costruiscono
integrando e completando una serie di framework.
•
Es.: OO Framework
–
–
•
Composti di una collezione di classi astratte e concrete e di
interfacce tra loro;
Un framework OO è una struttura generica; per realizzare il
software bisogna riempire le parti del progetto instanziando
le classi astratte necessarie, ed implementando il codice
mancante (v. Android)
Si differenziano dai design patterns per il fatto di
essere astrazioni di livello più alto, a livello
architetturale anzichè di design.
Ingegneria del Software 2 – Riuso del Software
36
18
Classificazioni di framework
• Infrastruttura di sistema
– Supportano lo sviluppo di infrastrutture come comunicazioni,
interfacce utente, e compilatori
• Integrazione di middleware
– Composti da standard e classi di oggetti per la
comunicazione e lo scambio di informazioni tra oggetti (es.
CORBA, COM+, Enterprise Java Beans )
• Applicazioni aziendali
– Integrano la conoscenza per specifici domini di applicazione
(es. telecomunicazioni o sistemi finanziari) e supportano lo
sviluppo di nuove applicazioni
• I primi due tipi rientrano anche nella categoria dei
Framework Orizzontali mentre le Applicazioni
aziendali si considerano come Framework Verticali
Ingegneria del Software 2 – Riuso del Software
37
Framework
•
Spesso i framework sono istanziazioni di una serie
di design pattern
•
L’utilizzo di un framework da parte di programmatori
e progettisti comporta il raggiungimento di un
notevole skill riguardante la conoscenza della
struttura del framework e delle opportunità da esso
messe a disposizione .
–
Spesso è necessario molto tempo, prima di poter
maturare tali conoscenze
Ingegneria del Software 2 – Riuso del Software
38
19
Un esempio: Model-View-Controller
•
É un framework usato per la progettazione di GUI.
•
Permette presentazioni diverse di uno stesso
oggetto e fornisce interazioni separate con queste
presentazioni.
•
MVC richiede l’istanziazione di vari design pattern
(es. Observer, Strategy, Composite, …)
Ingegneria del Software 2 – Riuso del Software
39
Model-view-controller
Input
utente
Stato del Controller
Messaggi
di modifica
della View
Metodi del controller
Stato della View
Metodi della View
Stato del Model
Modifiche
al Model
Metodi del Model
Interrogazioni e
aggiornamenti
del Model
Schema del Framework Model-View-Controller
Ingegneria del Software 2 – Riuso del Software
40
20
MVC - come funziona
•
L’utente interagisce con la UI scatenando eventi (es. click su un
elemento della UI)
•
Il Controller interviene gestendo l’evento mediante un handler o
un callback
Il Controller notifica la richiesta utente al Model, causando un
eventuale cambiamento di stato del Model
La View interroga il Model per generare una nuova interfaccia
utente
– La view viene notificata del cambiamento direttamente dal
Controller, oppure indirettamente mediante il pattern
Observer
•
•
Ingegneria del Software 2 – Riuso del Software
41
4. Riutilizzo di intere applicazioni
•
•
•
Consiste nel riutilizzare, eventualmente previa
riconfigurazione o personalizzazione , intere
applicazioni.
Le applicazioni possono essere riutilizzate
direttamente o essere integrate fra loro come
componenti indipendenti all’interno di più ampi
sistemi.
Esistono due approcci principali:
–
–
Integrazione di COTS;
Sviluppo di Linee di Prodotti
Ingegneria del Software 2 – Riuso del Software
42
21
Riuso di COTS
•
COTS - Commercial Off-The-Shelf- Software
commerciale che può essere usato dai suoi acquirenti
senza modifiche (es. Soluzioni desktop, prodotti
server…)
–
Esempio storico di COTS sono i DBMS
•
Si tratta di applicazioni complete che spesso offrono un
API (Application Programming Interface) per permettere
ad altri componenti software di accedere alle proprie
funzionalità
•
Nella pratica, i COTS sono composti di un insieme di
classi astratte di interfaccia visibili all’esterno e di un
insieme di classi astratte e concrete non visibili
Ingegneria del Software 2 – Riuso del Software
43
Integrazione di COTS
• Costruire grandi sistemi integrando COTS è una
strategia abbastanza efficiente per sistemi le cui
funzionalità base siano abbastanza comuni
– ad esempio per realizzare sistemi di E-Commerce,
potrebbero essere riutilizzabili COTS che implementano
soluzioni ai problemi di autenticazione, gestione del
database, invio delle e-mail, browsing delle pagine web, etc.
• Tramite COTS si velocizza il processo di sviluppo
riducendo i costi di sviluppo e test
Ingegneria del Software 2 – Riuso del Software
44
22
Fattori decisionali nella scelta dei COTS
•
•
•
Quali COTS offrono le funzionalità più appropriate?
– Possono esserci diversi prodotti COTS utilizzabili tra cui
scegliere in base a fattori come costo, completezza,
affidabilità
Come avviene lo scambio dei dati?
– L’utilizzo di COTS comporta sempre lo sviluppo di codice per
la conversione dei dati verso il formato richiesto
dall’applicazione o l’eventuale adattamento dell’applicazione
a tali strutture dati
Quali caratteristiche del prodotto COTS vengono utilizzate?
– La maggior parte dei prodotti COTS espongono una grande
quantità di funzionalità, molte più di quante necessarie
• E’ opportuno negare l’accesso alle funzionalità non utilizzate
• Può essere conveniente economicamente scegliere l’adozione
di COTS più ridotti
Ingegneria del Software 2 – Riuso del Software
45
Esempio: realizzare un sistema di
acquisto basato su COTS
•
•
•
Una organizzazione vuole dotarsi di un sistema per
consentire a tutti I suoi dipendenti di effettuare ordini
dai propri PC
–
Il dipendente deve poter cercare liberamente gli articoli
sul Web e fare ordini (e-commerce)
–
la gestione degli ordini deve essere eseguita in modo
centralizzato da un unico Ufficio Ordini
L’organizzazione possiede già un sistema COTS per
gestire ordini ed uno per la fatturazione e consegna
(usato solo dall’ufficio ordini).
Si sceglie di costruire il nuovo sistema integrando
tale COTS con altri componenti.
Ingegneria del Software 2 – Riuso del Software
46
23
Dettagli della soluzione
• Sul lato client, saranno usati programmi standard di
e-mail e web browsing (per eseguire la ricerca degli
articoli da ordinare).
• Sul server, si integrerà una piattaforma per l’ecommerce con il sistema pre-esistente (ordini e
fatturazioni).
– Saranno necessari degli adattatori per consentire lo
scambio di dati.
– Verrà inoltre usato un sistema di e-mail per generare
e-mail di notifica e ci sarà bisogno di un altro adattore
per ricevere dati dal sistema di fatturazione.
Ingegneria del Software 2 – Riuso del Software
47
Esempio: Sistema Acquisti basato su
COTS
Client
Client
Clientdidiposta
posta
elettronica
elettronica
Browser
Browserweb
web
Server
Sistema
Sistemadidi
e-commerce
e-commerce
Adattatorez
Sistema
Sistemadidi
Posta
Postaelettronica
elettronica
Sistema
SistemaOrdini
Ordiniee
Fatturazioni
Fatturazioni
Adattatore
Un esempio di sistema basato su COTS
Ingegneria del Software 2 – Riuso del Software
48
24
Integrazione di applicazioni ed Adattatori
•
Per poter dialogare con applicazioni/componenti esistenti è
necessario
– formulare richieste secondo il formato accettato
dall’applicazione
– Interpretare le risposte ottenute nel formato prodotto
dall’applicazione
Sistema
Sistema11
Adattatore
Sistema
Sistema22
– L’Adattatore ha il compito di eseguire le necessarie
trasformazioni di formato dei dati
• Quali approcci e tecnologie sono usabili?
Ingegneria del Software 2 – Riuso del Software
49
Possibili soluzioni al problema della
realizzazione degli adattatori
•
Per trasformare da/verso formati semplici (ad esempio file di
testo) conviene scrivere una classe adaptor
•
Per trasformare tra documenti XML[1], note le rispettive
grammatiche, si può scrivere un documento XSLT[2]
dichiarando le regole di trasformazione tra formati. Esistono in
commercio componenti anche gratuiti che interpretano i
documenti XSLT eseguendo le trasformazioni
Per interpretare/costruire documenti XML è possibile utilizzare
librerie standard come SAX [3]che forniscono un’API per
l’accesso ai contenuti del documento XML
Per interpretare formati diversi, non XML, un buon metodo
consiste nella scrittura di un parser (eventualmente tramite un
generatore automatico come Antlr [4] o JavaCC[5])
•
•
Ingegneria del Software 2 – Riuso del Software
50
25
Problemi dei COTS (1/2)
• Mancanza di controllo sulle funzionalità e sulle
prestazioni
– Il sistema è utilizzato a scatola chiusa: non siamo
consapevoli di come avvengano realmente le
operazioni nel suo interno e, di conseguenza, non
siamo in grado di modulare le richieste in modo da
ottimizzare le prestazioni.
• Problemi di interoperabilità tra sistemi COTS
– Può essere necessario dover scrivere del codice extra
per integrare sistemi COTS di produttori indipendenti.
Ingegneria del Software 2 – Riuso del Software
51
Problemi dei COTS (2/2)
• Nessun controllo sull’evoluzione del sistema
– Può avvenire che le nuove versioni del sistema
rendano impossibile l’interazione col nostro software
costringendoci a rimanere legati alle vecchie versioni,
per le quali non c’è più manutenzione.
• Supporto dei produttori COTS
– Tipicamente il supporto dei produttori potrebbe
terminare con l’acquisto del prodotto o limitarsi alle
sole evoluzioni decise dal produttore.
Ingegneria del Software 2 – Riuso del Software
52
26
5. Linee di prodotti software
•
Per linee di prodotti software si intendono famiglie di
applicazioni con funzionalità generiche che si
prestano ad essere configurate o adattate in modo
da poter essere utilizzate in contesti specifici.
•
Esempi di adattamento:
–
–
–
–
Specifiche configurazioni dei componenti e del sistema;
Aggiunta di nuovi componenti;
Selezione di componenti nell’ambito di una libreria;
Modifiche ai componenti per adattarsi alle esigenze del
contesto.
Ingegneria del Software 2 – Riuso del Software
53
Possibili specializzazioni
•
Specializzazione della piattaforma
–
•
Specializzazione dell’ambiente
–
•
Possono essere necessarie diverse versioni per venire incontro
alle diverse funzionalità e modalità di funzionamento dei
dispositivi periferici del sistema
Specializzazione funzionale
–
•
Possono essere necessarie diverse versioni per diversisistemi
operativi o hardware, senza modificare le funzionalità
Possono essere necessarie diverse versioni personalizzate in
base alle esigenze dei diversi clienti cui sono destinate
Specializzazione di processo
–
Possono essere necessarie diverse versioni per supportare I
diversi processi di business da eseguire
Ingegneria del Software 2 – Riuso del Software
54
27
Configurazione
•
•
Può avvenire in due momenti diversi:
Configurazione alla consegna
– La configurazione avviene per un prodotto finito, senza
modificarne internamente la struttura e il progetto, ma
solo limitandone/personalizzando le funzionalità
(customizzazione).
• Es. Pacchetti software verticali (es. ERP: Enterprise
Resource Planning)
•
Configurazione a tempo di progettazione
– Tramite l’adozione di patterns e framework generici, le
richieste di personalizzazione vengono recepite in fase di
progetto e influiscono direttamente sulla realizzazione del
prodotto
Ingegneria del Software 2 – Riuso del Software
55
Esempio: sistemi ERP
•
•
•
Enterprise Resource Planning (ERP): sistema
(generico) che supporta comuni processi aziendali (quali
gestione ordini, fatture, inventari, paghe) (es. SAP e
BEA)
Il processo di configurazione degli ERP si basa
sull’adattamento di un core generico attraverso
l’inclusione e la configurazione di moduli, e incorporando
conoscenza su processi e regole aziendali del cliente
specifico in un database di sistema.
Molto usati in grandi aziende, costituiscono la forma di
riuso più comune.
Ingegneria del Software 2 – Riuso del Software
56
28
Organizzazione di un Sistema ERP
Strumento per
pianificare
la configurazione
Generico Sistema ERP
Database
Della
Configurazione
Database
Del Sistema
Ingegneria del Software 2 – Riuso del Software
57
Architetture per le linee di prodotto
•
Per mantenere adattabilità e riconfigurabilità è utile
adottare architetture modulari e stratificate, che
permettano facilmente le necessarie modifiche
–
•
Architettura tipica: multilayer
Inoltre, è importante separare le funzionalità
generiche dai dati che si riferiscono alla
personalizzazione , in modo da poter realizzare tale
customizzazione senza generazione di codice.
Ingegneria del Software 2 – Riuso del Software
58
29
Esempio :un generico sistema di gestione
risorse
Livello UI
Interfaccia Utente
Autenticazione
Utente
Consegna
Risorse
Gestione
Risorse
Gestione
Query
Controllo Politica
delle Risorse
Livello di Gestione
I/O
Allocazione
Risorse
Livello Risorse
Gestione Transazioni
Database Risorse
Livello Database
Ingegneria del Software 2 – Riuso del Software
59
Una istanza del sistema generico:
Il sistema invio veicoli
Comms system
inter face
User interface
Operator
authentication
Vehicle status
manager
Equipment
database
Map and route
planner
Report
generator
Query
manager
Equipment
Vehicle
despatcher manager
Incident
logger
Transaction management
Vehicle database
Ingegneria del Software 2 – Riuso del Software
Vehicle
locator
Incident log
Map database
60
30
Processo di Sviluppo di una nuova
applicazione (da una famiglia di prodotti)
Nuova Negoziazione
dei Requisiti
Raccolta dei
Requisiti
Utente
Scelta del
Membro della
Famiglia più attinente
Adattamento
Del sistema esistente
Rilascio di un nuovo
Membro della
Famiglia
Ingegneria del Software 2 – Riuso del Software
61
Le fasi del processo di sviluppo
•
Raccolta dei requisiti Utente
–
•
Scelta del Membro della Famiglia più attinente
–
•
Eventuale adattamento dei requisiti per minimizzare le modifiche
Adattamento Del sistema esistente
–
•
Cercare il membro della famiglia di prodotti che è più vicino al
prodotto richiesto
Nuova Negoziazione dei Requisiti
–
•
Individuare I requisiti degli utenti attraverso la presentazione del
sistema esistente, evidenziando le modifiche necessarie
Sviluppo di nuovi moduli e adattamento dei membri della
famiglia.
Rilascio di un nuovo Membro della Famiglia
–
Consegnare e documentare chiaramente il nuovo membro della
famiglia (per sviluppi futuri)
Ingegneria del Software 2 – Riuso del Software
62
31