The customer’s company has been developing an application for obtaining scientifically based forecasts of heat regimes of perpetually frozen soils. The system is designed to simulate the behavior of the physical environment through the numerical solution of differential equations. The application is actively used in the construction and oil industry.
The owner of the company had a request to conquer new market niches, which required the addition of a significant part of new functionality. By that moment the system had become very complex due to the accumulation of a large amount of source code of different versions written by different generations of employees. From a technical point of view, the product became difficult to upgrade, releases were extremely unstable, and deliveries became irregular. Writing Unit tests was a rare practice and applied ad hoc. There was also no automated UI testing, since its implementation was an even more complex and labor-intensive task that required the use of a separate framework. Manual testing was carried out on an ad-hoc basis, no regression testing was carried out.
To be able to further develop the product, it was necessary to introduce effective management practices, build processes on the project and eliminate the accumulated technical debt.
Technical description of the project:
- Highly linked code written in two languages: C++ and C#. The calculation part was written in C++, the UI layer and the business logic of the application – in C#.
- The product is a desktop solution with installed hardware and software protection.
Within this project, JazzTeam was responsible for process management and systematic work on the technical debt. Namely, our team was engaged in the implementation of CI/CD, setting up manual and automated testing processes, managing legacy code refactoring and improving the product architecture. It was also required to build processes for planning and systematic work on tasks. We have already told about this project in our previous article, but now we want to tell you about the results we could achieve.
JazzTeam was required to improve or create from scratch the following key project processes:
- Setting tasks.
- Implementation of CI/CD.
- Release management.
Also, it was required to carry out the following works as part of the project:
- Research work:
- Research on CI/CD implementation.
- Search for the optimal framework for automated UI testing.
- Creation of actual plans for strategic refactoring.
- Quality assurance:
- Introduction of the practice of mandatory Unit test writing by developers.
- Daily UI testing of critical product functions in the build that is as close to production as possible.
- DDT testing of the system core.
- Manual testing.
- Implementation of continuous integration and delivery (CI/CD).
To manage the project, the Scrum methodology was introduced, which accelerated the development process and made it understandable, transparent, and manageable for the customer.
JazzTeam management team transformed the process of business analysis on the project. We optimized the requirements collection processes, adjusted the process of requirements handling and converting them into tasks. A new scheme for the formation and setting of tasks was also developed. The business analyst collected requirements from customers, after which he assessed the risks: whether the introduction of new features would harm the health of the entire application. Further, all relevant requirements were combined into tasks with specific performance criteria. A task plan was developed before each sprint. Each of the tasks in it was further decomposed and evaluated by the engineer performing it.
The next step was to improve the delivery process. First of all, we introduced the practice of regular sprint planning, backlog grooming. The team began to conduct a preliminary analysis determining the next release date. Effective planning approaches had a positive impact on the product delivery process: the team was able to deliver releases on time.
Since the system had a complex architecture and nontypical technology stack, the task of CI/CD implementation and test automation required research. The situation was complicated by the fact that the engineers had no previous experience in UI automated testing. Therefore, it was decided to start daily research (1 hour per day) on test automation and CI/CD implementation and constantly monitor the progress. As practice showed, without dwelling on one task, it was possible to find a solution faster.
One of the important decisions for the systematic improvement of the product was the introduction of architectural hours. Meetings were held weekly in the development team, at which the product development strategy was discussed taking into account its current technical state.
A discussion on strategic refactoring was also initiated as part of architectural hours. Engineers began to work on isolating code modules by covering input and output data with tests. So, during the first year, a third of several dozen main modules of the system were isolated in the background. This practice allowed achieving significant progress in the fight against high code consistency and allowed us to minimize the impact of modules on each other.
Processes were built and test plans for manual and automated testing were created under the guidance of the JazzTeam manager, which made it possible to more professionally manage the quality of the product.
The practice of mandatory Unit test writing by developers was introduced. The Data-Driven Testing approach was used in Unit testing. It simplifies input data entry, which is especially important for a simulation system with a large number of calculation modules.
Daily UI testing of critical product functions in the build that is as close to production as possible (with applied software and hardware protection) made it possible to change the current product code with minimal risk of missing regression bugs.
So, the following workflow for quality assurance was implemented:
- When creating functionality, a developer immediately covers it with Unit and integration tests.
- Before code review, the developer runs all Unit and integration tests. At the same time, another developer during code review checks the quality of coverage with new tests and the fact that all available tests were successfully passed.
- Next, the functionality branch is merged with the main development branch, and every night all available tests, including UI tests, are run in it. This run takes over 3 hours.
- After that, a manual testing engineer determines the need for coverage with UI autotests or DDT tests when testing the functionality. In the first case, he writes an autotest script, and in the second case, a business analyst creates a set of test data. Then the developer creates UI or DDR tests as part of a separate task.
Our team implemented the CI/CD culture on the project, thanks to which the product delivery process became significantly faster and more stable. You can learn more about how CI/CD was implemented on the project here.
Two months after CI/CD implementation, this practice began to bring the first results. The process of creating distributions of the product became fast and safe, which made it possible to significantly free up time and increase the productivity of the team. Automatic build greatly stabilized, simplified, and accelerated the process of creating different product versions for delivery to customers. The time spent by a specialist for the build of a license reduced by more than 15 times (10 minutes versus ~ 3 hours).
Platform: .NET, C#, C++, Managed C++.
Technologies: White, Jenkins, TestLink, Jira.
Processes: test management, project management, release management.
The company received new opportunities for product development and the creation of new functionality. The customer’s development team began to reduce the technical debt, use and accumulate best engineering practices, maintain the necessary documentation, while increasing the speed of creating new functionality. Thanks to the established processes and comprehensive work, the customer was able to release new versions of the product 2 times faster, while the amount of functionality implemented for the release also doubled.
Company’s achievements on the project
- Efficient project management significantly improved the quality of the product and made it possible to further develop the system to conquer new markets.
- Successfully applied Data-Driven Testing approach. Covering the core of the most complex scientific product with Data-Driven tests significantly accelerated the process of its stabilization.
- JazzTeam specialists managed to change the mindset of the customer’s team and introduce effective development approaches. At the same time, it was able to keep the original composition of the team, as well as involve new employees in it.