AI testen
Ongemerkt komt artificial intelligence steeds dichterbij. Afhankelijk van de definitie die je hanteert, zou je al kunnen stellen dat AI al een feit is. Allemaal leuk en aardig, maar hoe test je een AI? Of, wat simpeler en misschien wat realistischer voor ons gesteld: hoe test je een systeem dat zich aanpast aan de hand van machine learning? Bijvoorbeeld een systeem dat koopgedrag voorspelt en daar reclame op afstemt, zoals Angie Jones (nu werkzaam bij Twitter) ooit in haar carrière moest testen. Maar bij een machine learning-systeem is het uiteindelijke resultaat van het proces niet gedefinieerd. Je kunt niet zeggen dat het systeem als je Y, X en Z doet, advertentie A, B en C laat zien. Er zijn alleen maar vrij algemene prognoses en verwachtingen. Daar kun je geen nette assertion voor maken in je automatische test.
Kun je dan eigenlijk wel automatisch testen? Jazeker, want je moet tijdens je test de machine laten leren, om te kunnen constateren of het leren goed is gebeurd. In haar voorbeeld liet Angie zien dat automatisch testen hiervoor een vereiste is. Zij moest duizenden transacties uitvoeren om het systeem bepaalde acties aan te leren. Daarna moest zij weer duizenden transacties uitvoeren om te bepalen of het inmiddels ingeleerde systeem naar behoren reageerde zoals goed leek. En wat bleek? Het systeem leerde wel, maar het resultaat was toch niet goed. Ook al waren er geen exacte correcte percentages gedefinieerd, toch was duidelijk dat het systeem een fout bevatte. Deze bevinding werd gedaan door de tijd te nemen om het systeem te laten leren, en daarna het geleerde te laten toepassen. Daarnaast was het resultaat niet van tevoren vast te leggen in een assertion. De bevinding was het resultaat van de beoordeling en beschrijving van de tester. Er is dus, zelfs in deze helemaal geautomatiseerde test, nog steeds plaats voor een menselijke tester.
Waarom moeten we die AI en machines zo goed testen?
Angie Jones had een heel treffend voorbeeld dat ik niet snel zal vergeten. Het was een combinatie van het trolleyprobleem, een gedachte-experiment dat nu heel actueel is met de opkomst van autonome vervoersmiddelen (via Paul Fenwick op Oscon 2017). Het komt erop neer dat er een keuze gemaakt moet worden tussen het redden van twee personen. Wie kies je, ethisch gezien? Angie versimpelde het: als je zou moeten kiezen tussen het aanrijden van een dier (met dodelijk gevolg) of de bestuurder laten verongelukken, wat kies je dan? Eigenlijk iedereen in de zaal koos ervoor om het dier te laten sterven. Daarna liet ze de fotoherkenningssoftware van Google zien, zoals gebruikt in Google Photos. Deze software herkent voorwerpen, dieren, gebeurtenissen en mensen. Het is niet vergezocht dat vergelijkbare software in een autonoom voertuig wordt ingebouwd om mensen te onderscheiden van dieren en voorwerpen. Ware het niet dat in 2015 bleek dat Google Photos soms donkere mensen aanmerkt als ‘gorilla’. Een dier. Als we dan onze voorgaande keuze voor het laten sterven van het dier erbij pakken, wordt al heel snel duidelijk waarom we dit soort algoritmes heel goed moeten testen. Overigens, de oplossing van Google voor dit probleem was heel simpel. Ze ‘herkennen’ gewoon geen enkele aapachtige meer in hun systeem. Probleem opgelost?
De mens overbodig als tester?
Testen van AI en machine learning is dus nog steeds nodig. Maar met machine learning en AI kunnen ook testen gemaakt en uitgevoerd worden. Zijn wij menselijke testers dan nog wel nodig? Niks zo faalbaar als de mens, toch? Gelukkig had Ilari Henrik Aegerter, directeur van House of Test, daar een goede (en zeer humoristische) reactie op. Na een geweldig toekomstbeeld waarin AI’s het overnemen van ons, werd het al snel serieuzer. Hij zette AI en mensen tegenover elkaar in het proces en gaf aan dat wij nog steeds nodig zijn. Software is immers gemaakt door en voor mensen, en wij zijn dus een integraal en onvervangbaar onderdeel hiervan. En hoe bepaal je bijvoorbeeld goede dekking? Goede dekking is altijd een beladen term, populair bij managers, minder populair bij ontwikkelaars en testers. En waarom? Omdat je de dekking altijd bepaalt aan de hand van een model van de software, en nooit aan de hand van de software zelf. En daarom is dekking altijd een onzekere term, die niet bruikbaar is, in ieder geval niet zoals deze nu gebruikt wordt.
Allemaal leuk en aardig natuurlijk die ervaringen met machine learning en die gedachte-experimenten over het testen van en met AI. Maar niet velen van ons zullen daar nu echt al iets aan hebben. Gelukkig was een groot deel van de dag gevuld met praktische presentaties, waarvan ik er graag enkele uitlicht.