Transitioning Legacy Desktop Software to a Web-Based Application with Enhanced interfacing

TEXT | Mykola Zhabko and Anna-Kaisa Saari
Permalink http://urn.fi/URN:NBN:fi-fe2024052133929

As the software technology landscape continues to evolve, the need to modernise legacy systems becomes increasingly important. “Legacy” generally refers to something handed down from the past, often from generation to generation. Within the realm of software, this term typically denotes elements of the system having an old technology stack used for development and maintenance. Various components may be involved in such a system, including outdated applications, systems, code structures, or technologies from previous iterations.

Businesses that continue to use outdated software may face failure due to delayed migration. This can result in significant costs if upgrades are not made in time. Procrastination can be detrimental to the growth and success of a company. Therefore, timely modernization efforts are essential to remain competitive in the market. Wapice customer had a desktop application, Trinity, initially developed in 2009 with C++ and wxWidgets. The application has been a cornerstone of the client’s business operations, allowing technical engineers to customise products and synchronise data with three external web systems. However, the limitations of the desktop environment forced an upgrade to the application by transitioning it to a more integrated web-based solution.

Trinity’s modernisation was driven by the evolution of the business and the need to streamline interactions with other modern systems. The project aimed to address several key requirements: move to a centralised relational database, implement user authentication and authorisation, redesign the user interface and enable direct database management through the UI. At the same time, it was extremely important that the core logic of the original application remains.

To begin the migration process, it was necessary to understand the system clearly. The development team chose two-level analysis: high-level analysis and microanalysis. During the high-level analysis, old system was inspected to identify the systems or data sources in which it is integrated. The user interface was inspected to define what data is used to build it and what user operation is allowed to perform via UI; also, how the data is sent to an external system. The micro-analysis involved a code base inspection. During this process, the code was reviewed line by line to define an architecture and determine what kind of transient data is created during the application runtime.

Hight level analysis revealed development need for two SOAP and one REST clients which had to be designed and implemented for new application. Also parsing mechanism had to be implemented for the file which is sent by Master application as an initial payload. During microanalysis the codebase was inspected, and it revealed that significant amount of code could be reused as well as the way of querying data from new database.

The development team’s migration of data from MS Access tables to a relational database was streamlined using DBeaver. DBeaver is a database tool with extensive features that supports various platforms, including MS Access and relational databases. The technology stack for migration included Java with Spring Boot, Spring Data JPA, Angular, Oracle Database, Docker, and Rancher. Java and Spring Boot provide a robust backend foundation for streamlined system integrations, and Oracle Database offers excellent performance and security for managing complex data. Spring Data JPA simplifies data operations, Angular enhances user interaction with its dynamic framework, and Docker with Rancher ensures consistent deployment and orchestration environments.

During the implementation of new Web Trinity, the development team adopted a Test-Driven Development (TDD) approach, emphasizing the importance of writing tests before writing the actual code. JUnit 5 served as the testing framework, providing a robust platform for executing various tests. The team employed JUnit 5 for different testing scenarios, including JPA repository testing to validate database interactions, integration testing to assess client functionality, and consistency tests to compare data produced by the legacy application with that generated by the modern web application. This testing strategy enabled the team to identify and correct issues early in development, resulting in a more reliable and robust final product.

The development team modernized Trinity through careful planning. Trinity transitioned to a web platform while preserving its core logic. Test-Driven Development (TDD) principles ensured a reliable web application that met evolving business needs. This thesis was written by Mykola Zhabko and supervised by Anna-Kaisa Saari. Whole thesis can be read at https://urn.fi/URN:NBN:fi:amk-202405069283

Related articles