Wim_Couwenberg_02

Wim Couwenberg 

3 September 2008

Zoals we kunnen lezen in vele artikelen in dit tijdschrift is de rol van architect een lastige en complexe. Een van die uitdagingen is het effectief hergebruiken van bestaande componenten. Daarbij zoeken we uit de onderdelen die eerder zijn ontwikkeld de versies die het beste passen binnen het nieuw te ontwikkelen product. Daarnaast proberen we componenten zo te ontwikkelen dat ze goed in de toekomstige producten en productvarianten bruikbaar zijn.

Verreweg de meeste aandacht gaat daarbij uit naar het vinden van de overeenkomsten tussen toepassingsgebieden. We ontwikkelen onderdelen zo, dat ze deze overeenkomstige kenmerken bevatten. Dat is echter nog kinderspel vergeleken met de grootste uitdaging wat betreft de ontwikkeling van herbruikbare componenten. Naar mijn mening is dat de omgang met de verschillen tussen de vereiste eigenschappen van producten. Met andere woorden, hoe kunnen we componenten zo ontwerpen dat ze niet alleen de gedeelde functionaliteit leveren, maar ook geschikt zijn om de specifieke kenmerken van de producten te realiseren? Meer flexibiliteit in je software is daarbij lang niet altijd beter.

Aan de ene kant heeft de geboden keuzeruimte – en haar realisatie in de software – namelijk grote invloed op zowel de uiteindelijke geboden functionaliteit als de kwaliteit: extra flexibiliteit vereist vaak ook extra resources. Aan de andere kant heeft deze grote invloed op de configureerbaarheid.

In de praktijk brengen we deze flexibiliteit meestal op ad-hocbasis in de software, zonder van tevoren goed na te denken over hoe en waar de geschapen keuzeruimte zal worden gebruikt. Het gevolg is een complex geheel waar met een ratjetoe aan manieren het uiteindelijke product tot de gewenste eigenschappen moet worden geconfigureerd.

 advertorial 

Free webinar ‘Modernizing your code base with C++20’

As many production tool chains now adopt C++20 features, the potential this brings is unlocked. What advantages can recent versions offer to your code base? In this webinar we’ll look at the great improvements C++ has gone through and how features like concepts and ranges can transform your code. Register for 2 February, 4PM.

In mijn werkomgeving kom ik legio van dit soort voorbeelden tegen. Zo gebruik ik componenten waarbij niet alle functionaliteit wordt geboden die ik nodig heb. Of krijg ik juist een hoop functionaliteit waar ik helemaal niet om heb gevraagd. Verder zie ik ontwikkelaars veel keuzeruimte realiseren waar in de praktijk helemaal geen gebruik van wordt gemaakt – binnen ieder project wordt steeds voor dezelfde variant gekozen. Toch vereisen de mechanismen voor die keuzeruimte vaak extra resources en leveren ze extra complexiteit op tijdens de configuratie.

Dit alles resulteert in extra inspanningen, waardoor ontwikkelaars veel tijd besteden aan het kiezen van de juiste opties en zij de generieke componenten toch nog flink aan moeten passen. Het gebeurt zelfs dat componenten binnen verschillende projecten op dezelfde manier worden aangepast. Al met al blijkt dus dat de gerealiseerde variabiliteit vaak net niet past binnen de producten waarin ze worden gebruikt.

Om ideeën op te doen met betrekking tot het omgaan met variabiliteit, heb ik de laatste tijd wetenschappelijke artikelen over dit onderwerp bestudeerd. Variabiliteit, ook wel flexibiliteit of configureerbaarheid genoemd, is in die wereld een begrip dat al meer dan tien jaar in de belangstelling staat. Hele artikelen, tijdschriftedities en proefschriften zijn aan het onderwerp gewijd en recentelijk nog werd het eerste symposium specifiek over softwarevariabiliteit aangekondigd.

Veel onderzoek richt zich op het expliciet maken van variabiliteit in een model, waarbij een project het model gebruikt om het configuratieproces te ondersteunen. Een brede oplossing wordt bijvoorbeeld besproken in het proefschrift van Sybren Deelstra en Marco Sinnema. Zij beschrijven hoe je conceptueel over variabiliteit na kunt denken, maar bieden ook concrete oplossingen om het configuratieproces en de beslissingen rond evolutie van componenten te vereenvoudigen.

Mijn volgende interessante uitdaging is nu om op basis van deze ideeën de variabiliteit in kaart te brengen binnen mijn werkomgeving. Daarbij kun je denken aan de mechanismen die we gebruiken om flexibiliteit te realiseren en in hoeverre de geboden variabiliteit op dit moment invulling geeft aan de benodigde keuzeruimte. Ik ben ervan overtuigd dat we, alleen door op zo‘n expliciete manier over variabiliteit na te denken, de flexibiliteitsparadox het hoofd kunnen bieden.