Tuesday, 22 March 2011

Agile Development

INTRODUCTION
Software Development has become a very significant aspect in most business area, and in-turn requires high skilled project management to help effectively and efficiently organise the development process. Software Development methodologies are constantly developing due to frequent advancements in technologies and also software requirements from users. Software Development process can be achieved using different models, but the most eminent one used for small or medium software development is Agile Development because of its flexible and ability to adjust to changes in user requirements at any point in the development process.

Agile Development process focuses on providing high customer satisfaction by ensuring quick delivery of quality software, active participation of concerned stakeholders, and creating a platform that allows change at any point in the process. As against other Traditional Development process, Agile Development process is people-oriented and is a very adaptive process that allows continuous design improvements, which helps to appreciate the values and determine the quality approach of the system to be developed.
To what extent is the impact of Agile Development to Software Development and its implication to Service Oriented Architecture?

AIMS AND OBJECTIVES
The aim of this essay is to present the problems faced in Traditional Development and see how Agile Development has addressed these problems, also stating the relevance of Agile Development to Software Development in general and to Service Oriented Architecture. In trying to fulfil these aims and showing the application of Agile Development in modern organisations, this essay breaks the problem into specific objectives. These specific objectives are given below:
·         Give an overview definition of Agile Development, its brief history and architecture;
·         Extreme Programming (XP) as a method of Agile Development Framework;
·         Outline a detailed comparison between Traditional and Agile Development methodologies;
·         Outline the advantages and disadvantages of Agile Development process;
·         Identify the implication of Agile Development to Service Oriented Service;


WHAT IS AGILE SOFTWARE DEVELOPMENT?
Agile Development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. Agile Development methods are people-oriented, which recognise the value competent people and the relationships they bring to software development, and also a very adaptive method which create influence for change in user requirements and continuous improvements in designs. They also foster quick delivery of quality software and allow concerned stakeholders to be involved in the development process; thereby focusing on providing high customer satisfaction.

BRIEF HISTORY
Agile Software Development emerged in mid‐1990s to solve the weaknesses of Traditional Development methods such as the Waterfall Process Model, which follow a sequential process of development and do not allow flexibility and ability to embrace change. Agile Development is called a “light weight” software development process [1]. The methods were not widely practised or accepted until February 2001, when a group of advocators met at Snowbird, Utah and agreed to the name "Agile Methodologies" and created the Agile Manifesto and the principle [1].

The manifesto states that [2]:

  1. Individuals and interactions over process and tools;
  2. Working software over comprehensive documentation;
  3. Customer collaboration over contract negotiation;
  4. Responding to change over following a plan.

Twelve supporting statements give guidance on achieving the fore core values of Agile Development. They are [2]:

    1. Our highest priority is to satisfy the customer through early and frequent delivery of software;
    2. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale;
    3. Working software is the primary measure of progress;
    4. Welcome changing requirements, even late in development ;
    5. Business people and developers must work together daily throughout the project;
    6. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done;
    7. The most efficient and effective method of conveying information to and within a development team is face‐to‐face conversation;
    8. The best architectures, requirements, and designs emerge from self‐organizing teams;
    9. Continuous attention to technical excellence and good design enhance agility;
    10. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely;
    11. Simplicity‐‐the art of maximizing the amount of work not done‐‐is essential;
    12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behaviour accordingly.

After the Manifesto for Agile Software Development was established, a team of people came together to see how project management and Agile Mindset products can be achieved through management principles. They came up with what is called the “Declaration of Inter-dependence” for modern product and project management through which they outlined six rules of operations  which include: Value; Individuals; Teams; Uncertainty; Situations (or Context); and Customers [3]. They came up with a hex ring logo as shown in Figure 1 and explained each role stating [3]:


Figure 1. Declaration of Inter-dependence [3]
  • “Increase return on investment by -- making continuous flow of value our focus;
  • Deliver reliable results by -- engaging customers in frequent interactions and shared ownership;
  • Expect uncertainty and manage for it through -- iterations, anticipation and adaptation;
  • Unleash creativity and innovation by -- recognizing that individuals are the ultimate source of value, and creating an environment where they can make a difference;
  • Boost performance through -- group accountability for results and shared responsibility for team effectiveness;
  • Improve effectiveness and reliability through -- situationally specific strategies, processes and practices.”

 AGILE ARCHITECTURE
To begin a project using Agile Model Driven Development, you will need to get the initial “requirements envisioning” and also the “architecture envisioning”, which helps to determine the feasibility of the project. This helps to know the scope, cost, risks and required skills and technology to take on the project, thereby managing the project effectively and giving it a good direction.
Details of the project are identified at the start of each iteration on a just-in-time (JIT) basis during iterations using the initial “iteration modelling” or using the modelling storming” with is done throughout the iteration.  This need to be clearly stated as it helps the project in form of speed due to the fact that there is a clear understanding and knowledge by the development team at the beginning and also while the iteration continues. This reduces the risks that could affect the project by supporting the practice of modelling in small increments.
Figure 2 shows the lifecycle of Agile Model Driven Development for Software projects


Figure 2: Agile Model Driven Development lifecycle for software projects [4]




 METHODS OF AGILE DEVELOPMENT FRAMEWORK

Agile methodologies include Scrum, Crystal Clear, Extreme Programming, Adaptive Software Development, Feature Driven Development, and Dynamic Systems Development Method (DSDM) [5]. These methods existed earlier before been referred to as Agile Methodologies after the Agile Manifesto in 2001. Extreme programming is the best known and most widely used of these methods.

Extreme Programming (XP)

It is an Incremental development that supports small, frequent system releases. It recognises people and not process through pair programming, collective ownership and avoids long working hours. It also puts into consideration, the fact that customer requirement changes continuously, therefore it embraces these changes. Extreme programming is based on four clearly articulated values [2]:
  • Communication;
  • Simplicity;
  • Feedback;
  • Courage.
Communication between development team, the customer and members of a team is a very essential aspect in any project. XP has therefore embraced this by exploiting it both as a principle and in practice. It also realizes that achieving simplicity is not easy as software with a simple structure is always better than that of a complex one.
Feedback is about obtaining frequently reliable information about the state of the software as it is being developed, so that any problem can be accommodated and requests customers ask for can be well understood with the implications being reverted.
The concept of courage is also embraced, such that developer must have courage to throw away code or even re-design the architecture if the need arises.

XP and Refactoring

In software engineering, it is best to design for change, thereby spending time and effort to anticipate possible changes. This helps to reduce costs in development process. As a result, XP maintains that changes cannot be anticipated, but rather, it proposes constant code improvement (refactoring) which allows for changes to be made easily when implemented. Programming team always seek for possible software improvements, even where there is no immediate need for them. This however improves the ability to understand the software and reduction in the need for documentation. Changes that require architecture refactoring could very expensive to bear, but it is easier to make changes in code that is well-structured and clear.


XP Testing and its Difficulties
Testing is important to XP as every other method, but it has developed an approach where the program is tested after every change has been made. XP testing features include [5]:
  •  Test-first development.
  •  Incremental test development from scenarios.
  •  User involvement in test development and validation.
  •  Automated test are used to run all component tests each time there is a new release.

Customer involvement in the development team also helps in the testing process by developing acceptance tests for the requirements to be implemented in the next release of the system. However, this could be a challenge in cases where some customers cannot work full time with the development team.

Programmers take short cuts when writing test code especially when writing incremental test in complex applications, this as a result hinders a complete and accurate testing process in development as these programmers prefer programming. It is always difficult to know the absolute state of a set of tests, as there could be lot of system test to be carried out; thereby leading to incomplete coverage of the test.


TRADITIONAL vs. AGILE SOFTWARE DEVELOPMENT

Examples of Traditional Software Development are waterfall model, the spiral model, and some others close to these. These models break the process into phases thereby specifying the tasks to be performed and the desired outcomes, and also assign roles to individuals who will perform these tasks. This approach lays a high demand on documentation of every part of the code which makes the knowledge transferrable to whoever is of interest or has access to the code after it has been developed. Communication is always through documents between project members. Customers participate minimally in the process but they are given important roles during specification development. These approaches are appropriate both for Object-Oriented and non Object-Oriented technologies [6].

Agile Development on the other hand is an iterative, incremental, and collaborative approach for software development projects, which revolves around its flexibility for requirement changes in planning, requirements, analysis and design, implementation, deployment, testing, and evaluation before a final closure to the project [1]. Agile Development requires projects to be divided into sub-project, with each sub-project involved in planning, development, integration, testing, and delivery and the developers in the team having to work closely with the customers who play active roles in the teams (representing the system users) [6].

Table 1 shows a detailed comparison between the Traditional and Agile Development methodology.


Table 1. Traditional Vs Agile Software Development [6]



ADVANTAGES AND DISADVANTAGES OF AGILE DEVELOPMENT

Advantages of Agile Development
  • It is flexible.
  • Adaptable to user requirement changes.
  • It supports fast delivery of projects.
  • Documentation is minimal and saves time.
  • Face to face communication and continuous inputs from customer help projects to meet business needs. User is carried along in the project.
  • The end result is high quality software in the least possible time which meets customer’s satisfaction.

Disadvantages of Agile Development
  • Lack of emphasis on important documentation and designs.
  • It is difficult to determine all that would be required to carry out a large project at the beginning.


IMPLICATION TO SERVICE ORIENTED ARCHITECTURE

According to Krogdah, Luef, and Steindl (2005), service model is one central aspect in a Service Oriented Architecture that drives agile development. It consists of the model of services, their dependencies, choreography, and flows. Service model and the definition of the service interfaces keep changing over time. The current version of service model being used by most companies would be recognised to have weaknesses, because responsibilities of the services are not well-defined. This would therefore require a change in service interfaces and cause a shift in responsibilities from one service (or one version of a service) to another.

As Agile Development embraces continuous refactoring, the service model would also have to adapt to this process in other to meet the changing needs and address its existing weaknesses. These changes would be easy if the services are well-structured and clear.


IMPLICATION TO BUSINESS TO BUSINESS

Businesses today have strongly adopted the methodology behind Agile Development. The ability for the organisations to see the speed at which projects are developed and being engaged on a day to day basis, with a detailed knowledge of the cost implication and other factors that could affect the project while allowing changes in the requirements, even in short timelines. It has helped to reduce project risks through continuous communication between the development team and the business people, and has highly motivated the business to see functional prototypes while development is in place and changes are invoked, which places high confidence on the success of the projects.

The objective of every organisation is to see that every project succeeds at the fastest rate as possible. This is what Agile Development delivers and therefore helps organisations know they are on the right path to succeed.


 SUMMARY

According to Chen (2009), delivery of working software is the most important factor to lead to a successful software development. In the Agile Development’s view, metrics such as cost variance, schedule variance, requirements variance and task variance is virtually meaningless. Agile Development is becoming a trend adopted by most software development companies due to high success rates of projects.

Agile Development brings software projects a great success because of daily meeting for frequent feedback and delivery, which helps defects to be detected early and thus saves cost whereas, in Traditional Development, defects are usually found late since they rely on a predictive plan.

Service-Oriented Architecture has a challenge of the architecture adapting to the changes that can occur in the future. Agility has therefore helped to manage the possible changes in the business process through refactoring.




REFERENCES


  1. Yi-Len Chen. 2009. "Analysis of the Agile Deployment: A thesis work based on the literature study and empirical experience." [Online], Available at: http://74.125.155.132/scholar?q=cache:I-sGXz5p1oIJ:scholar.google.com/+Analysis+of+the+Agile+Deployment+A+thesis+work+based+on+the+literature+study+and+empirical+experience.&hl=en&as_sdt=2000 [Accessed 9 October 2010]

  1. Douglas Bell. 2005. "Software Engineering for Students: A Programming approach", 4th ed. S.L.: Pearson Education Limited.

  1. Alistair Cockburn. 1970-2010. “The declaration of interdependence for modern management or DOI”  [Online], Available at: http://alistair.cockburn.us/The+declaration+of+interdependence+for+modern+management+or+DOI [Accessed 12 October 2010]

  1. Scott W. Amber. 2010. “Agile Architecture: Strategies for Scaling Agile Development” [Online], Available at: http://www.agilemodeling.com/essays/agileArchitecture.htm#Lifecycle [Accessed 23 November 2010]

  1. Sommerville, Ian. 2004. “Software Engineering”, 7th ed. Harlow: Pearson/Addison Wesley.

  1. Sridhar Nerur, RadhaKanta Mahapatra, George Mangalaraj. 2005. "Challenges of migrating to agile methodologies" [Online], Available at: http://delivery.acm.org/10.1145/1070000/1060712/p72-nerur.html?key1=1060712&key2=1733086821&coll=GUIDE&dl=GUIDE&CFID=105283553&CFTOKEN=55000374 [Accessed 9 October 2010]

  1. Pål Krogdah, Gottfried Luef, Christoph Steindl. 2005. “Service-oriented agility: Methods for successful Service-Oriented Architecture (SOA) development, Part 1: Basics of SOA and agile methods” [Online], Available at: http://www.ibm.com/developerworks/webservices/library/ws-agile1/ [Accessed 11 October 2010]

No comments:

Post a Comment