Component Based Software Engineering (CBSE

Transcript

Component Based Software Engineering (CBSE
Component Based Software Engineering
(CBSE)
Riferimenti:
I.Sommerville, Ingegneria del Software, 8°
edizione- Cap. 19
Ingegneria del Software 2 – Component Based Software Engineering
1
Outline
• Componenti e modelli di componenti
• Il processo CBSE
• La composizione dei Componenti
Ingegneria del Software 2 – Component Based Software Engineering
2
1
CBSE (Component Based Software
Engineering)- premessa
•
Il CBSE nasce alla fine degli anni ’90 come approccio per lo
sviluppo software basato sul riuso in cui:
– il riuso è più semplice ed immediato di quello praticabile in sistemi
Object-Oriented
•
Nello sviluppo O.O. il riuso è a livello di singole classi di oggetti.
– Le classi di oggetti possono essere troppo dettagliate e specifiche per
consentirne un efficace riuso.
– È richiesta una conoscenza approfondita delle classi per poterle
riusare (necessità di disporre del codice sorgente).
•
Nel CBSE invece il riuso è basato su componenti che sono più
astratti delle classi di oggetti
– non è richiesta la conoscenza della loro implementazione per
riusarli
– possono essere considerati come fornitori di servizi stand-alone
Ingegneria del Software 2 – Component Based Software Engineering
3
Riuso di Componenti: alcuni esempi…
Ingegneria del Software 2 – Component Based Software Engineering
4
2
Quali proprietà per il componente?
• Un componente è un modulo software che incapsula
funzioni e dati e deve essere riusabile (per la
realizzazione di altri sistemi) e sostituibile (con un
componente equivalente).
• In pratica, deve essere pluggable !
• A tal fine deve :
–
–
–
–
Avere una interfaccia ben definita
Rappresentare una precisa astrazione
Avere alta coesione interna
Avere lasco accoppiamento con l’esterno
Ingegneria del Software 2 – Component Based Software Engineering
5
Sostituibilità del componente
• Due modi di realizzare la sostituibilità (a deploy-time
o a design-time)
– A deploy-time (late composition) non è richiesta la
ricompilazione del sistema
• In entrambi i casi, il sistema complessivo non deve
essere modificato per effetto della sostituzione.
• In generale, un componente B può sostituire un
componente A se:
– B fornisce almeno le stesse caratteristiche di A
– B non richiede più risorse di quelle richieste da A
Ingegneria del Software 2 – Component Based Software Engineering
6
3
Attenzione
• Un componente non opera in totale isolamento!
• La sostituibilità di un componente dipende anche
dall’architettura del software complessivo e dalle
scelte di progetto qui realizzate
• E’ possibile sostituire i componenti restando
nell’ambito di architetture simili con:
– Stessi pattern architetturali
– Stesse gestioni di errori ed eccezioni
– Stessa gestione delle basi di dati , etc. …
Ingegneria del Software 2 – Component Based Software Engineering
7
Elementi essenziali del CBSE
•
Componenti indipendenti, interamente specificati dalle proprie
interfacce
–
•
Standard di descrizione e realizzazione dei componenti
–
•
che semplificano l’integrazione tra componenti, anche sviluppati
in vari linguaggi e provenienti da diversi fornitori.
Middleware
–
•
Interfaccia e implementazione devono essere nettamente
separate (nei sistemi a oggetti sono in classi diverse)
che fornisce supporto per l’interoperabilità gestendo, come fa
ad esempio CORBA [Pope], le problematiche di concorrenza,
protezione, gestione delle transazioni
Un processo di sviluppo
–
che sia stato specificamente progettato per avvalersi con
successo di componenti riusabili.
[Pope]: Alan Pope,The CORBA Reference Guide, Addison Wesley Publishing Company, 1997
Ingegneria del Software 2 – Component Based Software Engineering
8
4
CBSE e principi di progettazione
• Oltre che sul riuso, CBSE si basa su altri ben noti
principi di ingegneria del software:
– I Componenti devono essere indipendenti in modo da
non interferire tra loro;
– Le implementazioni dei Componenti sono nascoste;
– La comunicazione avviene attraverso ben precise
interfacce;
– L’infrastruttura dei Componenti fornisce una
piattaforma che riduce I costi di sviluppo.
Ingegneria del Software 2 – Component Based Software Engineering
9
Problemi
•
•
•
•
Fiducia nei componenti – il componente viene utilizzato a
scatola chiusa (black box); come possiamo fidarci del
fatto che non abbia suoi problemi intrinseci e non
documentati?
Certificazione dei componenti – per garantire sulla
qualità dei componenti sarebbe necessaria una
certificazione di qualità garantita da una terza parte che
se ne assuma la responsabilità
Previsione delle proprietà emergenti – I componenti
potrebbero introdurre dei vincoli e dei problemi che, data
la loro natura opaca, non risultano prevedibili in fase di
scelta del componente nè vengono rilevati in fase di
testing del componente
Compromesso tra i requisiti – Non è sempre possibile
scegliere componenti che risolvano esattamente i nostri
problemi
Ingegneria del Software 2 – Component Based Software Engineering
10
5
Definizioni di Componenti
•
Councill and Heinemann [Cou2001]:
–
•
A software component is a software element that
conforms to a component model and can be
independently deployed and composed without
modification according to a composition standard.
Szyperski [Szy2002]:
– A software component is a unit of composition with
contractually specified interfaces and explicit context
dependencies only. A software component can be
deployed independently and is subject to composition
by third-parties.
[Cou2001].Definition of a Software Component and its elements. In Component Based Software Engineering
(Councill e Heinemann eds) Boston-Addison Wesley. 2001
[Szy2002] Szyperski ,Component Software: Beyond Object-Oriented Programming, 2 ed..Addison Wesley. 2002
Ingegneria del Software 2 – Component Based Software Engineering
11
Componente come fornitore di servizi
•
Quando un sistema necessita di alcuni servizi, chiama un
componente che glieli fornisce, senza sapere:
–
–
•
•
•
Dove il componente viene eseguito
In quale linguaggio è stato sviluppato.
Ne consegue che:
I componenti dovrebbero essere entità indipendenti e
direttamente eseguibili (ovvero compilate prima di essere
riusate)
I servizi offerti dai componenti sono disponibili attraverso
un’interfaccia e tutte le interazioni col componente devono
avvenire attraverso l’interfaccia.
Ingegneria del Software 2 – Component Based Software Engineering
12
6
Riassunto delle Caratteristiche dei
componenti
Standardizzato
La standardizzazione implica l’aderenza del
componente ad un modello standard che ne
definisce interfacce, meta-dati, documentazione,
composizione e consegna.
Indipendente
Un componente dovrebbe essere indipendente da
altri, per poterlo comporre e consegnare privo di
altri componenti. Altrimenti, le dipendenze devono
essere esplicitamente documentate.
Componibile
Per essere componibile, le sue interazioni con
l’esterno devono avvenire solo attraverso
interfacce pubbliche. Deve inoltre fornire all’esterno
informazioni su se stesso, come sui suoi attributi e
metodi.
Ingegneria del Software 2 – Component Based Software Engineering
13
Caratteristiche dei componenti
Consegnabile
Per essere consegnabile, il componente deve
essere autonomo e deve poter operare su una
piattaforma che implementi il suo modello. Ciò
implica che il componente è solitamente in
binario e viene compilato solo all’atto della
consegna.
Documentato
I componenti devono essere documentati in
modo che i potenziali utenti possano decidere
se essi soddisfano le loro necessità: deve
essere documentata sia la sintassi che (in
teoria) la semantica delle interfacce.
Ingegneria del Software 2 – Component Based Software Engineering
14
7
Esempi di sistemi a componenti
•
•
•
•
Sistemi a Plugin
Un plugin è un componente che può essere facoltativamente
aggiunto ad un sistema esistente al tempo di esecuzione, per
estenderne le funzionalità
Usando architetture basate su plugin, è possibile ottenere
sistemi software incrementalmente, aggiungendo nuovi
componenti al nucleo iniziale.
Un esempio: Eclipse
– È una piattaforma che fornisce un motore per implementare
sistemi che sono estensioni della piattaforma stessa,
attraverso l’uso di plugins
– Esistono innumerevoli plugins sviluppati per Eclipse, e
progetti open source basati su esso [Ecl]
Ingegneria del Software 2 – Component Based Software Engineering
15
Altri esempi di sistemi a plugin
•
•
•
•
•
•
L’ambiente integrato per sviluppatori Java ‘NetBeans’
Il Browser Google Chrome
Il browser Mozilla
Il music player Nullsoft Winamp
Il model checker Bogor
…
Ingegneria del Software 2 – Component Based Software Engineering
16
8
Interfacce dei Componenti
•
Fornisce (provides) un’interfaccia
–
•
Con la quale vengono definiti i servizi che esso è in
grado di fornire agli utilizzatori o ad altri componenti.
Richiede (requires) interfacce
–
Specifica quali debbano essere le interfacce di altri
componenti dei quali ha bisogno per poter fornire i
propri servizi.
• Un componente non deve necessariamente essere
indipendente, ma, piuttosto, devono essere note tutte
le sue dipendenze da altri servizi
Ingegneria del Software 2 – Component Based Software Engineering
17
Interfaccia di un componente
Interfaccia
‘Fornisce’
Interfaccia
‘Richiede’
Componente
Definisce i servizi che
Il componente offre ad altri
componenti
Definisce i servizi
che il componente
richiede ad altri
componenti
dell’ambiente
Fig. 1 Rappresentazione grafica UML di un Componente e delle sue Interfacce
Ingegneria del Software 2 – Component Based Software Engineering
18
9
Esempio: componente ‘Data Collector’ per
raccogliere dati da un insieme di sensori
Interfaccia
Richiede
Interfaccia
Fornisce
addSensor
removeSensor
startSensor
sensorManagement
Data collector
sensorData
stopSensor
testSensor
initialise
report
listAll
Fig. 2 Un esempio di Componente e delle sue Interfacce
Ingegneria del Software 2 – Component Based Software Engineering
19
Differenze tra componenti e oggetti…
•
Anche le classi di oggetti hanno metodi che somigliano ai
metodi delle interfacce dei componenti, ma …
•
I componenti sono entità consegnabili
–
•
I componenti non definiscono tipi
–
•
Non devono essere compilati all’interno di un programma
applicativo, ma sono installati su una piattaforma di
esecuzione
Un componente è da vedersi come un’istanza, non come
un tipo da istanziare
I componenti sono opachi
–
La loro implementazione interna non è visibile
all’utilizzatore
Ingegneria del Software 2 – Component Based Software Engineering
20
10
Differenze tra componenti e oggetti
• I componenti sono indipendenti dal linguaggio
– I componenti non devono essere necessariamente sviluppati
in un linguaggio object-oriented
• I componenti sono standardizzati
– La loro implementazione deve rispettare specifici modelli di
componenti
Ingegneria del Software 2 – Component Based Software Engineering
21
Modelli di Componenti
•
Si tratta di standard che definiscono come possa essere
implementato, documentato, distribuito un componente.
•
Esempi:
–
–
–
•
Modello EJB (Enterprise Java Beans)[Ejb]
Modello COM+ (.NET model) [Com+]
Modello Corba (di OMG) …
Il modello di componente specifica vari aspetti, ed in
particolare quali elementi debbano essere definiti nella
interfaccia del componente e come debbano essere scritti.
Ingegneria del Software 2 – Component Based Software Engineering
22
11
Elementi di un modello di componenti
tratto da Weinreich R. e Sametinger J., Component Models and Component
Services: Concepts and Principles, 2001, Addison Wesley, pp. 33-48.
Customisation
Naming
convention
Composition
Interface
definition
Specific
inter faces
Interfaces
Documentation
Meta-data
access
Usage
information
Packag ing
Evolution
suppor t
Deployment
and use
Component model
Fig. 3: Elementi del modello di Componente proposto
Ingegneria del Software 2 – Component Based Software Engineering
23
Alcuni elementi di un modello di
componenti
•
Definizione delle interfacce
–
–
–
Il modello deve specificare come definire le interfacce
ed i suoi elementi (es. nomi delle operazioni,
parametri, ed eccezioni), nonchè vincoli da soddisfare
per l’uso delle interfacce
Necessità di appositi linguaggi per la descrizione
delle interfacce e del loro significato
CORBA e COM+ prevedono appositi linguaggi per la
descrizione delle interfacce (IDL); EJB usa Java
Ingegneria del Software 2 – Component Based Software Engineering
24
12
Alcuni elementi di un modello dii
componenti
•
Composition
–
–
Il modello deve descrivere le modalità secondo le
quali un componente può essere composto con altri
In genere due meccanismi di composizione:
• Modello Client/ server -> invocazione di metodi
• Modello publish/ subscribe
•
Interfacce specifiche
–
Alcuni modelli prevedono che ogni componente
abbia interfacce specifiche (es. Per gestione
protezione e delle transazioni)
Ingegneria del Software 2 – Component Based Software Engineering
25
Alcuni elementi di un modello di
componenti
•
Convenzioni sui nomi e Meta-dati
–
–
–
•
Ogni componente deve avere un nome che ne consenta
l’identificazione univoca, pertanto il modello deve definire
le modalità di identificazione del componente
In CORBA e COM+ ogni classe ha un suo identificatore
(handle) a 128 bit che la rende unica
In EJB invece si utilizza una convenzione basata
sull’indirizzo web del produttore
I meta-dati del componente descrivono il significato del
componente e delle sue interfacce
–
Il modello dei componenti definisce le regole di
descrizione dei meta-dati e come I meta-dati possono
essere interrogati
Ingegneria del Software 2 – Component Based Software Engineering
26
13
Alcuni elementi di un modello dii
componenti
•
Customization
–
Il modello deve descrivere le modalità secondo le
quali un componente può essere adattato dal
cliente, prima di usarlo
• Si usano apposite interfacce per la customization
•
Packaging
–
Definisce come deve essere impacchettato il componente
affinchè possa essere rilasciato (installato e configurato)
nella infrastruttura dei componenti
Ingegneria del Software 2 – Component Based Software Engineering
27
Implementare il modello di componenti
•
I modelli di componenti definiscono anche le caratteristiche del
middleware che deve fornire il supporto per l’esecuzione dei
componenti.
•
L’infrastruttura fornirà:
– Servizi di piattaforma, i quali consentono la comunicazione tra
componenti conformi al modello
• Ad esempio,CORBA è una piattaforma di servizi che permettono la
comunicazione tra componenti realizzati indipendentemente
– Servizi orizzontali, indipendenti dall’applicazione e a disposizione
di altri componenti
•
Per usare i servizi dell’infrastruttura, I componenti vengono
consegnati in un contenitore predefinito e standardizzato (un
insieme di interfacce usate per accedere alle implementazioni
dei servizi di supporto)
Ingegneria del Software 2 – Component Based Software Engineering
28
14
Servizi offerti dall’implementazione del
modello di componente
Horizontal services
Component
management
Transaction
management
Resource
management
Concurrency
Persistence
Security
Platform services
Addressing
Interface
definition
Exception
management
Ingegneria del Software 2 – Component Based Software Engineering
Component
communications
29
Un semplice esempio di implementazione
di un modello di componenti
• Un Sistema Operativo è l’esempio più semplice di
infrastruttura per l’esecuzione di componenti (ossia di
applicazioni)
•
•
Il SO offre:
– Un ambiente per l’esecuzione delle applicazioni e la gestione di
risorse condivise
– i servizi di base di memory management, file management,
inter-process communication, process synchronization, e
security.
Per usare i servizi offerti dalla piattaforma sono necessarie le
interfacce verso i servizi
– Nei SO tali interfacce sono date dalle application programming
interfaces (APIs).
Ingegneria del Software 2 – Component Based Software Engineering
30
15
Limiti del modello di componenti del SO
• Questo primo modello di componenti era
insoddisfacente riguardo alle possibilità di:
– riusare le applicazioni (poco riusabili, in quanto troppo
complesse)
– Comporre le varie applicazioni (che in genere lavorano in
isolamento)
– Offrire servizi specifici di dominio
Ingegneria del Software 2 – Component Based Software Engineering
31
Un altro esempio: il Modello a
Componenti dei plug-in di Eclipse
•
Eclipse è una piattaforma estendibile per costruire ambienti IDE.
•
Fornisce un nucleo di servizi di base per controllare un insieme
di strumenti a supporto della programmazione.
È possibile sviluppare ulteriori strumenti sotto forma di
componenti detti Eclipse plug-ins, che devono rispettare le
norme di contratto della piattaforma Eclipse.
Tali componenti vengono configurati all’interno del sistema al
momento del deploy.
Ogni nuovo componente viene realizzato estendendo il
comportamento di plug-in esistenti.
•
•
•
Ingegneria del Software 2 – Component Based Software Engineering
32
16
Un esempio di file manifest XML per
la descrizione di un plug-in
<?xml version="1.0" encoding="UTF-8"?>
<plugin name="JUnit Testing Framework"
id="org.junit" version="3.7" providername="Eclipse.org">
<runtime>
<library name="junit.jar">
<export name="*"/>
</library>
</runtime>
</plugin>
Al momento del deploy di
un plug-in viene creato il
relativo manifest file (che
viene parsato e caricato in
un registro di plug-in).
Tutti i plug-in vengono
installati in una sottocartella della cartella
plugin.
Il run-time di Eclipse
istanzia i vari plug-in di
cui esiste un manifest file.
Ingegneria del Software 2 – Component Based Software Engineering
•
•
33
Il runtime di Eclipse fornisce una infrastruttura per supportare
l’attivazione e l’esecuzione dei vari plug-in.
Tale infrastruttura si basa su due classi:
– plug-in runtime class
– plug-in class
•
All’interno di una esecuzione di Eclipse, i plug-in vengono
incapsulati in una istanza di una delle due classi
•
La classe plug-in in Eclipse estende
org.eclipse.core.runtime.Plugin, che è una classe astratta che
fornisce metodi per gestire i plug-in.
•
V. http://www.eclipse.org/articles /Article-Plug-inarchitecture/plugin_architecture.html
Ingegneria del Software 2 – Component Based Software Engineering
34
17
Un esempio di estensione di plug-in
L’host plug-in è: la UI
di Eclipse
Il plug-in che estende tale UI
è una UI di help (che fornisce due
Nuove voci menu: HelpContent
e SearchPage).
Sono anche riportate le classi che
Implementano le relative
azioni di callback
Ingegneria del Software 2 – Component Based Software Engineering
35
Come ottenere i componenti riusabili?
Due possibili opzioni
• Procurarsi il componente sul mercato dei componenti
riusabili
– È praticabile per ora solo in ambiti ben definiti
– È una pratica poco diffusa, per il mancanza di fiducia verso
componenti di terze parti
• Produrre i componenti all’interno delle società
produttrici a partire da software esistente.
– I componenti sviluppati per una specifica applicazione non
sono automaticamente riusabili, ma devono essere
generalizzati.
– Come scegliere il componente da rendere riusabile?
Ingegneria del Software 2 – Component Based Software Engineering
36
18
Sviluppo di componenti per il riutilizzo:
fattori da considerare
•
Un componente riusabile deve avere alta probabilità
di essere riusato :
–
–
•
Un componente è più riusabile se è associato ad una
stabile astrazione di dominio (business object).
Ad esempio, in un dominio ospedaliero, le astrazioni
stabili saranno: infermieri, pazienti, trattamenti, etc.
I costi per renderlo riusabile devono essere inferiori a
quelli necessari per risvilupparlo .
–
–
–
Costi di documentazione del componente
Costi di convalida
Costi per renderlo pù riusabile
Ingegneria del Software 2 – Component Based Software Engineering
37
Valutazione dei Costi delle Modifiche
• Le modifiche per rendere riusabile un componente
devono conferire ad esso tutte le proprietà attese da
un componente riusabile, ossia:
– Deve nascondere la rappresentazione interna del proprio
stato;
– Essere indipendente da qualunque altro componente:
• In alternativa, le eventuali dipendenze devono comunque essere
dichiarate
– Essere robusto rispetto a tutti I possibili utilizzi compatibili
con l’interfaccia pubblicata
• Per rendere un componente riusabile bisogna estendere il testing a
tutti gli utilizzi, non più solo a quelli previsti dal modello dei casi d’uso
dell’applicazione originale
• In particolare, deve essere in grado di gestire correttamente tutte le
eccezioni che possono verificarsi
Ingegneria del Software 2 – Component Based Software Engineering
38
19
Possibili modifiche per rendere
riusabile un componente
•
Nascondere/eliminare i metodi specifici dell’applicazione
•
•
•
Rendere i nomi più generali
Aggiungere metodi per aumentare la copertura funzionale
Rendere la gestione delle eccezioni consistente con tutti gli
utilizzi possibili
– In realtà le eccezioni dovrebbero sempre essere
notificate nella risposta, in modo da demandarne la
gestione al chiamante
Aggiunta di una interfaccia di configurazione
Integrare (se possibile) i componenti da cui si dipende
•
•
Ingegneria del Software 2 – Component Based Software Engineering
39
Usabilità e riusabilità di un componente
• Per raggiungere maggiore riusabilità, spesso l’interfaccia
del componente viene resa più complessa,
• Ne può però conseguire la minore usabilità del
componente!
– Se l’interfaccia è troppo complessa, può essere più difficile
da usare
Ingegneria del Software 2 – Component Based Software Engineering
40
20
Trade-off tra usabilità e riusabilità dei
componenti
• Un componente dall’interfaccia semplice non è in grado di
modellare un concetto generale
– Ma è più facile usarlo, comprenderlo
• Un componente dall’interfaccia complessa può modellare
un concetto generale, fornendo tutte le interfacce richieste
alle diverse tipologie di utlizzatori
– Ma è più difficile da comprendere/ usare
– È molto difficile renderlo robusto
– Inoltre potrebbe essere necessario integrarlo con molti altri
componenti
• Necessità di un compromesso!
Ingegneria del Software 2 – Component Based Software Engineering
41
Ottenere componenti da Legacy system
•
Spesso è possibile estrarre componenti riusabili da
sistemi esistenti (“legacy”)
•
Per riutilizzare tali componenti è necessario sviluppare
componenti wrapper che implementino le interfacce
richieste e fornite dal componente riusabile
•
In generale, quest’opportunità è abbastanza costosa ma
può rappresentare una via percorribile quando si
vogliono riutilizzare componenti per le quali è richiesta
una grande affidabilità (e che non si vuole riscrivere)
–
Esempio: componenti che permettono di eseguire
transazioni bancarie
Ingegneria del Software 2 – Component Based Software Engineering
42
21
Sforzo di produzione di componenti riusabili
•
Produrre componenti riusabili è certamente più
oneroso che produrre componenti che non lo siano
–
•
Ma lo sforzo extra potrà essere ricompensato ogni
volta che quel componente verrà riusato anzichè
riscritto (o adattato a partire da un componente
esistente ma non direttamente riusabile)
La vita dei componenti può essere parecchio più
lunga della vita del sistema di cui fa originalmente
parte
Ingegneria del Software 2 – Component Based Software Engineering
43
Il Processo di sviluppo basato su
componenti (CBSE)
• Che tipo di processo di sviluppo può essere adottato
quando si riusano componenti software?
– L’approccio a cascata è impraticabile (v. Bohem)
• Troppa distanza fra la fase di definizione delle specifiche
e quella di integrazione dei componenti
– L’approccio evolutivo non è adatto
• La possibilità di aggiungere nuove feature su richiesta
non è sempre realizzabile con Componenti
preconfezionati (di cui non si possiede il codice)
• É necessario proporre un processo ad-hoc
Ingegneria del Software 2 – Component Based Software Engineering
44
22
Il Processo di sviluppo basato su
componenti (CBSE)
• Quando si riusano componenti software, è essenziale
un compromesso fra requisiti ideali e servizi
effettivamente forniti dai componenti disponibili .
• Di conseguenza, nel processo di sviluppo bisognerà:
– Preparare una prima bozza dei requisiti (molto generici);
– Cercare I componenti e quindi modificare I requisiti in base
alle funzionalità disponibili;
– Cercare ancora, dopo la definizione dell’architettura,
eventuali altri componenti che soddisfano meglio i requisiti
modificati.
– Lo sviluppo richiederà l’integrazione dei componenti e
sviluppo di glue-code
Ingegneria del Software 2 – Component Based Software Engineering
45
Processo CBSE
Raccolta dei
Requisiti
Utente
Identificazione di
Componenti candidati
Identificazione di
Componenti candidati
Ricerca nuovi
Componenti
Scelta dei
Componenti
Modifica dei
Requisiti in base ai
Componenti disponibili
Integrazione dei
Componenti
Progetto
Architetturale
Sistema
Convalida dei
Componenti
Ingegneria del Software 2 – Component Based Software Engineering
46
23
La ricerca dei componenti
•
•
In genere la ricerca avviene con approcci informali
Sarebbe necessario definire approcci meglio formalizzati alla
ricerca, basati su:
– Tecniche di classificazione dei componenti
• Es. tecniche basate su tassonomie e ontologie
• Tecniche di machine learning
• Tecniche basate su misure di distanza semantica fra
componenti richiesti e disponibili
– Tecniche di clustering (uso di metriche di somiglianza)
– …
– Vedere:
• S. Mahmood, R. Lai and Y.S. Kim, Survey of component-based
software development, IET Softw., 2007, 1, (2), pp. 57–66
Ingegneria del Software 2 – Component Based Software Engineering
47
La Convalida dei componenti creati
•
Bisogna valutare se i componenti realizzati coprono
effettivamente tutti i requisiti richiesti e si
comportano come annunciato
–
–
A seconda del fornitore, può essere necessario anche il
test dei singoli componenti, oltre che dell’integrazione
La specifica dei componenti deve essere tale da fornire le
informazioni necessarie per poter costruire una test suite
(e un ambiente di test per eseguirla) che sia in grado di
verificarne tutte le funzionalità
• Nella pratica però la specifica è solo informale…
–
L’utilizzo di un preciso formalismo di specifica può
consentire l’utilizzo di strumenti che generino
automaticamente casi di test
Ingegneria del Software 2 – Component Based Software Engineering
48
24
Convalida dei requisiti di qualità
• I componenti realizzati devono garantire I requisiti di
qualità previsti, primi tra tutti quelli di sicurezza .
• Anche se un componente è stato testato e funziona
bene in un ambito operativo, nuovi problemi possono
sorgere quando si cambia l’ambito
– impossibile testare il componente in ogni possibile
ambito…
Ingegneria del Software 2 – Component Based Software Engineering
49
Un esempio: il fallimento della missione
Ariane 5
•
Nel 1996, il razzo Ariane 5 si distrusse durante il
primo test di volo poichè il sistema ne perse il
controllo dopo 37 secondi
•
La causa del problema risiedeva in un componente
riusato dal software di Navigazione Inerziale
sviluppato per Ariane 4
–
–
In particolare, il problema fu causato da una eccezione di
overflow non gestita, la quale però non poteva verificarsi
nell’Ariane 4, a causa della ridotta potenza rispetto al 5
La funzione che diede errore non era stata testata perchè
non richiesta in Ariane 5 (e non era inserita fra I requisiti)
Ingegneria del Software 2 – Component Based Software Engineering
50
25
Fase di Integrazione
• I componenti selezionati saranno integrati :
– Con nuovi componenti sviluppati ad hoc
– Tra di loro
– Con l’infrastruttura di supporto ai componenti fornita
• L’nfrastruttura fornisce servizi per la comunicazione fra i
componenti e servizi orizzontali (servizi per le UI,
gestione transazioni, protezione, concorrenza,etc.)
Ingegneria del Software 2 – Component Based Software Engineering
51
Composizione di componenti
•
I componenti più semplici risultano essere i più riusabili ma non
riescono a risolvere problemi complessi
–
•
•
Una composizione di componenti può raggiungere requisiti
più specifici e complessi
La composizione dei componenti è un processo che consente di
ottenere un sistema attraverso l’assemblaggio di componenti
Un problema della composizione: può essere necessario
scrivere del codice integratore (glue code) per:
– Rendere compatibili i formati degli input e degli output dei
vari componenti
–
Coordinare i vari componenti
Ingegneria del Software 2 – Component Based Software Engineering
52
26
Tipologie di composizione-1
• Composizione Sequenziale
– Nel componente composto, i componenti costituenti
sono eseguiti in sequenza
– Richiede lo sviluppo di un glue code per realizzare
correttamente la sequenza
– Esempio:
A
B
– Il glue code invoca correttamente A e B in sequenza
Ingegneria del Software 2 – Component Based Software Engineering
53
Tipologie di composizione- 2
• Composizione Gerarchica
– Nel componente composto, un componente invoca
direttamente i servizi dell’altro componente
– Esempio:
A
B
Non c’è glue code: la classe
generale chiama I metodi di
quella specializzata e ne
espone altri
– Il componente A invoca B direttamente
Ingegneria del Software 2 – Component Based Software Engineering
54
27
Tipologie di composizione- 3
• Composizione Additiva
– Le interfacce di due o più componenti sono usate insieme
per creare un nuovo componente che, complessivamente,
esporta l’interfaccia ottenuta dall’unione di quelle offerte dai
componenti costituenti.
A
B
Dall’esterno viene visto un
componente che fornisce i
servizi di A e di B
Ingegneria del Software 2 – Component Based Software Engineering
55
Incompatibilità tra le interfacce di
componenti
•
Incompatibilità tra i parametri delle operazioni
–
•
Incompatibilità tra operazioni
–
•
Le due interfacce prevedono nomi diversi per la stessa
operazione
Incompletezza delle operazioni
–
•
Operazioni con lo stesso nome accettano un numero
diverso di parametri o parametri di tipo diverso
Operazioni con lo stesso nome svolgono, in realtà l’una
un sottoinsieme delle operazioni dell’altra
Tutti questi problemi di incompatibilità possono essere risolti
dal glue code, in particolare dai cosiddetti Adaptor
Ingegneria del Software 2 – Component Based Software Engineering
56
28
Esempio: componenti incompatibili
string location(string pn)
phoneDatabase (string command)
addressFinder
string owner (string pn)
string proper tyType (string pn)
displayMap (string postCode, scale)
mapDB (string command)
mapper
printMap (string postCode, scale)
- Il componente addressFinder trova l’indirizzo associato ad un numero di telefono (pn) e lo restituisce
come stringa
- Il componente mapper visualizza la mappa dell’area associata ad un dato codice postale (postCode)
Ingegneria del Software 2 – Component Based Software Engineering
57
Componenti Adattatori
•
•
•
Risolvono il problema della incompatibilità delle
interfacce fra componenti.
Gli adattatori possono essere diversi, a seconda del
tipo di composizione .
I componenti addressFinder e mapper possono
essere composti tramite un adattatore che estrae il
codice postale da un indirizzo restituito da
addressFinder e lo passa al componente mapper.
Ingegneria del Software 2 – Component Based Software Engineering
58
29
Composizione tramite un Adattatore
•
Il componente postCodeStripper è l’adattatore
necessario per la composizione di addressFinder e
mapper.
•
Il codice complessivo è:
address= addressFinder.Location(telefono);
postCode=postCodeStripper.getPostCode(address);
Mapper.displayMap(posCode, 10000);
Ingegneria del Software 2 – Component Based Software Engineering
59
Altro esempio di Adapter per il
componente data collector
sensorManagement
addSensor
removeSensor
startSensor
start
sensor
stop
getdata
Adapter
Data collector
sensorData
Ingegneria del Software 2 – Component Based Software Engineering
stopSensor
testSensor
initialise
repor t
listAll
60
30
Semantica delle interfacce
•
Come stabilire se interfacce sintatticamente identiche
corrispondono allo stesso servizio richiesto/fornito?
–
•
In generale bisogna basarsi sulla documentazione del
componente
Esempio:
– Un componente PhotoLibrary vuole fornire i metodi per
prelevare immagini da una fotocamera, etichettarle e
archiviarle in una libreria fotografica
– Interfaccia per il componente PhotoLibrary:
public void addItem (Identifier pid ; Photograph p; CatalogEntry p hotodesc) ;
public Photograph retrieve (Identifier pid) ;
public CatalogEntry catEntry (Identifi er pid) ;
Ingegneria del Software 2 – Component Based Software Engineering
61
Photo library composition
getImage
addItem
Photo
Library
adaptor
retrieve
catEntry
Image
Manager
getCatalogEntry
User
Inter face
Ingegneria del Software 2 – Component Based Software Engineering
62
31
Photo Library documentation
Documentazione di AddItem
“Questo metodo aggiunge una foto alla libreria e
associa ad essa il suo descrittore, fornito
dall’utente”
Domande:
1. Cosa succede se il descrittore è stato già utilizzato?
2. Quando elimino una foto, viene eliminato anche il suo
descrittore dal catalogo?
- Se così non fosse, potrebbe essere considerato non
valido un descrittore che non appartiene più a
nessuna foto
Ingegneria del Software 2 – Component Based Software Engineering
63
OCL
•
•
•
Object Constraint Language (OCL) è un linguaggio
pensato per la definizione di vincoli (constraints)
previsti dai modelli UML
E’ basato sulle nozioni fondamentali di pre e post
condizione
La sua specifica è reperibile all’indirizzo:
–
•
http://www.omg.org/docs/ptc/05-06-06.pdf
Si è rivelato utile anche per la descrizione delle
condizioni di usabilità delle interfacce di un
componente
Ingegneria del Software 2 – Component Based Software Engineering
64
32
Esempio: specifica OCL dell’interfaccia
per photo library
La parola chiave context indica il componente a cui si applica la
condizione
context addItem
Le precondizioni indicano ciò che deve essere vero prima di eseguire
addItem
Pre:
PhotoLibrary.libSize()>0
PhotoLibrary.retrieve(pid)=null;
Le precondizioni indicano ciò che deve essere vero dopo l’esecuzione
Post:
libSize()=libSize()@pre+ 1;
PhotoLibrary.retrieve(pid)=p;
PhotoLibrary.catEntry(pid)=photodescr;
Ingegneria del Software 2 – Component Based Software Engineering
65
Spiegazione delle specifiche OCL
•
Secondo la specifica OCL del componente Photo Library, valgono le
seguenti condizioni per l’interfaccia addItem :
–
–
–
–
–
Non deve esistere nessuna foto nella libreria che abbia lo
stesso identificativo della foto da inserire;
La libreria deve già esistere prima dell’inserimento;
L’inserimento di una nuova foto incrementa la dimensione della
libreria di 1;
Se si effettua una ricerca di una foto con lo stesso identificativo
assegnato, il componente restituisce la foto che è stata
aggiunta;
Se si effettua una ricerca nel catalogo con tale identificativo, si
ottiene il descrittore dell’elemento inserito.
Ingegneria del Software 2 – Component Based Software Engineering
66
33
CBSE: letture consigliate
• S. Mahmood, R. Lai and Y.S. Kim, Survey of
component-based software development, IET Softw.,
2007, 1, (2), pp. 57–66
• Li, Conradi, ..Torchiano, Morisio, Development with
Off-the-Shelf Components: 10 Facts, IEEE Software,
Mar-Apr. 2009, pp. 80-87
Ingegneria del Software 2 – Component Based Software Engineering
67
34