Spiraalmodel / Agile

Iteratief en incrementeel ontwikkelen

Veel organisaties hebben moeite om hun softwareontwikkeltrajecten binnen tijd en budget af te ronden. Eén van de verklaringen die in de literatuur wordt genoemd is het gebruik van het Watervalmodel. Die wordt ervaren als bureaucratisch en traag die de creativiteit en effectiviteit van ontwikkelaars belemmert. In reactie daarop is in de jaren '90 een nieuwe manier van ontwikkelen ontstaan. Waarbij de termen iteratieve en incrementele ontwikkeling centraal staan. Op deze pagina worden het Spiraalmodel en Agile, die ten grondslag liggen aan populaire ontwikkelmethoden RUP en SCRUM, uitgewerkt.
 

Spiraalmodel

Het Spiraalmodel is ontwikkeld en gepubliceerd door B.W. Boehm. Het model heeft vier fasen, die achtereenvolgens worden uitgevoerd (stel het doel vast, maak een risicoanalyse, ontwerp, bouw & test en plan de volgende iteratie). Na uitvoering van de vier fasen, kan worden besloten, om de vier stappen te herhalen, of het project te beëindigen. Het project beëindigen kan op het moment dat het project klaar is, of een onderdeel onuitvoerbaar blijkt.
 
  • Risicogerichte aanpak; het model kenmerkt zich door een risicogerichte aanpak. Waarbij wordt begonnen met het uitvoeren van het onderdeel met het hoogste risico. Op die manier wordt het mogelijk gemaakt om een bepaald deel van het systeem te implementeren, terwijl een ander deel nog ontworpen moet worden. Mocht een bepaald onderdeel te grote risico's met zich meebrengen dan kan er voor worden gekozen dit onderdeel niet uit te voeren, of het project in zijn geheel af te blazen. Door de volgorde van werken zou dit aan het begin van het project moeten blijken.
  • Iteratief ontwikkelen; maar wellicht nog belangrijker dan het risicogericht werken is dat met het spiraalmodel van Boehmm een eerste stap is gezet naar het iteratief ontwikkelen. Die aan de basis staan van hedendaagse ontwikkelmethoden als RUP en Scrum.
 

Agile

Agile betekent zoveel als scherpte, behendigheid, alertheid. Het impliceert souplesse; veerkracht; lenigheid. In de IT betekent 'agility' het vermogen de business in staat te stellen razendsnel in te spelen op nieuwe ontwikkelingen in de markt. Agile is een verdere doorontwikkeling van het spiraalmodel en voegt aan de iteratieve ontwikkeling de incrementele ontwikkeling toe:
 
  • Iteratieve ontwikkeling; de agile-methoden proberen de kans van slagen van automatiseringstrajecten te vergroten door software te ontwikkelen in korte overzichtelijke perioden (timeboxes), die 'iteraties' genoemd worden. Elke iteratie vormt een deelsysteem die bij oplevering wordt toegevoegd aan iteraties die eerder zijn opgeleverd. Elke iteratie is als het ware een miniatuurproject op zichzelf. En omvat alle noodzakelijke taken: planning, analyse, ontwerp, testen en documentatie. Aan het eind van de iteratie wordt het product getoond, getest en het product en proces beoordeeld. Hierdoor wordt het risico beperkt en weet men snel of men op de goede weg zit. Na oplevering van een iteratie wordt naar de projectprioriteiten gekeken om te bepalen hoe de volgende iteratie eruit ziet.
  • Incrementele ontwikkeling; dat wil zeggen dat op voorhand het eindresultaat nog niet duidelijk is. En dat gaande het ontwikkelproces het eindresultaat zichzelf zal vormen. Achterliggende gedachte hierbij is dat het bij grote IT-systemen onmogelijk is om het eindresultaat al in detail te kunnen beschrijven. Daarnaast laat incrementeel ontwikkelen ruimte om wijzigingen door te voeren als de omgeving daarom vraagt. 
 

Basisprincipes Agile

James Martin is de grondlegger van de iteratieve en incrementele ontwikkelmethode. In 1991 publiceerde hij zijn boek Rapid Application Development die gebaseerd is op de principes van iteratief en incrementeel ontwikkelen zoals deze later zijn vastgelegd in het Manifesto for Agile Software. Deze principes zijn:
 
  • Individuen en interactie zijn belangrijker dan processen en hulpmiddelen;
  • Werkende software is belangrijker dan allesomvattende documentatie;
  • Samenwerking met de klant is belangrijker dan contractonderhandelingen;
  • Reageren op verandering is belangrijker dan strikt het plan volgen. 
 
In het Manifesto for Agile Software zijn bovenstaande principes in een aantal uitgangspunten uitgewerkt. Deze uitgangspunten vormen de basis voor de ontwikkelmethoden die op Agile zijn gebaseerd: 
 
  1. Klanttevredenheid; hoogste prioriteit door snelle en werkende software op te leveren.
  2. Verandering is de enige zekerheid; omarm dit en maak hier je concurrentievoordeel van.
  3. Regelmatige opleveringen; liever in weken dan in maanden.
  4. Dagelijkse samenwerking; mensen uit de business en ontwikkelaars moeten dagelijks samenwerken.
  5. Gemotiveerde en deskundige medewerkers; stel teams samen met de juiste mensen. 
  6. Face tot face; is de meest efficiënte en effectieve manier om met elkaar te praten.
  7. Werkende software; is de belangrijkste criterium voor voortgang. 
  8. Constante ontwikkeling; Agile processen bevorderen een contante en duurzame systeemontwikkeling.
  9. Kwaliteit; continue aandacht voor technische kwaliteit en voor kwaliteit van het ontwerp.
  10. Eenvoud, stuur op eenvoud. Less is more!
  11. Zelfsturende teams; leveren de beste architecturen, eisen en ontwerpen en systemen op.
  12. Continue verbetering; teams zoeken op vaste tijden naar mogelijkheden om werkwijze te verbeteren. 
 
De agile-methode voor systeemontwikkeling is een soort meta-model waar veel ontwikkelmethodieken onder vallen. En waar de uitgangspunten zoals hierboven beschreven handen en voeten is gegeven. Het onderscheid tussen deze ontwikkelmethodieken is dan ook klein. Het verschil wordt bepaald door hoe de teamsamenstelling tot stand komt en de methoden & technieken die worden voorgeschreven. RUP en SCRUM zijn de belangrijkste exponenten van Agile.  
 

Deel House of Control via Social Media