[Cursus] TDD

Pagina: 1
Acties:

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
Ik doe wel eens aan unit testing, maar zou daar graag veel meer aan doen. Ik kan op zich wel internet afstruinen, een boel blogs, wiki's en screencasts doornemen en daar mijn eigen kennis uit distilleren, maar ik zou liever een cursus volgen waar men ahv praktische voorbeelden een paar best practices illustreert. Zo een concreet volledig uitgewerkt verhaal waar je mee kunt interageren werkt vaak prettig als vertrekpunt voor je eigen invulling ervan. Bovendien is het risico dat je'n boel informatie tot je neemt waar je helemaal niets mee kunt, een stuk kleiner.

Ik kan echter nergens in de buurt zo'n cursus vinden. Iemand een suggestie? Of gewoon een meer algemene tip mbt mijn wens? :)

PS:ik werk voornamelijk in ASP.NET/C#

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:26
Wil je een cursus over Unit Testing, of over Test Driven Development ?

Ik weet eigenlijk niet of er dergelijke cursussen beschikbaar zijn ....
Test Driven Development vereist imho veel 'discipline'; je moet nl. iedere keer beginnen met het schrijven van je tests, en op die manier verder gaan ontwikkelen.
Het voordeel hiervan is dan dat je een goede 'API' kunt gaan ontwikkelen.
Of er hier echte cursussen / workshops voor bestaan ? Wellicht; maar ik denk ook dat het iets is wat je je vooral eigen kunt (of moet ? ) maken door praktijk ervaring. Door het zelf te doen, zelf toe te passen etc...

https://fgheysels.github.io/


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 18-11 13:39
Ik ben ook geïnteresseerd in TDD en Acceptance TDD en heb daarom recentelijk het boek Test Driven gelezen. Nu is dat boek nogal specifiek op Java gericht, maar de concepten zijn universeel.
Of er echt cursussen zijn die je als individu kan volgen weet ik niet, maar er zijn wel bedrijven die trainingen op dit gebied verzorgen voor bedrijven/ontwikkelteams. Het bedrijf waar de auteur van boven genoemd boek werk bijvoorbeeld (Reaktor Innovations).

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
whoami schreef op maandag 18 februari 2008 @ 11:58:
Wil je een cursus over Unit Testing, of over Test Driven Development ?
Nou, doe maar allebei tegelijk dan... als je mij begrijpt.
Test Driven Development vereist imho veel 'discipline'; je moet nl. iedere keer beginnen met het schrijven van je tests, en op die manier verder gaan ontwikkelen.
Het voordeel hiervan is dan dat je een goede 'API' kunt gaan ontwikkelen.
Of er hier echte cursussen / workshops voor bestaan ? Wellicht; maar ik denk ook dat het iets is wat je je vooral eigen kunt (of moet ? ) maken door praktijk ervaring. Door het zelf te doen, zelf toe te passen etc...
Wat ik dus wil voorkomen is dat ik "from scratch" een eigen methodologie moet opbouwen die ik op regelmatige basis weer zelf moet bijsturen. Ik zou liever een solide basis aangereikt krijgen van waaruit ik verder kan. Waarmee niet gezegd is dat ik dan ook niet vaak moet bijsturen, alleen heb ik dan wel een "headstart".

Dat ik zelf moet gaan inlezen en uitvlooien, vind ik allemaal niet zo'n probleem. Daarvoor ben ik tenslotte een developer. Ik zou alleen graag snel vanuit een concrete en vooral praktische basis beginnen.

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Mja, ik zou mijn tijd steken in het goed onder de knie krijgen van het vak software engineering. TDD wordt alweer afgedaan als achterhaald omdat de opvolger 'BDD' veel van de nadelen van TDD opvangt.

Voor de insteek van TDD/BDD valt veel te zeggen, echter vervangt het gebruik van die methodieken niets maar dan ook NIETS van wat je NIET zou gebruiken bij een andere methodiek. Ergo: je moet een goede software engineer zijn wil je goed resultaat halen uit TDD/BDD. Veel mensen vergeten dit nogal eens en denken dat door de hype rondom TDD/BDD men met die methodieken WEL goede resultaten behaalt wanneer dit bij andere methodieken niet lukte. Fout, als je met een andere methodiek geen goede software kunt maken, lukt het met TDD zeker niet.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
EfBe schreef op maandag 18 februari 2008 @ 14:27:
Voor de insteek van TDD/BDD valt veel te zeggen, echter vervangt het gebruik van die methodieken niets maar dan ook NIETS van wat je NIET zou gebruiken bij een andere methodiek. Ergo: je moet een goede software engineer zijn wil je goed resultaat halen uit TDD/BDD. Veel mensen vergeten dit nogal eens en denken dat door de hype rondom TDD/BDD men met die methodieken WEL goede resultaten behaalt wanneer dit bij andere methodieken niet lukte. Fout, als je met een andere methodiek geen goede software kunt maken, lukt het met TDD zeker niet.
Ik volg je helemaal, maar dat neemt uiteraard niet weg dat een goede software engineer geen onderricht in unit testing of tdd/bdd zou kunnen krijgen. En dat vind ik bijna nergens terug.

PS: ik heb mezelf bij dezen natuurlijk niet gekwalificeerd onder "goed software engineer" ;)

[ Voor 5% gewijzigd door GrimaceODespair op 18-02-2008 16:54 ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • EfBe
  • Registratie: Januari 2000
  • Niet online
GrimaceODespair schreef op maandag 18 februari 2008 @ 16:54:
[...]

Ik volg je helemaal, maar dat neemt uiteraard niet weg dat een goede software engineer geen onderricht in unit testing of tdd/bdd zou kunnen krijgen. En dat vind ik bijna nergens terug.

PS: ik heb mezelf bij dezen natuurlijk niet gekwalificeerd onder "goed software engineer" ;)
Heh :) Ach, aan iedereen valt wel wat aan te merken, dus dat is het niet. Waar ik op doel is dat men geen illusies moet hebben mbt XP/Agile/TDD/BDD etc. dat men dan ineens WEL iets kan wat men daarvoor NIET voor elkaar kreeg, nl. solide software maken.

Aangezien je toch nieuw bent mbt TDD/BDD, zou ik met BDD beginnen, want puur TDD heeft zn langste tijd wel gehad omdat BDD sommige mankementen van TDD ondervangt. Begin bij:
http://dannorth.net/introducing-bdd

Dan is een van de mensen die BDD bedacht heeft, dus daar beginnen is nooit weg ;)

Het hele idee is dat je je test schrijft voordat je de code maakt die je met die test wilt gaat testen. Om dingen te kunnen testen die je nog niet hebt gemaakt gebruikt men soms 'Mocks', dat zijn classes die zich voordoen als jouw class die je wilt testen. De tests zijn bedoeld om te kijken of je op de goede weg bent met een bepaalde denkwijze. Aangezien je ASP.NET gebruikt is het essentieel dat je een MVC framework gebruikt, bv monorail / castle omdat je dan gedeeltes van je applicatie kunt testen zonder dat je alles maakt.

Er is veel kritiek op deze methodiek te verzinnen. Een van de meest gehoorde is dat je hoe dan ook moet snappen wat je aan het doen bent alvorens je kunt beoordelen wat je hebt gemaakt ook werkt en dat met TDD dit niet verandert tov andere methodieken: als jij een class Foo maakt met method Bar, dan moet Bar werken met de tests die jij maakt maar OOK in alle andere gevallen waarin Bar gebruikt kan worden.

Dit laatste wordt veel over het hoofd gezien of genegeerd door veel TDD advocates: de test werkt dus de code werkt. Maar dit is helemaal niet gezegd dat dit zo is. Dit verschil in standpunt komt voort uit het feit dat TDD een methodiek is die gelieerd is aan XP/extreme programming: je maakt alleen wat je echt nodig hebt op dit moment en niet meer. Als de test verwoordt wat je nodig hebt, en die werkt, dan werkt dus de software, immers het andere is niet gebouwd, toch? ;)

Je ziet zoals bij veel bewegingen (XP/extreme programming kwam als antwoord op de rigide waterfall methodiek, en heeft wat vervolgen gehad zoals Agile) dat ze extreem beginnen maar na jaren afvlakken en verworden tot meer volwassen methodieken waar het goede uit de nieuwe bewegingen overblijft en de nadelen vervangen worden door betere elementen van concurrerende methodieken. Zo-ook bij XP/Extreme programming: Agile (wat inhoudt: 'adaptive to change', that's it) is al veel milder wat dat aangaat, ookal zijn er idioten die vinden dat wanneer je niet de Agile manifesto tot op de letter naleeft je prutst. Je ziet daar bv dat het unittest systeem niet louter vooraf gebruikt wordt, maar ook 'achteraf': als 'integration tests'.

Ikzelf denk dat over een jaar of 5 TDD/BDD niet echt meer gebruikt wordt maar een follow up variant ervan waar men steeds meer toegroeit naar een mildere vorm van de andere kant van het spectrum: de big-design-up-front groep, zodat specificaties vooraf op een agile-compatible manier worden ontwikkeld met wellicht tests vooraf, maar ook achteraf.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
EfBe schreef op maandag 18 februari 2008 @ 17:29
Aangezien je toch nieuw bent mbt TDD/BDD, zou ik met BDD beginnen, want puur TDD heeft zn langste tijd wel gehad omdat BDD sommige mankementen van TDD ondervangt. Begin bij:
http://dannorth.net/introducing-bdd

Dan is een van de mensen die BDD bedacht heeft, dus daar beginnen is nooit weg ;)
Ok, alvast bedankt voor de tip.
Het hele idee is dat je je test schrijft voordat je de code maakt die je met die test wilt gaat testen. Om dingen te kunnen testen die je nog niet hebt gemaakt gebruikt men soms 'Mocks', dat zijn classes die zich voordoen als jouw class die je wilt testen. De tests zijn bedoeld om te kijken of je op de goede weg bent met een bepaalde denkwijze. Aangezien je ASP.NET gebruikt is het essentieel dat je een MVC framework gebruikt, bv monorail / castle omdat je dan gedeeltes van je applicatie kunt testen zonder dat je alles maakt.
Ik lees niet vaak technische blogs. Meestal een enkele post na een zoekactie, maar Ayende is er toch eentje die ik dagelijks volg. Ik ben dus op zich wel vertrouwd met MVC en mocking, alleen heb ik zelf nog niet concreet een monorail-applicatie gebouwd of AutoMocking-container gebruikt. Onder andere omdat je een deel opgebouwde kennis en zekerheden overboord moet gooien, zelfs al betekent dat voor 50% ervaring in het omgaan met de foute architectuurkeuzes van ASP.NET. Dat wegmieteren is een risico als het alternatief is: het diepe induiken en hopen dat het je lukt om nog boven te komen.
We gebruiken momenteel bij wijze van compromis wel Igloo in een project, maar daarvan voel je langs alle kanten dat het patchwerk blijft.
Zo-ook bij XP/Extreme programming: Agile (wat inhoudt: 'adaptive to change', that's it) is al veel milder wat dat aangaat, ookal zijn er idioten die vinden dat wanneer je niet de Agile manifesto tot op de letter naleeft je prutst.
Ook via Ayende heb ik het waterfall-voorval meegekregen. Ik kan je opmerking dus volledig plaatsen :)
Je ziet daar bv dat het unittest systeem niet louter vooraf gebruikt wordt, maar ook 'achteraf': als 'integration tests'.
Zoals ik mijn startpost begin: er wordt wel een beetje aan unit testing gedaan, en ik heb het "zelfs" al eens op de agile manier aangewend, maar mijns inziens is het schrijven van testen toch ook iets dat je echt moet leren: Wat voor testen moet je schrijven? Wat voor testen zijn tijdverspilling? Hoe ontwerp je je testen zo dat ze niet meteen breken bij kleine wijzigingen?
Momenteel snuffel ik gewoon in andermans codebases (vaak ook weer van Ayende, dus mijn visie is op dat vlak misschien een beetje schraal) om te zien hoe zij ermee omgaan. Dat werkt vaak wel verhelderend, maar er zit ook veel impliciete kennis in die je zelf moet heruitvinden als je aan de slag gaat. En dan komen we weer uit bij de beginvraag. Hoe kan ik dat op niet-tijdsintensieve manier toch expliciet krijgen, zodat ik een werkbare basis heb van waaruit ik kan vertrekken, en niet die door elkaar gegooide puzzel van losse kennisfragmenten waarvan ik zelf maar moet inschatten of ze uberhaupt wel in ergens in de puzzel passen?

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Nou, Oren is een beste kerel, maar om nu louter zijn code als leidraad te nemen... ik zou dat niet doen.

En wat je moet testen? Je moet testen dat je code doet wat jij denkt dat het doet. En dat is altijd een gok, want misschien valt de code wel om bij heel andere inputwaardes. Neem deze loop:
code:
1
2
3
4
5
6
7
8
9
10
11
for(int i=0;i<100;i++)
{
    if(someExpression)
    {
        A();
    }
    else
    {
        B();
    }
}

2^100 code paths door deze loop, dus niet echt testbaar met unittests, want wie zegt dat jouw test alle 2^100 paths covered?

Daarom kun je ook een andere weg bewandelen. Je kunt eerst kijken naar wat je moet maken (niet een geheel programma, maar onderdeel), dan de algorithmes uitdenken, en die op papier of whiteboard nakijken of ze kloppen. Dan ze implementeren en nakijken of wat je in code hebt geschreven overeenkomt met je algorithme dat je hebt uitgedacht. En daarna een paar testcases schrijven die de code testen zodat je ook weet dat het werkt wanneer je refactort.

Dat is niet TDD/BDD, maar wel een methodiek waar je goede resultaten mee kunt behalen. Het punt is nl. dat bij veel code je helemaal geen TDD kunt toepassen, bv een framework met oneindig veel use-cases.

Bv, als je kijkt naar Linq to NHibernate, dan zie je hoe fout TDD kan gaan: de codebase is volledig gebouwd rond de zeer naieve tests die ze hebben geschreven, niet rondom ideeen hoe je expression trees kunt converteren op een generieke manier. Ze komen er dan ook niet uit ben ik bang, althans niet op deze manier.

Dat is ook waarom ik hamerde op basisbegrippen: iemand die goede software kan maken heeft geleerd goed na te denken hoe dingen aan te pakken. Die denkt niet in code maar in methoden om een oplossing te bereiken en gaat DAARNA pas typen.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • MisterBlue
  • Registratie: Mei 2002
  • Laatst online: 00:07
whoami schreef op maandag 18 februari 2008 @ 11:58:

Test Driven Development vereist imho veel 'discipline'; je moet nl. iedere keer beginnen met het schrijven van je tests, en op die manier verder gaan ontwikkelen.
Dat het 'discipline' vereist merk ik bij collega programmeurs die er moeite mee hebben het vol te houden, maar toch blijft het me verbazen.

Ik krijg juist enorm veel energie van de cyclus, test schrijven, rode balk, code schrijven, groene balk. Bij anderen kost het alleen maar energie en waar het aan ligt snap ik niet helemaal.

  • EMP
  • Registratie: November 2000
  • Laatst online: 13-11 00:04

EMP

Krulloos!

Natuurlijk moet iedereen zijn eigen draai geven, maar een beetje (algemene) basiskennis is nooit weg hoor. Ik ben geen tester pur sang, maar heb toch erg veel aan mijn cursus ISEB Foundation gehad. ISEB geeft een basis is kennis over het testen. Het is geen bijbel, en zeker niet nieuw (veel zul je herkennen, of zelfs al doen), maar het geeft je wel een fatsoenlijk jargon en houvast, plus handvatten om test-middelen en het nut daarvan aan anderen duidelijk te kunnen maken.

TDD, daar moet je als organisatie achter staan. Heb maar eenmaal mogen meemaken waar men het echt deed, en dan werkt het. Zodra het neerkomt op discipline (dus dat het proces van het schrijven van de code niet is test maken --> (eventueel inchecken -->) code maken --> test pass --> dan pas inchecken, kun je het vergeten (of iets genuanceerder: dan is het inderdaad erg lastig om het te waarborgen, en komt het inderdaad neer op discipline).

TDD zou ik dus afdwingen d.m.v. proces.

Verbouwblog van mijn Schrootjespaleis uit 1925.
My anime addiction.


  • MisterBlue
  • Registratie: Mei 2002
  • Laatst online: 00:07
Empie schreef op donderdag 29 mei 2008 @ 16:10:
TDD, daar moet je als organisatie achter staan.
Je kunt best in je eentje TDD doen, terwijl de rest van het team het niet doet. Af en toe breken de anderen jou testen, omdat zij ze waarschijnlijk niet draaien, maar dan nog heb je er profijt van gehad toen je je code schreef.

Het kost ook wel tijd om TDD in te voeren in je organisatie, omdat het voor veel mensen een onnatuurlijke manier van werken is en er nauwelijks trainingen zijn te volgen hierin. Het beste is waarschijnlijk om te pair programmen met iemand die het beheerst.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
MisterBlue schreef op zaterdag 31 mei 2008 @ 18:49:
[...]
Het beste is waarschijnlijk om te pair programmen met iemand die het beheerst.
Precies mijn idee, maar in hoeveel praktijksituaties kun je zo'n setting creëren?
MisterBlue schreef op zaterdag 24 mei 2008 @ 13:13:
Dat het 'discipline' vereist merk ik bij collega programmeurs die er moeite mee hebben het vol te houden, maar toch blijft het me verbazen.

Ik krijg juist enorm veel energie van de cyclus, test schrijven, rode balk, code schrijven, groene balk. Bij anderen kost het alleen maar energie en waar het aan ligt snap ik niet helemaal.
Volgens mij komt dat gewoon door het feit dat ze niet goed weten wat ze moeten testen. Dan zit je inderdaad maar wat loze testen te schrijven die je om de haverklap moet refactoren omdat je het verkeerde test.

Ik denk dat daar net de bottleneck zit: de feeling hebben om te weten wat je waar moet testen.

Neem nu ASP.NET. Je kan gaan vloeken over de ontestbaarheid ervan, maar de omgeving en tools voor een project verander je niet zomaar. Dus ben je voor een eenvoudige (!) ASP.NET applicatie mijns inziens eerder een soort integratietesten aan het bouwen dan elementaire unit tests. Je kan wel een extra layer inbouwen, puur voor testability, maar dan ben je 2x werk aan het verzetten, terwijl je doel is: werk besparen.

Daar komt nog eens bovenop dat er geen "standaard" werkwijze bestaat voor ASP.NET programming (wie heeft er een sluitende methodiek voor alle page lifecycle en viewstate sores?), waardoor je al test-beginner al snel een ononderhoudbare zooi testen bij mekaar dreigt te schrijven.

En als je dus niemand in de buurt hebt waar je even aan kan vragen: "he, hoe zou jij dit stukje code nou testen?", dan is je enige andere optie: in de theorie duiken. En die zadelt je vervolgens op met een boel kennis die je zelf empirisch moet filteren. En dan haak je af, want daar heb je geen tijd voor.

Of ga ik nou ergens erg kort door de bocht?

Mijn conclusie is dus: je kan alleen TDD'er worden als je óf bereid bent flink wat onbetaalde uren te investeren, óf in een TDD-omgeving werkt. Hetzelfde kan je uiteraard ook zeggen van ASP.NET, maar ik moet even zoeken naar een reden waarom dat voor mij anders ligt dan TDD. Misschien wel omdat ik het in mijn studententijd heb kunnen oppakken, toen de klok nog 2x zo traag tikte?

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • EfBe
  • Registratie: Januari 2000
  • Niet online
GrimaceODespair schreef op zondag 01 juni 2008 @ 00:26:
[...]
Volgens mij komt dat gewoon door het feit dat ze niet goed weten wat ze moeten testen. Dan zit je inderdaad maar wat loze testen te schrijven die je om de haverklap moet refactoren omdat je het verkeerde test.

Ik denk dat daar net de bottleneck zit: de feeling hebben om te weten wat je waar moet testen.
Dat is toch irrelevant voor TDD? TDD is juist erop gericht dat je je software designed vanuit de tests die je schrijft. Je gaat niet nadenken wat je moet testen, je gaat je software designen vanuit de tests. Die dan weer user-cases / stories representeren.

Het is juist die aanpak dat je vanuit tests je software gaat designen dat veel mensen niet aanstaat: immers je zit achter je toetsenbord met mocking software je software te designen ipv erover na te denken ZONDER software/editor.
Neem nu ASP.NET. Je kan gaan vloeken over de ontestbaarheid ervan, maar de omgeving en tools voor een project verander je niet zomaar. Dus ben je voor een eenvoudige (!) ASP.NET applicatie mijns inziens eerder een soort integratietesten aan het bouwen dan elementaire unit tests. Je kan wel een extra layer inbouwen, puur voor testability, maar dan ben je 2x werk aan het verzetten, terwijl je doel is: werk besparen.
TDD heeft niet als primair doel werk besparen. TDD is niet geschikt voor ASP.NET (totdat mvc uit komt) omdat je de code voor de pages niet kunt ontwerpen met test + mocks.

Ik vind je voorbeeld overigens niet echt goed gekozen, omdat 'ASP.NET' een UI techniek is en een applicatie veel meer inhoudt dan dat. (UI's kun je bv ook voor een groot deel genereren)
Daar komt nog eens bovenop dat er geen "standaard" werkwijze bestaat voor ASP.NET programming (wie heeft er een sluitende methodiek voor alle page lifecycle en viewstate sores?), waardoor je al test-beginner al snel een ononderhoudbare zooi testen bij mekaar dreigt te schrijven.
Iemand die weet waar z/hij mee bezig is ontloopt de valkuilen, iemand die niet weet waar z/hij mee bezig is, maakt zooi. Dat is niet gerelateerd aan de techniek die gebruikt is, het is een algemene regel.ASP.NET programming is ondoorzichtig soms, maar dat neemt niet weg dat de programmeur zich niet als een amateuristische kleuter dient te gedragen: klanten betalen veel geld voor sites die ze laten maken, de mensen die ze bouwen moeten daarom weten waar ze mee bezig zijn, en daar is geen excuus voor te vinden.

De ASP.NET architectuur leent zich totaal niet voor TDD, tenzij je een MVC framework gebruikt, en wanneer je dat dus niet doet, dan is TDD icm ASP.NET een onmogelijk. Ik snap daarom ook niet zo goed hoe een ASP.NET programmeur TDD zou kunnen gebruiken en dan op zooi uitkomen, het werkt nl. per definitie niet, het stadium zooi bereikt de programmeur niet eens.
En als je dus niemand in de buurt hebt waar je even aan kan vragen: "he, hoe zou jij dit stukje code nou testen?", dan is je enige andere optie: in de theorie duiken. En die zadelt je vervolgens op met een boel kennis die je zelf empirisch moet filteren. En dan haak je af, want daar heb je geen tijd voor.
Of ga ik nou ergens erg kort door de bocht?
Nogal ja. Een programmeur die geen tijd heeft voor het tot zich nemen van kennis die nodig is voor het vak wat de progammeur uitvoert zou m.i. eigenlijk ontslagen moeten worden, tenzij de programmeur 100 uur per week maakt en de werkgever geen seconde leertijd geeft aan de medewerkers.

Dus als de programmeur tegen een probleem aanloopt, dan moet de programmeur daar een oplossing voor zien te vinden, dat is zn vak! En niet een stukje code opzoeken op google, maar even 2 pagina's lezen op een website waarom dit optreed of dat niet werkt etc.

Websites bouwen is echt geen rocketscience, IMHO.
Mijn conclusie is dus: je kan alleen TDD'er worden als je óf bereid bent flink wat onbetaalde uren te investeren, óf in een TDD-omgeving werkt. Hetzelfde kan je uiteraard ook zeggen van ASP.NET, maar ik moet even zoeken naar een reden waarom dat voor mij anders ligt dan TDD. Misschien wel omdat ik het in mijn studententijd heb kunnen oppakken, toen de klok nog 2x zo traag tikte?
Als je met TDD aan de slag wilt, zul je in een project moeten zitten waar de methodiek idd al ingevoerd is, en de technieken waar je ook mee moet werken geschikt zijn voor de TDD werkwijze.

Echter vergeten veel TDDers dat softwareontwikkeling ook op andere manieren kan dan via TDD, dus als het niet toepasbaar is, tja, dan neem je een andere methodiek. Zoals eerst denken en dan doen, verifieren wat je moest maken met wat je gemaakt hebt, algorithmebewijzen etc. Allemaal zaken die al jaren geleden zijn aangedragen voor het bouwen van betere software.

Men heeft er echter gewoon geen zin in: men wil 1 keer iets intikken en dan moet het goed zijn en dan ook nog met zo weinig mogelijk denkwerk vooraf. Je ziet door de jaren heen dat er methodieken worden ontwikkeld om dat te bereiken en die falen allemaal, en dan komt er weer een nieuwe methodiek en daar duikt men dan bovenop, de oude achterlatend. Dat zie je ook bij TDD, waar veel supporters al weer weg zijn en zijn overgestapt naar BDD.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • MisterBlue
  • Registratie: Mei 2002
  • Laatst online: 00:07
Ik heb niet heb het idee dat TDD'ers overstappen op BDD vanwege het falen van TDD. Ik zie het meer als een evolutie. Het principe is hetzelfde alleen, zit je nu dichter tegen de user stories aan.

Ik werk nu al een jaartje met rspec voor mijn ruby projecten en het belangrijkste verschil in mijn werkwijze is dat ik minder de state van objecten aan het controleren ben en dat ik meer bezig ben met verantwoordingen en gedrag tussen objecten te definieren. Als ik dan weer in java bezig ben, doe ik hetzelfde maar dan met junit en een mock framework.

Ik weet te weinig af van asp.net om er goed over te oordelen, maar ik zit na jaren weer een keer mijn TDD werkwijze te verdedigen en het is toevallig met collega's die in een asp.net omgeving werken. Ik wil dus best geloven dat de omgeving zich er niet voor leent.

Ik denk wel dat de acceptatie hoger zou zijn geweest als unit testing functionaliteit was ingebouwd in alle versie's van Visual Studio, i.p.v. alleen in de duurdere versie's. Een beginnende programmeur die en express versie heeft gedownload om de taal te leren, zal dus bijna per definitie geen TDD stijl aan leren. Er schijnt iemand een unit testing plugin gemaakt te hebben, maar dat mocht van Microsoft niet werken met de express versie ofzo.

Ik vind dat een gemiste kans, omdat Microsoft heel veel invloed heeft. Ik zie nu diezelfde .net ontwikkelaars wel Linq aan het leren (in eigen tijd), omdat dat nu heel erg gepromote wordt door Microsoft.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
EfBe schreef op zondag 01 juni 2008 @ 10:33:
[...]
Het is juist die aanpak dat je vanuit tests je software gaat designen dat veel mensen niet aanstaat: immers je zit achter je toetsenbord met mocking software je software te designen ipv erover na te denken ZONDER software/editor.
Misschien kan ik dan alleen spreken uit eigen ervaring, en hangt het gewoon samen met je volgende opmerking:
TDD heeft niet als primair doel werk besparen. TDD is niet geschikt voor ASP.NET (totdat mvc uit komt) omdat je de code voor de pages niet kunt ontwerpen met test + mocks.
Verder:
Ik vind je voorbeeld overigens niet echt goed gekozen, omdat 'ASP.NET' een UI techniek is en een applicatie veel meer inhoudt dan dat. (UI's kun je bv ook voor een groot deel genereren)
ASP.NET is een UI-techniek met (en dat geef je zelf ook aan) zware gevolgen voor je applicatie-architectuur. Een applicatie houdt inderdaad veel meer in dan dat, maar bij een eenvoudige applicatie bestaat je applicatie mijns inziens toch voor 50% uit van ASP.NET-afhankelijke code.
[...]
Iemand die weet waar z/hij mee bezig is ontloopt de valkuilen, iemand die niet weet waar z/hij mee bezig is, maakt zooi. Dat is niet gerelateerd aan de techniek die gebruikt is, het is een algemene regel.ASP.NET programming is ondoorzichtig soms, maar dat neemt niet weg dat de programmeur zich niet als een amateuristische kleuter dient te gedragen: klanten betalen veel geld voor sites die ze laten maken, de mensen die ze bouwen moeten daarom weten waar ze mee bezig zijn, en daar is geen excuus voor te vinden.
Het gaat er niet om dat de programmeur (ik) niet weet waar-ie mee bezig is, maar graag een bewezen aanpak zou introduceren waar hij en zijn omgeving totaal geen ervaring mee hebben, en dus ook al niet weten in hoeverre deze aanpak in hun setting iets zou opleveren. Kosten-baten.
De ASP.NET architectuur leent zich totaal niet voor TDD, tenzij je een MVC framework gebruikt, en wanneer je dat dus niet doet, dan is TDD icm ASP.NET een onmogelijk. Ik snap daarom ook niet zo goed hoe een ASP.NET programmeur TDD zou kunnen gebruiken en dan op zooi uitkomen, het werkt nl. per definitie niet, het stadium zooi bereikt de programmeur niet eens.
Nou, dat weten we dan tenminste alweer :)
[...]

Nogal ja. Een programmeur die geen tijd heeft voor het tot zich nemen van kennis die nodig is voor het vak wat de progammeur uitvoert zou m.i. eigenlijk ontslagen moeten worden, tenzij de programmeur 100 uur per week maakt en de werkgever geen seconde leertijd geeft aan de medewerkers.
Je maakt er een lekkere karikatuur van. Er zijn zo nog wel x aantal dingen die ik kan verzinnen waarin ik meer kennis zou willen opdoen, om er efficiënter mee om te kunnen gaan, maar er is ook nog zoiets als prioriteiten. Ik zorg wel dat ik voldoende kennis heb van zaken die ik broodnodig heb en dan graag ook nog van zaken die me productiever maken. Maar ik ga geen uren steken in dingen waarvan ik te onzeker ben of ze mij iets opleveren. Bijvoorbeeld inplannen om pure TDD introduceren in een omgeving zonder ervaring op dat vlak.
Dus als de programmeur tegen een probleem aanloopt, dan moet de programmeur daar een oplossing voor zien te vinden, dat is zn vak! En niet een stukje code opzoeken op google, maar even 2 pagina's lezen op een website waarom dit optreed of dat niet werkt etc.

Websites bouwen is echt geen rocketscience, IMHO.
Again: prioriteiten. Ik heb de afgelopen jaren trouwens wel al redelijk wat TDD-documenten gelezen en het gebeurt me sowieso regelmatig dat ik me in een techniek in het algemeen inlees om het in te zetten. Maar voor sommige (veel?) problemen ga je niet verder dan zorgen dat je ze kunt oplossen.
[...]
Men heeft er echter gewoon geen zin in: men wil 1 keer iets intikken en dan moet het goed zijn en dan ook nog met zo weinig mogelijk denkwerk vooraf.
Wil je erover praten? :P

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • EfBe
  • Registratie: Januari 2000
  • Niet online
GrimaceODespair schreef op maandag 02 juni 2008 @ 13:52:
ASP.NET is een UI-techniek met (en dat geef je zelf ook aan) zware gevolgen voor je applicatie-architectuur. Een applicatie houdt inderdaad veel meer in dan dat, maar bij een eenvoudige applicatie bestaat je applicatie mijns inziens toch voor 50% uit van ASP.NET-afhankelijke code.
Dan lijkt het me zaak toch wat code elders onder te brengen, immers UI code is puur de UI, alle BL code en andere handel hoort niet thuis in ASP pages, maar goed dat is een ander onderwerp.
Het gaat er niet om dat de programmeur (ik) niet weet waar-ie mee bezig is, maar graag een bewezen aanpak zou introduceren waar hij en zijn omgeving totaal geen ervaring mee hebben, en dus ook al niet weten in hoeverre deze aanpak in hun setting iets zou opleveren. Kosten-baten.
Als dat je doel is heeft het geen zin, want 'bewezen aanpak' is al fuzzy genoeg. In de afgelopen 30-40 jaar zijn er legio methodieken geintroduceerd die allemaal 'bewezen hebben' goede resultaten op te leveren.

Maar er is slechts 1 constante factor in al die geslaagde (en mislukte) resultaten: de mensen. Bij een groep prutsers krijg je met de beste techniek nog troep, en met de beste mensen krijg je nog wel resultaat bij een ongeschijnlijk brakke methodiek.

Ergo: zorg dat de mensen weten waar ze mee bezig zijn, weten dat programmacode een projectie resultaat is van algoritmes en andere abstracte structuren op een programmeertaal etc. (zodat fouten eerst in het ontwerp ACHTER de code gezocht worden, en bekeken wordt of die wel klopt)
[...]
Je maakt er een lekkere karikatuur van. Er zijn zo nog wel x aantal dingen die ik kan verzinnen waarin ik meer kennis zou willen opdoen, om er efficiënter mee om te kunnen gaan, maar er is ook nog zoiets als prioriteiten. Ik zorg wel dat ik voldoende kennis heb van zaken die ik broodnodig heb en dan graag ook nog van zaken die me productiever maken. Maar ik ga geen uren steken in dingen waarvan ik te onzeker ben of ze mij iets opleveren. Bijvoorbeeld inplannen om pure TDD introduceren in een omgeving zonder ervaring op dat vlak.
Heeft ook weinig zin, want je krijgt er niet betere software door. Software-engineers die zichzelf professionals noemen moeten zich ook zo gaan gedragen, dan kom je een stuk verder. TDD noch een andere methodiek is niet een sleutel naar succes en betere resultaten. Mensen moeten gewoon minder troep bouwen en minder lopen knoeien en minder denken dat ze de enige zijn die probleem X, Y en Z moet oplossen en DUS dat ze nieuwe algoritmes moeten verzinnen (vaak naieve) om het allemaal werkend te krijgen, waardoor je 2 groepen fouten moet zien op te sporen: 1) ontwerpfouten in algoritmes etc. en 2) pure implementatie fouten (van een correct algoritme).

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
EfBe schreef op maandag 02 juni 2008 @ 15:33:
Heeft ook weinig zin, want je krijgt er niet betere software door. Software-engineers die zichzelf professionals noemen moeten zich ook zo gaan gedragen, dan kom je een stuk verder. TDD noch een andere methodiek is niet een sleutel naar succes en betere resultaten. Mensen moeten gewoon minder troep bouwen en minder lopen knoeien en minder denken dat ze de enige zijn die probleem X, Y en Z moet oplossen en DUS dat ze nieuwe algoritmes moeten verzinnen (vaak naieve) om het allemaal werkend te krijgen, waardoor je 2 groepen fouten moet zien op te sporen: 1) ontwerpfouten in algoritmes etc. en 2) pure implementatie fouten (van een correct algoritme).
Echt bijna alles waar je het over hebt, ben ik verder mee eens hoor :) Dat kan natuurlijk ook moeilijk anders, want een paus zal ook nooit beweren dat de mensen beter niet katholiek worden. Als je begrijpt wat ik bedoel.

Het NIH-syndroom heb ik jaren geleden al afgeleerd, en ik lijd volgens mij zelfs bijna aan het omgekeerde. Ik ga soms onevenredig lang op zoek naar een bestaande oplossing voor mijn probleem (in die tijd had ik het zelf kunnen bouwen).

Maar alles bij elkaar genomen zou ik nog altijd graag een keertje TDD-en en heb ik begrepen dat ik daarvoor volledig op mezelf (en de uitgebreid doorzoekbare community) aangewezen zal zijn, zowel voor de toolkeuze, als de werkwijze, als de technieken, ... En nogmaals: die investering wil ik best doen, maar als je de ruimte hebt om een cursus te volgen waarin je grotere stappen kunt zetten, is het jammer dat zoiets er gewoon niet is.

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • MisterBlue
  • Registratie: Mei 2002
  • Laatst online: 00:07
Vond een TDD cursus op: http://www.westgeest-consultancy.com/. Wordt waarschijnlijk on demand gegeven.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
MisterBlue schreef op dinsdag 03 juni 2008 @ 08:12:
Vond een TDD cursus op: http://www.westgeest-consultancy.com/. Wordt waarschijnlijk on demand gegeven.
Hey, de eerste die ik zie! Zoiets zocht ik dus. Het ziet er wel maar een klein eenmanszaakje uit, maar dat hoeft uiteraard kwaliteit niet in de weg te staan. Of wel, natuurlijk :)

*gebookmarked*

site heeft wel een beetje Yomanda meets Emiel GoelenRatelband-sfeer

[ Voor 8% gewijzigd door GrimaceODespair op 04-06-2008 08:30 . Reden: slip of the keyboard ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • MisterBlue
  • Registratie: Mei 2002
  • Laatst online: 00:07
GrimaceODespair schreef op dinsdag 03 juni 2008 @ 08:38:
Hey, de eerste die ik zie! Zoiets zocht ik dus. Het ziet er wel maar een klein eenmanszaakje uit, maar dat hoeft uiteraard kwaliteit niet in de weg te staan. Of wel, natuurlijk :)

*gebookmarked*

site heeft wel een beetje Yomanda meets Emiel Goelen-sfeer
Ik heb een paar maanden geleden op j-spring een presentatie met Rob Westgeest gevolgd over responsibility driven design. Het was wel een van de betere sessie's vond ik. Ik denk dat het met de kwaliteit wel goed zit, maar hij is inderdaad wel een evangelist.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 22:34

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
MisterBlue schreef op dinsdag 03 juni 2008 @ 10:59:
Ik heb een paar maanden geleden op j-spring een presentatie met Rob Westgeest gevolgd over responsibility driven design. Het was wel een van de betere sessie's vond ik. Ik denk dat het met de kwaliteit wel goed zit, maar hij is inderdaad wel een evangelist.
In ieder geval bedankt voor de tip :)

Wij onderbreken deze thread voor reclame:
http://kalders.be

Pagina: 1