5 Agile Software Development Part 1
R. Baskaran
SOFTWARE ENGINEERING
AGILE SOFTWARE DEVELOPMENT
Agile software development is a software methodology which comprises of methods and practices based on the values and principles, where solutions are developed by the collaboration between self-organizing teams and cross functional teams by employing appropriate methods and practices for software development.
LEARNING OBJECTIVES
- To ensure the delivery of high quality systems.
- To provide strong management controls.
- To maximize productivity.
AGILE SOFTWARE DEVELOPMENT
Agile software development is a software methodology which comprises of methods and practices based on the values and principles, where solutions are developed by the collaboration and joint efforts of self-organizing teams and cross functional teams by employing appropriate methods and practices for software development. Agile software development offers a framework that employs continuous planning and feedback for software development. Agile software development unlike traditional approaches, it is dynamic in nature as it employs appropriate methodologies through continuous planning and feedback.
In agile software development, a brainstorming session is conducted by engaging the developers, customers and stakeholders for requirement analysis. The requirements are elicited through the brainstorming session and a design is established. A prototype is developed using the design and the process is documented. In the development phase, the design is implemented and demo of the product is released for feedback using which the product is improvised. Once the product is developed, it is tested to identify errors and the shortcomings in the products are resolved to achieve the quality standards. When the product is tested and achieves the quality standards, the product is deployed and delivered to the client. The product is maintained and if it encounters any shortcomings, it undergoes the development phases iteratively for improvising the product.
AGILITY
Agility is the ability to create and respond to change. It maintains a balance between flexibility and structure. John Wooden puts agility as “Be quick, but don’t hurry”. In many traditional practices, the customers are not majorly involved in the development cycle which leads to misconceptions in the product development. When agility is incorporated into the practices, it allows dynamic changes, flexibility and provides an ability to respond to changes.
AGILE PRACTICES
Every project is unique. So the trick is to customize an existing agile method to your project. Every project requires its own practices for effective development of the product. Some of the agile practices that involves thinking includes pair programming, energized work, informative workspace, Root cause analysis, retrospectives.
Pair Programming
Pair programming comprises of two programmer who share a single workstation where one is called the driver and the other is called the navigator or observer. They switch roles among themselves recurrently. The driver is the programmer who codes and is focused on the semantics, syntax and coding practices while the observer focuses on reviewing the code for effective implementation, the time elapsed, the overall workflow and strategies for improvising the product effectively. Pair programming eliminates the need for code reviews and allows better quality in code, knowledge sharing, team building and increase in productivity.
Energized Work
The entire team should feel energized as productive work can be achieved only when the team is energized and motivated. The key rule to feel energized is to go home on time. The individuals must take care of themselves and must maintain a good work and personal life balance. They should take care of their physical and mental health. The individual must not dread going to work. The programmer should take a break if they are making more errors than advancement. Energized work doesn’t mean taking long breaks and excuses from work, but providing fair amount of work into the project development.
Informative Workspace
Informative workspace projects big visual charts that project the ideas, notions and goals of the project. The charts and boards should provide information about the project, the progress, important dates and backlogs. The informative workspace is created using storyboards, index cards, concept map, flowcharts, visual charts and whiteboards. The workspace must be constantly updated to provide up to date information about the project and its progress.
Root Cause Analysis
Root cause analysis focuses on finding the shortcomings in the process and not the people. Root cause analysis focuses on fixing the problem at the root level rather than blaming the people. Here, the team members are gathered to determine the cause of the problem and they try to establish a solution to overcome the short comings rather than placing blame on the people.
Retrospective
Retrospective is a gathering of the team members that is conducted at the completion of every development iteration to discuss the ways and methods to improve the product. The team reflects on ways for effective continuous development of the product. The second aspect of agile practices involves collaboration which encompasses trust, members sitting together to discuss the ways to improve the product, team work, real customer involvement, ubiquitous language, stand up meeting, coding standards, sprint demo, reporting etc.
The third aspect of agile practices involve releasing which means the development of the project is done and there exists no bugs in the product, where the product is ready for release. It focuses on version control, continuous integration, collective code ownership and documentation.
The fourth aspect of agile practices involves an effective planning. An effective planning is done by having a clear vision of the goals that are to be achieved. The plan is then released so that it undergoes several iteration to produce an effective plan that satisfies the customer. Estimation of the plan in terms of costs, resources and time are done to have clear view of the plan and schedule.
The fifth aspect of agile practice include developing the product. The customers are given the most importance in agile practices, as customer tests are carried in the development phase. Test driven development is employed which relies on very short development cycle called sprints (iterations). Test driven development focuses on writing automated test cases which is designed to make the desired improvement or incorporate new function and then the developer produces minimum amount of code to pass the test case, which is then refactored to achieve acceptable standards. It focuses on simple design so that it is easily understood by the team members and the customers.
AGILE MANIFESTO
The agile manifesto depicts how the traditional approaches are transformed in agile practices. Agile practices focuses on the individuals and interactions over processes and tool, working software over comprehensive documentation, customer collaboration over contract negotiation and responding to change over following a plan.
12 Principles of agile manifesto
The 12 principles of agile manifesto include the following:
- The highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face to face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity is the art of maximizing the amount of work not done is essential.
- The best architecture, requirements and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts the behavior accordingly.
EXTREME PROGRAMMING
One of the well know agile methods is extreme programming (XP). It was developed in 1990s. Extreme programming revolve around 4 different practices which include pair programming, test driven development, refactoring and simple design. The next phase includes collective ownership, coding standard, sustainable pace, metaphor and continuous integration. On the upper hand, it includes whole team, game planning, small releases and customer tests.
The figure shows concentric circle, where each circle focuses on different aspects of software development.
Extreme Programming Practice
Extreme programming practices include the following:
- On site customer: Customer is actively involved with development Customer gives “User Stories” which are short and informal stories describing the features. The stories are conveyed through story boards.
- Planning game: In this phase, the developers and customers come together and plan the project. The developers give a cost estimate to “stories” and they provide budget, by employing an abstract accounting mechanism. They later compare the actual cost to improve the estimate over time. The customers prioritize stories to fit within budget.
- Metaphor: A metaphor describes how the whole project will fit together It projects the integration aspect, on how the project will fit together like a jigsaw puzzle. It provides a framework for discussing project in a team. Tools and materials often provide good metaphors.
Quadrant 4 – Learn More/ Web Resources / Supporting Materials
Web Links |
http://www.tutorialspoint.com/software_engineering/software_engineering_overview.htm |
http://www.practicalprocess.com/seyp/definition.html |
http://www.softwareengineerinsider.com/articles/what-is-software- engineering.html#.V44IRtJ97Dc |
Supporting & Reference Materials |
Roger S. Pressman, “Software Engineering: A Practitioner’s Approach”, Fifth Edition, McGraw Hill, 2001. |
PankajJalote, “An Integrated Approach to Software Engineering”, Second Edition, Springer Verlag, 1997. |
Ian Sommerville, “Software Engineering”, Sixth Edition, Addison Wesley, 2000. |
Glossary
Starting char | Term | Definition | Re late d Te rm |
S | Software Engineering | It is the building of software systems which are so large or so complex that they are built by a team or teams of engineers | Software Development |
C | Change Control | Change control is a systematic approach to managing all changes made to a product or system | Versioning |
R | Reliability | It is the probability of failure-free software operation for a specified period of time in a specified environment. | QoS, Software Quality |
C | Cost Estimation | It is the approximation of the cost of a program, project, or operation. | Estimate |
Points to Ponder
S.No | Points to Ponder |
1. | Good notations can clarify the relationships and interactions of interest. |
2. | The existence of standard practices is one of the distinguishing characteristics of a professional discipline. |
3. | Team communication, product complexity, facilities and resources, etc are some of the quality and productivity factors. |
4. | Functionality, reliability usability, efficiency, maintainability are some of the characteristics of software quality. |