Agile Software Development

 Basics of Agile Software Development

1.Explain how the principles underlying agile methods lead to the accelerated development and deployment of software?

Answer:

The principles underlying agile development are:

1. Individual and interactions over processes and tools:

     By taking advantages of individual skills and ability and by ensuring that the development team know what each other are doing, the overheads of formal communication and process assurance are avoided. This means that the team can focus on the development of working software.

2. Working software over comprehensive documentation:

     This contributes to accelerated development because time is not spent developing, checking and managing documentation. Rather, the programmer’s time is focused on the development and testing of code.

3. Customer collaboration over contract negotiation:

    Rather than spending time developing, analyzing and negotiating requirements to be included in a system contract, agile developers argue that it is more effective to get feedback from customer’s directly during the development about what is required. This allows useful functionality to be developed and delivered earlier than would be possible if contracts were required.

4. Responding to change over following a plan. 

    Agile developers argue (rightly) that being responsive to change is more effective than following a plan-based process because change is inevitable whatever process is used. There is significant overhead in changing plans to accommodate change and the inflexibility of a plan means that work may be done that is later discarded.


2.  When would you recommend against the use of an agile method for developing a software system?

Answer:

    Agile methods should probably not be used when the software is being developed by teams who are not co-located. If any of the individual teams use agile methods, it is very difficult to coordinate their work with other teams. Furthermore, the informal communication which is an essential part of agile methods is practically impossible to maintain. Agile methods should probably also be avoided for critical systems where the consequences of a specification error are serious. In those circumstances, a system specification that is available before development starts makes a detailed specification analysis possible. However, some ideas from agile approaches such as test first development are certainly applicable to critical systems.


3. Extreme programming expresses user requirements as stories, with each story written on a card. Discuss the advantages and disadvantages of this approach to requirements description.

Advantages of stories:

1. They represent real situations that commonly arise so the system will support the most common user operations.

2. It is easy for users to understand and critique the stories.

3. They represent increments of functionality – implementing a story delivers some value to the user.

Disadvantages of stories

1. They are liable to be incomplete and their informal nature makes this incompleteness difficult to detect.

2. They focus on functional requirements rather than non-functional requirements.

3. Representing cross-cutting system requirements such as performance and reliability is impossible when stories are used.

4. The relationship between the system architecture and the user stories is unclear so architectural design is difficult.


4. Suggest four reasons why the productivity rate of programmers working as a pair might be more than half that of two programmers working individually.

Answer:

     Reasons why pair programming may be more efficient as the same number of programmers working individually:

1. Pair programming leads to continuous informal reviewing. This discovers bugs more quickly than individual testing.

2. Information sharing in pair programming is implicit – it happens during the process. This reduces the need for documentation and the time required if one programmer has to pick up another’s work. Individual programmers have to spend time explicitly sharing information and they are not being productive when doing so..

3. Pair programming encourages refactoring (the code must be understandable to another person). This reduces the costs of subsequent development and change and means that future changes can be made more quickly. Hence, efficiency is increased.

4. In pair programming, people are likely to spend less time in fine-grain optimization as this does not benefit the other programmer. This means that the pair focus on the essential features of the system which they can then produce more quickly.


5.It has been suggested that one of the problems of having a user closely involved with a software development team is that they ‘go native’. That is, they adopt the outlook of the development team and lose sight of the needs of their user colleagues. Suggest three ways how you might avoid this problem and discuss the advantages and disadvantages of each approach.

Answer:

    1. Involve multiple users in the development team:

Advantages are you get multiple perspectives on the problem, better coverage of user tasks and hence requirements and less likelihood of having an atypical user.

Disadvantages are cost, difficulties of getting user engagement and possible user conflicts.


2. Change the user who is involved with the team:

Advantages are, again, multiple perspectives.

Disadvantages are each user takes time to be productive and possible conflicting requirements from different users.


3. Validate user suggestions with other user representatives. 

Advantages are independent check on suggestions; 

Disadvantage is that this slows down the development process as it takes time to do the checks.


Comments