Agile Methodology and Techniques
JJ People are avid users of Agile techniques and methodologies for the
development of their software. As a good proportion of our software development
is performed using distributed teams of developers we have grown to appreciate
a number of simple agile rules that make for effective collaborative software
development. These are namely:
-
Provide context in all documentation starting with high level
context moving down into context for the tasks themselves.
-
Make all tasks atomic. If a task is going to take more than 2 hours
it probably needs splitting into more tasks. Atomic tasks allow for
faster feedback. Atomic tasks also allow any deviation between
expected and actual to be nipped in the bud.
-
Work closely with business providing continuous feedback on the
software development and continuous clarification of evolving
business requirements.
-
Provide continuous test driven development so that technical issues
can be identified as soon as they occur. This guards against
regression of the code base and encourages the re-factorisation of
code to improve: re-usability; readability; and maintainability of
the code base.
A number of methodologies help us satisfy the above rules. They are namely:
-
Feature driven development
-
Test driven development
-
Collaborative development (including extreme pair programming where
in order)
-
Ego driven development (Putting down someone's code on the basis of
certain criteria and having them defend it)
-
Scrum development
-
Rapid Application development
A number of agile tools help us satisfy the above rules and use the above
methodologies. They are namely:
-
Code Monitor - Code Monitor is an open source software management
tool conceptualised to aid the coordination of distributed and
collaborative development spread across multiple geographical
locations and time zones. Code Monitor is unique in its ability
to classify all changes to the code base and link them to the
various steps of the software development life cycle. This makes
for accountable and transparent software development.
-
Cruise Control - Cruise Control is a Continuous Integration
server which can be set up to trigger a testing sequence every time the
code base changes.
-
jUnit - useful for setting up the unit tests that Cruise Control
triggers every time the code base changes.
-
ANT or Maven - useful for creating platform independent
customised build, packaging and deployment scripts. ANT is particularly
attractive in the fact that it can be easily integrated into nearly
every single IDE that exists as well as being easily integratable into
Continuous Integration servers such as Cruise Control. ANT or Maven
provide for an independent build process that can establish whether the
reason an application is failing to run as expected with a
rapid application tool is because of an incorrectly configured
environment as opposed to code problems. ANT is especially useful
when it comes to integration, deployment and testing. Often RAD
tools are not suitable for build, packaging and deployment of
applications to Integration and Test servers.
-
Eclipse or Netbeans - useful for rapid application development.
Especially great are their ability to rapidly re-factor the code
base.
-
Fitnesse - useful for Continuous User Acceptance Testing. Once
fixtures have been written the business can test different data
scenarios against their use cases and code via a web interface.