In the 60 's, due to the significant increase in computing power, people need to deal with the complexity of the problem has also been improved, resulting in a series of problems such as project running over budget, project running over time, software is very inefficient, software quality is very low, the software can not meet the requirements, the project lacks management, the code is difficult to maintain, Software is difficult to deliver, called a software crisis. It is realized that software development is not only a programmer to write a program so simple, but a project, the need for scientific development methods, so that people put forward the concept of software engineering, the use of a project-based approach to the management of development. Nowadays, software development methods in software engineering are mainly divided into traditional software development and agile software development. This paper mainly introduces the two methods of software development and their respective advantages and disadvantages.
I. Traditional software development
The traditional software development process is a document driven process, which will open the software development process into feasibility analysis and project development planning, requirements analysis, summary design, detailed design, coding, testing, maintenance seven stages, each phase of the output is the input of the next stage. At each stage, the developer has to complete this phase of the task and write the document before moving on to the next stage.
The waterfall model is a typical traditional software development process. It is a linear development model, from top to bottom, as the waterfall is generally closely connected, interlocking, each phase of communication is in the form of documentation.
Waterfall Model Software Development flowchart
Waterfall model is divided into three stages: definition stage, development stage and maintenance stage. In the definition phase, the developer needs to complete the definition of the software, design the basic framework of the software, and complete the requirements analysis of the software. During the development phase, developers need to analyze the needs of stakeholders to build blueprints, including UML diagrams, database tables, API interfaces, and so on. It is noteworthy that in the development phase, the architect can make some predictable assumptions, in addition to the customer's needs, but also to the customer may have the requirements of assumptions, at design time to leave some leeway, because the customer needs in the software development process may change, resulting in the need to modify the program, Therefore, you need to plan a large number of functional requirements and non-functional requirements to avoid refactoring the loss from the software framework. During the maintenance phase, the developer maintains the software to meet customer requirements based on user feedback on the software and customer's new requirements for the software.
At the end of each stage of the waterfall model, a rigorous check is required to ensure that no problems occur at that stage. When the problem is found, just go up and down the trail to find the problem, until you find the problem, solve the problem and then step down.
The waterfall model has some advantages:
- Waterfall model in accordance with the software development process, the large process of decomposition into a small process, easy for project team developers to work together
- The waterfall model provides checkpoints for each phase, with rigorous checks at the end of each phase, and developers only need to focus on the next stage after checking through to the next stage.
But at the same time the waterfall model has huge drawbacks:
- Because the development process is linear, the development process is generally irreversible, otherwise the cost is too high.
- The actual project development is difficult to strictly follow the model.
- It is often difficult for customers to clearly give all the requirements, which is what the model requires.
- The actual situation of the software must be seen by the client in the late stages of project development, which requires the client to be patient enough.
- Waterfall model must write a large number of redundant documents, and lack of communication between people, pull down the efficiency.
Because of the shortcomings, the waterfall model has great limitations, only applicable to those with clear requirements, and very few changes in the software. So waterfall models are rarely used now, and on the basis of the linear development of the waterfall model, other software development methods are produced, such as the incremental model is actually a piecewise linear model, the helix model is a curved linear model connected, and the shadow of the linear model can be found in many other models. These different software development methods are used with different software development.
Rapid Prototyping model: No need to pre-complete definition, support user participation, support the gradual improvement and confirmation of requirements, can adapt to the change of user requirements, suitable for complex requirements, difficult to determine, dynamic change of software systems.
Incremental models: Software products are developed incrementally, allowing development activities to be parallel and overlapping, for software systems with greater technical risk and more stable user needs.
Iterative model: Do not require a one-time development of a complete software system, the software development as a gradual access to a wide range of requirements, improve the software product process, applicable to the requirements of difficult to determine, constantly changing software systems.
Helix model: Combining the idea of waterfall model, rapid prototyping model and iterative model, and introducing the risk analysis activity, it is applicable to software systems with difficult requirements to obtain and determine, and software development risks.
Second, Agile Software development
Although traditional software development has solved the software crisis to some extent, its lengthy and complicated development process has been criticized by the developers, so a fast, dexterous and lightweight development method, namely Agile software development, has been proposed.
In 2001, an agile alliance of 17 Software development experts signed an Agile software development statement, saying that communication between individuals and individuals is better than developing tools and processes, running software over broad documents, better customer collaboration than contract negotiations, and better response to change than a step-by-step follow-up plan.
In the Agile software development process, the team is required to respond effectively to changes, while it encourages the team to communicate, emphasizing the delivery of the software rather than the intermediate product, and the customer as a member of the team.
Proponents of Agile software development emphasize "human factors" and shape processes according to specific people and teams. It has the following requirements for team members: basic ability, common goal, sincere cooperation, decision-making ability, fuzzy problem-solving ability, mutual trust and respect, self-organization.
In the process of agile development, one of the most widely used methods is extreme programming. It values verbal communication between the development team and the customer rather than a large number of documents.
In order to be concise and responsive to change, extreme programming requires developers to design only immediate requirements, regardless of long-term requirements, to make the code simple and to be refactored when demand changes.
Extreme Programming Process
Extreme Programming uses an object-oriented approach as a development paradigm that includes rules and practices for planning, designing, coding, and testing 4 framework activities.
A planning activity is a stage where team members understand the business context and customer needs of the software, and at this stage the developer listens to a series of "User Stories" describing the required features and assigning them the appropriate priority.
In the design activity, the developer follows the principle of keeping it simple and does not encourage additional design. The CRC card is used to determine the object-oriented class associated with the current software increment.
In the coding activity, the developer first develops the test units required for this encoding, and the coder is aiming to implement the function through the test unit without needing anything else.
In the testing phase, according to the technical conditions stipulated by the customer, show the software function to the customer.
In addition to extreme programming, there are many other agile programming models, such as adaptive software development, Scrum, dynamic system development methods, Crystal, feature driven development, lean software development, agile modeling, Agile Unified Process, this article is not introduced here.
Compared with traditional software development methods, agile software development has some obvious advantages. It is people-oriented and pays more attention to the communication between people rather than blunt documents. The client also participates in the software development process as a member of the team, which enables better communication with the customer in order to better respond to changes in demand. However, Agile software development also has some drawbacks, it is a lightweight development method, it is fast to sacrifice the problem analysis and design to achieve, so only for small-scale software engineering, in the face of large-scale engineering is likely to appear chaotic.
Resources
- Encyclopedia of Think tanks: Waterfall model
- CSDN Blog: The comparison between Agile software development and traditional software engineering
- The research methods of software engineering practitioners
- Love Programming Blog: traditional software development vs. Agile Software Development
Traditional software development vs. Agile Software Development