~/blog/series/code-quality
Codekwaliteit
Hoe je erachter komt of wat de agent schreef deugt, met instrumenten die hem niet vleien.
Waar deze reeks over gaat
Genereren werd goedkoop. Controleren niet, en de meeste instrumenten waar mensen naar grijpen zijn ontworpen voor code waar al iemand over had nagedacht.
Dat is de rode draad door deze stukken. Coverage vertelt je dat een regel is uitgevoerd. Of iemand het zou merken als hij stukging, blijft ongemeten. Een duplicatierapport geeft AI-code een goede score, want de matchers tellen tokens terwijl agents bijna-klonen produceren in plaats van kopieën. Complexiteit blijft ongeveer gelijk terwijl de vorm eronder verandert. Al die getallen kunnen omhoog gaan terwijl de codebase achteruit gaat, en elk stuk hier zoekt uit waar een bepaald instrument ophoudt de waarheid te vertellen.
Wat overeind blijft is weinig spectaculair. Mutation testing, omdat het de vraag stelt of een test überhaupt zou falen. Churn, omdat dat het enige signaal is dat zich meldt voordat iemand klaagt. Een bevroren takenset en een scorer zonder smaak, als de vraag is of een modelwissel iets heeft verslechterd. Een baseline in de repo die vastlegt wat er al staat en weigert wat de agent er net bij zette.
De volgorde loopt van diagnose naar behandeling. Wil je alleen het betoog waarom dit er überhaupt toe doet, dan staat dat in de gids over AI en codekwaliteit. Deze reeks is de werkende helft.
Waar dit naartoe gaat
Het gat dat ik nog wil dichten is meten over tijd in plaats van per pull request. Elk getal hier is eerlijk over één wijziging en onbetrouwbaar over één week, en de bruikbare versie van dit werk is een trendlijn die gewoon blijft lopen. Dat is het stuk dat ik hierna zou willen schrijven, en daar heb ik een langere reeks echte data voor nodig dan ik nu heb.
Je codebase heeft twintig manieren om geld te tonen
AI-code-duplicatie is stil: een overgenomen codebase met twintig inconsistente formatters voor geld en datum. Hoe bijna-klonen ontstaan, hoe je ze opspoort en de CLAUDE.md-regels die ze stoppen.
Technische schuld van AI-code opruimen: de opruimronde die niemand inplant
Churn, duplicatie en de lavalaag zijn diagnoses. Dit is de behandeling: technische schuld van AI-code opruimen in een vaste opruimronde, en welk deel van dat werk de agent zelf kan doen.
AI-codekwaliteit meten: het dashboard voorbij coverage en mutation testing
Coverage bewijst dat een regel draaide, mutation testing bewijst dat een test een bug zou vangen, maar geen van beide zegt iets over of de code stiekem lastiger wordt om aan te passen. Wat complexiteit, clone-detectie en fitness functions wel vangen.
Werd je code slechter na een modelwissel? AI-modellen vergelijken zonder benchmark
Je wisselt van model, er zit iets niet lekker, en je hebt niets om naar te wijzen. Waarom de prompt opnieuw draaien en een model als jury inzetten allebei niet werken, en de kleine, saaie meetopstelling die de vraag wel beantwoordt.
Kwaliteitsdrempels voor AI-code: baselines die alleen strenger worden
Met een lint-baseline dwing je een standaard af die je codebase vandaag nog niet haalt. Bestaande overtredingen krijgen vrijstelling, nieuwe breken de build, en het bestand mag alleen krimpen. Hoe PHPStan, ESLint, detekt en Sonar dit doen, en de vier manieren waarop zo'n drempel stilletjes stopt met werken.