Agile Software Development VS. Traditional Software Engineering
Since the birth of the computer, the program is the soul of the computer, the program from the previous small computing function to the magical effect of today, the number of lines of code is the growth of geometric multiples. Faced with the development of software, people put forward a variety of methods to adapt to different sizes of different software development. The traditional way of software development has been found more and more problems, the concept of agile development in so many years of programming experience emerged.
Agile development was introduced in 2001, and more and more people working on software began to accept and agree with this development method, which is more communication-oriented, more convenient team structure and collaborative attitude than traditional software development methods. As the manifesto for Agile Development says, individuals and interactions are higher than processes and tools, working software is higher than detailed documentation, customer collaboration is higher than contract negotiation, and response changes are higher than compliance plans . It can be seen that agile development is more focused on the exchange of people involved in software engineering, focusing on the communication between programmers and business experts, frequent delivery of new software releases, better adapt to the changing needs of code writing and team organization, but also more attention to the role of human in software development.
Traditional software development has the continuity of the step characteristics, as you know the traditional software development will have many steps such as: requirements definition, planning, construction, testing and scheduling. Traditional software development has promoted the systematization of software development in the past decades, and for the large scale of software, traditional software development will inevitably encounter some problems which are relatively difficult to solve.
This blog hopes to be able to introduce the traditional software engineering and agile Development, through the summary of the different software development methods to understand the pros and cons.
First, the traditional software engineering:
There are many great works on the planet we live in, and as we know the Pyramids of Giza, which were built in the 2560 BC, we cannot believe that such a great project does not have any engineering management knowledge, without some planning. Modern software is the same, different from the simple dozens of lines on hundreds of lines can be achieved by small programs, the size of modern software is often tens of thousands of lines, even 100,000, millions of scale. Without a certain degree of planning, there is no scientific way of directing us to complete such a large project.
1) Cause:
The advent of large-capacity, high-speed computers in the the 1960s has led to the expansion of computer applications and the rapid growth of software development. The high-level language began to appear; the development of operating system caused the change of computer application mode, and the large data processing resulted in the birth of the first generation database management system. The scale of software system is more and more big, the complexity is more and more high, the problem of software reliability is more and more prominent. The original personal design, personal use of the way can no longer meet the requirements, the urgent need to change the software production, improve software productivity, software crisis began to erupt. Although people have already started using the Gantt Chart (1.1) to make plans, it is still not enough to meet the needs. During this time, the progress of software development is more and more difficult to predict, the cost is more and more difficult to control the actual cost is more than the expected cost of more than one order of magnitude, the quality of software products more and more difficult to guarantee ... Software engineering appears in this environment. Traditional software engineering encompasses processes, methods, and tools that make it possible to quickly build high-quality, complex computer systems. The software process consists of five framework structures : Communication, planning, modeling, building, and deployment , which apply to all software projects. Software engineering practices follow a set of core principles and are a problem-solving activity.
Figure 1.1
2) A common process model for traditional software engineering:
1. Waterfall model (waterfall approach)
Traditional waterfall models can be broadly divided into five phases: requirements (Requirements), design, implementation (implementation), test, maintenance (support). As shown in 1.2.
Figure 1.2
The core idea of the waterfall model is to simplify the problem according to the process, separate the function realization from the design, and adopt the structured analysis and design method to separate the logical realization from the physical realization, and stipulate the fixed order of their top-down and mutual cohesion, like waterfall flowing water and descending.
Waterfall model is the earliest software development model, which provides the basic framework of software development in the decades of extensive use. The advantages of the waterfall model are obvious, providing a phased checkpoint for the project, and only ensuring that the next phase is done correctly each time the task is completed, so using the waterfall model allows software developers to consider the programming tasks of the current phase in software development. But it is this advantage that gives this model a big limitation, because the waterfall model has a very strong stage, resulting in this programming approach to the complexity of the current design of the complex will be limited: 1 when the customer proposed new requirements because of irreversibility , reverse work may be done but the cost is great. 2) Using this development if there is a problem in the previous phase, there will be a cumulative phenomenon, and errors will spread, resulting in a runaway cost and quality. 3) development model is linear, users only wait until the end of stage to see the development results, increase the risk of development.
after this period of time for these aspects of the paper or the reading of the article, feel waterfall development is a very strange pattern, perhaps because of the lack of student code, and the problem of too little to see, feel at the beginning of a project can be built very well this is a great challenge to plan and design people. So in this way the development of the developers to understand exactly what the problem, how to complete a project of different requirements of the processing order, how to determine the implementation of different tasks required by a high number of engineering requirements. While there is a framework that makes it easier to accomplish a task within a given time frame, many of the ideas that are generated during the development process and the needs of users at different stages are not well implemented in this development model.
2. Evolutionary process Model
In contrast to the above waterfall development model, the evolutionary process model begins with communication, software developers communicate with customers, define the overall goal of the software, clearly known requirements, and quickly design a model after a general understanding of the target, the design of which is focused on the aspects that the user can see. It is then evaluated by stakeholders to further refine the software requirements through stakeholder feedback. The approximate architecture of this development method is shown in Figure 1.2.1.
Figure 1.2.1
pros and cons : This development approach increases interaction with stakeholders and allows for better adaptation to complex and varied needs, allowing users to make new demands on their original ideas easier to see based on a broad framework. However, the disadvantage of this development method is because the stakeholders are not necessarily aware of the development of the personnel, because it is a variety of requirements stacked out of the program, it will cause a lot of intentional bugs, too much demand will make it difficult for developers to guarantee the overall software quality, will cause software maintainability reduced. As a developer in the completion of a current goal may just want to quickly realize, not too much consideration of algorithmic problems, with the accumulation of scale may result in redundancy of the system, the software running speed is not ideal.
This kind of development method is just like the method that our students use when writing big homework, in the second semester of the sophomore class, one job is a taxi dispatching system. This topic in succession 3, 4 times, from the beginning of simple grab orders, pick up passenger demand, growth to consider the intersection of traffic lights and road two-way, overpass problems. Because every time the homework when the requirements of the next job is unknown, and the completion time of the job is very short, his focus on more is how to complete the problem. The first job in the search algorithm selection to select the relatively simple but inefficient Dijkstra algorithm, and did not optimize, which led to a few times after the processing of a lot of trouble, want to modify the previous problem but found that the scale is too large, or too lazy to make no changes. This results in a very low efficiency of the job code, which takes a long time to calculate.
Second, Agile Software development
Agile development has a lot of different methods, techniques and practices to simplify things by reducing complex plans and creating diverse environments. Agile Software Engineering is a synthesis of philosophical ideas and a series of development guidelines. This philosophical idea was introduced at the beginning of the article, which respected the early incremental release of software that satisfied customers, small and highly autonomous project teams, informal methods, minimized software engineering work products and overall streamlined development. Development guidelines emphasize the release of beyond analysis and design, as well as proactive and ongoing communication between developers and customers.
The development team in agile development is made up of software engineers and stakeholders, who are in control of their own destiny, which requires members of the team to communicate and cooperate with each other. Agile can bring many benefits, but in essence agile development is only to overcome the weaknesses of traditional software development. Agile development is not entirely independent of traditional software engineering.
As practices for Large software development projects in this book, the traditional industry has a revolution long before software engineering changes. Toyota has put forward the concept of continuous improvement, which makes Toyota Motor Company develop rapidly, the concept of which is very much like the agile development learned from textbooks. It focuses on small increments involving everyone, collectivism, teamwork, system approach, emphasis on small investments but very hard to maintain, lean towards people and strive for better results. This Kamiko describes the continuous improvement aspect: 1) every day gradually to do small things well. 2) Set and implement higher standards. 3) Treat everyone like a customer. 4) Comprehensive and progressive improvement.
It is this lean production that has driven the development of traditional industries, and agile development is similar to this traditional industrial revolution, focusing on the exchange of people, emphasizing and making progress in small areas. Common agile Development has extreme programming (XP), Scrum, dynamic system development methodologies, and feature-driven development. Since it has never come into contact with this development work, the acquisition of knowledge can only be achieved through textbooks. Taking the extreme programming process as an example, it contains rules and practices for planning, designing, coding, and testing 4 framework activities. 2.1 is shown below:
Figure 2-1
For different activities:1) Planning , planning began to listen, set up a series of user needs of the "story", each story has its own weight, the value of the customer according to the value of the mark out, the developer estimates the cost, when the cost of more than 3 development weeks, the story will be further refined, The new story can be written at any time. 2) Design , strictly follow the kis principle, even with simple expression. Design for the story provides a few and a lot of implementation principles. 3) Coding , after the story development and preliminary design is complete, the team should develop a series of unit tests to detect all the stories in this release so that developers can focus on implementing content. In the coding is to focus on pairing programming, the pair of two people to each other division of labor. 4) Testing , building unit testing before coding starts is a key factor in the XP approach, which supports timely regression testing after code modification. Once the individual unit tests are organized into a common test set, system integration and validation testing can be performed on a daily basis. XP acceptance testing focuses on customer-visible, system-level features and capabilities that can be reviewed.
The overly dogmatic content may not be appreciated in the two weeks of reading this week, but through reading and understanding, agile development focuses on the human role, emphasizing the close collaboration between the programmer team and stakeholders, face-to-head communication, and frequent delivery of new software releases. This approach is highly collaborative with people in traditional software development teams, and is suitable for products with changing requirements. The waterfall model strictly follows the sequential execution, the user may see only one document in the early stage of development, cannot see whether the product which the development team is doing. and agile development is good at timely and customer communication, is a short period of iterative development, although not attached to the document but still have the right amount of documentation, these documents at the beginning of the development in the ongoing developments will also change, to guide the development of software. More is the need for team members to communicate.
Agile development is very similar to the Toyota in the traditional manufacturing industry in my understanding, understand the priority of achieving the goal, when the product manager or the customer requests the developer can communicate with each other, can clear the development goal and each person's task. Faced with the task of demanding refinement tasks, everyone responsible for part, do little things gradually better every Day. Development when developers because the demand is more thin and easier to thoroughly understand requirements, clear logic, when there is a problem can be timely and colleagues or product requirements of people to communicate. In the development process, the responsible personnel can be assigned according to the task needs of human resources. Testing requires the development of a function to follow up on a function of the test, on the one hand to effectively solve the problem of cumulative probability, on the other hand to reduce the pressure of the final unified testing.
But agile development for the whole team's needs will be higher, the traditional software development for the planning of the requirements of the higher, in the face of the staff of the situation in advance to develop a good plan, it is not very necessary to communicate with the members, so low level of developers in the development only need to do their own things to do it, The whole goal is to complete your own code. If there is a need for agile development for such a team, Daniel and the low-level people can not chat a piece, we notice that the content is not the same, the end may not form a virtuous circle. For the team size a very large team in the implementation of agile development is more difficult than the traditional software engineering, how to coordinate the exchange between the big team costs more than the work of their own to do a lot of things.
Iii. Summary
Although the agile development in the appearance and the traditional software engineering is very different, but agile is not omnipotent, agile development can not be separated from the essence of traditional software engineering, compared to the traditional software engineering agile development like a maze of small mice, every time in the attempt, are changing, in the face of complex and changeable changes can constantly revise their direction, Step by step out of the maze. The traditional software engineering pays attention to the unification of the process, requires the stage, although the response to change is slow, the development cycle is very long, but the requirements for members than agile development, in the premise of fixed development goals to better guarantee the error rate. In the face of the increasingly volatile needs of the current agile development can better adapt, but agile development use of the overall quality of the team is relatively high, and the gap can not be too obvious. Whether it is agile development or traditional development has its pros and cons, choose the most appropriate development method for the team to better complete the task.
Iv. Reference Documents
[1]. Roger S Pressman, software Engineering-Practitioner's research Methodology (seventh edition), mechanical industry Press
[2]. Thomas Stober; Uwe Hansmann, best practices for Large software Development Projects, Springer Publishing Company, Incorporated , 2010
[3]. David Cohen, Mikael Lindvall, and Patricia Costa, Fraunhofer Center Maryland, Agile Software development (DACS State-of-the-art/practice report)
[4]. Talking about the difference between agile development and other traditional development methods Liang
[5]. Agile Development Scrum Literacy article Taven. Li Xiyuan Source: http://taven.cnblogs.com/
Agile Software Development VS. Traditional Software Engineering