of app testing was performed by our team
Operators of a recreational park in Israel hired our client to create an interactive app for children. We helped our client with app testing and re-engineering. With this app, kids can roam around the park, completing engaging quests.
March 2022 - May 2022
Comprehensive testing to ensure smooth work
Our experts joined the project during the testing phase. We devised and implemented a comprehensive testing strategy, covering over 90% of the software’s code by tests.
JUnit – exhaustive testing of Java-based apps
Our experts used a popular Java testing framework called JUnit to create tests and streamline the testing process.
Unit, integration and stress testing
We began with unit testing, meticulously examining each individual component of the app. Then, our team proceeded to integration testing, studying how different software modules work together. Lastly, we conducted stress testing to ensure that the app could handle multiple users without crashing.
We uncovered and fixed a number of inefficiencies and bugs, including a concurrency error and various NullPointerExceptions.
NullPointerException is a type of runtime exception in Java. It happens when a program tries to use an object reference with a null value. There can be many reasons why NullPointerExceptions occur, like accessing properties of null objects, using a null object in a synchronized block, etc. To resolve these errors, we added more validations to the code.
Fixing the concurrency error
During the game, players had to navigate various park locations, completing tasks. Each location corresponds to a particular “game station” within the app. However, at a certain point, the game was freezing and users were unable to proceed. Our experts investigated the issue and simulated multiple players switching quickly between game stations. We discovered that a concurrency error was the culprit. Concurrency errors are notorious for being difficult to detect yet often causing significant system failures. In general, there are two types of such errors – race condition and deadlock. In our case, it was the latter. To resolve the issue, we implemented proper transaction isolations for the game state update methods.
The database we used on the project was PostgreSQL. It is a popular, free, open-source database that supports SQL standards and offers many valuable features.
To simplify database manipulation, our experts used the Liquibase library. It allowed us to easily migrate data between different database versions, adding new tables, columns, etc.
QueryDSL is a popular library that allows to create SQL-like queries for databases in Java. It helped us streamline data retrieval from PostgreSQL.
Jackson is an efficient Java-based library used to parse or generate files in JSON format, as well as serialize and deserialize Java objects. Our team used Jackson to set up data exchange (in JSON format) between the app’s back and front ends.
With Swagger, we generated an interactive, access-restricted UI for the app’s API, simplifying testing and internal use.
Lombok allows developers to reduce the size of a standardized Java code. With it, we were able to minimize the code’s length and redundancy, thus, increasing its maintainability.
Of successful cooperation
To test the app
Dedicated to the project team