Introduction
In "The Savage era of computer program", People's design and writing of the program is a random change with writing and flexibility. As we've been learning all kinds of programming languages, it seems that it's not hard to write a program right. However, this programming pattern may apply to small programs from hundreds of to thousands of lines, and when we are faced with larger software sizes, more lines of code, and more complex personnel architectures, this random program development pattern doesn't seem to apply, so people encounter a " Software Crisis ", which has led to the creation of a discipline such as software engineering.
In my last program of programming, the teacher said that when we learn various languages, algorithms and data structures, we learn how to "program Design", and many people will create a misunderstanding: program = software. However, software is a more up-to-the-box structure of the program, i.e. software = program + template. Regardless of whether the right side of the equation is just "program" and "document", I think the first half of the sentence is quite correct, that is, the software is a broader concept than the program. The program is only part of the implementation of the software, although it can be said to be a very important part, but not all, the software also includes auxiliary writing, understanding of the program's documentation and other auxiliary elements of the column. Software engineering is to discuss how to write the correct and efficient software from the angle of algorithm, data structure and language, and how to write and organize these programs efficiently.
With the development of software engineering and the changeable production environment, software engineering has evolved a variety of portals and methodologies. These methodologies are not about right and wrong, but they are different in different situations, and different development teams have different preferences for different methodologies. The difference between these applications and preferences is due to the different characteristics of these methods.
In general, the present software engineering can be divided into two distinct schools, namely, the traditional software engineering method and agile development method. The traditional software engineering development method is very early and mature, but the agile development method is younger, but it has been favored recently. The next step in this article is to compare the two software development approaches and try to explain the factors behind the emergence of the agile development approach, which has recently developed a hot methodology.
The contrast between agile software development and traditional software engineering
Traditional Software Engineering
Create a background
In 1968, NATO created the term "software crisis" in its academic meetings and, for the first time, introduced the concept of "software engineering" in response to the crisis. As programs become more complex, more tools are available, requirements become more difficult to implement, and the number of people involved in writing software is growing, computer software is no longer as simple as building a small house as it used to be-although it is also a technical activity-and it becomes a skyscraper, which requires sophisticated planning, Normative standards and solid technical support.
Classification and technical characteristics
The waterfall model is presented very early and is more like an ideal software engineering model. The waterfall model organizes the process of software development with a linear workflow, from communication, planning, modeling, and building to deployment [2]. The waterfall model points to a complete discussion, design, and analysis of the building before it is built, and a large number of documents are formed. Each step is based on a complete previous step and forms a large number of documents. The waterfall model is so ideal that it cannot adapt to change. Since the latter phase is entirely based on the previous phase, if the previous phase fails to complete or rework, such as unclear requirements, changes, and so on, can result in the overall rework of the waterfall model, resulting in a large number of documents and wasted documents that need to be modified, as well as legacy problems in the system, which eventually crashes the entire system. [3] Virtually no one is using a waterfall model, and the waterfall model cannot be avoided without the need to rework it.
- Incremental process Model
Incremental process is the improvement and evolution of waterfall model. The incremental process defines the software development process as a number of increments (usually divided by different functions, components). Each increment is carried out in a linear development process. The benefit of an incremental process model is that it can continuously (at least partially) produce a program prototype that can be used.
- Evolutionary process Model
The evolutionary process is also an improvement to the waterfall model, or it can be called an iterative development process. Waterfall model can not adapt to the uncertainty and change of demand, and the evolution process may produce a prototype, and according to the development situation and user needs to determine, change the user's feedback has been iterative development, and each iteration still follow the linear model. The evolutionary process model can produce prototype products quickly and try them out. Unlike the incremental process model, the incremental process model focuses on modular partitioning and iteration, while the evolutionary process model focuses on iterations of the software's "depth." Evolutionary process models can also respond to changes in demand, but in order to achieve prototype products, many legacy issues may be generated, which often leads to significant time and productivity costs.
Spiral model is a special iterative development model, but its position is very important. Helical models are generally developed with large, important software and extend from concept development to the entire lifecycle of software. In each spiral, the spiral model uses a waterfall model, and each circle represents one level of the software: The middle represents the prototype, and the outside represents the complete implementation, improvement, maintenance, and evolution of the software.
Another feature of the Helix model is that it must perform risk assessment in each round of cycle iterations to eliminate risk, persuade customers to undergo iterative product evolution, and therefore become a risk-driven approach to development [4].
Summary
The traditional software development method, whether it is the linear model of waterfall model, or the increment, evolution and spiral model, can not be separated from the complete evaluation and design stage of the advanced line, and then implemented and tested. Each step of evaluation, design needs to form a number of documents and can not be changed (at least at the time of the non-change) of the requirements, constraints.
Agile Software Development
Agile software development has attracted wide attention since the 1990 's. In the 2001, the proponents of agile methods met in the United States at the Utah State Ski resort, forming an agile alliance and issuing the Agile manifesto, the most important part of which is the following:
- individuals and interactions are higher than processes and tools.
- The working software is higher than the detailed documentation.
- customer cooperation is higher than contract negotiation.
- response changes are higher than the follow plan.
In contrast, traditional software development methods are known as "non-agile". Compared with the traditional method, the Agile method pays more attention to the direct communication between people, pays more attention to the rapid iteration of software, pays more attention to the compact self-Organization, and the most important point: more attention to change.
The agile development approach treats documents as a record of software development, rather than as a guide to software development, and of course gives more priority to the implementation of software, the software that produces the work . Proponents of agile methods argue that complete design, planning, and documentation are constraints on subsequent progress and cannot be adapted to change. As a result, the agile development approach can iterate faster because it puts more effort into real software implementations.
The most typical feature of agile development approaches is embracing change . When the demand of the user is vague and changeable, the agile development method can easily change the corresponding user because of its very short iterative process and very fast iteration speed. The fast iterative nature of agile development methods makes it more attentive to people, including developers and developers-users to communicate and feedback. Imagine the following scenario: The user commissioned you to make some improvements, and you need a complete discussion, design, documentation, implementation and testing, and your users need to wait a long time, the communication between you and the user is not continuous, and in the agile development method, because the iteration is very fast, so that you and the user, The communication between you and your co-workers is continuous, so you need to pay more attention to people's participation and users ' constant feedback. In the agile development approach, users appear to be part of the development team and are contributing to the improvement of the software. Therefore, the agile development approach attaches great importance to customer cooperation.
From the above features, agile development methods are not so easy to implement. If the agile development method is not implemented well, it is easy to degenerate into a "random thoughts with writing" mode, so it requires a high quality of personnel. Therefore, the agile development approach attaches great importance to the " Human Factor ". In the agile process to discover the potential of developers, developers have to work together, have a very comprehensive ability, including program writing and cooperation, decision-making ability. As a result, the agile development process is also a way of organizing people, requiring full trust, organizational culture, developer decisions to be fully supported (including support from customers), and lean teams (so agile development methodologies are generally applicable to small teams).
There are also many more specific methodologies under the agile development approach, such as extreme Programming XP, Scrum, and test-driven design. These methods are a further definition and constraint of the agile development approach, and provide some useful "tools" for management.
In general, the Agile development approach is not just how the process is distributed so easily, it synthesizes many of the essence of traditional development methods, removes the parts that do not fit them, and forms a system of a series of methods that contain the software development process, personnel organization, management, daily task assignment and how to manage the people's ideas.
comparison and conditions of use
The traditional approach to development is more forward-looking, planned and engineered, where developers ' development can be made simple and organized with full foresight, design and preparation. Traditional development methods are more suitable for hard-to-change requirements, very large software, and hard-to-iterate software. Traditional development methods are more like traditional manufacturing, for example, "agile development" is not possible during the development of hardware, because the hard-to-iterate nature of hardware makes it impossible to apply agile development methods-unless technological advances make it possible someday. The same applies to traditional development methods, such as rocket launch procedures, which require full foresight and stability, and traditional development methods are the only option.
Software, after all, is software, and its "soft" features make it different from the hardware. Software is easy to change and easy to publish, so it's easy to iterate. Agile development approaches are less iterative than iterative development methods, and do not allow for a complete assessment of risk in a spiral development approach--only the need to constantly embrace change. Through the previous analysis, the agile development approach is more suitable for those small but refined, high-quality development teams, and for those who are fast in the market and need to respond quickly to the software sector.
The agile development method is not only the work flow, but also a complete management system. A mature Agile team can have very high productivity, but this requires a high level of management and skill (Agile development principles focus on the continuous learning of developers). As a result, many teams today are simply absorbing some of the principles and essences of agile development methods and abandoning some of the principles that do not apply to themselves, forming a set of own ways to manage themselves.
Personal understanding of the causes of Agile software development
The time of Agile development method is later than the traditional method, and there must be some historical reasons behind it. Personally, this is due to the continuous development of the software development environment, the competition in the software market is fierce, and other factors caused by the Internet
- The software development environment is progressing continuously . Once, people write software need to learn a lot of programming knowledge and skills to do good programming, and the difficulty of programming causes it to increase in complexity after the large number of errors, which led to the production of traditional software engineering. As the software development environment progresses, such as the emergence of a large number of new languages, new development environments, and new software development aids (such as version control software), the software development process appears to be more controllable than before, more visible to developers, and a variety of interface specifications that replace the functionality of certain documents. As a result, developers have more energy, ability to face change, and everyone has a way of coping with different situations. Of course, this requires constant self-improvement by developers.
- The software market has been fiercely competitive . As we gradually enter the digital age, the use of software seems to have become a part of many people's lives, which led to a growing demand for software, software practitioners, software market competition is increasingly fierce. At the same time, people's needs are constantly changing, which makes the traditional development method too slow and easy to be defeated in the market by Agile development method in some scenarios, so it also leads to the popularity of agile development methods. The fierce competition in the software market has resulted in a number of small software development teams, many of which are elite teams that quickly capture the software market. Their composition also makes them very suitable for agile development, which I think is one reason for the popularity of agile development.
- the development of the Internet . On the one hand, the Internet promotes the development of the market, on the other hand, the Internet also provides a lot of new software development environment. The Internet not only makes software easier to publish, disperse and pop, more people can communicate with developers, ask for their demands, but also enable developers to quickly get the development resources and development methods they want, making the software more iterative. Therefore, in the Internet wave today, the agile development approach seems to be the mainstream.
Reference documents
[1] Report on the NATO software Engineering Conference dealing with the software crisis
[2] (MEI) Pressman (Pressman, R. S.), "Software Engineering: A practitioner's approach to research"
[3] Https://en.wikipedia.org/wiki/Waterfall_model
[4] Https://en.wikipedia.org/wiki/Spiral_model
[5] Https://en.wikipedia.org/wiki/Agile_software_development
[6] Https://www.agilealliance.org
On the comparison between Agile software development and traditional software engineering and the causes of agile development