CSC/ECE 517 Fall 2009/wiki3 7 Agile: Difference between revisions
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
'''How can Agile complement other development methodologies''' | '''How can [http://en.wikipedia.org/wiki/Agile_software_development Agile] complement other development methodologies''' | ||
Similar to the design pattern which give structure and name to commonly occuring problem, Software development methodology or system development methodology provides a framework which can be used to structure, plan, and control the process of developing an information system. | Similar to the [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) design pattern] which give structure and name to commonly occuring problem, [http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] or system development methodology provides a framework which can be used to structure, plan, and control the process of developing an information system. | ||
Line 9: | Line 9: | ||
===Introduction=== | ===Introduction=== | ||
Software | [http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] (SDM) or Software Development Life Cycle (SDLC) is documented collection of policies, processes and procedures used to conduct a Software Engineering project. Software Engineering project involves various stages viz. analysis, [http://en.wikipedia.org/wiki/Software_design design], development, [http://en.wikipedia.org/wiki/Software_testing testing], documentation, [http://en.wikipedia.org/wiki/Computer_programming implementation] and evaluation. | ||
The art of Software Development requires a clear understanding of the project or business goals by both the customer commissioning the project and the technical team. It is the software | The art of [http://en.wikipedia.org/wiki/Software_development_process Software Development] requires a clear understanding of the project or business goals by both the customer commissioning the project and the technical team. It is then, the software developers role to communicate with the project sponsor and translate a business concept into a working software system in a timely and effective manner. | ||
The use of systematic processes for the development of software reduces the risk that is inherent in any software project. These processes must be put in place in a careful manner to allow technical team members to solve problems in a creative and skillful manner. | The use of systematic processes for the development of software reduces the risk that is inherent in any software project. These processes must be put in place in a careful manner to allow technical team members to solve problems in a creative and skillful manner. | ||
Software | [http://en.wikipedia.org/wiki/Software_development_methodology Software development methodologies] involve following four key steps | ||
1. Requirements | 1. Requirements | ||
Line 22: | Line 22: | ||
2. Design | 2. Design | ||
In this phase a solution is mapped out with 'pen and paper'. The solution describes how the final software will operate and includes other practical components including the technologies to be used, hardware requirements, impact on other information systems | In this phase a solution is mapped out with 'pen and paper'. The solution describes how the final software will operate and includes other practical components including the technologies to be used, hardware requirements, impact on other information systems,time and resources required to implement the software. | ||
3. Implementation | 3. Implementation | ||
This is the | This is the phase where the agreed project plans are coded into a practical working system. | ||
4. Testing | 4. Testing | ||
Testing is performed on discrete units of the computer system as well as the solution as a whole. A | Testing is performed on discrete units of the computer system as well as the solution as a whole. A traceability matrix can be used to ensure that each functional objective set in the requirements phase has been solved. | ||
A wide variety of Software | A wide variety of [http://en.wikipedia.org/wiki/Software_development_methodology Software development methodologies] have evolved over the years.Each have its own recognized strengths and weakness. Each system development methodology is not necessarily suitable for use by all projects. Each of the available methodologies is best suited to specific kinds of projects, based on various technical, organizational, project and team considerations. | ||
Few of | Few of [http://en.wikipedia.org/wiki/Software_development_methodology Software development methodologies] are listed below. | ||
#Agile software development. | #[http://en.wikipedia.org/wiki/Agile_software_development Agile software development]. | ||
#Waterfall model. | #[http://en.wikipedia.org/wiki/Waterfall_model Waterfall model]. | ||
#Spiral model. | #[http://en.wikipedia.org/wiki/Spiral_model Spiral model]. | ||
#Test-driven development (TDD). | #[http://en.wikipedia.org/wiki/Test-driven_development Test-driven development (TDD)]. | ||
#Design-driven development (D3). | #[http://en.wikipedia.org/wiki/Design-driven_development Design-driven development (D3)]. | ||
Line 45: | Line 45: | ||
====General Problems faced during software development==== | ====General Problems faced during software development==== | ||
Software development process goes through the phases of | [http://en.wikipedia.org/wiki/Software_development_process Software development process] goes through the phases of requirements, design, development, testing and maintenance one after the other. It relies on the dream that once a step is 100% complete, it is also 100% right and it drives us to the delivery of a working software even the one the customer wants. But it doesn’t go that way in the software industry: customers don’t know what they need and use to ask many useless features, project leaders don’t succeed to write down the perfect requirements, analysts spend ages building up software architectures writing down pages of diagrams – software is definitely one of the most complex artifact humans can build up – and developers are human too, so they make mistakes too. It is often very hard to create exactly what the customer wants in software development. With large software companies, the real ‘requirements’ can get mangled on so many levels. The below picture depicts it all: | ||
[[Image:software_lyfCycle.png|650px|thumb|center| Software development cycle.]] | [[Image:software_lyfCycle.png|650px|thumb|center| Software development cycle.]] | ||
====Solution : Agile Methodology==== | ====Solution : [http://en.wikipedia.org/wiki/Agile_software_development Agile Methodology]==== | ||
“[http://en.wikipedia.org/wiki/Agile_software_development Agile]” methodologies are a new way of developing the modular object-oriented software used for enterprise SOA (Service Oriented Architecture ). [http://en.wikipedia.org/wiki/Agile_software_development Agile] programming breaks a project down into many mini-projects, instead of one huge "Big Bang". | |||
The difference between Agile development and rest of methodologies can be related to the difference between a modern missile and a medieval cannonball. With the right information and calculations, the target of a cannonball could be accurately plotted. But once fired, there was no way of altering its trajectory. If the calculations were wrong, or if the target moved, it would miss. By contrast the modern missile can follow a given target with a series of incremental changes to its direction. It can even be given alternative targets when in flight, if the original is no longer appropriate. | The difference between [http://en.wikipedia.org/wiki/Agile_software_development Agile] development and rest of methodologies can be related to the difference between a modern missile and a medieval cannonball. With the right information and calculations, the target of a cannonball could be accurately plotted. But once fired, there was no way of altering its trajectory. If the calculations were wrong, or if the target moved, it would miss. By contrast the modern missile can follow a given target with a series of incremental changes to its direction. It can even be given alternative targets when in flight, if the original is no longer appropriate. | ||
Line 59: | Line 59: | ||
[[Image:agile_vs_waterfall.jpg|650px|thumb|center| agile_vs_waterfall.]] | [[Image:agile_vs_waterfall.jpg|650px|thumb|center| agile_vs_waterfall.]] | ||
Agile development focuses on user adoption and experience. Wikipedia describes Agile software development as "a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. " Agile encourages developers and end users to work closely with one another to ensure that unique user needs are met and that business activities are optimized. This is accomplished by developing in short development bursts (1 - 2 week periods) and gaining feedback on the usefulness of the software application. The feedback should come from the users that will actually be using the system. The thinking behind this approach is that users are subject matter experts and are more likely to adopt the change because they took an active role in designing and testing the new changes to the | [http://en.wikipedia.org/wiki/Agile_software_development Agile development] focuses on user adoption and experience. Wikipedia describes Agile software development as "a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. " [http://en.wikipedia.org/wiki/Agile_software_development Agile] encourages developers and end users to work closely with one another to ensure that unique user needs are met and that business activities are optimized. This is accomplished by developing in short development bursts (1 - 2 week periods) and gaining feedback on the usefulness of the software application. The feedback should come from the users that will actually be using the system. The thinking behind this approach is that users are subject matter experts and are more likely to adopt the change because they took an active role in designing and testing the new changes to the work flow through the iterative software development process. | ||
Some of the well-known agile software development methods: | Some of the well-known [http://en.wikipedia.org/wiki/Agile_software_development agile] [http://en.wikipedia.org/wiki/Software_development_process software development] methods: | ||
#Agile Modeling | #[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modeling] | ||
#Agile Unified Process (AUP) | #[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process] (AUP) | ||
#Agile Data Method | #[http://en.wikipedia.org/wiki/Agile_Data_Method Agile Data Method] | ||
#Extreme programming (XP) | #[http://en.wikipedia.org/wiki/Extreme_programming Extreme programming] (XP) | ||
#Scrum | #[http://en.wikipedia.org/wiki/Scrum_(development) Scrum] | ||
And some of the Agile practices | And some of the Agile practices | ||
#Test Driven Development (TDD) | #[http://en.wikipedia.org/wiki/Test_Driven_Development Test Driven Development] (TDD) | ||
#Behavior Driven Development (BDD) | #[http://en.wikipedia.org/wiki/Behavior_Driven_Development Behavior Driven Development] (BDD) | ||
#Continuous Integration | #[http://en.wikipedia.org/wiki/Continuous_Integration Continuous Integration] | ||
#Pair Programming | #[http://en.wikipedia.org/wiki/Pair_Programming Pair Programming] | ||
---- | ---- | ||
===The Agile Advantage=== | ===The [http://en.wikipedia.org/wiki/Agile_software_development Agile] Advantage=== | ||
An agile methodology addresses risks earlier in the project, rather than later. It effectively manages user requirements and provides early value through executable software, instead of postponing the delivery of a working system until the final implementation. An agile methodology flushes out and accommodates change early in the project life cycle and supplies an early architectural baseline. It also supports component-based systems development, facilitates team collaboration, and, most importantly, ensures quality. Following are some of the advantages of agile: | An [http://en.wikipedia.org/wiki/Agile_software_development agile] methodology addresses risks earlier in the project, rather than later. It effectively manages user requirements and provides early value through executable software, instead of postponing the delivery of a working system until the final implementation. An [http://en.wikipedia.org/wiki/Agile_software_development agile] methodology flushes out and accommodates change early in the project life cycle and supplies an early architectural baseline. It also supports component-based systems development, facilitates team collaboration, and, most importantly, ensures quality. Following are some of the advantages of agile: | ||
1. Address risks : | 1. Address risks : | ||
Line 94: | Line 94: | ||
5. Ensure quality early. | 5. Ensure quality early. | ||
---- | |||
===Conclusion=== | |||
[http://en.wikipedia.org/wiki/Agile_software_development Agile] has been successful in delivering quality product with lesser time.The most important gain of this methodology is that it almost removes the last minute surprises. Therefore the risk involved is very less. Below is the risk comparision between agile and [http://en.wikipedia.org/wiki/Waterfall_model waterfall model]. | |||
[[Image:agileVsWaterfallRisk.gif|650px|thumb|center| agile Vs Waterfall Risk.]] | |||
Line 101: | Line 108: | ||
---- | ---- | ||
===References=== | |||
[1] http://en.wikipedia.org/wiki/Agile_software_development | |||
[2] http://en.wikipedia.org/wiki/List_of_software_development_philosophies | |||
[3] http://en.wikipedia.org/wiki/Waterfall_model | |||
[4] http://www.stsc.hill.af.mil/crosstalk/1995/01/comparis.asp | |||
---- | [5] http://eggsonbread.com/2009/07/10/agile-development-in-a-nutshell/ | ||
[6] [http://3.bp.blogspot.com/_s0xJIGrbtjQ/SWNwAADda9I/AAAAAAAAAA8/oqJyRlzMVmU/s1600-h/agile+vs+waterfall.JPG agile waterfall] | |||
[7] http://sapnetweavermagazine.com/archive/Volume_04_%282008%29/Issue_01_%28Winter%29/v4i1a06.cfm?session= | |||
[ | |||
---- | ---- |
Latest revision as of 00:09, 19 November 2009
How can Agile complement other development methodologies
Similar to the design pattern which give structure and name to commonly occuring problem, Software development methodology or system development methodology provides a framework which can be used to structure, plan, and control the process of developing an information system.
Development methodologies
Introduction
Software development methodology (SDM) or Software Development Life Cycle (SDLC) is documented collection of policies, processes and procedures used to conduct a Software Engineering project. Software Engineering project involves various stages viz. analysis, design, development, testing, documentation, implementation and evaluation.
The art of Software Development requires a clear understanding of the project or business goals by both the customer commissioning the project and the technical team. It is then, the software developers role to communicate with the project sponsor and translate a business concept into a working software system in a timely and effective manner.
The use of systematic processes for the development of software reduces the risk that is inherent in any software project. These processes must be put in place in a careful manner to allow technical team members to solve problems in a creative and skillful manner.
Software development methodologies involve following four key steps
1. Requirements This is the phase where the Business Analyst or Project Manager works with the Customer to understand the project goals and translate this into a desired set of functional objectives.
2. Design In this phase a solution is mapped out with 'pen and paper'. The solution describes how the final software will operate and includes other practical components including the technologies to be used, hardware requirements, impact on other information systems,time and resources required to implement the software.
3. Implementation This is the phase where the agreed project plans are coded into a practical working system.
4. Testing Testing is performed on discrete units of the computer system as well as the solution as a whole. A traceability matrix can be used to ensure that each functional objective set in the requirements phase has been solved.
A wide variety of Software development methodologies have evolved over the years.Each have its own recognized strengths and weakness. Each system development methodology is not necessarily suitable for use by all projects. Each of the available methodologies is best suited to specific kinds of projects, based on various technical, organizational, project and team considerations.
Few of Software development methodologies are listed below.
- Agile software development.
- Waterfall model.
- Spiral model.
- Test-driven development (TDD).
- Design-driven development (D3).
General Problems faced during software development
Software development process goes through the phases of requirements, design, development, testing and maintenance one after the other. It relies on the dream that once a step is 100% complete, it is also 100% right and it drives us to the delivery of a working software even the one the customer wants. But it doesn’t go that way in the software industry: customers don’t know what they need and use to ask many useless features, project leaders don’t succeed to write down the perfect requirements, analysts spend ages building up software architectures writing down pages of diagrams – software is definitely one of the most complex artifact humans can build up – and developers are human too, so they make mistakes too. It is often very hard to create exactly what the customer wants in software development. With large software companies, the real ‘requirements’ can get mangled on so many levels. The below picture depicts it all:
Solution : Agile Methodology
“Agile” methodologies are a new way of developing the modular object-oriented software used for enterprise SOA (Service Oriented Architecture ). Agile programming breaks a project down into many mini-projects, instead of one huge "Big Bang".
The difference between Agile development and rest of methodologies can be related to the difference between a modern missile and a medieval cannonball. With the right information and calculations, the target of a cannonball could be accurately plotted. But once fired, there was no way of altering its trajectory. If the calculations were wrong, or if the target moved, it would miss. By contrast the modern missile can follow a given target with a series of incremental changes to its direction. It can even be given alternative targets when in flight, if the original is no longer appropriate.
Agile development focuses on user adoption and experience. Wikipedia describes Agile software development as "a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. " Agile encourages developers and end users to work closely with one another to ensure that unique user needs are met and that business activities are optimized. This is accomplished by developing in short development bursts (1 - 2 week periods) and gaining feedback on the usefulness of the software application. The feedback should come from the users that will actually be using the system. The thinking behind this approach is that users are subject matter experts and are more likely to adopt the change because they took an active role in designing and testing the new changes to the work flow through the iterative software development process.
Some of the well-known agile software development methods:
And some of the Agile practices
- Test Driven Development (TDD)
- Behavior Driven Development (BDD)
- Continuous Integration
- Pair Programming
The Agile Advantage
An agile methodology addresses risks earlier in the project, rather than later. It effectively manages user requirements and provides early value through executable software, instead of postponing the delivery of a working system until the final implementation. An agile methodology flushes out and accommodates change early in the project life cycle and supplies an early architectural baseline. It also supports component-based systems development, facilitates team collaboration, and, most importantly, ensures quality. Following are some of the advantages of agile:
1. Address risks : Its emphasis on architecture helps to deliver a fully functional working architecture early in the project, mitigating the technology risks.
2. Deliver early value: An iterative approach enables a team to deliver functional solutions as soon as possible. Working prototypes demonstrate core functionality at the beginning of the project. An architectural baseline ensures that the technologies put into place will meet the fundamental requirements
3. Accommodate change early: Project change isn’t bad; it’s the timing and magnitude of the change that causes problems. Agile methodologies manage and promote the discovery of necessary changes early in a project.
4. Facilitate team collaboration.
5. Ensure quality early.
Conclusion
Agile has been successful in delivering quality product with lesser time.The most important gain of this methodology is that it almost removes the last minute surprises. Therefore the risk involved is very less. Below is the risk comparision between agile and waterfall model.
References
[1] http://en.wikipedia.org/wiki/Agile_software_development
[2] http://en.wikipedia.org/wiki/List_of_software_development_philosophies
[3] http://en.wikipedia.org/wiki/Waterfall_model
[4] http://www.stsc.hill.af.mil/crosstalk/1995/01/comparis.asp
[5] http://eggsonbread.com/2009/07/10/agile-development-in-a-nutshell/
[6] agile waterfall