Deze week stond in het teken van het verder uitwerken van het Core-project, het uitgebreid testen van libraries en onverwachte verbeteringen aan het Timotheus project. Ook maakte ik kennis met AI-ondersteunde ontwikkeltools die mijn workflow drastisch veranderden.
Core.All project: NuGet packages en deployment
De week begon met het fixen van het Core.All project. Het hoofddoel was om de build weer werkend te krijgen, de action op Gitea te herstellen en de beschikbare NuGet packages te deployen.
Debugging en refactoring
Een lastig te vinden error bleek te schuilen in een verstopt .props-bestand in één van de subprojecten, dat een niet-bestaand icon.png verwachtte tijdens de NuGet build:
<!-- Probleem in props-file -->
<PropertyGroup>
<PackageIcon>icon.png</PackageIcon>
<!-- Andere properties -->
</PropertyGroup>Na deze ontdekking refactorde ik het project zodanig dat er meer NuGet packages beschikbaar zouden komen. De volgende uitdaging was een external library met versie-incompatibiliteiten. Hier bleek een downgrade van .NET 9.0 naar .NET 8.0 een deel van de oplossing, maar er bleven errors bestaan.
Na overleg met mijn mentor hebben we besloten om niet-essentiële projecten uit de external library te verwijderen. Dit resulteerde in één project dat succesvol kon builden, waarna we de action konden configureren om deze solution te gebruiken tijdens het build-proces.
Versioning issues
Het koppelen van de NuGet packages van de external libraries aan het Core-project was complexer dan verwacht:
Eerst waren er versioning issues die gestroomlijnd moesten worden
De referenties naar de external libraries bleven bestaan in de solution
Er waren nog steeds referenties naar obsolete projecten
De Gitea link in de action was niet meer correct
Een README.MD bestand had een incorrecte naam
Na het oplossen van al deze issues werkte alles zoals verwacht en waren alle NuGet packages succesvol gedeployed.
Command Worker refactoring
Dinsdag ging ik verder met de Command Worker, waar ik enkele errors moest wegwerken. Het pad naar het project in de solution klopte niet meer. Na het fixen hiervan en het uitvoeren van de nodige refactoring om ook hier NuGet packages van te maken, werkte de build zoals verwacht.
De absolute paden in de solution heb ik omgevormd naar relatieve paden middels enkele find-and-replace operaties. Hierna werkte mijn mentor aan een clean-up job op Gitea om oude NuGet packages te verwijderen, die ik vervolgens moest controleren en verbeteren.
Keep the most recent:
5 versions per package
Keep versions matching:
(^\d+\.\d+\.\d+$)|(.*-rc\..*)
Remove versions matching:
.*(alpha|beta|develop|preview|dev).*Door middel van regex expressies heb ik de clean-up job verbeterd zodat alleen de meest recente alpha-versie en alle stabiele releases behouden blijven.
Unit Testing
De volgende grote opdracht was het schrijven van unit tests voor elk project in Core.All. Mijn mentor wilde dat ik in de testprojecten dezelfde structuur hanteerde als in de libraries, wat het proces aanzienlijk complexer maakte.
Structuur en merge-issues
Woensdag begon met het doornemen van de planning met mijn mentor. Hij had een merge uitgevoerd van mijn branch en de develop branch van de Command Worker. De eerste stap was het verwijderen van bin/obj folders en lege directories met een script, gevolgd door het rebuilden van beide solutions.
Er doken verschillende structuurproblemen op omdat sommige projecten niet meer in de source map zaten. Hierdoor kwamen testfolders onder de root van het project terecht en werd de project file zonder de juiste package references gebruikt. Na het oplossen van deze issues kon ik de stabiele versies online pushen.
Unit tests en code issues
Het schrijven van unit tests bracht enkele fouten in de libraries aan het licht. Na overleg met mijn mentor besloten we de libraries aan te passen en nieuwe stabiele versies te deployen. Een specifiek probleem betrof de ASCII-encoding, aangezien we nu Base64 gebruikten en er inconsistenties optraden bij karakters boven 127 bytes (ASCII is 7-bits), wat resulteerde in corrupte gegevens.
Cursor: AI in development
Woensdag begon ik ook met het gebruik van Cursor, een AI-tool die kan compileren, tests runnen, commando's uitvoeren en code schrijven. Het was een bijzondere ervaring die mijn productiviteit enorm verhoogde - ik heb binnen een dag ongeveer 400 tests kunnen schrijven met behulp van deze tool.
Dit leidde wel tot een interessante vraag: is het zinvol om interfaces te testen? Mijn mentor vond van niet, dus deze tests zijn later verwijderd.
Prompt engineering
Donderdag ging ik verder met het schrijven van tests, maar besteedde ook aandacht aan het verbeteren van mijn prompts voor de AI-tool. Ik merkte dat sommige prompts ruimte voor interpretatie lieten, wat tot onduidelijke resultaten leidde. Door mijn prompts te verfijnen, kon ik de kwaliteit van de gegenereerde code significant verbeteren.
Onverwachte terugkeer naar Timotheus
Vrijdag dacht ik weer de hele dag tests te gaan schrijven, maar Timotheus kwam nog eens om de hoek kijken. Er waren specifieke verzoeken om het logo en social media links in de e-mails te integreren die na het invullen van een test werden verzonden. Ook bleek één van de testen, de stresstest, nog steeds niet correct te werken.
E-mail templates verbeteren
Ik begon met het toevoegen van de banner in beide e-mails, gevolgd door het integreren van de logo's. Omdat de afbeeldingen verschillende dimensies hadden, moest ik mijn designvaardigheden inzetten en heb ik in Figma de afbeeldingen aangepast.
Na enkele iteraties en tests realiseerde ik me dat Outlook en sommige andere e-mailproviders CSS anders interpreteren en met tabellen werken.
Stresstest fixen
Vervolgens heb ik de stresstest geanalyseerd. Mijn vermoeden dat randgevallen zoals gelijke scores het probleem veroorzaakten, bleek correct. Na het implementeren van een fix en het uitgebreid testen, bleek het probleem opgelost.
Hardwareupgrade en diepgaand begrip
Aan het einde van de week ontving ik nieuwe hardware: een kabel om twee schermen te kunnen gebruiken en een headset voor calls. Deze upgrade zal mijn workflow verder verbeteren.
Mijn mentor benadrukte het belang van het echt begrijpen van alle tests en de achterliggende code, in plaats van alleen maar AI-gegenereerde tests te gebruiken. Dit is een belangrijke les voor mijn verdere ontwikkeling als software engineer.
Conclusie
Week 5 was opnieuw een week vol technische uitdagingen, maar ook met belangrijke leermomenten over de balans tussen productiviteit en diepgaand begrip. De combinatie van CI/CD workflows, unit testing en het gebruik van AI-ondersteunde ontwikkeltools heeft me veel nieuwe inzichten gegeven.
Volgende week ga ik verder met het dieper begrijpen van de codebase en het verbeteren van mijn unit tests, met een goede balans tussen AI-ondersteuning en eigen analyse.