Application Understanding for Java (AU4J)
Modernizing JEE applications
A településfejlesztésben a barnamezős beruházás fogalma a korábban használt, de elhagyott ipari, kereskedelmi vagy mezőgazdasági területek újrahasznosítását jelenti.
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.
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é haladnak. A vezérlési struktúra bejárása azonban nehezen követhető, rövid idő alatt bonyolulttá és áttekinthetetlenné válik.
Ezzel szemben az Application Understanding for Java (AU4J) egy egészen eltérő, új megközelítést alkalmaz.
Nem a vezérlésre, hanem az adatokra fókuszál, és megfordítja az elemzés irányát:
- Megkeresi a kódban azokat a pontokat (output endpoint), ahol valamilyen perzisztens adat keletkezik, pl. egy új rekord egy adatbázis táblában vagy file-ban.
-
Ezután, hátulról visszafelé haladva megkeresi azokat a kódtöredékeket, amelyekből az output endpoint elérhető, és amelyek részt vesznek vagy vehetnek a perzisztens adat előállításában. Eközben kiesik a keretrendszer és az architektúra komplexitása, és az így kivonatolt, flow-nak nevezett kód már csak az üzleti logikát tartalmazza.
Ez a kód kivonat megnyitja az utat egy új keretrendszert, új architektúrát használó átfogó refaktor előtt.
Az Application Understanding for Java (AU4J) funkciói
Vizsgálat (Scan)
Az alkalmazás beolvasása, átfogó vizsgálata és elemzése a forráskód alapján.
Modulok (Modules)
Az elemzés után, kibontható faként megjeleníti az alkalmazás moduljainak hierarchiáját.
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.
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.
Entitások (Entities)
Megjeleníti az alkalmazás entitásainak listáját. A listán egymás mellett ki lehet bontani a kapcsolódó entitások szerkezetét.
Lekérdezések (Queries)
Listázza az alkalmazás összes named- és inline query-jét, megmutatja a JPQL-t és a belőle generálódó SQL-t 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ó az SQL alapján azonosítja és visszadja a query-t kibocsátó utasítást, és arra rákattintva kibontja a metódus teljes kódját.
Kifestés (Paint)
A funkció neve az érfestés nevű orvosi diagnosztikai eljárásból származik. Végpontonként megmutatja, hogy mely kódrészek állnak kapcsolatban velük. 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.
Hatáselemzés (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 esetén a commit-azonosítóhoz a szoftver megadja, hogy a módosított alkalmazás teljes regressziós tesztelése helyett mely felhasználói funkciók (felhasználói esetek) tesztelése szükséges és elégséges. E funkció használata mind üzemeltetők, mind fejlesztők számára egyaránt jelentős erőforrás megtakarítással jár.
Biztonsági elemzés (Security Analysis)
Az AU4J a biztonság kérdésében is fontos válaszokat ad. A biztonságtechnikai szakértő, az etikus hacker megmutatja a rendszer sebezhető pontjait, ha vannak ilyenek; más szóval megadja a potenciális betörés árát. Azonban nincs információja arról, hogy a betörés árán milyen érték szerezhető, illetve mekkora kár keletkezhet, mert ezt csak a szakterület szakértői tudják megmondani. Ha az értékeket a szakterület hozzárendeli az adatállományokhoz, akkor 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.
Az Application Understanding for Java fejlesztése
Az AU4J módszerei és algoritmusai támaszkodnak a COBOL, RPG és Natural programnyelvekre már korábban kifejlesztett hasonló alkalmazásokra. Az AU4J projekt célja az, hogy a felgyűlt tudást a Java programnyelvre is implementálja.
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ósul meg. A projekt befejezésének időpontja 2019 november 30., de a termék folyamatos továbbfejlesztését tervezzük.