## 1 Introduction
The most advanced requirements specification model suitable for the gray box testing is the UML diagram. There are some publications based on UML. For example, in [8; 9] it is proposed to use genetic algorithms to generate triggers for the UML diagrams, which allow finding the critical path in the program. Paper [10] proposes an improved method based on a genetic algorithm to select test data for many parallel paths in UML diagrams. In addition to UML diagrams, the specification can be displayed in the form of Classification-Tree Method [11]. The problem of constructing the trees was considered and an integrated classification tree algorithm was proposed [12] and the developed ADDICT prototype (AutomateD test Data generation using the Integrated Classification-Tree methodology) for an integrated approach was studied [13]. Having test cases before coding helps the developers to control their code to conform to the specification. However, the use of the already written code in the white-box testing allows one to build a more perfect test suite, which simultaneously possesses both the property of non-redundancy of the set of cases and optimal code coverage. Historically, the first approach to pathwise test data generation was a static method of the code analysis based on the use of symbolic evaluation considered in papers [14; 15; 16; 17; 18]. Symbolic evaluation involves executing a program using symbolic values of variables instead of actual values. After a path is selected, symbolic evaluation is used to generate a system of path constraints, i.e., a set of equalities and inequalities on the SUT's input variables. This system of path constraints must be solvable for the path to be traversed. A number of algorithms have been used for the inequality solution. There are different approaches to solving the system of constraints. Consequently, in [19], a set of tools (collectively called Godzilla) that automatically generates constraints and solves them to create test cases for unit and module testing was implemented. Ref. [20] proposed using Constraint Logic Programming and symbolic execution to solve the problem. In [21], Constraint Handling Rules are used to help in manual verification of problem areas in the computer program. However, there are several problems connected with static approach. The first one is, of course, the problem of the complexity of symbolic computations, which limits the SUT size. The second problem is related to an array element determination when the index of an array depends on input values. So, currently, the most effective and commonly used method for automatic test data generation in white-box testing is a dynamic approach which is based on actual execution of the SUT, optimization methods, and dynamic data flow analysis. Test data are developed using actual values of input variables. When the program is executed for some input variables, the program execution data flow is monitored. One of the first execution-oriented approaches was the chaining method [22], which used data dependency analysis to guide the search process. Dependency analysis automatically forms a sequence of statements that is to be executed prior to the execution of the current statement. Studies of execution-oriented techniques using Data Flow diagrams were carried out in papers [23; 24]. Some of the researchers suggest using hybrid approaches. For example, an approach proposed in [25] combines Random Strategy, Dynamic Symbolic Execution, and Search-Based Strategy. Ref. [26] proposed a hybrid approach based on the Memetic Algorithm for generating test data. Ref. [27] compared different methods for generating test data, including genetic algorithms, random search, and other heuristic methods. As for optimization methods, currently, evolutionary approaches have proven a powerful tool for test data generation. A large number of publications on this topic investigated the use of a genetic algorithm (GA) to solve the problem of generating test data; see, for example, [27; 28; 29; 30].