Orice migrare de mainframe începe cu cineva care caută unelte de migrare mainframe, iar demonstrația furnizorului care urmează pare remarcabil de convingătoare. Intră câteva mii de linii de COBOL, iese Java lizibil, suita de teste trece, iar prezentarea promite șaptezeci sau optzeci la sută automatizare. Demonstrația este de obicei onestă. Tot de obicei, rulează însă pe cod care nu se comportă deloc ca al vostru.
Ghidul acesta descrie categoriile de unelte care există cu adevărat, ce face bine fiecare dintre ele și locurile precise în care fiecare tinde să cedeze pe sarcini reale. Este scris pentru oamenii care trebuie să semneze justificarea economică, nu pentru susținătorul furnizorului din interiorul organizației.
Poziția onestă: uneltele de migrare mainframe fac foarte multă muncă utilă, mai ales la analiză, la mutarea datelor și la traducerea mecanică. Ce nu pot face este să înțeleagă regulile voastre de business. Conversia automată produce constant cod care rulează; nu produce cod pe care echipa voastră va vrea să îl întrețină, iar acoperirea acestei diferențe este locul unde ajunge de fapt cea mai mare parte a bugetului.
Cele patru categorii de unelte de migrare mainframe
Piața pare aglomerată până când o sortezi după ce fac produsele în realitate. Aproape totul intră într-una din patru grupe, iar un program real folosește unelte din cel puțin trei dintre ele.
Uneltele de descoperire și analiză citesc patrimoniul de cod sursă și vă spun ce aveți. Analizează COBOL, JCL, copybook-uri și definiții de bază de date, apoi construiesc grafuri de apeluri, hărți de proveniență a datelor și arbori de dependențe. Este categoria cea mai puțin spectaculoasă și cea mai constant valoroasă, pentru că nimeni din organizație nu are o imagine completă a unui sistem care se adună de patruzeci de ani.
Platformele de rehosting și emulare permit sarcinilor mainframe compilate să ruleze pe hardware obișnuit sau pe instanțe cloud. COBOL-ul rămâne COBOL, JCL-ul rămâne JCL, iar un strat de compatibilitate furnizează serviciile de rulare pe care le oferea înainte mainframe-ul.
Uneltele de traducere automată convertesc codul sursă din COBOL în Java, C# sau alt limbaj modern. Este categoria care îi entuziasmează cel mai mult pe cumpărători și cea care dezamăgește cel mai des, din motivele detaliate mai jos.
Uneltele de migrare a datelor mută datele propriu-zise: fișiere VSAM, seturi de date secvențiale și tabele DB2 către stocare relațională sau nativă în cloud. Ele se ocupă de conversia setului de caractere, de câmpurile zecimale împachetate și de structurile de înregistrare pe care produsele ETL generaliste pur și simplu nu le pot interpreta.
Marii furnizori de cloud împachetează fiecare câteva dintre acestea împreună, iar furnizorii specializați s-au consolidat puternic prin achiziții în ultimii ani. Înainte să semnați un contract de suport pe mai mulți ani, verificați cine deține în prezent produsul și cât de fermă este foaia lui de parcurs, pentru că pe piața aceasta proprietatea se schimbă mai des decât tehnologia.
Ce fac cu adevărat bine uneltele de analiză
Dacă cumpărați o singură categorie, cumpărați-o pe aceasta. Uneltele de descoperire răspund la întrebări care altfel ar cere unei echipe de colaboratori externi mai multe luni de muncă manuală.
Un produs de analiză bun vă va spune ce programe sunt chemate efectiv în producție și care sunt moarte de un deceniu, cum circulă un dat de la un câmp de ecran, prin șase programe, până într-o tabelă DB2, ce copybook-uri sunt partajate între subsisteme și unde stă codul cu adevărat periculos. Acest ultim rezultat este cel care schimbă planurile. Orice patrimoniu mainframe conține o mână de programe de care depinde tot restul, și rareori sunt cele la care se gândește partea de business.
Limita este interpretarea. Un graf de dependențe cu patruzeci de mii de noduri este un set de date, nu o înțelegere. Cineva tot trebuie să se uite la rezultat, să îl grupeze în capabilități de business și să decidă ce se mută primul. Uneltele care promit să deducă automat regulile de business produc mai degrabă o parafrază a codului decât o descriere a intenției, iar cele două diferă exact acolo unde codul conține un defect la care organizația s-a adaptat tacit.
Faceți analiza înainte să vă angajați pe o abordare. Ghidul nostru despre strategia de modernizare mainframe arată cum ar trebui să modeleze aceste constatări decizia dintre rewrite, refactor și replatform.
Platformele de rehosting: rapide, reale și nu o modernizare
Rehostingul este cea mai previzibilă opțiune disponibilă și, tocmai de aceea, este vândut cronic sub valoarea lui.
Propunerea este simplă. COBOL-ul vostru este recompilat sau interpretat pe o platformă care emulează serviciile de rulare ale mainframe-ului, astfel încât procesarea tranzacțională, planificarea joburilor batch, gestiunea fișierelor și controlul lucrărilor continuă să se comporte ca înainte. Pentru că sursa aproape nu se schimbă, efortul de testare este mult mai mic decât pe orice altă cale, iar proiectele se termină în luni, nu în ani.
Economia este reală și vine din modelul de hardware și licențiere, nu din software. Organizațiile raportează frecvent reduceri substanțiale ale costurilor anuale de operare după ieșirea de pe mainframe-ul fizic, iar asta ajunge deseori pentru a finanța etapa următoare a lucrării.
Ce nu rezolvă rehostingul este exact motivul pentru care majoritatea consiliilor aprobă aceste programe. După un rehost reușit, aveți în continuare o bază de cod COBOL, aveți în continuare nevoie de dezvoltatori COBOL, iar capacitatea voastră de a-i angaja nu s-a îmbunătățit. Nimic din aplicație nu a devenit mai ușor de schimbat. Rehostingul vă cumpără timp și bani, ceea ce are o valoare reală, dar ar trebui descris cinstit ca o schimbare de platformă, nu ca o modernizare.
Introduce și o dependență nouă. Ați schimbat mediul de rulare al IBM cu stratul de compatibilitate al unui furnizor, iar producția voastră depinde acum de faptul că acel furnizor continuă să îl susțină. Având în vedere cât se consolidează piața aceasta, este un risc care merită scris în justificarea economică.
Traducerea automată: aici stau necazurile adevărate
Conversia automată a COBOL-ului funcționează. Nu asta este problema. Problema este cum arată rezultatul și cât costă să trăiești cu el.
Motoarele de traducere sunt de regulă fidele. Păstrează comportamentul, inclusiv pe cel pe care nu l-a vrut nimeni, pentru că fidelitatea este singurul obiectiv de proiectare care se poate apăra. O unealtă nu poate ști că o anumită ciudățenie de rotunjire dintr-un calcul de primă este un defect pe care actuarii îl compensează din 1997, așa că îl reproduce exact. Este alegerea corectă și înseamnă că noul vostru sistem Java moștenește fiecare ciudățenie adunată de cel vechi.
Rezultatul este modelat și de intrare. COBOL-ul scris cu lanțuri de GOTO, cu înlănțuiri PERFORM THRU, cu instrucțiuni ALTER și cu paragrafe în care se intră din mai multe direcții nu se descompune în metode curate, pentru că nu există nicio descompunere curată de găsit. Ce iese este Java sau C# care urmează fluxul de control al COBOL-ului, îi folosește numele de variabile și este adesea mai greu de citit decât originalul. Practicienii îi spun JOBOL și este perfect posibil să duci o migrare la bun sfârșit și să rămâi cu o bază de cod pe care nimeni nu o poate întreține în niciunul dintre cele două limbaje.
Câteva construcții anume produc o durere disproporționată și merită căutate devreme, pentru că ele determină estimarea efortului manual.
Cele cinci construcții care determină efortul manual
Aritmetica zecimală împachetată este prima. Câmpurile COMP-3 din COBOL și semantica zecimală în virgulă fixă nu se pot mapa pe virgulă mobilă, iar orice unealtă care lasă acest lucru să se întâmple va produce rezultate financiare care diferă de cele de pe mainframe la a patra zecimală. Conversiile corecte folosesc tipuri zecimale cu precizie arbitrară, care sunt mai lente și trebuie aplicate consecvent pe fiecare cale de calcul.
Codificarea caracterelor este a doua. Trecerea de la EBCDIC la ASCII este mecanică, dar ordinea de colaționare nu este aceeași, așa că orice depinde de ordinea de sortare se poate schimba. Rapoartele ies în altă ordine, verificările de interval se comportă altfel, iar comparațiile de chei dau rezultate corecte în sistemul nou și greșite față de cel vechi.
REDEFINES și înregistrările cu variante sunt a treia. O singură zonă de memorie interpretată în mai multe feluri nu are un echivalent natural într-un limbaj puternic tipizat. Codul generat tinde să producă manipulare de tablouri de octeți învelită în accesori, ceea ce funcționează și este profund neplăcut de întreținut.
Semantica tranzacțională este a patra. Programarea pseudo-conversațională din CICS, în care starea este purtată într-o zonă de comunicare între interacțiunile de ecran, nu corespunde niciunui tipar modern web sau de servicii. Emularea ei produce ceva straniu; reproiectarea ei ca lumea înseamnă rescrierea stratului de prezentare.
Rutinele Assembler sunt a cincea și cea mai constant subestimată. Aproape orice patrimoniu vechi conține o mână de module Assembler, scrise de obicei de cineva care s-a pensionat cu ani în urmă, care fac ceva critic pentru performanță sau specific platformei. Nicio unealtă nu le convertește. Se rescriu de mână, pornind de la comportamentul observat, sub teste.
Dacă cântăriți limbajele țintă, ghidurile noastre detaliate despre migrarea COBOL la Java și migrarea COBOL la C# arată cum aterizează aceste construcții în fiecare ecosistem.
Uneltele de migrare a datelor și detaliile care mușcă
Mutarea datelor primește mai puțină atenție decât conversia codului și provoacă cel puțin tot atâtea întârzieri.
Uneltele specializate își merită locul aici pentru că formatele de date de pe mainframe sunt cu adevărat incomode. Ele înțeleg structurile din copybook-uri, câmpurile zecimale împachetate și zonate, suprapunerile de semn, clauzele OCCURS DEPENDING ON și faptul că un singur fișier VSAM poate conține mai multe tipuri de înregistrări, deosebite printr-un octet aflat pe poziția doisprezece. Produsele ETL generaliste nu le înțeleg, iar echipele care încearcă să le forțeze ajung de obicei să reconstruiască o versiune mai slabă a aceleiași capabilități.
Problema mai grea este semantică, nu tehnică. Fișierele de mainframe codifică frecvent înțeles în feluri pe care o schemă relațională nu le poate exprima direct: câmpuri filler refolosite în alt scop, date calendaristice stocate ca întregi de șase cifre cu o regulă de fereastră, indicatori de stare ale căror valori valide trăiesc într-un program și nu într-un tabel de referință și chei duplicate pe care aplicația le tolerează. A decide ce trebuie să devină fiecare dintre acestea în schema țintă este muncă de analiză și nu se poate automatiza, pentru că răspunsurile există doar în capul oamenilor.
Planificați reconcilierea de la bun început. Fiecare set de date migrat are nevoie de numărători de înregistrări, de totaluri de control și de comparație pe câmpuri față de sursă, rulate repetat, nu o singură dată. Majoritatea programelor au nevoie și de o perioadă de funcționare în paralel, în care ambele sisteme procesează aceleași intrări, iar ieșirile se compară octet cu octet până când diferențele sunt fie eliminate, fie explicate. Acel banc de comparație este software adevărat, cu propriul cost de dezvoltare, și ține de plan, nu de rezerva pentru neprevăzute.
Cum alegeți unelte de migrare mainframe fără regrete
Câteva principii țin aceste decizii cu picioarele pe pământ.
Insistați pe o dovadă de concept făcută pe cel mai urât cod al vostru, nu pe eșantionul furnizorului. Alegeți modulul pe care îl ocolește toată lumea, cel cu apelul de Assembler și cu REDEFINES pe șapte niveluri, și cereți să fie convertit. Rezultatul vă spune mai mult decât orice client de referință.
Întrebați explicit cum tratează unealta aritmetica zecimală și ordinea de sortare și cereți să vedeți codul generat, nu un rezumat. Dacă furnizorul nu vă poate arăta cod lizibil pornind de la o intrare urâtă, presupuneți că estimarea de remediere manuală este mai mare decât cea din ofertă.
Tratați procentele de automatizare ca pe o măsură a liniilor, nu a efortului. O unealtă care convertește nouăzeci la sută din instrucțiuni vă poate lăsa totuși cele zece procente care conțin tot riscul, iar acele zece procente consumă în mod obișnuit mai mult de jumătate din calendar.
În fine, prevedeți în buget părțile pe care nu le atinge nicio unealtă: bancul de teste, reconcilierea, rularea în paralel, procedurile de operare și recalificarea oamenilor. Ghidul nostru despre costul și durata migrării COBOL arată cum se distribuie de obicei aceste poziții într-un program.
Cereți o părere independentă înainte să vă angajați
Mecanik lucrează la programe de migrare a mainframe-urilor moștenite și de migrare COBOL ca ingineri, nu ca revânzători de unelte, ceea ce înseamnă că nu avem niciun comision legat de platforma pe care o alegeți. Facem descoperirea, convertim un modul cu adevărat dificil manual și cu unealta și vă arătăm diferența înainte să semneze cineva ceva.
Dacă patrimoniul vostru este mai mic sau întrebarea voastră ține mai mult de limbajul țintă decât de unelte, paginile serviciului nostru de modernizare COBOL explică cum definim perimetrul acelei lucrări. În oricare dintre situații, primul pas util este o discuție scurtă despre ce se află de fapt în baza voastră de cod, pentru că răspunsul la întrebarea despre unelte depinde în întregime de asta.
Articole similare: Migrarea COBOL la Python , Migrare de la COBOL la Go: ghid pentru companii UK și Migrare COBOL la Rust - Ghid pentru companii UK ., Modernizare COBOL: cum alegi furnizorul potrivit
Întrebări frecvente
Pot uneltele de migrare mainframe să automatizeze tot proiectul? Nu. Traducerea automată convertește de regulă marea majoritate a instrucțiunilor, dar restul conține module Assembler, gestiune de stare tranzacțională, structuri de înregistrări cu variante și reguli de business nedocumentate care cer muncă manuală. Testarea, reconcilierea și rularea în paralel nu sunt oricum influențate de nivelul de automatizare atins.
Ce este mai bine, rehostingul sau conversia automată a codului? Rezolvă probleme diferite. Rehostingul scoate rapid sarcina de pe hardware-ul de mainframe și taie costurile de operare, dar vă lasă tot cu COBOL. Conversia codului schimbă limbajul și bazinul de recrutare, la un cost și un risc considerabil mai mari. Multe organizații fac întâi rehosting pentru a finanța apoi o conversie pe etape.
De ce arată atât de ilizibil codul COBOL convertit? Motoarele de traducere păstrează fidel comportamentul, inclusiv fluxul de control, denumirile și structurile de date din COBOL. Codul construit pe lanțuri de GOTO și pe zone de memorie partajate nu are un echivalent curat în Java sau C#, așa că rezultatul oglindește structura originală. Codul întreținut se obține doar prin refactorizare umană după conversie.
Ce probleme de date scapă uneltelor de migrare mainframe? Tratează bine conversia de format, dar nu pot rezolva înțelesul. Câmpurile filler refolosite, datele calendaristice de șase cifre cu reguli de fereastră, codurile de stare definite doar în programe și cheile duplicate tolerate cer toate decizii umane înainte ca schema țintă să poată fi proiectată corect.
Cum validez că un sistem migrat se comportă identic? Rulați ambele sisteme pe aceleași intrări de producție pentru o perioadă definită și comparați ieșirile câmp cu câmp, sprijinit de numărători de înregistrări și totaluri de control pentru fiecare set de date migrat. Construiți acel banc de comparație ca livrabil de sine stătător, pentru că diferențele apar continuu, nu toate deodată.
Comentarii