Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica delle componenti client e server dei sistemi legacy
1. PROGETTO MIGROS: PROGETTAZIONE E SVILUPPO DEGLI
STRUMENTI DI TRANSCODIFICA DELLE COMPONENTI
CLIENT E SERVER DEI SISTEMI LEGACY
Tesi di laurea in Software Engineering
UNIVERSITÀ DEL SALENTO
FACOLTÀ DI INGEGNERIA
CDL MAGISTRALE IN
INGEGNERIA INFORMATICA
RAMO APPLICATIVO
Relatore: Chiar.mo Prof. Luca MAINETTI
Correlatore: Ing. Andrea PANDURINO
Controrelatore: Prof. Roberto PAIANO
Laureando: Giacomo RUSSO
Matricola: 10083137
2. INTRODUZIONE
STATO DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Migrazione di un LIS
• L’approccio consigliato per ridurre i costi di gestione del LIS è la
reingegnerizzazione: intraprendere un processo di migrazione
dal sistema source verso un'architettura target (fondata su
tecnologie allo stato dell'arte e conforme ai principi di qualità
del software moderni), riprogettando ogni componente del LIS.
• Bisogna far sì che le tecniche di analisi e transcoding del codice
legacy siano le attività guida nell’ambito di un processo di
migrazione di un LIS:
– costituiscono le attività preliminari che determinano in gran parte l’esito di
un progetto di migrazione.
• Transcoding: l’insieme di operazioni di lettura automatica,
analisi e conversione del codice in un altro linguaggio di
programmazione, in modo che il codice risultante mantenga la
stessa funzionalità del codice di origine.
2/25
3. INTRODUZIONE
STATO
DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Parsing e generazione del codice
• La transcodifica di codice legacy
prevede le fasi:
– Lexing: riconoscimento dei simboli;
– Parsing: riconoscimento delle
espressioni;
– Generazione: traduzione delle
espressioni nel codice target.
• Due possibili approcci:
– Compiler compilers: basate su una
grammatica formale che definisce le
modalità di lexing e parsing (JavaCC,
Java Tree Builder, NacaTrans);
– Tecnologie model-driven: basata sulla
lettura di modelli e su regole per
trasformare ciascun elemento in
codice (Model-to-Text), (Eclipse
Modeling Framework, Acceleo).
3/25
4. INTRODUZIONE
STATO
DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Parsing e generazione del codice
• I transcoder generalmente eseguono il loro compito prendendo
come input l’intero codice sorgente legacy, in maniera olistica.
• Evoluzione: partizionare il processo di transcoding,
permettendogli di funzionare su sottoinsiemi più piccoli
dell’intero codice (gruppi di file, singoli file, singole procedure),
detti Migration Unit.
• In questo modo è possibile condurre più «batch» di
transcodifica, ognuno indipendente dall’altro, potendo costruire
l’architettura target risultante assemblando i vari risultati
ottenuti (da qui l’utilità di utilizzare un’architettura target
component-oriented).
4/25
5. INTRODUZIONE
STATO
DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Parsing e generazione del codice
• I transcoder generalmente eseguono il loro compito
prendendo come input l’intero codice sorgente legacy, in
maniera olistica.
• Evoluzione: partizionare il processo di transcoding,
permettendogli di funzionare su sottoinsiemi più piccoli
dell’intero codice (gruppi di file, singoli file, singole
procedure), detti Migration Unit.
• In questo modo è possibile condurre più «batch» di
transcodifica, ognuno indipendente dall’altro, potendo
costruire l’architettura target risultante assemblando i vari
risultati ottenuti.
5/25
6. INTRODUZIONE
STATO
DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Generazione di codice secondo
MDA
• Il paradigma Model-driven Architecture di OMG
prevede l’utilizzo di trasformazioni Model-to-Text per
generare codice a partire dalla modellazione di un
dominio.
• Le trasformazioni Model-to-Text sono definite
tipicamente in maniera statica: ad ogni elemento del
modello corrisponde un solo tipo di generazione.
• Evoluzione: consentire la scelta a run-time della
particolare trasformazione con cui deve essere
generato un elemento del modello (mapping rule).
• La trasformazione è personalizzabile ed estendibile
da parte del progettista.
• Applicazione di questa tecnica alla generazione di
una UI, data la descrizione della User Experience.
6/25
7. INTRODUZIONE
STATO
DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Rich Internet Application
• Le Web Application approssimano sempre meglio le
tradizionali applicazioni desktop, offrendo un'alta
reattività e una User Experience ricca.
• Gli ultimi anni hanno visto l'affermazione in questo
ambito delle tecnologie di tipo RIA (Rich Internet
Application).
• Utilizzo di RIA come target della migrazione di LIS.
• Metodologie di progettazione di RIA:
– Rich – IDM: progettazione del dialogo utente –
sistema nell’ambito di una RIA;
– RUX – Method: trasformazione di modelli della UX in
modelli astratti di intefaccia, che a loro volta saranno
tradotti in interfacce utente RIA concrete. È
integrabile con la metodologia Rich-IDM e ben si
presta al paradigma del Model-Driven Engineering.
7/25
10. INTRODUZIONE
STATO DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Obiettivi
• Obiettivo: progettazione e realizzazione di una suite di strumenti di
traduzione da codice legacy a:
– componenti integrabili in architettura SCA (per quanto concerne lo strato di
business logic del LIS);
– componenti grafici integrabili in un client RIA (per quanto concerne lo
strato di presentation del LIS);
• Granularità della migrazione: One-to-One: ad ogni procedura COBOL
dovrà corrispondere un componente SCA, ad ogni form del client dovrà
corrispondere un componente RIA .
• Il risultato del transcoding dovrà inoltre essere adatto al deploy su una
moderna architettura enterprise, composta da:
– Data layer, basato su tecnologie di tipo Object-Relational Mapping;
– Service layer, organizzata secondo un’architettura di tipo SCA che espone
Web Services;
– Presentation layer, basato su un client RIA.
• La componente client da migrare sarà generata in base alle
informazioni ottenute da un reverse engineering della User Experience
del LIS.
10/25
13. INTRODUZIONE
STATO DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Transcoder COBOL - Java
• I suoi compiti sono:
– il preprocessing dei file COBOL;
– l’analisi dei file sorgente preprocessati;
– navigazione della struttura semantica del codice al
fine di collezionare le informazioni per costituire
delle Migration Unit;
– esportazione dei risultati dell’analisi e del codice
preprocessato.
– transcodifica dei file COBOL in linguaggio Java, in
modalità 1 ad 1, in accordo ai risultati dell’analisi.
• Svolge un transcoding basato su unità indipendenti
di codice (Migration Unit) da poter migrare
separatamente, invece del classico transcoding
«olistico», in cui la conversione è fatta passando in
input l’intero codice sorgente.
13/25
16. INTRODUZIONE
STATO
DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Transcoder COBOL – Java:
Transcoder
• NacaTrans: traduttore COBOL - Java,
traduce in classi Java che impiegano la
libreria di runtime NacaRT.
• È stato progettato per tradurre ogni linea
di codice COBOL con esattamente una
linea di codice Java, in modo che il
sorgente risultante sia il più simile possibile
al codice originale (codice Java Raw).
• Questa è una scelta progettuale che
permette ad un’azienda di salvaguardare il
capitale umano dei programmatori COBOL,
permettendo di riaddestrarli solo per il
mantenimento di questo tipo di codice.
16/25
17. INTRODUZIONE
STATO DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Transcoder COBOL – Java:
Transcoder
17/25
• NacaTrans svolge già una transcodifica COBOL – Java,
però il suo impiego pone vincoli stringenti sul codice
convertito risultante:
– NacaTrans non è in grado di tradurre il 100% del codice COBOL in
input,, occorre perciò intervenire per aumentare la portata di
traduzione del tool;
– NacaTrans genera classi Java il cui uso è limitato nell’ambito
dell’ambiente di runtime di Naca (NacaRT);
– NacaTrans non supporta la modalità di traduzione One-to-one;
• Si è quindi modificato lo strumento in modo da:
– estendere la portata della generazione;
– Generare codice idoneo ad essere eseguito in un ambiente meno
restrittivo;
– introdurre il supporto alla migrazione One-to-one.
18. INTRODUZIONE
STATO DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Generatore RIA UI
18/25
• Il suo compito è:
– Leggere le regole di trasformazione
(mapping rules);
– Caricare il modello della User Experience
indicato;
– Convertire ogni elemento del modello Rich
– IDM nel corrispondente elemento di
output specificato nella mapping rule;
– Avviare la generazione del codice relativo a
ciascun componente di output, utilizzando il
suo metodo di generazione.
26. INTRODUZIONE
STATO DELL’ARTE
OBIETTIVI
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Conclusioni
• Si è sviluppato con successo:
– uno strumento per l’analisi e la traduzione di codice
COBOL in Java, generando delle classi conformi ad
una Service Component Architecture (componente
server);
– uno strumento per l’analisi e la traduzione di modelli
Rich-IDM in Silverlight (componente client).
• Ampie possibilità di estensione degli strumenti e
possibilità di adattarli all’uso con altri linguaggi
source e target o ad ambienti a linguaggio misto,
cambiando opportunamente le grammatiche
formali e le trasformazioni Model-to-Text.
• Utilizzo esclusivo di tecnologie Open Source.
• Modalità di transcodifica per Migration Unit e
progettazione conforme al paradigma Model-Driven
Architecture.
26/25