Käitusaegne kasutajaliidese uuendamine Java programmidele

Date

2015

Journal Title

Journal ISSN

Volume Title

Publisher

Abstract

Tarkvaraarendajad peavad tegema hulga rutiinseid töid, et testida kirjutatud koodi muudatuse tulemust. Olenevalt rakenduse keerukusest võib neil selleks minna paarist sekundist kuni paari minutini. Oma töö tulemust soovitakse katsetada tunni aja jooksul keskmiselt kolm kuni neli korda, mis tähendab märkimisväärset ajakulu teiste täitmist vajavate tööülesannete arvelt. Seda probleemi saab aga vältida, kui kasutada mõnda dünaamilisel viisil klasse taaslaadivat tarkvara, nagu seda on näiteks JRebel. Kahjuks tänasel päeval ei toeta mitte ükski olemasolev toode kasutajaliidese uuendamist töölaua programmide jaoks, nende töötamise ajal. Käesolevas lõputöös otsitakse lahendusi, et tuua käitusaegne kasutajaliidese uuendamine Swing teegiga kirjutatud programmidele. Selleks loodi pistikprogramm, mis täiendab JRebeli olemasolevat funktsionaalsust ning suudab tuvastada arendaja tehtud muudatused ja kanda need üle töötavasse rakendusse, ilma et seal juba olevad andmed kaduma läheksid. Soovitud tulemuse saavutamiseks oli vajalik lahendada järgmised probleemid: kuidas leida, mida arendaja täpselt muutis, kuidas uuendused saaksid rakenduse töötamise ajal jõustuda, kuidas luua uus isend ükskõik millisest kasutajaliidese komponendist ning seejärel kindlaks teha, kuidas vanalt isendilt uuele andmed üle kanda, kui pole teada, mis täpselt üleviimist vajab. Selle töö tulemusena saavad arendajad kasutada pistikprogrammi nimega UiReload, mis koostöös JRebeliga võimaldab neil näha enda töö tulemusi vaid millisekundite jooksul. Seesugune kiire tulemus oli saavutatav ainult lahendusega, mis välistaks tarkvara taaskäivitamise, õigesse kohta navigeerimise ja vormide täitmise vajaduse.
In order to test if an edit works as expected, developers have to go through many routine tasks. Depending on the application given it may span from multiple seconds to minutes per change. Developer tests a change on average three to four times per hour - it is obvious that the process is excessively time-consuming. To minimize the amount of time, dynamic class updating software, like JRebel, can be used. Sadly, up to the present moment, none of the available products support reloading the UI of a running desktop application. For that reason, the aim of this thesis is to bring out the possible approaches that would enable runtime UI reloading for Swing programs. Accordingly a plugin UiReload for JRebel is implemented which can detect what was changed and therefore apply the modifications to running UI components whilst losing none of the existing state. In order to reach the expected result some major challenges had to be overcome. For a start, it was necessary to determine what was changed and which objects were affected by those editions. Secondly, to make sure how to propagate those changes to a running application. Thirdly, to ascertain how to create new instances of components and finally, how to replace an old instance of a component with new, in a way that the fresh version maintains the state of the previous one. For finding the state an automatic approach was devised. As a result, with UiReload, developers can test the changes in milliseconds. This implies to the fact that there is no more need to restart the application, navigate to the changed view nor fill in forms on the way. Overall, testing changes reaches the maximum speed and simplicity.

Description

Keywords

Citation