The origins of Agile development
In the late 90, the traditional way of software development because of its complicated process, as well as the strict requirements of the document, resulting in a large degree of efficiency decline, which is what people call "heavy crisis." For this reason, people begin to reflect on the pros and cons of traditional methods, and improve their drawbacks, and propose an agile approach.
The Agile Alliance was established in February 2001 by the Agile Manifesto, which was drafted by 17 software development experts such as Martin Fowler,jim Highsmith. Agile development was formally born as a new method. The values expressed in the Agile manifesto are divided into four areas:
(1) The software for individuals and interactions above the process and tools (2) is more than exhaustive documentation
(3) Customer cooperation is higher than contract negotiation
(4) Response change is higher than following plan
The Agile Manifesto also includes 12 principles. These 12 principles are the embodiment of the above four main values in the actual work.
In general, agile Development as a new software engineering method, compared with the traditional methods more attention to human factors. Instead of developing a developer's code development machine as a materialized, time-devoted amount of code, it focuses on interaction between developers and users, as well as increased communication and collaboration to make projects more flexible and easy to modify.
Key features of Agile development
Compared with the traditional development method, in the whole process of agile development, there are several main features:
(1) The process of agile development is more adaptable than presupposition, as the fourth response to the Agile manifesto is higher than the default plan. Because of the unpredictability of the software development process, many users may not have a complete and definite expectation of the project at the beginning of the project. Many of the software is expected to be in the late revision and improve the process of production. Therefore, high adaptability is obviously more in line with the actual development of software engineering. and agile development to achieve its adaptability mainly lies in, first, shorten the project to the user's cycle; second, increase the number of users, business personnel, developers of the communication between the three, third, by reducing the cost of refactoring to increase software adaptability.
(2) in the process of agile development, more attention to human factors. In traditional software engineering, the individual factor is rarely considered in the division of labor, each individual is just a small screw of the entire code development machine, the personal will and creativity is largely erased in order to better serve the collective. In the agile development process, each individual's potential is fully considered, the application of what technology to a large extent directly from the front-line development of the technical staff to determine, each person's characteristics and creativity can be fully played, so that the development of software more vitality, because he integrated into the developer's efforts and creativity, Developers are no longer a tedious pile of machinery, but create their own works of art, so that the code generated under the conditions of the quality of the more dominant.
(3) In the Agile development process, the entire project is test-driven rather than document-driven. Not only does each module have its own corresponding test unit, but developers must ensure that the modules they develop can be tested through this unit in the process of developing their own modules, and that integration testing runs through the development process at all times. Integration testing occurs more than 10 or even dozens of times a day, rather than as a traditional method, when the code for each module ends and then the joint debugging is done. In this way, the problems caused by every change in the software development process can easily be exposed, making it easier to find problems and solve problems when errors are just being generated. This avoids the difficulty of hiding too deep for debugging when the system is finally complete.
An example of an Agile process model: Extreme Programming
As a development process model, agile processes produce many different programming methods that can be applied to the real world. This paper introduces a wide range of application development methods, extreme programming, to reflect some of the characteristics of the agile development process.
The extreme programming process consists of four stages: planning, design, coding and testing.
(1) Planning stage
First in the planning stage, the user and the development of this exchange, the developer summed up a series of "User Stories", describing a part of the software function. After the customer prioritizes these features, the XP team evaluates the cost of each story. Then the customer and the XP team together decide which features will be added in the next version of the development. In the iteration of the version of the process, there will be many times the planning process, each time the customer can be based on the existing features to decide whether to add some features, and what to add new features.
(2) Design phase
In the design phase, the developer will propose the implementation of these user stories according to the user stories. The design process mainly follows the principle of brevity, which is to use the description rather than the complex formulation. The other aspect of the design is refactoring, which is a process of optimizing the software system's function by changing the internal structure of the software module without changing the external function of the code. This is the design of an improved code.
In the design of these two levels, we can see in the XP development process, design and development are synchronous. We are constantly in the process of starting to design, but also to the optimization is the redesign. This greatly enhances the adaptability of the entire software development, rather than always rigid implementation of the first version of the initial design.
(3) Coding phase
The first task of XP development was not to encode the initial design and user stories directly, but to develop unit tests for those designs. The completion of unit testing also identifies all the features that developers will need to implement. This allows developers to simply go through unit testing without wasting unnecessary time and effort on what they are implementing. This is a reflection of the agile development of the test-driven characteristics.
In agile development, one of the most important ways to improve efficiency is pairing programming. During pairing programming, two developers share a computer, and each has a division of work. One person carries out the actual coding implementation, and the other side considers how the code should be implemented on a macro level, such as what algorithm should be used for what function. In this way, when the coder is experiencing a problem, two people swap positions. It is more likely that the person who is thinking beside you can solve the problem. In fact, the form of pair programming does not have to be rigidly tied to any rules. The key is that two people in the process of co-development, two people communication can make most of the problems can be solved in the first time. And because there's only one person in the two who is doing the programming, the other person is more relaxed, so that the development efficiency is maintained in a relatively high state.
(4) Test phase
After each module has passed its own unit test, the developer integrates all the modules together for testing. This will allow you to find out the problems with each module in the last change and avoid some compatibility issues at the same time. It's much easier to change a little bit at a time than to wait until the last time you set up all the problems.
Agile development Ecosystem
Agile development models have many manifestations in practice. One of the most widely used applications in extreme process development (XP). There are many others, such as adaptive software development, Scrum, dynamic system development, Crystal, feature driven development, lean software development, agile modeling, and agile integration processes. Here are just two examples to illustrate its main features.
The development of adaptive software mainly emphasizes that the software project team has the dynamic of self-organization, collaboration between people, individual and team, which makes the team more likely to succeed.
Scrum development methodology, the most important feature of this development method is the daily meeting. At the daily meeting, everyone communicates what they did yesterday, what they are going to do today, and what problems they have encountered at work. This greatly strengthens the communication between the team members.
We can see that many people are involved in the research and use of agile development. Agile development does have a very powerful vitality.
The comparative advantage of Agile Development and traditional development method
Agile development of high adaptability, people-oriented features, and a lightweight approach to the development of testing as a driver instead of a document-driven, the three main features, that is, agile development relative to the traditional development of the main kind of way. Because he is more flexible and takes advantage of each developer's advantages, he has mobilized everyone's enthusiasm for work.
Disadvantage
The main disadvantage of agile development, compared to traditional development approaches, is that agile development welcomes new requirements, which can cause significant changes in the overall system every time a new demand arises. Because developers are developing a previous version, they are completely out of consideration of how the next optimizations will proceed. This way of developing the actual software development process is not always effective.
On the other hand, agile development lacks many documents that are considered "unimportant" in agile development, so that when a large project such as an operating system is developed, it is difficult to ensure that the developer does not replace it because of its long project cycle, and that no documentation can cause great difficulties in the handover process.
Reference documents
[1] Wang Min of software process management based on Scrum agile development
[2] Agile development in the process of software development application Research Peng Zhinan
[3] Agile Software development technology research Zhou
[4] Agile Software Development application Research Van Hongtao
[5]http://agilemanifesto.org/iso/zhchs/manifesto.html Agile Software Development Manifesto
[6]http://agilemanifesto.org/iso/zhchs/manifesto.html CSDN Advantages and disadvantages of agile development
[7]http://www.vaikan.com/agile-programming-10-years-on-did-it-deliver/Foreign periodicals It reviews agile decade, results geometry?
[8]http://www.infoq.com/cn/news/2010/02/scrum-failings Bob's seven flaws on scrum and agility
The comparison between agile development and traditional development mode