Agile Software Development vs. traditional Software engineering

Source: Internet
Author: User

Agile Software Development, also known as agile development, is a kind of emerging software development method that has aroused wide attention since the 1990 's, and is a kind of software development ability to deal with the rapidly changing demand.

Compared with traditional software engineering, their specific names, concepts, processes, terminology are not the same, compared to "non-agile", more emphasis on the programmer team and business experts close collaboration, face communication (think more effective than written documents), frequent delivery of new software releases, compact and self-organizing team, To adapt to the needs of the change of code writing and team organization method, but also pay more attention to the role of "human" in software development.

This article will introduce the historical background and development of agile Software development, discuss the characteristics of agile engineering design relative to traditional software engineering, and explain some of my personal understanding and thinking in the process of learning.

The 1960s, the computer hardware technology has a great development, for the wide application of computers to create conditions, and require software to adapt. At that time, the software production was individualized, workshop-style characteristics, backward development tools, a single development platform, programming language function is poor. Especially the software maintenance work, consumes a lot of human, material and computer resources, many of the individual characteristics of the program so that they can not be modified and maintained. Some simply discard the original system without, write new software from scratch.

At the same time, in the 70 's, the scale of software became larger and more complex, the software management and maintenance was difficult, and the development cost was increasing. This software development technology, development tools and production mode of backwardness and the rapid popularization of computer applications and the increasing demand for software has formed a sharp contradiction, resulting in a "software crisis."

The emergence of software crisis makes the computer software experts realize that software development must be guided by new methods, the original software development methods must be changed, they decided to introduce the idea of engineering technology into the field of software development, so that software development takes the path of engineering discipline to get rid of the increasingly serious software crisis. As a result, some scientists from the United States and Western Europe first proposed the term "software engineering" at the NATO conference in 1968, a discipline that uses engineering methods to develop and maintain computer software. Since then, software engineering has been formally born, and people have started the research of engineering.

In the 80 's, the software engineering introduced the mature manufacturing management method, and controlled the software development (waterfall model) by the "process-centric" stage, to some extent, alleviated the soft-ware crisis. To the 90 's, the experience of software failure has led to the process of increasing constraints and constraints, the software development process is increasingly "heavy", the development efficiency is reduced, the response speed is slow.

Since the 2000 's, as the information age has come, demand has changed more rapidly, software delivery cycles have become a core competency of the enterprise, so lightweight, more adaptable agile software development methodologies are generally recognized and rapidly popular. In early 2001, as many of the company's software teams were mired in a growing process, a group of industry experts gathered together to summarize some of the values and principles that enable software development teams to work quickly, respond to change, and call themselves agile alliances.

My understanding of the Agile Alliance Manifesto is broadly:

1) individuals and interactions outweigh processes and tools.

"Interactions between people are complex and their effects are never predictable, but they are the most important aspects of work." "People are the most important factor for success. A good team does not necessarily consist of a group of top-notch programmers, and it is more important to be able to work well with others, to communicate smoothly, and to interact effectively than simply programming. Even if a group of high-level programmers, without good communication, may not be able to form an efficient team, after all, people are not "plug-in is a compatible programming device." The smooth development of the project requires a collaborative, self-organizing and cohesive team to ensure that the right tools are important, but the role of the tools should not be exaggerated, and we should be aware that extremes meet, too much or too large and complex tools and lack of tools are not appropriate. In short, team building is much more important than the construction of the environment, should first of all to build the right team, and then based on the need to configure the appropriate environment.

2) software that works better than all-encompassing documentation.

Software without documentation is a disaster, which means that blind action without strict planning and clarity of purpose is obviously very inefficient, however, too much documentation does not imply efficiency, instead it takes a lot of time and effort to compile and update. Therefore, it is advisable to write and maintain an appropriate document, which should be short, with a clear theme and strong in logic. Near-distance training and interaction is the most effective way to communicate with team members. Efforts should be made to avoid the need to focus on documentation, not software, to cause progress delays. The first law of the Martin document tells us that documentation is not prepared until it is urgently needed and significant.

3) Customer cooperation is better than contract negotiation.

Tradition: You want to know exactly what you want?

Agile: Let's see what else you have to change.

Just kidding, but, indeed, we can't order a software like other supplies, in my knowledge, the softer will be more like a "work" than a "product" in a strict sense, so like most artistic creations, It is hard to get the customer's needs to be engraved at a fixed cost for a fixed period of time, even though this simple trading model is very tempting, but a contract that specifies requirements, progress, and project costs is fundamentally flawed and, if only dependent on it, can lead to a failure of the project. Therefore, "agile" believes that successful projects require orderly and frequent customer feedback, not just cold contracts and rigid job reporting meetings. The software development team client builds close contacts on the job, communicating and feedback as often as possible. The preparation of the contract should also guide the development of the project, rather than constraining and stipulating the progress and cost details in an attempt to bring the development work under full control.

4) Responding to changes is better than following the plan.

In a rapidly changing modern information society, the ability to respond to change often determines the success or failure of a software project. The construction of the plan should therefore be flexible enough to accommodate changes in business and technology.

The plan cannot be considered too far, as the business environment and changes in customer demand are often unpredictable. Even if the requirement is determined, it does not mean that the development time is determined accordingly. Therefore, a better strategy is to start with a short-term detailed plan, and a slightly longer rough plan. For flexibility in making changes. This gradual reduction in the degree of detail in the plan means that we spend time on detailed planning only for the urgent task, which guarantees an orderly, efficient and long-term flexibility for the work in the short term.

In addition, Agile software development and development has put forward 12 more detailed principles, the purpose and the declaration of the same, but also reflects the difference between the traditional software engineering.

1. The top priority is to satisfy customers by delivering valuable software early and consistently.

2, even to the late development, but also welcome to change the demand. Agile processes leverage change to create competitive advantage for customers.

3, the regular delivery of working software, the time interval can be a few months. The shorter the delivery time, the better.

4, throughout the development of the project, business personnel and developers must work together every day.

5, constantly motivate developers, to carry out the relevant work of the project. Provide them with the necessary environment and support, and trust them to complete the work they have undertaken.

6, within the team, the most effective, most efficient way to convey information is face-to-head conversation.

7, the primary measure of progress is the work of the software.

8. The Agile process advocates sustainable development speed. Responsible people, developers and users should be able to maintain a long-term, constant development speed.

9, continue to focus on excellent skills and design, enhance the agility ability.

10, simple is fundamental.

11, the best architecture, requirements and design, from their own organization of the team.

12. Every once in a while, the team will reflect on how to work effectively, and then make appropriate adjustments to their behavior.

We know that traditional software development uses waterfall-based development processes, including collection requirements, definition, design, coding, testing, publishing, and so on. The completion of the previous phase is the prerequisite for the beginning of the latter phase, each stage has its clear objectives and audit standards, the whole process is strictly orderly, the predictability is gradually enhanced, such a benefit is to avoid the invalid resource input, stepping up, to ensure the development of quality.

But the traditional development pattern also has the obvious flaw, this cascade process has the strong dependence between each stage, causes the problem to produce may cause the chain consequence. If the previous phase did not meet the criteria, it would also result in a subsequent phase of stagnation. For example, it seems to be my compilation teacher, a project has five parts, if each part to achieve 90 points, then the final project can only get 59 points, is a substandard project. Therefore, the flexibility of this model is poor, it is difficult to cope with the late demand changes, the cost of adjustment is high.

Therefore, in the context of the emergence of the concept of agile development, the increase in flexibility is its greatest advantage. The rapid change in market demand results in the completeness of the collection of finished products is difficult to guarantee, it can be said in the waterfall development in the first few stages we even 90 points are difficult to do, so the failure rate of traditional software engineering is self-evident.

I am very much in recognition of the notion that agile development is a core mindset shift from "fix Scope,flex time" to "fix Time,flex scope". In the context of market changes and technological changes, since the market demand and product definition "scope" can not be cured, so the resource needs are not determined, it may be possible to switch the center of gravity, rotate our coordinate system, fixed resources, to achieve the maximum "scope" to achieve. Shift from "plan driven" to "value driven". and agile development More emphasis on the value of "people" effect, Kant said, "Human is the purpose", from this point of view, the purpose of agile software development is like a software engineering history of the "Renaissance" movement.

Finally express some of my personal immature ideas, the emergence of agile software development is fundamentally from the reality of the business environment, high human costs, the commercial market "fast fish eat Slow fish" competition mode and so on. Agile development This model takes "agile" word name, but "agile" not only means "M.F.B. s", speed is only part of agile, as I mentioned earlier, software development is more like an art, should be as efficient as possible within a reasonable range, but impetuous and quick success is not beneficial, really to "people" For the driving force should not mean that developers are exhausted, the development of the limits of physical potential, how to coordinate the interests of the relationship, presumably still a heavy task.

Agile Software Development vs. traditional Software engineering

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.