Software Engineering Chapter 3
Customer involvement
Customer should closely involved throughtout the development process. Their role is to provide and prioritize system requirements and to evaluate the iteration of the system
XP
customer or user is part of the XP team and is reponsible for making decision on the requirements
pair programming
Developers work in pairs, checking each other's work and providing the support to always do a good job.
simple design
Enough design is carried out to meet the current requirements and no more.
Embrace change
Expect the system to change and so design the system to accomodate these change
Maintain simplicity
Focus on simplicity in both the software being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system
Agile methods are the most effective, when the system can be developed with a small co located team who can communicate informally. This may not be possible for large system that requires larger development teams so plan driven approach may be used
How large is the system that is being developed?
Xp
In ___, programmers work in pair, sitting together to develop code
Agile methods
Is an incremental delivery strategy, where you deliver software to customer and get rapid feedback from them, realistic? Is so, consider using __
Plan driven approach
Is it important to have a very detailed specification and design before moving to implementation? If so you probably need to use ___
Pair programming
It encourages refactoring as the whole team can benefit from this
- It can be difficult to keep the interest of the customer involved in the process - Team members may be unsuited to the intense involvement that characterises the agile methods - Prioritizing change may be difficult where there are multiple stakeholders - Maintaining simplicity requires extra work - Contract may be a problem as with other approaches to iterative development
Problems with Agile Methods
Refactoring
Programming team look for possible software improvements and make these improvements even where there is no immediate need for them.
incremental planning
Requirements are recorded on story cards and the stories to be included in a release are determined by the time available and their relative priority. The developers break these stories into development 'Tasks'.
Agile development
Specification, design, implementation and testing are interleaved and outputs from the process development are decided through a process negotiation during the software development process
Agile methods
The aim is to Reduce overheads in the software process and to be able to respond quickly to changing requirements with excessive work
Agile or plan driven approach
The decision wether to use an ____ to development should depend on the type of software being developed, the capabilities of the development team and the culture of the company developing the system
Customer involvement, incremental delivery, people not process, embrace change, maintain simplicity
The principles of agile methods
customer
The role of 'this' in the testing process is to help develop acceptance tests for the stories that are to be implemented in the next release of the system
Pair programming
This helps develop common ownership of the code and spreads knowledge accross the team
Refactoring
This improves the understandability of the software and so reduces the need for documentation
- incremental delivery is supported through small, frequent system releases - customer involvement means full-time engagement with the team - people not process through pair programming, collective ownership and process that avoid long working hours - change is supported through regular system releases - maintaining simplicity through constant refactoring of code
XP and agile principles
incremental planning, small releases, simple design, test first development, refactoring
extreme programming practices (a)
Measurements
suggest that development productivity with pair programming is similar to that of two people working independently
extreme programming
takes an 'extreme' approach to iterative development
sample releases
the minimal useful set of functionality that provides business value are developed first. Releases of the system are frequent and incrementlly add functionality to the first release
collective ownership
the pairs of developers work in all areas of the system, so that no islands of expertise develop and all developers take responsibility for all of the code. Anyone can change anything.
- are software that are developed using agile approach maintainable, are given emphasis on the development process of minimizing formal documentation? - can agile methods be used effectively for evolving system in reponse to changing customer requirements
2 key issues (agile methods and software maintenance)
refactoring
All developers are expected to refactor the code continuously as soon as possible code improvements are found. This keeps the code simple and maintainable.
test first development
An automated unit test framework is used to write tests for a new piece of functionality before that functionality itself is implemented.
Tests
Are written as programs rather than data so that they can be executed automatically
Continuous Integration
As soon as the work on a task is complete, it is integrated into the whole system. After any such integration, all the unit tests in the system must pass.
Testing is automated
As_____, there is always a set of tests that can be quickly and easily executed
sustainable pace
Large amounts of overtime are not considered acceptable as the net effect is often to reduce code quality and medium term productivity
Extreme programming
is a well-known agile methods that integrates a range of good programming practivces such as frequent releases of software, continuous software improvement and customer participatiob in the development team
Testing
is central to XP and XP has developed an approach where the program is tested after every change has been made
Pair Programming
is not necessarily inefficient and there is evidence that a pair working together is more effiecient than 2 programmers working separately
Rapid development and delivery
is now often the most important requirement for software system
if the system has to be approved by external regulator, then you will probably be required to produce detailed documentation as part of the system safety case
is the system subject to external regulation?
Test automation
means that test are written in an executable components before the task is implemented
Pair Programming
programmers sit together at the same workstation to develop the software
Plan driven development
- A plan driven approach to software engineering is based around separate development stages with the outputs to be produced at each of these stages planned in advance - Not necessarily waterfall model - plna driven, incremental devlopment is possible - Iteration occurs within activities
Agile methods and software maintenance
- most organizations spend more on maintaining existing software than they do on new software development. So, if agile methods are to be successful, they have to support maintenance as well ad original development - Problems may arise if development team cannot be maintained
extreme programming
- new version may be built several time a day - increments are delivered to customer every 2 weeks - all test must be run for every build and build is only accepted if tests run successfully
Agile method applicability
- product development where a software company is developing a small or medium-sized product dor sale - custom system development within an organization, where there is a clear commitment from the customer to become involved in the development process - bec of their focus on small, tightly-integrated teams, there are prob in scaling agile methods to large systems
Rapid software development
- specification, design and implementation are interleaved - system is developed as series of versions with stakeholders involved in version evaluation - user interface is developed using an IDE and graphical toolset
On-site customer
A representative of the end-user of the system (the customer) should be available full time for the use of the XP team. In an extreme programming process, the customer is a member of the development team and is responsible for bringing system requirements to the team for implementation.
Pair programming
It serves as an informal review processes as each line of code is looked at by more than 1 person
Customer
is a member of the development team and is responsible for bringing system requirements to the team for implementation.
People not process
The skills of the development team should recognized and exploited. Team member should be left to develop their own way of working without prescriptive processes
Incremental delivery
The system is developed with the customer specifying the requirements to be included in each increments
Pairs
are creted dynamically so that all team members work with each during the development process
Changes
are easier to make because the code is well structured and clear
User requirements
are expressed as scenarios or user stories
Agile methods
are incremental development methods that focus on rapid development, frequent release of software, reducing process overheads and producing high quality code. They involve the customer directly in the development process
traditional engineering organizations have a culture of plan -base development, this is the norm in engineering
are there cultural or organizational issues that may affect system development?
extreme programming
best known and most widely used method
Customer
chooses the stories for inclusion in the next release based on their prioritize and the schedule estimated
it is sometimes argued that agile methods require higher level skills than plan-driven approach in which programmers simply translate a detailed design into code
how good is the designers and programmers in the development team?
if the development team is distributed or if the development is being outsource, then you may need to develop design documents to communicate across the development team
how is the development team organized?
long lifetime system may require more design documentation to communicate the original intentions of the system developers to the support team
what is the expected system lifetime?
agile methods rely on good tools to keep track of an evolving design
what technologies are available to support system development
Plan driven approaches may be required for systems that requires a lot of analysis before implementation
what type of system is being developed?