Nooit meer overtypen


Tijdens mijn werk bij AFAS stuitte ik onlangs op een afrondingsbug waarvoor productiedata nodig was in een testcase. De gegevens waren opgeslagen in XML, maar mijn testcase vereiste C# API-aanroepen. Hoewel de dataset klein was (slechts 20 regels met 3 waarden), zou het handmatig overtypen ervan vervelend zijn geweest. Dit was een perfecte kans om AI in te zetten.

In plaats van een prompt te gebruiken of regexes te maken (zoals besproken in mijn vorige post), vond ik een nog eenvoudigere methode met behulp van GitHub Copilot.

Dit is het proces dat ik volgde:

  • XML-gegevens opschonen: De XML-invoer was vrij groot. Ik gebruikte (door AI gegenereerde) regexes om irrelevante regels te verwijderen.
  • Plakken en commentaar toevoegen: Na het opschonen plakte ik de gegevens in mijn code als commentaar, zoals dit:

// <AccountNumber>0652</AccountNumber>
// <IsAsset>false</IsAsset>
// <CurrentYearAmount>32987.5900000000</CurrentYearAmount>
// <CurrentYearRoundedAmount>32988</CurrentYearRoundedAmount>
// <AccountNumber>0900</AccountNumber>
// <IsAsset>false</IsAsset>
// <CurrentYearAmount>0.0000000000</CurrentYearAmount>
// <CurrentYearRoundedAmount>0</CurrentYearRoundedAmount>
// <AccountNumber>1100</AccountNumber>
// <IsAsset>true</IsAsset>
// <CurrentYearAmount>12445.5000000000</CurrentYearAmount>
// <CurrentYearRoundedAmount>12446</CurrentYearRoundedAmount>
// Etcetera...

  • GitHub Copilot gebruiken: GitHub Copilot herkent patronen in tekst en biedt autocomplete-suggesties voor de volgende logische instructie. Ik begon met het zelf schrijven van de eerste regel code:

var lines = new[] { new DBuilder().Set("type", liabilitiesType).Set("amount", 32987.59m).Build(), // 0652

Copilot koppelde dit meteen aan de eerste regel van mijn testgegevens. Vervolgens stelde het op intelligente wijze de volgende coderegel voor op basis van de daaropvolgende regel testgegevens.

new DBuilder().Set("type", liabilitiesType).Set("amount", 0m).Build(), // 0900
new DBuilder().Set("type", assetsType).Set("amount", 12445.5m).Build(), // 1100 // Etcetera...

Het enige wat ik hoefde te doen was een paar keer op Tab te drukken totdat al mijn testgegevens waren geconverteerd ?. Zoals je kunt zien, begreep Copilot ook enkele semantiek. Het zette mijn "IsAsset"-eigenschap correct om en maakte een nauwkeurige aanname over de rest van mijn API.

Maar betekent dit dat ik nooit meer iets hoef over te typen? Tijd voor een echte uitdaging. Soms moet ik problemen reproduceren waarbij de tester of klant een screenshot heeft ingediend met de in te vullen velden om het probleem te reproduceren. In plaats van de gegevens handmatig over te typen vanaf de screenshot, gebruik ik nu dezelfde techniek. Hier is een screenshot met enkele testgegevens:
 

De eerste stap is om OCR (Optical Character Recognition) te gebruiken om tekst uit de afbeelding te extraheren. Op Windows gebruikte ik Microsoft PowerToys (win-shift-T) om de tekst uit de screenshot vast te leggen. Vervolgens plakte ik de tekst als commentaar in een playwright-testcase zoals hieronder en voegde de eerste regel van het gewenste resultaat toe:

test('investigation', async ({ page }) => {
    await page.goto('/');
    // Naam
    // Rechtsvorm
    // Omzetbelastingnummer
    // Kvk-nummer
    // Rsin
    // Bestaansperiode
    // Oprichtingsdatum
    // Statutaire vestiging
    // Groepsmaatschappij
    // Projecten
    // Periodetabel financiéle administratie
    // Omschrijving
    // Bespreking van de resultaten toevoegen
    // Enyoi ICT services B.V.
    // Besloten vennootschap
    // NM 23456782801
    // 31046822
    // 123456782
    // datum oprichting
    // 1 april 1996
    // Maand - 01-01-2022

    await page.getByLabel('Naam').fill('Enyoi ICT services B.V.');

Zoals je kunt zien, bevatte de geplakte tekst eerst alle veldlabels en daarna de waarden, wat het extra uitdagend maakte voor AI om de volgende regel nauwkeurig te raden. Maar geen zorgen, Copilot wist meteen wat te doen:

await page.getByLabel('Rechtsvorm').fill('Besloten vennootschap');
    await page.getByLabel('Omzetbelastingnummer').fill('NM 23456782801');
    await page.getByLabel('Kvk-nummer').fill('31046822');

Dus de volgende keer dat je iets moet overtypen, onthoud dan dat je AI op deze manier kunt gebruiken.

Over de auteur

Johan is een Lead Software Architect bij AFAS. Hij is gepassioneerd over de toepassing van AI bij het programmeren en schrijft hier regelmatig over.

Auteur: Johan Gorter

Meer lezen?