Metaprogramming

Metaprogrammeren verhoogt productiviteit

Tony Koeleman
14 June 2022

Metaprogrammeren verhoogt productiviteit

Bij MetaFactory doen wij aan metaprogrammeren. Hierdoor verbetert onze overall productiviteit van software ontwikkeling met 100%. IDC Metri is een bedrijf gespecialiseerd in functiepuntanalyse. Een consultant van IDC Metri heeft in een onafhankelijk onderzoek vastgesteld dat MetaFactory een productiviteit heeft van 5 uur per functiepunt. Daarmee is MetaFactory minstens 2x sneller als de gemiddelde tijd die nodig is om vergelijkbare op Java gebaseerde systemen te ontwikkelen.

Voorspellende waarde van de functiepuntanalyse

Meten is weten. Als je als organisatie meerdere software projecten uitvoert in een relatief stabiele, goed gedocumenteerde omgeving en je uren goed registreert dan weet je hoeveel uur je per functiepunt nodig hebt voor de realisatie. Als teamleden hun uren nauwkeurig vastleggen op type werkzaamheden en projectonderdeel, dan krijg je data waarmee je nauwkeurig de productiviteit (lees het aantal uren) per functiepunt kan vaststellen. Bij MetaFactory registreren we meerdere keren per dag waar we mee bezig zijn op story niveau! Dat lijkt heel bewerkelijk, maar het went en het geeft je een schat aan informatie, zie hieronder. Ons – ook middels metaprogrammeren – gerealiseerde urenregistratie systeem is gekoppeld aan Jira. Alle belangrijke Jira entiteiten als Project, Epic en Story synchroniseren we met de urenadministratie. Een medewerker geeft per story aan hoeveel tijd hij/zij heeft besteed en waaraan (analyse, software ontwikkeling, testen, etc).

Dus als je je uren niet goed bijhoudt, dan kan je nog steeds vooraf een functiepuntanalyse uitvoeren. Je kan achteraf echter niet vaststellen wat de productiviteit is. De voorspellende waarde is in dat geval dan ook beperkt. Dus: registreer je tijdbesteding zo nauwkeurig mogelijk! Het loont.

Productiviteitsmeting bij MetaFactory

Een consultant van IDC Metri heeft de hierboven genoemde urenadministratie vastgesteld op 517 functiepunten. De uren uit onze urenadministratie gedeeld door deze functiepunten levert een productiviteit op van 4,91 uur (afgerond 5 uur) per functiepunt. De urenadministratie van MetaFactory heeft een Java achterkant en een Angular voorkant. Vergelijkbare systemen gerealiseerd door andere organisaties hebben een gemiddelde productiviteit die minstens een factor 2 lager uitkomt, zie de ISBSG database.

Gevolgen van metaprogrammeren op de productiviteit

5 uur per functiepunt is interessant. Nog boeiender is onze analyse van de gevolgen van metaprogrammeren op productiviteit. Als MetaFactory een software applicatie maakt dan zien we binnen ieder project dat we steeds de volgende beslisboom aflopen bij het realiseren van software:

Beslisboom metaprogrammeren

Scenario’s

  1. Stel: we moeten een stuk software schrijven dat uniek is. Dat schrijven we gewoon met de hand.
  2. Stel: we zien een patroon in ons te ontwikkelen systeem en hebben hier nog geen Code Instructie voor (de Code Instructie is de meta-programmeertaal van MetaFactory). Dan programmeren we de oplossing eerst met de hand (zie scenario 1). Dan maken we Code Instructies om deze vervolgens te kunnen gebruiken en de software te genereren (zie scenario 3).
  3. Stel: we moeten een stuk software schrijven waarvoor we bruikbare Code Instructies kunnen gebruiken.

Als we – met dank aan het gedetailleerd schrijven van uren – het gemiddelde van 5 uur per functiepunt loslaten op de MetaFactory wijze van programmeren in combinatie met metaprogrammeren dan komen we tot de volgende tabel.

ScenarioToelichtingUren per functiepunt
1Handmatig software schrijven8,6
2Maken Code Instructies10,8
3Genereer software1,7
Gemiddeld5

Rekenvoorbeeld: Een bepaalde functionaliteit heeft 10 functiepunten en deze komt 1, 2, 3, 4, … x voor in je applicatie en je ziet een duidelijk patroon in je software, dan is dit de rekensom van de benodigde tijd in uren.

Aantal vergelijkbare functies (x 10 functiepunten)Handmatig software maken (scenario 1)Handmatig software maken, dan maken code instructies en daarna genereren (scenario 1 en 2 en 3)Toepassen bestaande code instructies (scenario 3)
formulen  * 8,6u * 10fp(8,6u + 10,8u + n * 1,7u) * 10fpn  * 1,7u * 10fp
n = 1            86 uur          211 uur            17 uur
n = 2          172 uur          228 uur            34 uur
n = 3          258 uur          245 uur            51 uur
n = 4          344 uur          262 uur            68 uur
n = 5          430 uur          279 uur            85 uur
n = 10          860 uur          364 uur          170 uur
n = 20       1,720 uur          534 uur          340 uur
n = 50       4,300 uur       1,044 uur          850 uur
n = 100       8,600 uur       1,894 uur       1,700 uur

In de praktijk betekent het bij MetaFactory dat we vanaf n = 3 een Code Instructie gaan maken.

  • Het kost 3 functies x 8,6 uur x 10 functiepunten = 258 uur om 3x een functie met de hand te schrijven.
  • Het kost (8,6 + 10,8 + 3 x 1,7 uur) x 10 functiepunten = 245 uur om de functie eerst met de hand te schrijven, dan er Code Instructies van te maken en op basis van de Code Instructies de functie 3x te genereren.

Conclusie

De conclusie is dat metaprogrammeren al vrij snel loont bij het maken en onderhouden van een applicatie. Je moet er in getraind worden, maar al vrij snel zal je zien dat iedere applicatie vol zit met patronen. Vandaar de pay-off van MetaFactory: “Your own great code in half the time”. En dit staat nog los van de relatie metaprogrammeren en software kwaliteit.

Wil je weten wat metaprogrammeren voor jou kan betekenen? Neem dan contact met ons op.

Abonneer
Laat het weten als er
guest
0 Comments
Inline feedbacks
Bekijk alle reacties

Ook interessant

0
Zou graag jouw mening willen weten. Laat een reactie achter.x
()
x