Web Analytics

Verandering is de enige constante

Januari 2012
Er is iets eigenaardigs aan software. Wanneer het niet gebruik wordt, roest het niet. Wanneer het wel gebruikt wordt, verslijt het niet. Desalniettemin, vanaf het moment dat een softwaresysteem op de markt wordt gebracht, gaat de kwaliteit achteruit en zijn er voortdurend fixes, patches en verbeteringen vereist om de gebruikers tevreden te houden. Wat is er hier aan de hand?
                  
Op een gegeven moment voldoen softwaresystemen niet langer aan de behoeften waaraan zij aanvankelijk voldeden. Niet omdat de software verandert maar omdat de behoeften veranderen. Laten we eens een aantal externe redenen voor verandering nader onder de loep nemen.
  • Innovatie: Bedrijven concurreren met elkaar door nieuwe of betere producten en diensten op de markt te brengen. De software ondersteunt de productie van de producten en de levering van diensten. Bedrijfsinnovaties vormen een drijfveer voor softwareveranderingen.
  • Kostenreductie: Diensten en producten die ooit als innovatief werden gezien verliezen aan onderscheidingskracht wanneer concurrenten dezelfde producten en diensten goedkoper gaan aanbieden. Op markten waar vergelijkbare producten en diensten op prijs concurreren, vormen de operationele kosten van de softwaresystemen, die deze producten en diensten ondersteunen, een kritische factor. De verlaging van operationele kosten vormt een drijfveer voor softwareveranderingen.
  • Regelgeving: Overheden zijn constant bezig met het wijzigen van wetten en regels, of dat nu is om een betere samenleving te bewerkstelligen of voor de ondersteuning van het financiële systeem. Veranderingen in de regels vereisen veranderingen in de softwaresystemen van overheden. Maar ook in de softwaresystemen van banken, luchtvaartmaatschappijen en andere bedrijven die aan deze nieuwe regelgeving moeten voldoen. Wetten en regels vormen een drijfveer voor sofwareveranderingen.

Deze externe factoren sturen rechtstreeks softwareveranderingen aan. Het feit dat een en ander tevens via indirecte mechanismen tot verdere veranderingen leidt, maakt de zaken nog ingewikkelder.

De interne complexiteit van softwaresystemen is overweldigend. De programmacode van een middelgroot softwaresysteem kan gemakkelijk 3000 A4’tjes in beslag nemen, maar vormt geen lineair verhaal. In plaats daarvan zijn alle paragrafen onderling met elkaar verbonden via verwijzingen. Zodra er iets aan een dergelijke complexe structuur wordt veranderd, is het onontkoombaar dat er bugs worden geïntroduceerd. Dit betekent dus dat een aanvankelijke verandering automatisch tot verdere veranderingen leidt.

Elk softwaresysteem is afhankelijk van een ander systeem. Een internetwinkel is bijvoorbeeld afhankelijk van een betalingssysteem, een databasesysteem, een internetbrowser, verschillende besturingssystemen enzovoort. Het is dus onvermijdelijk dat veranderingen in een van deze systemen, veranderingen in het systeem vereist dat van deze systemen afhankelijk is. Veranderingen in één systeem verspreiden zich dus tot andere systemen via het netwerk van onderling verbonden systemen.
 
Naarmate er zich steeds sneller veranderingen voordoen in de samenleving en het bedrijfsleven, is het steeds vaker nodig om veranderingen in de software aan te brengen. En naarmate softwaresystemen steeds complexer en afhankelijker van elkaar worden, wordt het moeilijker om de software aan te passen. Dit is het probleem waar we momenteel voor staan en waar men via onderzoek op het gebied van software-evolutie een oplossing voor hoopt te vinden.

Er moet voor diverse fundamentele uitdagingen een oplossing worden gezocht:
  • Kennisverspreiding: Je kunt geen systeem veranderen dat je niet begrijpt. Om evolutie mogelijk te maken, moeten software-ontwikkelaars ondersteund worden bij het opdoen van kennis over de code die veranderd moet worden.
  • Entropie: De software wordt ingewikkelder wanneer deze op onbeheersde wijze wordt veranderd. Complexere software is moeilijker op beheersde wijze te veranderen. Om deze vicieuze cirkel te doorbreken, zijn er mechanismen nodig die de complexiteit tijdens de verandering beheersen.
  • Synchronisatie: De onderlinge afhankelijkheid tussen softwaresystemen vereist dat de veranderingen gesynchroniseerd worden. De software-evolutie moet met mechanismen ondersteund worden die de verbinding tussen systemen losser maakt of de verspreiding van veranderingen van het ene systeem naar het andere systeem automatiseert.

SIG brengt rust bij verandering
Er wordt veel onderzoek gedaan naar manieren om deze uitdagingen aan te gaan. Naarmate er oplossingen worden aangeboden, in de vorm van tools en methoden voor software-evolutie, komen we voor een nieuwe uitdaging te staan: Hoe kunnen organisaties deze oplossingen het beste toepassen om de evolutie van hun software te beheren?

Teneinde deze vraag te kunnen beantwoorden helpt SIG haar klanten beter inzicht te krijgen in de economische aspecten van software-evolutie. Het veranderen, of vervangen, van softwaresystemen vergt een investering van tijd en middelen. Potentiële opbrengsten hiervan komen voort uit innovatie, kostenverlaging of wettelijke naleving. De toepassing van nieuwe oplossingen voor evoluerende software heeft impact op de kosten, risico’s, snelheid en zelfs het uiteindelijke resultaat van de evolutie.

Deze economische factoren moeten goed begrepen, gekwantificeerd en gecombineerd worden om het besluitvormingsproces omtrent de software-evolutie op software portfolio niveau te ondersteunen. Daarbij moet één economisch principe van software-evolutie door iedereen worden begrepen: Software wordt niet ontwikkeld om lang mee te gaan, maar om te veranderen.

Joost Visser

Dit opinie artikel is een vertaling van de originele Engelse keynote, die gepubliceerd is in ERCIM News - Januari 2012. Special theme: Evolving Software.

Copyright: © 2014 Software Improvement Group