← Nieuwste papers
💻 computer science

Combining Tests and Proofs for Better Software Verification

Dit artikel beschrijft hoe testen en formeel bewijzen complementair kunnen worden ingezet door gebruik te maken van 'Design by Contract' en SMT-gebaseerde tegenvoorbeelden voor automatische testgeneratie, regressietesten en foutcorrectie.

Oorspronkelijke auteurs: Li Huang, Bertrand Meyer, Manuel Oriol

Gepubliceerd 2026-02-10
📖 4 min leestijd☕ Koffiepauze-leesvoer

Oorspronkelijke auteurs: Li Huang, Bertrand Meyer, Manuel Oriol

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je voor dat je een nieuwe, ingewikkelde kookmachine hebt ontworpen. Je wilt er absoluut zeker van zijn dat hij nooit een explosie veroorzaakt of je soep in de keuken sproeit. Om dit te controleren, heb je twee opties:

  1. De Test-methode (De 'Proever'): Je zet de machine aan, gooit er wat ingrediënten in en kijkt wat er gebeurt. Als hij een keer een fout maakt, weet je dat er iets mis is. Maar... je kunt nooit alle combinaties van ingrediënten en temperaturen testen. Je mist altijd wel een scenario.
  2. De Bewijs-methode (De 'Wiskundige'): Je gaat niet koken, maar je bestudeert de bouwtekeningen en de wiskundige formules van de machine. Je probeert te bewijzen dat, ongeacht wat je erin stopt, de machine altijd veilig blijft. Dit is superzeker, maar het is ontzettend moeilijk en saai om die enorme stapels berekeningen te maken.

Lange tijd dachten mensen in de softwarewereld dat dit twee totaal verschillende werelden waren: de praktische "proever" tegenover de theoretische "wiskundige".

Wat dit onderzoek doet, is die twee werelden laten trouwen.

De onderzoekers (Huang, Meyer en Oriol) hebben een manier gevonden waarbij de wiskundige en de proever elkaar helpen. Ze gebruiken een slimme computertechniek die ze als een soort "detective" kunnen zien.

Hier zijn de drie grote trucjes die ze hebben bedacht:

1. Van "Ik weet het niet" naar "Kijk hier!" (Proof2Test)

Stel, de wiskundige zit met zijn handen in het haar. Hij probeert te bewijzen dat de machine veilig is, maar de berekening loopt vast. Hij zegt alleen: "Het klopt niet." Dat zegt een programmeur natuurlijk helemaal niets.

De nieuwe techniek werkt als een detective die niet alleen zegt "er is een misdaad gepleegd", maar die direct een foto aanlevert van de dader: "Kijk, als je precies 5 gram zout en 200 graden gebruikt, gaat het mis!" De computer maakt van een ingewikkelde wiskundige fout een simpel, uitvoerbaar testje. Zo begrijpt de programmeur direct waar de fout zit.

2. De Automatische Reparateur (Proof2Fix)

Als de detective de fout heeft gevonden, kan de computer nu ook proberen de machine te repareren. In plaats van dat een mens urenlang moet zoeken naar de juiste instelling, stelt de computer een oplossing voor. En het mooiste? De wiskundige controleert de reparatie direct. Het is alsof je een robot hebt die niet alleen zegt dat je motor kapot is, maar ook meteen een nieuw onderdeel inbouwt en daarna met een officieel certificaat bewijst dat de motor nu weer 100% veilig is.

3. De "Sabotage-test" (Seeding Contradiction)

Dit is de meest creatieve methode. Normaal gesproken wil je een machine die perfect werkt. Maar deze onderzoekers doen iets geks: ze nemen een perfect werkende machine en ze saboteren hem expres op elk klein onderdeel. Ze bouwen kleine "valstrikken" in de code.

Waarom? Omdat ze dan de wiskundige kunnen dwingen om die valstrikken te vinden. De wiskundige zegt: "Hé, bij dit onderdeel gaat het mis!" De computer pakt die fout en maakt er een test van. Door de machine expres kapot te maken op alle mogelijke manieren, creëren ze een complete lijst met tests die de machine in het echte leven perfect beschermen. Het is alsof je een kluis bouwt en daarna een leger aan inbrekers inhuurt om te kijken of ze ergens een gaatje kunnen vinden.

De conclusie

In plaats van te kiezen tussen "gewoon een beetje testen" of "moeilijk wiskundig bewijzen", laten deze onderzoekers zien dat je het beste resultaat krijgt door ze te combineren. De wiskunde geeft de richting aan, en de tests maken het begrijpelijk en praktisch. Zo bouwen we software die niet alleen "waarschijnlijk werkt", maar die we echt kunnen vertrouwen.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →