kwitters zei:
Men kan niet bewijzen dat het model voldoet aan de verwachtingen van de klant, want klanten weten meestal niets over programmeren, laat staan formele of wiskundige methoden. Dus je vertrekt al van een model dat fout kan zijn. Welk nut heeft het dan om al dan niet te bewijzen of iets aan dat model voldoet, als je al van een foutief model vertrekt?
Het is totaal naast de kwestie of de klant al dan niet een model begrijpt of dat we niet kunnen bewijzen dat een model voldoet aan de verwachtingen van de klant. Op elk bepaald moment heb je immers wel sowieso een idee nodig van wat de klant verwacht, anders kan je ook geen source-code beginnen schrijven op dat moment. Op dat moment kan je dus evengoed een model maken, bruikbaar om ondubbelzinnig te communiceren onderling, om specificaties te vergelijken met elkaar, om implementaties te controleren aan de specificaties die men denkt dat op dat moment geldig zijn. De voordelen die ik hier al drie keer heb neergetikt dus.
Bij source code hoef ik trouwens niets te bewijzen, aangezien de computer het uitvoert zoals het er staat: de fout zit altijd bij wat de mens "denkt" dat het doet of moet doen. Zulke problemen kan je enkel oplossen door te testen: kijken of het programma voldoet aan de verwachtingen van de *klant*.
Dat is dan ook net de hele pointe van waarom men programma's gaat bewijzen: om zeker te zijn dat de source code die je hebt geschreven overeenkomt met wat jij als _programmeur_ denkt dat het programma doet (getuige de vele bugs is dat niet altijd juist gedacht). En dat probleem kan men wel degelijk oplossen door het te bewijzen.
Voldoen aan de verwachtingen van de klant is nog iets totaal anders, dat kan men natuurlijk enkel door een prototype te tonen aan de klant. Of bij een klant die de specificaties kan lezen, door de specificatie te tonen.
In de slides die je doorstuurde staat dat formele methoden 40 jaar oud zijn, vind je het zelf dan niet vreemd dat die in de praktijk zelden gebruikt worden?
In Frankrijk gebruikt men de B-methode al vaker in de industrie.
En 40 jaar is heel kort. 40 jaar terug begon men nog maar net met het onderzoek naar formele methoden, immers, voor men programmeertalen had, kon men ook geen onderzoek beginnen doen naar programmeertalen nietwaar?
Formele methoden vereisen bovendien nieuwe denkwijzen om aan wiskunde te doen (cfr Dijkstra's "how computing science created a new mathematical style"), iets wat men niet zomaar in 1-2-3 aanleert. Die technieken worden nu nog steeds niet degelijk aangeleerd in de vele opleidingen informatica die bestaan, waardoor de industrie niet de broodnodige injectie krijgt van mensen met een degelijke kennis ervan.
Daarnaast zijn er veel commerciële successen geoogst met software met bugs en heeft men de gebruikers kunnen doen wennen aan het idee dat software onvermijdelijk bugs bevat, waardoor managers nog minder geneigd zijn om hun mensen in opleiding te sturen, dat kost immers geld (patches schrijven achteraf echter ook, om te zwijgen van schadevergoedingen).
Het gaat zelfs zover dat sommigen claimen dat software-schrijvers niet verantwoordelijk kunnen gesteld worden voor fouten in hun software (cfr Alan Cox) ...
De gewenste implicatie van je vraag, dat het aan de formele methoden zelf zou liggen, is dus niet waar. Het is een samenloop van omstandigheden die verhinderd heeft dat formele methoden een echt wijdverspreid gebruik kennen in de industrie. Wat niet betekent dat we niet moeten streven naar meer professionalisme en ze alsnog trachten te incorporeren. Bugs kosten namelijk veel geld en frustratie.
Met het gaan naar parallelle software zal men niet anders kunnen dan zich van andere patronen bedienen dan "write-test-fix/release" trouwens, de meest vreemde bugs kunnen zich daar immers voordoen, die maar al te vaak onopgemerkt worden tijdens een gewone testfase.
De slides die je doorstuurde geeft trouwens aan dat het om een waterfall model gaat. Een waterfall model wil zeggen dat wanneer je de requirements aanpast, alle stappen terug moeten doorlopen worden. Bij een incrementeel process is dit niet zo, men voegt steeds meer functionaliteit toe in kleine stappen.
EDIT: misschien is dit niet duidelijk, dus hier even extra uitleg: een klant gaat geen feedback geven op jou voorgesteld formeel model aangezien hij hier niets van begrijpt, hij geeft feedback op het uiteindelijk werkende resultaat: maw, klant zegt dat er iets niet in orde is, jij moet alle stappen terug doorlopen om weer feedback te krijgen = waterfall model.
Als je degelijk naar het schema had gekeken had je gezien dat de klant geen feedback geeft op het voorgesteld formeel model, maar op een functioneel prototype.
Dat men dan terug opwaarts moet reizen is onvermijdelijk, voor het nieuwe stuk heb je sowieso een model nodig, met de vermelde voordelen voor het vermijden van code-duplicatie door verschillend lijkende specificaties eventueel equivalent te kunnen aantonen.
Je doet uitschijnen alsof alle stappen terug moeten doorlopen worden voor de gehele applicatie, wat hoegenaamd niet zo is, enkel voor de nieuwe zaken moet dit gebeuren (dus zelfs al was dit een waterfall-model, dan is de commentaar dat dit veranderende specificaties niet zou aankunnen totaal uit de lucht gegrepen).