Sain mielestäni hyvän ajatuksen. Tausta: olen ohjelmoijien dynaaminen vs staattinen tyypitys -kiistassa melkein niin paljon dynaamisen tyypityksen puolella kuin voi olla, ja siksi tutkin mielelläni argumentteja staattisen tyypityksen puolesta. Yksi niistä on se, että tyypeistä saa valmiiksi jonkinlaisen käsityksen siitä datasta, jota ohjelma käsittelee, joten datan kulkeutumista ohjelmassa ei tarvitse seurata niin pitkälle ymmärtääkseen tietyn koodinpätkän.
Toisaalta, olen aina ollut sitä mieltä, että verkko-APIen tapauksessa kunnon esimerkit kertovat paljon enemmän kuin skeema tai määrittely siitä, miten APIa kutsutaan. (Ne kertovat myös eri asioita, ja siinä mielessä täydentävät toisiaan.) Kielten tyypityksen suhteen tämä tarkoittaisi, että ihmiset eivät ehkä haluaisikaan nähdä funktioiden syötteiden ja tulosten määrittelyitä (tyyppejä), vaan esimerkkejä. Tietysti jälleen parasta saattaisi olla, jos saatavilla olisi molemmat.
Yksi staattisen tyypityksen harmeista on se, jos pitää kirjoittaa periaatteessa redundanttia tietoa tyypeistä, joka olisi oikeastaan pääteltävissä ohjelmasta. Joissain kielissä, kuten Haskellissa ja SML:ssä, tätä redundanttia tietoa ei tarvitse kirjoittaa, jos kääntäjä osaa päätellä sen ohjelmasta. Samaan tapaan haluaisin, että funktioiden kutsujen esimerkkisyötteet ja -tulokset tuotettaisiin automaattisesti, jottei niitä tarvitse pitää erikseen yllä - ja päivittää funktion sopimuksen päivittyessä. Mistä esimerkit voisi generoida automaattisesti?
APIen tapauksessa integraatiotestit tuottavat tämän tiedon. Testit, jotka lähettävät APIin tietynlaisia kutsuja ja odottavat tietynlaisia tuloksia, dokumentoivat protokollan esimerkit. Tämä uusi keksintöni on, että samanlaista tietoa saisi seuraamalla testien aikaisia kutsuja - myös niille funktioille, joita ei testata suoraan. Mieletön määrä hyödyllistä dokumentaatiota käytännössä ilmaiseksi, kunhan on olemassa testit. Ja nehän pitää joka tapauksessa olla.
Monissa ohjelmointikielissä on tämä ominaisuus; sitä kutsutaan nimellä tracing, joka kääntyisi suomeksi ehkä seurantana. Esimerkiksi integraatiotestien aikana tuotettu trace log sisältää kaikista ylipäänsä testatuista funktioista esimerkkisyötteitä ja -tuloksia. Oikeastaan ainoa, mitä tähän ehkä tarvitsee vielä liittää, on työkalusto, joka näyttää näitä esimerkkejä, kun liikuskelee ohjelmakoodissa.