The paper deals with the problems of increasing the efficiency of software development, in particular, the issue of reducing the time for developing programs and using automated synthesis of programs, which will avoid the revision of the original product. The software should be tested along with other system components in all combinations that may occur. Testing is time-consuming because hidden bugs are revealed through unexpected interactions between software components. With structural analysis, data flow diagrams are not the end result, they are a developer tool. First, diagrams are built, and then mechanisms are developed to ensure the required system behavior. A graphical approach to solving the problem of automation of software development is being developed, based on the involvement of visual forms of program presentation. For any program object, you can select a finite number of states in which it is at each moment of time. The program progress is associated with the transition of an object from one state to another. The graph replaces the textual form of the description of the program algorithm, while the visual representation of the algorithm is realized. The specification of data structures, as well as the setting of intermodular interfaces according to data, is separated from the description of the structure of the algorithm and controls. Basic modules and data types are used. Basic modules are local calculable functions, on the basis of which all other technology objects are generated. Data types describe the syntactic and semantic aspects of constructing data used in base functions. Algorithms for finding routes on directed graphs are considered. When defining routes from the root vertex to the final ones, the properties of the algebra of three-valued logic were used. Based on the considered approach, as well as taking into account its shortcomings, a method for classifying data types was proposed, based on the implementation of a partial enumeration of the routes of the graph of program links and a method for designing software based on it, taking into account minimizing the time and cost of the project.
 Keywords: software, computer engineering, information systems, components, partial enumeration of graph routes, development costs.