Skepsis mot enhetstestning

17 april 2008

När man tar upp enhetstestning med någon som aldrig gjort det, men utvecklat säg mer än tio år, möts man med skepsis. Denna reaktion fick jag igår:

”Jag tror inte man kan testa ett program till 100% med enhetstester.”

Det är helt korrekt att man inte kan testa något större program till 100%, oavsett om det handlar om manuella eller automatiska tester, på rimlig tid. Jag argumenterade emot genom att säga att tre punktvisa tester är oändligt mycket bättre än noll tester.

Min traditionelle vän sade då att han tror att testning är långt viktigare i ett typlöst språk, t.ex. Python, eftersom många fel slinker igenom och enkla typfel hittas först i realtid.

Här tror jag att vi närmar oss resonemangets kärna: ett statiskt typat språk fångar en massa slarvfel genom att göra typcheck vid kompilering. Denna typchecksalgoritm är 100% korrekt för ett 100% hårt typat program. Denna insikt är något man som traditionell programmerare bär med sig hela tiden – man kan lita på kompileringens typcheck. Och därför ratar man en teknik som har mindre ambitiösa mål, det känns helt enkelt ”fel” att enhetstester inte kan fånga de där 100%-en.

Jag ser på automatiska enhetstester som ett komplement till kompilatorns typchecksystem: det är en semantikcheck, som i och för sig inte klarar av de hårda 100%, men icke desto mindre är det en säkerhetslina för algoritmernas beteende i vissa punkter:

Om man fixerat vissa punkter för stora delar av algoritmerna i systemet, får man snabbt larm om man gör slarvfel på semantisk nivå i programmet. Det garanterar inte att man undviker semantiska fel (som typcheck garanterar att man undviker typfel), men det ger en produktivitetshöjning ändå. Att det sedan finns andra fördelar som att typerna i systemet blir lättare att ha att göra med (lättare att instansiera, lättare att förstå) är bara en bonus!

Sist och slutligen är det väldigt svårt att förstå hur bra det fungerar med enhetstest i praktiken för någon som inte prövat det. Jag vet, eftersom jag hade programmerat gott och väl femton år innan jag prövade, och under de kanske fem sista åren av den perioden, då jag var medveten om att enhetstestning fanns, var jag väldigt skeptisk till dem 😉

Läs även andra bloggares åsikter om , , , , , ,