APPLICATION UNDERSTANDING FOR JAVA (AU4J)
A Legacy (öröklött) alkalmazások régi, ismeretlen vagy elavult technológiával készült, hasznosan működő rendszerek. Lecserélésük költséges, szolgáltatásaik megfelelnek az elvárásoknak, de használatuk több problémát is felvet.
A múlt század nyolcvanas éveitől a Legacy alkalmazások komoly problémát jelentenek az informatika területén. Egy évtizeddel ezelőtt a Legacy szóra mindenki olyan divatjamúlt nyelven írt rendszerekre gondolt, mint a COBOL, a Software AG Natural nyelve vagy az IBM RPG nyelve.
Az elmúlt tíz évben azonban a mainstream technológia drámaian megváltozott, és ez a Java közösséget is érintette. A felhő használhatatlanná tette a Java EE egyes aspektusait, olyannyira, hogy végül el is távolította a Java EE-t az Oracle Java portfóliójából. A mikroszolgáltatások helyettesítik a nehézsúlyú konténerekbe telepített monolit szervereket.
A szoftveriparban a barnamezős (brownfield) fejlesztés esetén egy régi kódbázis karbantartása és továbbfejlesztése a cél.
Itt gyakran nem az új funkciók komplexitása, vagy a környezet bonyolultsága okoz problémát, hanem az, hogy szükség lenne a működő rendszer részletes és alapos megértésére, üzleti és informatikai értelemben egyaránt. Előfordul, hogy ez a megértés mindkét értelemben hiányos. Szükség lenne a szakterület szakértőire, és az eredeti kód szerzőire, de ők csak korlátozottan vagy egyáltalán nem érhetők el.
Az Application Understanding for Java (AU4J) a fenti probléma megoldására tervezett alkalmazás.
Az Application Understanding for Java fejlesztése
A cégünk, az ENTIS-NET Kft. által létrehozott AU4J módszerei és algoritmusai támaszkodnak a COBOL, RPG és Natural programnyelvekre már korábban kifejlesztett hasonló alkalmazásokra, a meglévő alkalmazás-megértési technológiánkat és a felgyűlt tudást a Java programnyelvre implementálja.
Ez a célkitűzés azonban több új kihívást is tartalmazott, minthogy most először alkalmaztuk a módszert objektum-orientált nyelvre.
Bármi is a cél a régi kóddal, akár újraírás a semmiből, akár a barnamezős fejlesztés folytatása, vagy csak dönteni kell a fenti két lehetőség között, meg kell érteni az alkalmazásban megtestesülő üzleti logikát. Az üzleti logika kibontása egy meglévő kódbázisból azonban nem könnyű feladat. A fejlesztőknek százezernyi vagy akár milliónyi kódsort kell megvizsgálniuk.
Ma már több kiváló eszköz áll a fejlesztő rendelkezésére, amelyek a kód feltérképezését és visszafejtését támogatják. Ezek általában a program vezérlési struktúráját követve, fentről lefelé a belépési ponttól kezdve a control flow irányított gráfja mentén haladnak.
A vezérlési struktúra bejárása azonban nehezen követhető, a rendszer ezzel a megközelítéssel rövid idő alatt bonyolulttá és áttekinthetetlenné válik, mert a komplexitás exponenciálisan növekszik az úton..
Ezzel szemben az Application Understanding for Java (AU4J) egy egészen eltérő, új megközelítést alkalmaz az üzleti logika kinyeréséhez az alkalmazáskódból.
Az AU4J alkalmazás megértési módszere az ellenkező irányt követi. Felismeri a kód azon pontjait, amelyekben perzisztens adat keletkezik (kimeneti végpontok). Innen a gráf bejárása visszafelé halad, összegyűjtve azokat a kódrészleteket, amelyek részt vesznek az állandó adatok létrehozásában.
Az eredmény a tiszta üzleti logika, kihagyva az architektúra összes többi aspektusát, például a naplózást és a management funkciókat.
Mint folyamat, az üzleti szabályok kinyerése valamilyen módon hasonlít az angiográfiához, egy orvosi képalkotó módszerhez, amelyet az erek megjelenítésére használnak. A fejlesztő festéket fecskendez be a rendszer egy vagy több végpontjába, és nézi, hogy mi színeződött.
Az AU4J eszközt integrálható IDE-vel (jelenleg a JetBrains IntelliJ IDEA környezetéhez készült el a plugin), így a fejlesztők az AU4J eredménylistáit a saját ismerős környezetükben dolgozhatják fel.
Az üzleti szabályok kinyerése mellett az AU4J webalkalmazás több más eszközt kínál, amelyek az alkalmazás karbantartását és a barnamezős fejlesztést támogatják.
Az Application Understandig for Java (AU4J) funkciói
Vizsgálat (Scan)
Az elemzés után, kibontható faként megjeleníti az alkalmazás moduljainak hierarchiáját. Megjeleníti a modul statisztikáit is.
Modulhierarchia (Modules)
Az elemzés után, kibontható faként megjeleníti az alkalmazás moduljainak hierarchiáját. Megjeleníti a modul statisztikáit is.
Festés (Paint)
Kibontja az üzleti logikát a kiválasztott végpontokhoz kapcsolódó kódok és adatállományok felsorolásával. Output végpont esetében (választott színre) befesti azokat a kódokat, amelyek részt vesznek az előállításában, input végpont esetében pedig azokat, amelyek részt vesznek a feldolgozásában.
Használaton kívüli kódok (Dead Code)
Feltárja az alkalmazásban a nem használt kódrészeket. A rekurzív algoritmus azokat a kódokat is kiszűri, amelyeket csak nem használt kódrészek hívnak.
Hívástérkép (Invocation Map)
A vizsgált alkalmazás összes metódusához kilistázza az összes olyan kódot, amely az adott metódust meghívja.
Entitások (Entities)
Felsorolja az alkalmazás perzisztens entitásait. Ha egy tulajdonság hivatkozás egy másik entitásra, akkor kattintásra megmutatja annak a szerkezetét is, így egész hivatkozási láncokat képes egyszerre megjeleníteni.
Ciklikus komplexitás
Megjeleníti a modul - osztály - metódus hierarchia elemeinek teljes és átlagos komplexitását. Az eszköz elősegíti a tesztelés erőforrás-tervezését, és rámutat azokra a metódusokra, amelyeket nehéz karbantartani a kódban.
Lekérdezések (Queries)
Felsorolja a kódban szereplő elnevezett, natív és inline lekérdezéseket. Kattintásra megjeleníti a lekérdezés formázott forrását JPQL és SQL nyelven egyaránt.
SQL kereső (SQL Finder)
Gyakori igény üzemeltetők részéről, hogy meg kell találni egy, a naplóból kiolvasott SQL utasítás forrását az alkalmazásban. Ez a funkció azonosítja azokat a kódsorokat, amelyek a megadott SQL vagy JPQL lekérdezést indíthatták.
Hatásvizsgálat (Impact analysis)
Az AU4J kapcsolódik a forráskódot tároló verziókezelő szoftverhez. A forráskódon történő módosítás után, ha a felhasználó beírja egy commit azonosítóját, akkor az alkalmazás visszaadja a megváltozott felhasználói és interfész funkciók listáját. Az eszköz csökkenti a regressziós tesztelés erőforrásigényét, és lehetővé teszi a változás biztonsági hatásának felmérését.
Szókincs elemzés (Vocabulary)
Összegyűjti az alkalmazásban névként használt szavakat (beleértve az összetett nevek komponenseit is), ami lehetővé teszi az alkalmazás fogalmainak csoportosítását. Megmutatja egy adott szó összes felhasználását, ezzel elősegíti a rendszer nyelvének egységesítését, közös szókincs kidolgozását a tartományszakértők és a fejlesztők között, valamint lehetővé teszi a szinonímák összepárosítását (vegyes nyelvű kódokban).
Biztonsági elemzés (Security analysis)
Az üzleti szakértő kárértéket rendelhet az adatfájlokhoz és táblákhoz. Az eszköz külön kezeli az adatszivárgás és az adattörés okozta károkat. Az AU4J megjeleníti ezeket a belépési pontokon, más szóval kvantitatív módon megmutatja, hogy az egyes belépési pontok védelmi szempontból mennyire kritikusak.
Kiknek fejlesztjük az alkalmazást
Az Application Understanding for Java egyaránt hasznos eszköz

  • a rendszert üzemeltető informatikusok,
  • a szupportot (rendszertámogatást) ellátó szoftverfejlesztők és rendszerszervezők,
  • a rendszer továbbfejlesztését vagy átalakítását tervező szakemberek, és
  • a rendszer üzleti-szakmai felhasználói számára.
Egyedi módon képes megmutatni azt, hogy egy monolit alkalmazás

  • hogyan darabolható fel önálló modulokra, vagy akár mikroszervizekre;
  • milyen dead code-okat (nem használt kódokat) tartalmaz;
  • megvizsgálja, hogy egy módosításnak (javításnak vagy új fejlesztésnek) milyen hatása lehet a biztonságra, illetve a teljes regressziós teszt helyett mely use-caseket elegendő vizsgálni;
  • jelentősen meggyorsítja a működés során felmerülő hibák okának azonosítását
  • az alkalmazás belépési pontjait képes minősíteni annak alapján, hogy mekkora a rajtuk keresztül okozható kár mértéke, az egyes belépési pontok védelmi szempontból mennyire kritikusak.
A projekt a Mikro- és kisvállalkozások innovációs tevékenységének támogatása keretében, 2018-1.1.1-MKI-2018-00148 számon valósult meg. A terméket azóta is folyamatosan továbbfejlesztjük.
2020. október 7.

Footnotes

  1. www.mmk.hu › ipe › 2017-10-26-legacy-rendszerek
  2. cf. Business Rule Extraction in Application Modernization Projects © Copyright 2015, Don Estes
  3. in Wikipedia https://en.wikipedia.org/wiki/Angiography
  4. https://en.wikipedia.org/wiki/Cyclomatic_complexity
  5. A komplexitás számításának elterjedt algroritmusai finom részletekben eltérnek egymástól. A mi számításunk szabályai:
    • Minden metódus induló komplexitása 1
    • +1 a következő vezérlő utasításokra: if, case, catch, do, while, for
    • +1 minden feltétel kifejezésért
    • +1 minden (&&, ||) logikai operátorért a vezérlő utasítások feltétel kifejezéseiben
    Osztályok és modulok komplexitása a bennük levő metódusok komplexitásának összesítésével képződik.