Software development technologies (software) appeared along with programming. The combination of two procedures has become a tradition: how to write an algorithm about “how to write a program” and develop this project, clarifying the first algorithm along the way. If a program is “executed” by a computer, then the technology for writing programs is “executed” by a person.
For a computer, an error in the execution cycle is fraught with fatal consequences. For a person, the process of executing technology for writing programs is not a cycle or algorithm, but a spiral of development of knowledge and skills to formalize the field of application, formulate a problem and solve it.
Scope and purpose in it
Programming in any context is a formalization of the knowledge and skills of a developer (team) into a relatively accurate algorithm, written in the format of a technical task (TOR) for developing software (software) for one or many programs.
The scope is always primary. The task to be solved is not so much secondary as it is difficult to determine and in itself is a task. To understand what needs to be done in order to do it quickly and accurately is always difficult. All attempts to formalize the process and create a universal example of technical specifications for software development always turned into a spiral movement to the goal.
The statement of the problem has always been specified, the goal has been specified, and the required functionality has sometimes been determined over the years.
Build a spaceship, design a residential building, or write a statement of work on a nuclear submarine - years of work, even taking into account the experience of numerous experts. This is clear to everyone.
It was with great difficulty that the public consciousness came to understand that writing a program (program system) is not a smaller, but often much more time-consuming and complex process.
Define a decision space
The scope always “knows” what exactly needs to be done to change the situation for the better, but the specialist does not immediately understand how to correctly formulate and implement this.
Modern programming has gone from the local version to the network “distributed” context. The essence of this has not changed. What to take as a basis C #, C / C ++ or a set of Internet technologies HTML / CSS + JavaScript / PHP does not matter.
You can create unique assembler software for any application, but this is a very time-consuming process of highly qualified specialists at the level of machine code.
Software is the embodiment of the mental activity of a specialist in a static, tangible version. The required functionality is formalized into dialogue logic, decision algorithms, and an interface.
The solution space is the necessary functionality that describes the idea or ensuring the fulfillment of a range of requirements that improve the work of the user (customer, software consumer) in the field of application.
The technical task for the development of software in the end is the logic of formalizing the subject area for setting the problem, as well as the procedures for describing, developing, implementing maintenance, updating and termination conditions for the use of information systems designed for the accumulation, storage and processing of data through computer equipment.
An information system is a generalized designation of an individual program, a set of programs, a database or a unique algorithm. There is always something in the input, something in the output and you need to build what stands between the input and the output - software: formalize and implement the information processing procedure.
Process participants and important conditions
Customer - an individual or legal entity interested in developing an information system.
Contractor - an individual or legal entity capable of organizing a process and manufacturing an information system.
Developer (team) - a specialist or a group of specialists hired to perform all or part of the work.
Relations during the development of the information system are built at the level of the Customer - Contractor: only a written form in accordance with applicable law and the concluded contract.
Contractor - developer: only a written form in accordance with its own manual or the general GOST for the terms of reference for software development.
No oral relationship is allowed (not prohibited, but not recommended), no participant in the process can refer to an agreement not confirmed in writing.
The Customer and the Contractor act within the limits of the current legislation and the concluded contract until the complete fulfillment of obligations.
The developer is hired by the Contractor as necessary to perform specific functions, tasks, steps. Determining the competence and composition of the development group is the sphere of interests and responsibility of the Contractor.
Features of TK for software development
Extreme clarity! TK is a strict document that clearly defines what and on what basis it was formalized:
- initial data;
- required results and output;
- rationale and list of all algorithms to be implemented.
TK is a self-sufficient document: if you execute everything that is written in it, then the required functionality will be implemented, and the task will be solved. Nothing extraneous, nothing contradictory. All points of the terms of reference for software development are interconnected, systematized and precisely formulated.
Any TK for the development (even of the most ugly program) is a dynamic document. You can not fix it as something unshakable. In programming, intelligence is reflected like in a mirror. TK is a process of spiral development of ideas about the scope and the problem to be solved.
The technical task for the development of software is not a pencil and a sheet of paper, but a ballpoint (ink) pen and a pack of damaged paper.
Respectable are those developers who, when writing TK, are guided by the preservation of the history of the development of their ideas about the scope and the task at hand.
Conceptual view of information systems
The terms of reference for software development as an example of conceptual ideas about an algorithm, program, information system, database, web resource or other product running on a digital computing device focuses on a programming language, but specification and choice of language are not important.
All that is developed (programmed) to control a digital computing device is an information system (software, algorithm, program or database).
The information system is:
- the result of formalizing the scope;
- statement of the problem for the development of an algorithm (system of algorithms);
- programming (development);
- testing (checking functionality and errors);
- implementation (adaptation to the field of application and refinement);
- maintenance (maintenance without changing the code);
- updating (modernization, creating a new version);
- cessation of operation (legal, technical, planned).
The information system is a sequence of transformation of human mental activity:
- general system presentation;
- formal description;
- specific development;
- functionality check system;
- implementation system;
- tracking system;
- system of updating (modernization);
- grounds and reasons for termination of use.
The development of the information system is performed by the Contractor using its own or attracted specialists. Copyright and ownership in the process of work on the results of the stages is made out in accordance with the law and by agreement with the customer.
TK development in software development
The use of a team of specialists, replacement of specialists, time and logic of the work is determined by the Contractor. The functions of the Customer end at the stage of setting the task, before the implementation of the information system and begin again after implementation.
Development is carried out cyclically, but in a spiral:
- after testing (Contractor's initiative);
- after implementation (Customer initiative);
- with the objective need for updates.
The development of an information system focuses on the result of a person’s mental activity, which is transformed from a conceptual description of the field of application to a specific product.
Each stage of the transformation is constructed in such a way as to avoid stiffness of the final structures as much as possible, to provide a dynamic refinement of each element, given, object, function, etc. of the final product during the development process.
The development of technical specifications for creating software and the created information system are static representations of the results of the work performed, are perceived as is, the inaccuracies, errors and design flaws cannot be the basis for justifying or presenting any damage.
Software development based on already created solutions
Software has been used in many cases in various fields of application for a long time and a lot of experience has been accumulated. Finances, exchanges, accounting solutions, electronic document management, numerically controlled machines and other areas.
Write a technical task for the development of software C1 - an example of work that is formalized on the basis of existing software. It is very characteristic that 1C accounting, declared by developers as the first and only implementation of integrated accounting software, was created by other teams of developers in completely different software products. It is clear that existing accounting programs are not ideal and existing ones will be developed and new ones created.
The relevance and real need for automation of production and information processing has made the terms of reference for the development of AIS software an independent product of the specialist’s mental activity.
Unlike 1C, work on the design of TK for AIS and the automated information systems themselves dates back to the beginning of the 80s of the last century, but there were no problems from this, and there were much more ideas.
Development and dynamics versus classics and statics
Any program captures the knowledge and skills of developers (authors). Customers and managers of software projects can contribute to the ToR and the resulting software, but specific programmers still transfer their thoughts (knowledge and skills) to static program code. Even when the program can dynamically adapt to changes in the field of application, modern programming technologies do not give it the opportunity to go beyond the limits of the representations of programmers, beyond the limits of the completed implementation (solution) of the task.
If the limitations of modern information technologies are defined as a fundamental factor, the process of creating TK and the resulting software will look like a gradual increase in functionality.
Programming is not an isolated fact: TK is written, software is created and the process is completed. Another option: it is written, done and started all over again. Ideal - not so much to write a program and specify how to do it, but to form a team of program developers and improve its knowledge and skills.