Software engineering is the concept that was put forward in the 70 's, facing the challenge of increasing the size and complexity of the development procedure, proposing the concept of engineering the software development, the traditional software development method has waterfall model, spiral model, fountain model, Rup four class, they pay attention to the completeness of the document, the readability of the program, Structural integrity is a heavy-duty software development approach. In the past time, the traditional software engineering method has been well adapted to the requirements of the development of soft ware, the traditional software engineering not only focuses on the perfect model of the structure of the system, but also focuses on the overall predictability, which is driven by the document, and is developed according to the requirements analysis, summary design, detailed design, coding, testing and software delivery. In the software industry is not very developed, software developers are scarce in the past, such a rigorous development process is undoubtedly applicable to any software development.
The development of traditional software is divided into the following stages:
(1) Plan
The overall definition of the problem to be solved, including the understanding of the user's requirements and realistic conditions, from the technical, economic and social factors and other three aspects of the feasibility of the software project, the preparation of feasibility study report, explore solutions to solve the problem, and the available resource costs, desirable benefits and development progress to make estimates. Develop the implementation plan to complete the development task.
(2) Analysis
A detailed definition of the problem to be addressed requires the software developer and the user to discuss the decision, what needs are met, and how to describe them exactly. Write software Requirement specification, preliminary user manual, confirm test plan and data requirement specification, etc.
(3) Design
According to the requirements of the requirements of the specification, the design of the corresponding software system architecture, and the whole system into several subsystems or modules, define the interface between the subsystem or module, the individual subsystems of the specific design definition. Write software outline design and detailed design instruction, database or data structure design instruction, assemble test plan.
(4) coding
The conversion of software design to a computer-acceptable program is written as a "source program manifest" expressed in a programming language.
(5) test
Test the software on the basis of the design test case to verify that the system is running according to the required performance and function assumptions. Write test Analysis report.
(6) Maintenance
According to the operation of the software, the software is modified to adapt to the new requirements, as well as to correct the errors found in the operation. Write software problem report and software modification report.
In the actual software development process, is not strictly from the first step to the last step, but the relevant phase will be related to the previous phase of feedback, and then make adjustments, such as, but even so, in the software industry is so developed today, engaged in software development of the people are more and more, application software is smaller, Today, the traditional software engineering development method in many situations is very procrastination, so from the traditional software engineering development method, the agile programming is born.
Compared with traditional software engineering, there are two main features of agile methods.
1, the Agile method is "adaptability" rather than "presupposition". Traditional software engineering attempts to make detailed plans for a development project over a long span of time, and then develop it according to the plan. This type of approach rejects changes after the plan has been finalized. The agile approach welcomes change. In fact, its purpose is to adapt to the process of change, and even allow to change themselves to adapt to change.
2, the agile approach is "human-oriented" rather than "process-oriented". They try to make the software development work to take advantage of human characteristics and give full play to people's creative ability. They emphasized that software development should be a pleasant activity.
Agile programming is not a completely independent of the traditional software engineering development method, agile programming is to adapt to the needs of today's software development from the traditional engineering of the development of an adaptive approach. Agile development is not entirely a completely new theory, it is an improvement to the traditional software engineering, rather than innovation, agile development for reference to a large number of traditional engineering methods, such as iterative and incremental development, both of these traditional software engineering methods, in the Agile development model also played a very important role. Again, we can see the shadow of the waterfall and the rapid prototyping method. Because agile development is based on the original software development method of integration-take its essence, to its dross. Agile development therefore inherits the advantages of the original approach, improves the efficiency of software development and allows for changes in requirements during development, discovers risks early in the iteration, makes code reuse feasible, and reduces rework of the project.
Agile development is a lightweight approach, and the key to agile development is to find an effective balance between software quality and development speed. Agile development is not a document-driven, but a software product-driven, usually a given job requires only a few documents, in the software development process, according to the user's needs change at any time to adjust the program, until the delivery of users satisfied with the software products, the project team and developers must have "agile" characteristics.
Using the traditional software development method, only in the late development of the user can see the development of the product, although in the early stage there is a very detailed analysis of requirements, however, after the requirements of the document molding, the demand will almost no longer change, so during the period if the user's needs have changed, the cost of re-changing requirements is very large. The agile development process is different, the user, designers, coders involved in the entire development process, the first test version of the software is very fast, usually after the first iteration of the user can see the first version, and then through communication, communication, testing, and then modify the function of the product, constantly iterative, The period for each iteration is very short and the resulting document is very small, but this part of the document is essential. Agile development is a very flexible approach, and as the user's needs change to a baseline to operate, often in a short period of time to come up with users more satisfied with the product.
However, the traditional software engineering is not outdated, but relatively traditional software engineering application scope is narrow, in a "fast food" application rampant today, the traditional software engineering methods used less, now a lot of application development cycle only a few months, developed well after put on the market, After running for a year or two, wait until the user is very few and then discard and then develop the next software, which is now a model for many companies, in which case agile development is very practical. However, in some software development, especially in heavy-duty software development, the traditional software development model is still very useful, there are still some software in the agile development of the point of view, relatively not suitable, although the use of decoupling method can separate the modules as far as possible, However, heavy-duty software requirements for the analysis of the requirements of the relatively weakened many, for the requirements of the document more stringent, the need for a long time to maintain, to achieve even the degree of perfection, it is necessary to strictly follow the development steps, strictly in accordance with the duration of the goal to complete, and relatively speaking, the function of the modification is troublesome, is likely to produce a reaching situation, so a rigorous team is required to follow the process to rigorously implement the development process.
In general, the agile development method does not necessarily contradict with the traditional software engineering method, as mentioned above, each has its advantages, the software is dead, the person is alive, the key is whether the decision-maker can according to the characteristics of the software and the staff of their own team to arrange a reasonable method, and there is no need to strictly follow a method to develop, To adjust according to the actual situation, can not underestimate the role of the document, and make the software maintenance is very cumbersome, and can not because of procrastination caused the whole project slow or the SOFTWARE PRODUCT is not up to standard. Our ultimate goal is to bring out excellent software products (including programs and necessary documentation), on top of which we try to save resources (time, space, etc.) and find a balance on this, and the development method needs to be changed flexibly.
Reference: "Agile Software Development Technology research" Week yingying
The application research of agile development in software development Peng Zhinan
"Agile Software Development Application Research" Van Hongtao
The development course of software engineering is the discussion of its development trend Zhonghua
"Agile Development Research for small-scale teams" Han Peng
What do we need from traditional software engineering to agile development?