Projecten portfolio
In de twintig jaar engineering bij DAF, ASML en Volkswagen, ben ik altijd bezig geweest met het verbeteren van het proces, het eerder vinden van fouten en het inzichtelijk maken van kwaliteit. Blijkt dat dit gewoon een naam heeft: Quality Assurance (QA). Het leverde mij kilometers ervaring op en leerde me uiterst praktische lessen. Waardevolle ervaring, die ik nu dankbaar inzet voor de projecten van mijn klanten.
Hieronder een aantal projecten uit de afgelopen twintig jaar. Klik op een titel voor de uitdaging, de aanpak en wat het opleverde.
Uitdaging: Een softwaremodule werd na elke sprint gereleased. Bij een release werden unit testen uitgevoerd op deze softwaremodule. Er werd geen softwareintegratietest en geen functionele softwaretest uitgevoerd. Na de release werd de module geïntegreerd in de software, en de software weer op het systeem (hardware), om pas maanden later aan een functionele verificatie onderworpen te worden op een HIL-testopstelling. Hierdoor zijn issues lastiger te vinden en is een bredere analyse benodigd om de bron van de problemen te vinden.
Aanpak: Samen met een team een SWE.6-testframework opgebouwd waarmee de module getest kon worden alsof deze al in het systeem geïntegreerd was. Met een nachtelijke, geautomatiseerde testrun werden issues binnen 24 uur na commit gedetecteerd en geanalyseerd. Omdat we zo dicht op de bron zaten, was de analyse relatief eenvoudig en konden de meeste issues opgelost worden nog voordat de module werd vrijgegeven.
Resultaat: Software issues kwamen niet meer bij Volkswagen terecht. En door de issues binnen 24 uur na de commit weer terug bij de developer te leggen, was de kennis van de wijzigingen nog vers genoeg om de fout snel op te kunnen lossen. Dit bespaarde 6 tot 8 weken doorlooptijd en een ‘ontwikkel-loop’ door de lagen van de V-cycle om het issue te herstellen. Uiteindelijk werd het testframework voor meerdere softwaremodules van Volkswagen toegepast.
Uitdaging: Het testen van de CAN Gateway-functionaliteit gebeurde handmatig en kostte het team minimaal een manweek per testexecutie. Daarbij was het handmatig uitvoeren van deze test behoorlijk monnikenwerk, waardoor er een groot risico was op fouten. Door de grote belasting van deze test werd hij niet altijd uitgevoerd, waardoor er regelmatig issues ontstonden.
Aanpak: Door de bestaande testcases te automatiseren werd de testexecutie vele malen sneller. Maar ook ontstond hiermee de mogelijkheid om op meer parameters te controleren en zo de coverage van de testcases sterk uit te breiden. Tot slot was de menselijke factor eruit en waren de testresultaten 100% betrouwbaar. Uiteindelijk werd het een testset met meer dan 750 geautomatiseerde testcases, inclusief de testopstelling waarmee de testcases zonder handmatige tussenkomst konden draaien en waar wijzigingen vanuit de requirements volledig automatisch in de testcases doorgevoerd konden worden.
Resultaat: Een bredere testcoverage, betrouwbaarder resultaten en een besparing van 40 uur testexecutietijd naar slechts 3 minuten. De testset kon eenvoudig bij elke wijziging opnieuw gedraaid worden, in plaats van alleen bij grote releases. Hierdoor behoorden issues met de CAN Gateway-configuratie tot het verleden.
Uitdaging:Het integratieteam testte op service packs: bundels van patches met status “customer”. Zodra een patch die status kreeg, kreeg deze ook een vast volgnummer. Wijzigingen konden dan alleen nog via een nieuwe patch geïntegreerd worden, achteraan in de rij. Een fout in patch 10 van een service pack met 50 patches betekende dat de fix in patch 51 zat en (klant-)machines niet meer naar patch 10 t/m 50 konden updaten.
Aanpak: Volledige automatisering van de install testcases: testcases die de patchdocumentatie verifiëren door te controleren of alle wijzigingen in softwareparameter- en kalibratiewaarden correct beschreven staan in de release notes, en of er geen ongedocumenteerde wijzigingen zijn. Door dit al op beta-patches te testen, kwamen documentatiefouten aan het licht vóórdat een patch de vaste “customer”-status kreeg. En door op alpha-patches te testen, konden developers al op documentatiefouten gewezen worden, nog voordat de patch überhaupt gereed was en ter integratie werd aangeboden.
Resultaat: Geen fix-patches meer nodig, en de afhankelijkheidspuzzel tussen patches binnen een service pack was nagenoeg verleden tijd; klanten konden naar elke patch updaten. Het integratieteam had aanzienlijk minder werk met het beta maken en integreren van patches. De aanpak werd overgenomen voor andere releases binnen ASML. En met de nominatie vanuit de afdelingsleiding van ASML leverde het mij een TMC Employeneur Award op.
Uitdaging: De Body Builder Module kende meerdere kwaliteitsproblemen: fouten in de software werden pas laat gevonden (bij voertuigbeproeving), de software bestond uit twee aparte varianten die allebei apart getest en onderhouden moesten worden, en een configuratiefout in de PTO-klantparameters veroorzaakte een aanhoudende stroom aan onterechte garantieclaims.
1. Fouten eerder vinden met een systeemtestopstelling (HIL)
Een systeemtestopstelling gebouwd met een voertuigsimulatie in Vector CANoe, met geautomatiseerde systeemtesten. De systeemtest was het vroegst mogelijke moment in het proces waarop softwarefouten relatief snel en goedkoop ontdekt en opgelost konden worden.
Resultaat: Fouten kwamen aan het licht en werden hersteld, nog vóórdat de software werd vrijgegeven voor voertuigbeproeving. Hierdoor werden er geen softwarefouten gevonden na vrijgifte van de software en was er geen extra ‘bugfix ronde’ benodigd om softwarefouten te herstellen.
2. Twee softwarevarianten samenvoegen; architectuur & requirements redesign
Een compleet redesign van de software- en systeemrequirements, en de softwarearchitectuur. De nieuwe requirements maakten preciezer testen mogelijk; de nieuwe architectuur maakte de applicatiesoftware efficiënter in geheugengebruik. Daardoor konden twee aparte varianten van de applicatiesoftware samengevoegd worden tot één softwareapplicatie én ontstond er voldoende ruimte in het geheugen voor de wettelijk verplichte ‘Euro 6 Repair and Maintenance Information’-functionaliteit.
Resultaat: Nog maar één applicatie om te testen in plaats van twee; een halvering van zowel de systeemtesten alsook de voertuigtesten, minder parametertabellen en artikelcodes in het vrijgifteproces en aanzienlijk minder onderhoud aan de softwareapplicatie.
3. Een hardnekkig garantieprobleem opgelost met een redesign van klantparameters
Vóór de redesign was het mogelijk om tegenstrijdige in- en uitschakelcondities in te stellen voor de PTO-klantparameters. Daardoor schakelde de PTO niet meer in, zonder dat er een foutmelding of foutcode actief werd. In het veld werd dit stelselmatig aangezien voor een kapotte ECU: monteurs vervingen de ECU en programmeerden de nieuwe ECU met de standaard klantparameterinstellingen. Met als resultaat dat de PTO weer werkte. De “kapotte” ECU ging voor garantie via DAF, naar de ECU-leverancier, die een hardwaretestapplicatie programmeerde (en daarmee de tegenstrijdige instellingen overschreef) en een hardwaretest uitvoerde, wat uitwees dat de ECU helemaal niet defect was.
Resultaat: Door de PTO-klantparameters zo te herontwerpen dat tegenstrijdige instellingen niet meer mogelijk waren, was het probleem in de kern opgelost. En daarmee behoorden de ongeldige garantieclaims direct tot het verleden.
Uitdaging: Bij een tier-1 toeleverancier moest een testproces geautomatiseerd worden. Samen met enkele collega’s werkte ik als inhuurkracht in een klein testteam, naast enkele vaste medewerkers die daar al jaren zaten en talloze projecten hadden meegemaakt. Vanuit management was besloten dat er geautomatiseerd moest worden: projecten werden complexer en vroegen steeds meer testtijd, en met beperkte capaciteit en budget was automatisering de voor de hand liggende keuze.
Op papier een heldere, technische opdracht. In de praktijk bleek er nauwelijks ruimte voor automatisering. Als inhuurkrachten werden we overladen met taken als het schrijven en ontwikkelen van handmatige testcases; zelfs het uitvoeren van testen kwam uiteindelijk alleen nog bij de vaste medewerkers te liggen. Voor automatisering was geen ruimte: geen licenties, geen hardware en geen mogelijkheden om een vaste opstelling voor geautomatiseerde regressietesten in te richten. Het automatiseringstraject, dat op termijn juist verlichting van het handmatige testwerk had moeten opleveren, werd steeds uitgesteld met als excuus dat er te weinig tijd was, juist omdat er zoveel handmatig getest moest worden. De kruiwagen met het vierkante wiel: te druk met duwen en geen tijd om het ronde wiel te monteren.
De onderliggende oorzaak (het technische QA-vraagstuk):De onderliggende oorzaak (het technische QA-vraagstuk): Het testteam was voortdurend bezig met brandjes blussen op systeemniveau. Dat was het gevolg van te weinig testen op softwareniveau, waardoor softwareintegratiefouten, functionele softwarefouten én systeemintegratiefouten (waar software en hardware samenkomen) allemaal in de systeemtest naar de oppervlakte kwamen. Een fout in die systeemtest kan daardoor tal van onderliggende oorzaken hebben, wat de analyse aanzienlijk complexer maakt. Bovendien kostten de handmatige testen zoveel tijd dat ze niet vaker dan één keer per softwarerelease uitgevoerd konden worden, waardoor fouten pas laat ontdekt konden worden.
De juiste methode om dit aan te pakken zou zijn om teststappen in het proces toe te voegen op de testlagen van het V-cycle-model, de rechter zijde van de V. Een softwareintegratietest (SWE.5) of een functionele softwaretest (SWE.6), zonder de ECU-hardware erbij te betrekken. Echter, dat is voor veel embedded systems geen mogelijkheid. Wanneer dit niet tot de mogelijkheden behoort, helpt het om de iteraties klein te houden en vaker te testen. Bijvoorbeeld: na elke softwarecodewijziging. Dit vereist echter dat de gewijzigde softwaremodule wordt geïntegreerd in de softwareapplicatie, die op zijn beurt weer met de ECU-hardware wordt geïntegreerd tot een systeem. Dit systeem kan dan op een HIL-testopstelling een regressietest ondergaan. Ook deze integratiestappen zijn geen formaliteit; ze vragen bewuste keuzes en kosten tijd. Zonder automatisering van zowel de testcases als het integratieproces, is zo’n proces te zwaar om bijvoorbeeld dagelijks uit te voeren.
Automatisering van testcases bespaart (uiteindelijk) veel tijd, met name tijdens de testexecutiefase; er is immers geen menselijke interactie meer benodigd om de testcase uit te voeren. Daarnaast is een geautomatiseerde testcase in de regel ook sneller, nauwkeuriger en constanter. Dit alles zorgt ervoor dat er in een korter tijdsbestek, méér testcases kunnen worden uitgevoerd, die ook nog eens een betere ‘dekking’ (coverage) hebben. Wanneer de testen vaker en sneller uitgevoerd kunnen worden, kunnen de iteraties kleiner blijven en is het achterhalen van de bron van een fout aanzienlijk minder complex.
Bij dit project zag het management het probleem als een Quality Control-probleem: te weinig testtijd, te veel druk op het testteam. Er is daardoor te snel en met te weinig onderbouwing naar een oplossing gegrepen, zonder eerst goed te kijken naar de oorzaak van deze problemen. Er was te weinig aandacht voor de dagelijkse gang van zaken binnen het testteam en het team werd niet genoeg betrokken bij het verbeterproces. Daardoor bleef het team volledig in de QC-stand: brandjes blussen en problemen zo snel mogelijk oplossen zodra ze zich voordeden, in plaats van ze te voorkomen. De vaste testers, met de testlead voorop, waren al jaren gewend om bij elke release opnieuw dezelfde brandjes te blussen. Dat deden ze graag en keer op keer bewezen ze dat ze daar ook goed in waren; het was hun comfortzone. Automatisering zagen ze, al dan niet bewust, als een bedreiging: het zou hun dagelijkse werk fundamenteel veranderen. Na jaren van reactief de fouten van vandaag analyseren, zou automatisering diezelfde fouten juist in een vroeger stadium vinden; brandpreventie in plaats van brandbestrijding, waardoor de brand klein blijft of zelfs nooit ontstaat. Voor de “brandweermannen” was dat, na jaren in hetzelfde ritme, geen aantrekkelijk vooruitzicht. Ondanks dat het uiteindelijk rust, controle en efficiëntie zou opleveren voor zowel het team als het proces.
De les:Een goed proces optuigen is niet alleen een technisch vraagstuk. Het gaat net zo goed over mensen; niet iedereen is aan verandering toe of staat er voor open. Een oplossing voor een onduidelijke oorzaak en een team dat niet wordt meegenomen in het waarom, leiden zelden tot verandering die beklijft. Juist daarom zijn de STRAK-trajecten gefaseerd, met concrete evaluatiemomenten en met het team achter het stuur. Door het team zelfstandig het proces te laten bouwen, begrijpt het team welke keuzes er gemaakt zijn en waarom. Het zal verantwoordelijkheid nemen voor het proces en uiteindelijk zelfstandig aanpassingen in het proces kunnen implementeren, wanneer dat aan de orde is.
Door samen te werken met het team, en met focus op QA (Quality Assurance) te beginnen met het proces, ontstaat er een proactieve focus op het voorkomen van fouten voordat ze ontstaan. Een focus op gestandaardiseerde procedures en continue procesverbetering. Het gaat om de vraag: “hoe richten we het proces zo in, dat fouten niet ontstaan?”. Dat voorkomt uiteindelijk dat het testen van het (eind)product, QC (Quality Control), een te zwaar proces wordt.