Project business component:
MFS (Multifunctional Financial System) is a product that is part of the billing and finance group. This group provides business processes for calculating services, informing customers, creating customer notifications for telecom companies, mobile operators and other large customers in the telecommunications industry.
The MFS product is designed to make decisions about the formation of control actions on external systems based on the analysis of financial data and key customer characteristics obtained from various data sources.
- managing accounts receivable,
- managing a subscriber’s life cycle,
- making decisions: services management, notifications management,
- providing quick access to data.
MFS is a system for tracking and analyzing billing and financial information for customers and subscribers and responding to this information by interacting with third-party senders/recipients (products or external systems).
The product in the implemented configuration (which can be expanded) solves the following specific tasks:
- controlling and decision making on connecting/disconnecting various features/services for subscribers in a large billing system;
- making decisions on B2C and B2B customers’ notification if there is a wide variety of conditions, such as: overdue accounts, accounts receivable, loan repayment period is coming to an end, scheduled notification at regular intervals.
The project includes three applications:
- HTTP server with RESTful API services;
- A server that receives/sends RabbitMQ messages;
- An application for restoring/updating NoSQL local database.
In the implemented configuration, the MFS receives RabbitMQ messages from multiple senders in a large billing system.
An analysis of incoming information from external senders using business rules written in the Drools framework takes place. Then, in accordance with the implemented business logic, the MFS starts managing the features/services of subscribers, as well as sending requests for the creation/removal of various notifications (sms messages, email, fax, phone).
After making decisions, MFS sends the RabbitMQ response messages to the corresponding external products. At the next stage, the product saves the changed business objects (subscribers) to the local NoSQL Couchbase database, which serves for quick access to subscribers.
Also, MFS has a special tool for restoring/updating the NoSQL database in case, for example, starting in a new environment and/or restoring after an accident.
The following works were carried out by our team in terms of development:
Development of technical specifications accordingly to the requirements of functional specifications, tight work with customer representatives (business analyst, representative of the product owner) and directly with the customer.
- Active and regular interaction with the technical support team, joint analysis of problems and search of possible solutions.
- Realization of internal business logic in the form of open and accessible for Drools rules changes.
- Working with Oracle remote database, downloading data from Oracle to Couchbase local NoSQL store.
- Integration of many related products using the RabbitMQ message broker; the product is focused on processing events from related systems.
- Working with Akka, building chains of actors (flows), each of which is aimed at its kind of work.
- Using Zookeeper to store and manage the configuration of the environment.
- Participation in grooming, meetings, architectural discussions on the product.
The following works were performed by our team in the testing part
During the work on the project, QA team created more than 3000 autotests.
The technologies that were used to create and run automated tests:
– Java SE + JDBC, Spring, XML, JSON, etc., Robot Framework, PostgreSQL, Oracle, TestNG, Allure Framework, CI (Jenkins, TeamCity, VRA), Maven, Git.
- Creating autotests for various new functionality, in particular:
- life cycle management of subscribers;
- customer debt management;
- notification of B2B clients via various communication channels;
- obtaining statistics on the product using the Java Management Extension (JMX) technology.
- Creating test cases, test suites, test runs in TestRail.
- Updating and refactoring of autotests on previously created functionality.
- Participating in grooming, meetings, architectural discussions on the product.
- Testing various functionality:
- running autotests and analyzing the results after the run;
- registration of detected defects in JIRA, testing patches;
- manual testing of functionality, where covering with autotests was not possible;
- integration testing of the product together with other products on the clones of the customer’s industrial stands;
- testing product documentation, as well as functional and technical specifications for completeness, accuracy, uniqueness, consistency;
- controlling the product delivery to the customer.
Stack: Groovy, Java SE 7, Java SE 8, Spring, Apache Maven, Apache Tomcat.
Infrastructure: Jenkins, Git, IntelliJ IDEA, Teamcity, Stash, TestRail, Jira, Confluence.
Frameworks: RabbitMQ, Drools, Akka, Apache Karaf, Apache Zookeeper, Apache CXF.
Test Automation libraries: Robot Framework, JUnit + Mockito, TestNG, Allure Framework.
DB: PL/SQL (Oracle database), Couchbase.
Other libraries: Apache HTTP Client, Logback, Slf4j, Jackson, Xstream, Fiddler.
Work on the product in a complex multicomponent system with our team engagement was carried for more than two years.
A number of features that accompanied our work on this project:
- flexible development according to Scrum methodology;
- potentially Shippable Product Increment;
- the team’s work in the format of Feature team, that means:
- separated roles of a scrum master and a team lead;
- planning with the help of planning poker;
- carrying out grooming during the analysis of new functionality;
- holding daily status meetings;
- demonstration of the executed works on Demo days and Sprint reviews;
- iterative approach: work on two-week sprints;
- regular retrospectives on sprints completion or emergency situations and problems;
- preparation and shipment of patches/releases in accordance with regulations;
- mandatory implementation of code cross-review;
- mandatory compliance with Code style;
- release engineer makes great demands on the team to the quality of the delivered product, when preparing and delivering releases to the customer;
- compliance with the requirement to cover all the new functionality by test cases;
- work with territorially distributed teams and divisions of the customer.
- the system is fully developed and used by several customers, including one of the largest mobile operators in Russia and a mobile operator in Georgia;
- at this stage a new functionality development is in progress;
- support for the current functionality is being implemented;
- work on customizing solution for other customers (mobile operators);
- the product works with subscribers’ bases around the clock. The size of databases stores about tens of millions of unique subscribers.
Company’s achievements during the project
- for 2 years the number of our team members increased from 1 test engineer to 7 specialists;
- we successfully fulfilled our potential as a team in the format of Feature team work;
- our team provided a full cycle of iterative development: daily stand ups, groomings, sprint reviews, retrospectives, weekly demos to the customer; analysis, development, testing, regression and integration testing, preparation and delivery of releases or patches;
- we analyzed and implemented a large number of new business cases;
- our engineers showed and maintained a high level of responsibility, self-organization and self-learning;
- new technologies (Drools, RobotFramework, ELOG) were learned;
- product quality support was performed at a high level by increasing the coverage of the code (Unit tests), business cases (Autotests), conducting integration tests to verify the complex work with a set of related products;
- 3312 autotests were created during two years, large number of tests was updated;
- all tests were stabilized during the optimization of regression testing;
- our team took part in the development of a new test architecture;
- we took part in the transition to a product distribution;
- our engineers acted as initiators of improvements in the project processes;
- we took part in a community of scrum masters;
- we have developed a program for introducing a new person into the project;
- after more than two years, at the time of publication of the article, our cooperation with the customer on this project continues.
Alexander Zolotarev, Head of Laboratory, Billing and Finance, Nexign JSC (earlier Peter-Service Inc), Software Development Company for the Telecommunications Industry, St. Petersburg, Russia
We have been working with JazzTeam company for many years. During this time, the JazzTeam engineers have become for us not only exceptional developers and QA engineers, but also true partners and friends.
Their ability to identify hidden problems and eliminate them quickly and efficiently. In my opinion, this is a natural component of any project in which JazzTeam participates.
Stable and confident work of the team, reasoned actions, clearly posed questions – all that makes JazzTeam the professionals in their field.
I particularly wish to commend the management team, which has set a high level of responsibility from the very beginning: they always not only listen to our requirements, but also hear them, and implemented everything exactly in the form that we need and that is the most important thing.
Cooperation with JazzTeam is a pleasure, strong friendship and gained boundless trust, that was fully gained by the guys’ work. I sincerely believe that our effective cooperation will be continued. I want to thank every member of the team and wish them good luck and further professional success!