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:

  1. The highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome  changing  requirements,  even  late  in  development.  Agile  processes harness change for the customer’s competitive advantage.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. The most efficient and effective method of conveying information to and within a development team is face to face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development. The sponsors, developers and users should be able to maintain a constant pace indefinitely.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity is the art of maximizing the amount of work not done is essential.
  11. The  best  architecture,  requirements  and  designs  emerge  from  self-organizing teams.
  12. 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.