Mi estas forta subtenanto de testado kaj eĉ frua testado. Kvankam la fako havas subtilajn nuancojn kaj multaj programistoj nesciante kreas malhelpeman testaron.

Kiel mi testas

Mi kreas testojn ĉefe en du okazoj:

1) Kiam la kodo enhavas ne tujvideblan supozon. Ekzemple ordono liveras tuj pro speciala uzo meze de funkcia defino, eble nombro devas enesti intervalon, sed la datumtipo ne povas speciĝi sufiĉe. Tiel oni ne povas facile klarigi tion por la tradukilo. Dokumentado estas bona sed ne testas aŭtomate.

2) Por testi fakajn regulojn. Espereble ili estas altnivelaj kaj la testo povas esti je la sama altniveleco. Ankaŭ dokumentado povas helpi sed havas la saman problemon ke oni ne povas aŭtomate testi ĉu la reguloj ankoraŭ veras. Ĉi testoj estas pli funkciaj testoj ol logikaj testoj.

3) Kiam eraro venas de uzanto aŭ plurfoje aŭ grave kaj mi bezonas certigi ke la eraro neniam okazos denove.

Kiam mi ne kreas teston

Mi ne testas la specifan realigon de la kodo. Testi tion signifas ke mi ne fidas aŭ je la semantiko de la lingvo aŭ je la boneco de la tradukilo. Mi ankaŭ ne testas kiam mi kreas malnetaĵon, en tiu kazo mi volas pliigi mian kreemecon tiom kiom ebla kaj ne jam volas sistemigi mian pensadon nek kodon. Tiukaze mi disvolviĝas REPL-e kaj tio donas al mi la dezirantan testadon. La escepto estas se mi daŭre testan iun trajto por vidi ĉu ĝi ankoraŭ veras, tiel mi aŭtomatigas mian tajpan per testado.

Parenteze, tio kunigas «testado pelita disvolviĝo» kaj «REPL pelita disvolviĝo». Se mi bone scias la problemon, interfacon kaj tiel plu mi verkus testojn unue. Sed se mi bezonas esplori unue tiam mi disvolviĝas REPL-e kaj poste aldonos testojn por trajtoj kiun mi plurfoje entajpas.

Aldone proponantoj de testado diras ke se oni testas unue la ago plisimpligas la kodon. Mi tute kunsentas. Kiam oni testas frue ili malpliigas la kuntekston por peco de kodo kiu plue apartigas la interdependojn. Por mi la REPL ankaŭ plenigas tiun servon.

Ĉu oni iam povas forigi aŭ ŝanĝi teston

Certe. Mi tute ne kunsentas kiam homoj diras ke tio oni devas neniam forigi aŭ ŝanĝi testojn. Testoj certigas trajtojn. Se oni ŝanĝas kodon laŭdefine iuj trajtoj ŝanĝiĝas. Dirinte tion se testo bezonas ŝanĝiĝi trajton oni devas trakti la kunteston, la vokanta kodo, ktp. Tio estas grava respondeco. Sed oni ne devas timi ŝanĝi kodon anstantaŭ oni devas plenkompreni ĝin ĝis oni povas konfide fari la ŝanĝon.

Fino

Do, tiuj estas la konsiloj kiujn mi donas al miaj programistoj kiu havas tro da testoj kaj samtempe la testoj estas nehelpemaj.