Kiel mi testas kaj miaj konsiloj
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 ĉefe kreas testojn en du okazoj:
1) Kiam la kodo enhavas ne tujvideblan supozon. Ekzemple, ordono liveras tuj pro speciala uzo meze de funkcia defino, eble la 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 ĝi havas la saman problemon, ke oni ne povas aŭtomate testi ĉu la reguloj ankoraŭ validas. Ĉi tiuj 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 eble, kaj ne jam volas sistemigi mian pensadon nek kodon. Tiukaze mi disvolviĝas REPL-e, kaj tio donas al mi la deziratan testadon. La escepto estas se mi daŭre testas iun trajton por vidi, ĉu ĝi ankoraŭ validas, tiel mi aŭtomatigas mian tajpan per testado.
Parenteze, tio kunigas «testadon pelitan disvolviĝon» kaj «REPL pelitan disvolviĝon». 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 aldonas testojn por trajtoj, kiujn 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 trajton, oni devas trakti la kunteston, la vokantan kodon, ktp. Tio estas grava respondeco. Sed oni ne devas timi ŝanĝi kodon, anstantaŭe oni devas plenkompreni ĝin, ĝis oni povas konfide fari la ŝanĝon.
Fino
Do, tiuj estas la konsiloj, kiujn mi donas al miaj programistoj, kiuj havas tro da testoj, kaj samtempe la testoj estas nehelpemaj.