U kunt het gehele artikel lezen of direct naar een van de volgende hoofdstukken gaan:
Onze software and product ontwikkeling
senseIT maakt gebruik van een interactieve incrementele software ontwikkelingsmodel genaamd Agile Scrum dat op basis van kleine iteraties werkt, waar samenwerking (in teamverband) en het vermogen om aan te passen (snel schakelen) een prominente plaats neemt gedurende de levenscyclus van een project.
Voor onderzoeksprojecten kan de klant bij elke Iteratie besluiten om door te gaan, of de stoppen met het project.
Agile Scrum heeft de volgende eigenschappen:
- Een hoge mate van klanttevredenheid door snelle, en continue aanleveren van bruikbare, functionele software
- Stakeholders zijn een onderdeel van het ontwikkelteam
- Alleen functionele en geteste software wordt vrijgegeven
- Korte communicatie lijnen tussen sales, ontwikkelaars en stakeholders door gebruik te maken van video conferencing
- Anticiperen op veranderingen door gebruik te maken korte iteraties
- Stakeholders kunnen de ontwikkel vorderingen monitoren via onze webportal http://projects.senseit.nl
We maken gebruik van Ageil Scrum in combinatie met testdriven software ontwikkeling hetgeen in het volgende hoofdstuk nader wordt toegelicht.
Hoe werkt het?
Een scrum team maakt geen gebruik van conventionele software engineerings rollen zoals programmeur, designer, tester of architect. Iedereen binnen het team spreekt af wie welke taken uitvoert en gezamenlijk is men verantwoordelijk voor het succesvol afronden van een sprint.
Een team heeft twee speciale leden:
De product owner is de belangrijkste stakeholder en vertegenwoordigt gebruikers, klanen en anderen in het proces.
De ScrumMaster dient er voor te zorgen dat het team zo productief mogelijk is. De ScrumMaster doet dit door het team te helpen in het Scrum proces, en mogelijke obstakels in een vroeg stadium te verwijderen.
In onderstaande illustratie kunt u de belangrijkste essenties zien in Scrum Agile software ontwikkeling.
Dit plaatje is een introductie van de essenties in Scrum Agile software development. Aan de linker zijde ziet u de product backlog, welke door de product owner gesorteerd is op prioriteit en bevat alle wensen/features van het product dat op dat moment bekend is. De één of twee durende sprint is weergegeven in de groene circel.

Het Agile Scrum proces.
Elke stap in het Agile Script proces wordt nu uitgelegd.
Step 1: De Product backlog
De Product Backlog is een lijst met alle gewenste functionaliteit in een product. Wanneer een project gestart wordt is het vrij eenvoudig om alle gewenste features of vereisten vast te stellen. Een product owner schrijft alle voor de hand liggende features op, wat in ieder geval ruim voldoende zou moeten zijn voor een eerste sprint.
Product backlog items kunnen technische taken zijn (bijvoorbeeld: "Valideer de Login class en genereer een exceptie") of juist meer vanuit het perspectief van de gebruiker ("Sta een undo in een setup scherm toe). Een andere mogelijkhied is een Scrum backlog item te beschrijven in de vorm van Extreme Programming's User stories.
De Product Backog kan groeien en wijzigen wanneer meer van het product en de wensen van de (eind)klanten bekend is.
Samen met stakeholders wordt de lijst met taken gesorteerd van belangrijk (en urgent) naar minder belangrijk.
Step 2: De Sprint backlog
De Product Owner laat tijdens een sprint planning meeting de product backlog zijn en legt de belangrijkste items uit aan het team. De features van de product backlog worden dan opgebroken in kleinere taken, ook wel stories genoemd met voor elke story een relatieve tijdsindicatie. De gemakkelijkste story die geimplementeerd wordt worden krijgt een waarde "1" en alle andere stories worden met deze waarde vergeleken (en krijgen een waarde tussen de 1 en de 10). Elke teamlid moet een bepaalde waarde toekennen, en mochten er verschillen tussen teamleden ontstaan dient gediscussieerd te worden waar die verschillen door komen.
De Sprint backlog is eigendom van de gehele team. De team is tevens verantwoordelijk voor de inschattingen die gedaan worden.
Met behulp van een ScrumBoard wordt het proces gevisualiseerd (ingedeeld in Planned/In progress/Done) en de voortgang wordt weergegevn met een zogenaamde burndown grafiek.

Dit is een scrumboard dat gebruikt is in een van onze onderzoeksprojecten.
Step 3: De Sprints
Elke sprint bestaat uit een bepaalde hoeveelheid werk dat op een zeker moment afgerond dient te worden, gewoonlijk 1 tot maximaal 2 weken. Het is de bedoeling dat aan het einde van elke sprint, de team een functioneel deel-product aflevert -m.a.w. een stukje werkende kwalitatief hoogwaardig stukje software.
Test driven software development has the following cycle:
- Voeg een test toe
- Voer alle testen uit en zorg ervoor dat de nieuwe test een exceptie genereert.
- Schrijf code
- Voer de testen uit en valideer dat er geen fouten optreden
- Controleer code
- Herhaal dit proces met een nieuwe test
In test-driven development, elke feature beging met het schrijven van een test. De test moet falen aangezien deze nog niet geimplementeerd is.
Voor het schrijven van een test dient de ontwikkelaar volledig inzicht te hebben in de feature's specificaties.
Dit bevestigt dat de test-schil correct werkt en dat de nieuwe test niet per ongeluk succesvol wordt uitgevoerd terwijl de test nog niet geïmplementeerd is. Hiermee wordt ook de test getest. Een test die zonder implementatie succesvol wordt uitgevoerd is immers waardeloos.
Implementeer de test en zorg ervoor dat de test succesvol wordt uitgevoerd.
If all test cases now pass, the programmer can be confident that the code meets all the tested requirements. This is a good point from which to begin the final step of the cycle.
De code wordt gereviewed en indien nodig opgeschoond. Door alle testen opnieuw uit te voeren kan de ontwikkelaar er zeker van zijn dat er gedurende het opschoon proces geen code gebroken is. Alle niet relevante, niet functionele of herhalende code code wordt verwijdert.
Als de code opgeschoond is, wordt deze gevalideerd door een andere ontwikkelaar. Wanneer beide ontwikkelaars akkoord gaan dat de code schoon en functioneel is, pas dan wordt de code ingechecked in Subversion.
senseIT maakt gebruik van geavanceerde tools en statistische software om te garanderen dat alleen kwalitatief hoogwaardige code in Subversion ingechecked wordt.
Ontwikkeling in c#: fxcop, Coverity, Test driven.Net etc.
Ontwikkeling in c/c++: Boost libraries
Een build machine voert in de avond alle testen uit en compileert alle code in een release versie. Waarschuwing en fouten worden gerapporteerd aan de scrum master.
Bij elke nieuwe test wordt de complete cyclus herhaald om te convergeren naar de gewenste functionaliteit.
De stapgrootte moet klein zijn, 1 tot 10 wijzigingen per test run.
Het uitvoerbaar bestand wordt via het web portaal uitgebracht en kan gevalideerd/getest worden door de klant.
De feedback van de klant worden verwerkt als stories in de volgende sprint (zie onderstaande illustratie).

Sprint iteratie proces
Gedurende een sprint worden de volgende meetings gehouden:
- Sprint Planning Meeting
- Dagelijkse meeting
- Sprint Review Meeting
- Sprint Retrospective
In een sprint planning meeting wordt geselecteerd welke werkzaamheden er in de sprint uitgevoerd moet worden en door wie. Het gehele team denkt na of de voorgestelde werkzaamheden binnen de gestelde termijn uitgevoerd kan worden.
Elke dag wordt in de ochtend besproken wat elke ontwikkelaar zoal gedaan heeft en welke werkzaamheden die dag zal gaan uitvoeren. Ook worden alle obstakels gedurende de software ontwikkeling besproken
Er wordt een presentatie aan alle stakeholders gegeven. Ook wordt het verrichte werk gedemonstreerd (ook wel de demo genoemd).
Alle team leden evalueren de vorige sprint.
Step 4: Code release
De code wordt gecompileerd tot een uitvoerbestand. Het uitvoerbare bestand, samen met alle afhankelijkheden
(drivers, externe bibliotheken etc) worden samengevoegd tot een setup of installatie programma.
De setup wordt middels virtual machines op verschillende platformen getest en is vervolgens voor klanten toegankelijk als beta versie op onze web portaal.
