Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
1. PROGETTAZIONE DI UNO STRUMENTO PER LA
REINGEGNERIZZAZIONE DI APPLICAZIONI LEGACY
Tesi di laurea in Ingegneria del Software I
UNIVERSITÀ DEL SALENTO
FACOLTÀ DI INGEGNERIA
CDL IN INGEGNERIA DELL’INFORMAZIONE
ORIENTAMENTO INFORMATICA
Relatore: Chiar.mo Prof. Luca MAINETTI
Correlatore: Ing. Andrea PANDURINO
Laureando: Giacomo RUSSO
Matricola: 10041804
2. INTRODUZIONE
STATO DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Legacy Information Systems
• Attualmente l’infrastruttura di moltissime organizzazioni
si basa su Legacy Information Systems (LIS).
• Definizione di LIS: “qualunque sistema informativo che si
opponga in maniera significativa alla modifica e
all’evoluzione” (Bisbal).
• Il costo di mantenimento di un LIS è alto: hardware
costoso, software costoso, scarsa interoperabilità con
altri sistemi software, la sua dismissione è costosa.
• L’approccio consigliato per ridurre i costi di gestione del
LIS è la migrazione, cioè spostare il sistema in un
ambiente più flessibile e moderno, mantenendo le
funzionalità ed i dati originali.
• Ambienti target ideali per questi sistemi sono le Service
Oriented Architecture (SOA), dotate di elevata
modularità e scalabilità.
2/20
6. INTRODUZIONE
STATO DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Obiettivi
• Sarà sviluppata un’applicazione
basata su tecnologia Open Source che
assista lo sviluppatore nel processo di
decomposizione e traduzione del
codice COBOL CICS in classi Java
adatte al deploy su un’architettura di
tipo SOA.
• COBOL ed IBM CICS rappresentano un
ambiente comune nei LIS di molte
organizzazioni (l’80% del business
mondiale si affida al COBOL, Gartner
Group, 1997).
6/20
7. INTRODUZIONE
STATO
DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Decomposizione del codice COBOL
CICS
• Per eseguire la decomposizione del codice legacy occorre
individuare le procedure di basso livello al suo interno
(paragrafi).
• A tal fine si useranno strumenti di parsing ed analisi semantica
del codice.
• Prodotti individuati:
– il generatore di parser JavaCC;
– il generatore di Abstract Syntax Trees Java Tree Builder.
• Sono corredati da una grammatica descrivente la struttura di un
programma COBOL.
7/20
8. INTRODUZIONE
STATO
DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Traduzione del codice COBOL CICS
• Occorre ripercorrere l’AST ottenuto dal codice
legacy; per ogni costrutto incontrato si generano le
istruzioni nel linguaggio di destinazione
corrispondenti.
• Applicazione considerata: lo strumento NacaTrans
del progetto Naca (New Architecture for Core
Applications), che realizza una traduzione da COBOL
CICS a Java.
• Il codice tradotto richiede un ambiente che simuli i
costrutti forniti da COBOL CICS: il runtime NacaRT.
8/20
9. INTRODUZIONE
STATO
DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Deploy dei moduli ed applicazione
di supporto
• Deploy delle Migration Unit tradotte:
Service Component Architecture:
– Alta modularità;
– Alta scalabilità;
– Indipendenza dal linguaggio dei componenti;
– Facilità di gestione del dominio.
• Sviluppo dell’applicazione di supporto allo
sviluppatore: plug-in per un ambiente di
sviluppo (Eclipse).
• Si integrano le funzionalità di migrazione
con gli strumenti già esistenti (creazione di
domini SCA, creazione di web applications,
ecc.).
9/20
13. INTRODUZIONE
STATO DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Sottosistema di migrazione del
codice COBOL CICS
• Parte di analisi: attraversa l’AST generato
dal parser tramite il design pattern Visitor,
collezionando le informazioni necessarie.
• Parte di traduzione: utilizza una versione
modificata di NacaTrans, che genera:
– classi POJO (la rappresentazione in Java delle
MU COBOL CICS);
– files XML descriventi la struttura del
programma legacy;
– un file XML ed una classe Java per ogni
componente della view (mappe BMS),
descriventi la grafica e la semantica.
13/20
18. INTRODUZIONE
STATO DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Case study: migrazione di un’applicazione
COBOL CICS di gestione clienti
18/20
COBOL CICS Java (basato su NacaRT)
1300-READ-CUSTOMER-RECORD.
*
EXEC CICS
READ FILE('CUSTMAS')
INTO(CUSTOMER-MASTER-
RECORD)
RIDFLD(CUSTNO1I)
END-EXEC.
MOVE EIBRESP TO RESPONSE-CODE.
*
IF RESPONSE-CODE NOT = 0
AND RESPONSE-CODE NOT = 13
PERFORM 9999-TERMINATE-PROGRAM
END-IF.
*
…
public class MU1300_READ_CUSTOMER_RECORDImpl
implements MU1300_READ_CUSTOMER_RECORD
{
…
protected void
businessLogic$1300_Read_Customer_Record(
boolean returnToCaller) {
customer_Master_Record.set(
dbFileComponent.read("CUSTMAS“,
getInput("MNTMAP1").getEdit("custno1").getString(
), DBFile.Mode.DIRECT));
migrationProgram.setConditionOccured(
dbFileComponent.getErrorCode());
}
…
}
19. INTRODUZIONE
STATO DELL’ARTE
PROGETTAZIONE
REALIZZAZIONE
DELL’APPLICAZIONE
CONCLUSIONI
Conclusioni
• Si è sviluppato con successo uno
strumento per l’analisi e la traduzione di
codice COBOL CICS in Java, generando
delle classi conformi ad una Service
Component Architecture e traducendo
anche gli elementi di presentazione.
• Indipendenza dal linguaggio legacy di
origine e da quello di destinazione,
supporto ai plug-in per l’estensione delle
funzionalità.
• Utilizzo esclusivo di tecnologie Open
Source.
19/20