Quality management in optimizing software product profile

The article investigates the quality of a software product sold by “Svyazcom Ltd.”, a developer in the field of mobile communications and Internet, and created at various times by several programmers. It is shown that the application of the computer analysis permits to verify 86 indicators relevant to the quality parameters in the shell CppDepend, which meets the requirements of the assigned task most adequately. The analysis resulted in an optimized product profile. Proposals are presented for updating the quality management mechanisms in an innovative IT company taking into account the obtained values of quality parameters.


Introduction
The market for the modern software industry is characterized by a very high degree of competition, and for a successful work any IT company must develop, introduce and maintain software of the appropriate quality quickly. As a consequence, the company needs to create adequate solutions to improve the quality system management process. Statistics show that the improvement of software development processes in successful companies leads to a significant increase in productivity and quality with an average return on investment of up to 8:1 [1]. In this regard, research and practice show the inevitability of developing objective indicators to assess the company's ability to produce programs with the required quality characteristics, confirmed by a conformity certificate.
The need to create new software solutions is caused by several reasons, one of which is the creation of software in the field of automation of industrial or commercial projects. Software development on an industrial scale is a high-tech process that should provide a unified scheme for the work of a large number of developers and ensure that the system meets the customer's expectations [1][2]. It is known that the quality of software is a combination of properties that characterize the ability of software to meet the user's needs in accordance with the specified purpose [2,3,4]. The problem of detecting and eliminating errors is exacerbated due to the increased complexity of the tasks solved by programmers; in case of failing to detect and prevent errors there may happen fatal accidents in information systems concerning critical objects or processes [5].

Materials and methods
Special metrics are used to measure software quality. Software metrics is a measure that allows calculating the numerical value of some property of the software or its specifications [1]. At present, several hundred metrics are used around the world. However, the pursuit of their universality coupled with ignoring the scope of the software being developed reduces the effectiveness of their use significantly. When choosing metrics, it must be remembered that the metric shall enable tracking the trend of changes and make sense both for the customer and for the performer.
The control of the code by a supervisor other than its developer can be done manually. Evaluation of the code includes the compliance of the code with the requirements for structuring and dividing into modules, the completeness and quality of documents accompanying the code, including the documentation of the headers of software modules, function prototypes and data structures, comments on the implementation of essential operations, the compliance of algorithms in the source code with software documentation. This kind of control is a long and superficial approach, which is unable to calculate the metrics, whereas the use of methods and tools for automated source code analysis simplifies this task.
There are a large number of commercial and free static code analyzers such as CandC ++ CodeCounter, SourceMonitor, Reflector.CodeMetrics, FxCop, CppDepend, ParasoftC / C ++ test, etc. The list of languages, to which static code analyzers are applied, is also quite extensive (C, C ++, C #, Java, Ada, Fortran, Perl, Ruby, ...). Details can be found in the monograph [1] or on the websites of organizations producing the corresponding software product [6][7][8][9][10]. It is important to understand that there is no perfect tool for testing programs; one needs to find the one that suits the specific needs, programming language and assigned tasks best.
Therefore, the purpose of the work, the results of which are presented in this publication, is to select a computer program for automated analysis of the quality of a software product and to update the responsibility matrix in an IT company based on the main metrics.
"Svyazcom Ltd." is a developer of innovative solutions and services in the field of mobile communications and the Internet, as well, it is a developer of VAS platform solutions and specialized software for mobile operators and service providers [11][12][13][14][15].
The company's activities cover two areas:  development and distribution of mobile content (pictures, music, Java games, videos, themes, etc.);  development of VAS platform solutions and specialized software for mobile operators and service providers. Our ABC analysis of major projects of the organization showed that the projects of group A occupy a bigger share among all projects (43%) and account for 79% of all revenues. Group C projects in percentage terms have a small share (20%) compared to the rest, which means that the company has practically no unimportant projects, which make up 5% only. All projects contribute greatly to the company's total revenue. The most profitable and cost-effective project is the Galaxy project. Now the project, according to its creators, has become a mobile social network, while the "Galaxy Dating" project was initially developed with the focus on mobile phone users. Today, the number of registered users of the project has exceeded 10,000,000.

Results
To analyze the quality of software products produced by "Svyazcom Ltd." we needed to select the most appropriate code analysis tool. CppDepend was chosen, as it is perfectly suitable for the purpose of the work and is a unique and extensive software tool containing 86 metrics.
The quality assessment of the software code created in "Svyazcom Ltd." was carried out on the basis of three projects written at different times by different programmers, though having the common goal. A set of software code modules was written to implement the "Svyazcom.SmartConnect" platform.
"Svyazcom.SmartConnect" platform provides a range of services to stimulate voice traffic in cases of problems that interfere with the connection of subscribers (subscriber unavailability, subscriber being busy, subscriber having not noticed the call, lack of money on the caller's account, etc.). The "Svyazcom.SmartConnect" platform accepts calls from subscribers and performs their processing in accordance with the parameters of the call forwarding, settings in the profiles both of the calling subscriber and the receiver of the call. The standard range of services includes: -MissedCallsAlert (MCA), which sends SMS alerts about missed calls and the availability for call of a previously unavailable subscriber; -SmartVoiceMail (VM), which gives an opportunity to leave voice messages to an unavailable subscriber, which can be listened to later.
Analysis of software quality over time, i.e. analysis of projects similar in their functions, but made at different times by different programmers, showed that the quality of written program modules improves simplifying their integration into other projects.
The authors made the quality analysis of the program code in one of the main modules of the platform "Svyazkom.Smart Connect", created at different times by several programmers for "Svyazkom Ltd.", the developer in the field of mobile communication and Internet.
A visualized representation of the code metrics is a matrix, which, depending on the type of metric, shows the scale of all the project components in comparison. CppDepend uses TreeMap, a treestructured data mapping method with the help of nested rectangles. This method is used to display the project hierarchy. When one clicks on a certain area of the matrix, the structure of the project, whether it is a type, method or class (it depends on the choice of display parameters) is illuminated with a different light on the entire matrix, in accordance with this light activation by other structures.
Below are screenshots of the matrices of the three discussed programs analysed with CppDepend The first project was created four years ago and was unstable. Figure 1 shows the relative volumes of each module and the methods and types of the embedded program, which is indicated by the cellular structure. The comparison was made based on the number of lines. This matrix clearly demonstrates the absolute and relative volumes of all program structures. The distribution of volumes is homogeneous. It must be borne in mind that too many small structures lead to an added complexity of understanding the program code and increase the likelihood of errors.
In the same way we investigated the second project, which was created two years ago by the same programmer. The project matrix is presented in Figure 2. Comparing the two projects, we can conclude that the first project consists of a larger number of small structures than the second. The third project, created six months ago by another programmer, is different in both the quality of the code and the logical structure. The main project metrics are presented in Figure 3. In the quality section of the code, that is in the generated CppDepend report, this project has one critical and twelve average warnings. Having compared the three projects created with one common goal and analyzed the reports submitted by CppDepend, we compiled a competitive profile of all the analyzed projects. This competitive profile is presented in table 1. Types with poor cohesion 7 5 3

Discussion
Thus, the analysis of the quality of the program code in these three projects showed that the project No.3 was of the highest quality in terms of program metrics. This is proved by the competitive profile given in Table 1. Its code is more concise, the structure of the program is simple, and the code is commented within the normal range. The programmer adhered to small volumes, methods and types, too. This program is more stable than others, and therefore more manageable. The third project is most suitable for integration into other systems, as it can be easily improved and modernized according to the customer's demand. In accordance with the task of developing unified documentation systems for QMS of the ISO 9001 standard, specialists in "Svyazcom Ltd." developed and wrote a quality manual and mandatory documented procedures (hereinafter referred to as DP): DP "Documentation management"; DP "Records management"; DP "Internal audit"; DP "Management of non-conforming products"; DP "Preventive and corrective actions"; DP "Human Resource management"; DP "Participation in tenders"; DP "Design and development of software"; DP "Technical support"; DP "Quality plan"; DP "Choice of the supplier".
Undoubtedly, there is some relationship between the metric parameters of the program code under examination, the documented procedures of the quality management system and the responsible participants in the project. This relationship can be represented as a three-dimensional matrix. One of the sections is a standard procedure, which is the responsibility matrix in accordance with ISO 9001.
The next dimension of documented procedures is metrics. However, not every documented procedure is directly related to code metrics. Table 2 below shows the relationship between the main software product metrics and documentary procedures.  Coloured area shows the importance of metrics and their verification at certain stages of the software life cycle. It is not advisable to check and control the quality of all metrics at each stage, but in order to correct and improve the quality of the program code writing, it is necessary to take them all into account at certain stages, as shown in colour in table 2.
The next dimension of the metric in the matrix shows those responsible for the software quality management. At certain aforesaid stages of the life cycle the project participants make their own assessment of the quality of the program code, depending on the degree of compliance with the certain metric. For example, the value of cyclomatic complexity shows how complex the program is and how it can be estimated in a point system. An example of such scoring is shown in table 3. For a better perception of the software code, the software package should be broken into blocks with a small number of lines which can be estimated in a similar way (Table 4). The instability of the program, which results from centripetal and centrifugal cohesion, can be estimated by the same principle.
For each project participant, one or another metric has a greater or lesser value. As a consequence, the scores of all participants will be different. Having estimated the latter, we can find the quality coefficient of the program code using the formula 1: where Enumber of reliable people; Lnumber of metrics; kelestimates made by those responsible for compliance or non-compliance with certain metrics.

Conclusion
Hence, now it is possible to sum up some work results. Analysis of software quality in dynamics, i.e. analysis of the projects, similar in their functional purpose but differing in time of creation and their creators, showed that the quality of written program modules improves with the simultaneous simplified integration of them into other projects. This is evidenced by a competitive profile compiled for three projects, which demonstrates that the project No. 3 turned out to be the best from the point of view of quality of program metrics. Its code is more concise, the structure of the program is simple, and the code is commented within the normal range (19%). The cyclomatic complexity of the program methods equals 56, with the 568 types, which is better than the other programs in terms of parameters. For that reason, this program is more stable than the others, and therefore more manageable. The third project is the most suitable for integration into other systems, as it can be easily improved and modernized according to the customer's demand.
The CppDepend software allowed us to evaluate the quality of code for large volumes, to build a management and structure flow graph and, finally, to generate a report.
For the quality management system, the introduction of such a program would enable improving the quality of the code, reducing the time costs for the development of subsequent modules for other complexes. Within this program, it is possible to track code design and code writing against dates and schedules, which would help project managers to do their work related to tracking project duration without bothering programmers. It is proposed to introduce CppDepend as a design tool suitable for development environment for all programmers.
Metric synthesis showed that the quantity and quality of a program code depend on the logical and mental abilities of a programmer, their experience in developing software products and the degree of knowledge of a programming language. This provided us with a means to establish dependencies between program code quality metrics, mandatory documented procedures and those responsible for creating a software package at each stage of the life cycle. In the end, we found it feasible to offer "Svyazcom Ltd." to use in their QMS three-dimensional quality management matrix.
The three-dimensional matrix had the following dimensions: -a dimension of documented proceduresmetrics. The importance of metrics and their verification at certain stages of the software life cycle were shown.
-a dimension of documented procedurespeople responsible. We specified a place of software checking and assessing the software quality in the product life cycle.
-a dimension of metricsresponsible. At certain aforesaid stages of the life cycle the project participants make their own assessment of the quality of the program code, depending on the degree of compliance with the certain metric. The combination of these estimates made it possible to find the quality factor of the program code, which is a rough estimate in its own way, be it a five point system or a hundred point system. The sum of metric values was ultimately reduced to a single numerical indicator, namely the quality coefficient of the program code.
The quality of the program code shows how stable and reliable the program is, the professional level of the programmers working in the company, and the speed and reliability of the company as a whole.