Makosa Yaleyale Machache Yanayojificha Katika Maktaba Unazoziamini
Ninatumia muda kutuma marekebisho madogo kwa repositories kubwa kama Langchain, Vite, na Bat.
Miradi hii hutumia lugha tofauti na nyanja tofauti. Watunzaji ni wataalamu.
Sehemu ya kushangaza si idadi ya makosa. Ni mifumo. Makosa mengi ni maumbo yaleyale machache yaliyovaa mavazi tofauti.
Mara tu unapoyatambua maumbo haya, unayakamata kabla hayajafika kwenye uzalishaji (production). Hapa kuna mifumo mitano ya kawaida ninayopata:
Vipengele vya Kuingiza Data Vilivyokosewa (Wrong Input Keys) Katika Langchain, kazi ya kubadilisha jina (rename function) ilitafuta kipengele (key) kilichoitwa
old_path. Mfumo kwa kweli ulituma kipengele kilichoitwapath. Kadi (code) ilifeli. Kwa nini inapitisha ukaguzi: Jaribio la kitengo (unit test) lilifanikiwa kwa sababu msimamizi alitengeneza kwa mkono data ya kuingiza (input) ambayo kazi hiyo ilihitaji, na si data ambayo mfumo unaituma kwa kweli. Ukaguzi: Ikiwa kazi inasoma kipengele, tafuta mahali ambapo kitu hicho kinatengenezwa. Ikiwa hakuna kinachoweka kipengele hicho, umepata kosa. Jaribu dhidi ya mwalilia (caller) halisi.Mitego ya Truthiness Kosa la kawaida ni kutumia ukaguzi wa truthiness wakati unamaanisha "je, thamani hii imewekwa." Mfano:
const clause = defaultValue ? \DEFAULT ${defaultValue}` : '';` Ikiwa thamani ni 0, kodi inaruka sehemu hiyo. 0 ni thamani halisi, lakini ni "falsy." Ukaguzi: Kila mara jaribu 0, herufi tupu (empty strings), na false. Ikiwa kodi yako haiwezi kutofautisha kati ya "haipo" na "ipo lakini ni sifuri," basi imeharibika.Underflow ya Integer Isiyo na Alama (Unsigned Integer Underflow) Katika mradi wa Bat, hesabu ilitumiwa kukokotoa upana wa terminal. Ikiwa upana ulikuwa mdogo sana, kutoa (subtraction) kulisababisha underflow. Kwenye aina zisizo na alama (unsigned types), hii hugeuka kuwa namba kubwa sana au inasababisha kodi kufeli. Ukaguzi: Kutoa kwa aina yoyote isiyo na alama inayotumia data ya mtumiaji kunahitaji "saturating subtraction." Jaribu kwa 0 na 1.
Usimbuaji (Encoding) na Hali za Ukingoni (Edge Cases) Sheria za maandishi zinaonekana rahisi mpaka uone herufi zisizo za ASCII. Mistune ilikuwa na matatizo na vimitando (delimiters) vilivyolimbikizwa ambavyo jeneta (generator) inaweza kuzalisha. Wenmode ilifeli wakati wa kushughulikia alama za muunganisho za Unicode (Unicode combining marks). Kwa nini inapitisha ukaguzi: ASCII hupita kila jaribio. Makosa yanatokea tu kwa data ya kuingiza ambayo huandiki kwa mkono. Ukaguzi: Tumia jaribio la tofauti (differential test). Linganisha matokeo yako na utekelezaji mwingine uliothibitishwa.
Uchambuzi Usio Salama (Unsafe Parsing) Vite ilikuwa na middleware iliyokuwa inafafanua (decode) URL bila ulinzi. URL iliyoharibika ingetoa URIError na kusababisha middleware kufeli. Ukaguzi: Chochote unachofafanua (decode) au kuchambua (parse) ambacho hukukiunda kinahitaji kizuizi cha
try/catch. Tupa maandishi yaliyoharibika kwenye kodi yako ili kuona kama itavumilia au itavunjika.
Tabia yangu ni rahisi. Ninaporekebisha kosa, ninaangalia kodi iliyo karibu nayo kabisa. Ikiwa mshughulikiaji (handler) mmoja ana kosa, mshughulikiaji mwenza mara nyingi huwa na umbo lile lile.
Chanzo: https://dev.to/greymothjp/the-same-few-bugs-keep-hiding-in-libraries-you-already-trust-1pgp
