તમારા વિશ્વાસપાત્ર લાઇબ્રેરીઓમાં છુપાયેલા એ જ જૂના બગ્સ
હું Langchain, Vite, અને Bat જેવી મોટી રિપોઝીટરીઝમાં નાના ફિક્સ (fixes) મોકલવામાં સમય વિતાવું છું.
આ પ્રોજેક્ટ્સ અલગ-અલગ ભાષાઓ અને અલગ-અલગ ડોમેન્સનો ઉપયોગ કરે છે. તેના મેન્ટેનર્સ (maintainers) નિષ્ણાત છે.
આશ્ચર્યજનક બાબત બગ્સની સંખ્યા નથી, પણ તેના પેટર્ન (patterns) છે. મોટાભાગના બગ્સ એ જ જૂના પ્રકારના છે, જે માત્ર અલગ દેખાવમાં હોય છે.
એકવાર તમે આ પ્રકારોને ઓળખી લો, પછી તમે તેને પ્રોડક્શનમાં પહોંચતા પહેલા જ પકડી શકો છો. અહીં પાંચ સામાન્ય પેટર્ન છે જે મને જોવા મળે છે:
ખોટી ઇનપુટ કીઝ (Wrong Input Keys) In Langchain, a rename function looked for a key called
old_path. The system actually sent a key calledpath. The code crashed. રિવ્યુમાં કેમ બચી જાય છે: યુનિટ ટેસ્ટ પાસ થઈ ગયો કારણ કે ડેવલપરે મેન્યુઅલી એવું ઇનપુટ બનાવ્યું હતું જે ફંક્શનને જોઈતું હતું, નહીં કે એવું ઇનપુટ જે સિસ્ટમ વાસ્તવમાં મોકલે છે. ચેક કરવાની રીત: જો કોઈ ફંક્શન કી વાંચતું હોય, તો તે ઓબ્જેક્ટ ક્યાં બને છે તે શોધો. જો ક્યાંય પણ તે કી સેટ ન થતી હોય, તો તમને બગ મળી ગયો છે. વાસ્તવિક કોલર (caller) સામે ટેસ્ટ કરો.ટ્રુથિનેસ ટ્રેપ્સ (Truthiness Traps) એક સામાન્ય ભૂલ એ છે કે જ્યારે તમારો અર્થ "શું આ વેલ્યુ સેટ છે" હોય ત્યારે ટ્રુથિનેસ ચેકનો ઉપયોગ કરવો. ઉદાહરણ:
const clause = defaultValue ?DEFAULT ${defaultValue}: '';જો વેલ્યુ 0 હોય, તો કોડ તે બ્રાન્ચને સ્કીપ કરી દેશે. 0 એ એક વાસ્તવિક વેલ્યુ છે, પરંતુ તે "falsy" છે. ચેક કરવાની રીત: હંમેશા 0, ખાલી સ્ટ્રિંગ્સ (empty strings), અને false માટે ટેસ્ટ કરો. જો તમારો કોડ "ગેરહાજર" અને "હાજર પણ શૂન્ય" વચ્ચેનો તફાવત ન સમજી શકતો હોય, તો તે ખામીયુક્ત છે.અનસાઈન્ડ ઇન્ટિજર અંડરફ્લો (Unsigned Integer Underflow) Bat પ્રોજેક્ટમાં, ટર્મિનલ વિડ્થ (width) ગણવા માટે મેથ્સનો ઉપયોગ કરવામાં આવ્યો હતો. જો વિડ્થ ખૂબ નાની હોય, તો બાદબાકીના પરિણામે અંડરફ્લો (underflow) થાય છે. અનસાઈન્ડ ટાઇપ્સ પર, આ એક વિશાળ સંખ્યામાં બદલાઈ જાય છે અથવા ક્રેશ થઈ જાય છે. ચેક કરવાની રીત: યુઝર ઇનપુટનો ઉપયોગ કરીને અનસાઈન્ડ ટાઇપ પર કરવામાં આવતી કોઈપણ બાદબાકી માટે સેચ્યુરેટિંગ સબટ્રેક્શન (saturating subtraction) જરૂરી છે. 0 અને 1 સાથે ટેસ્ટ કરો.
એન્કોડિંગ અને એજ કેસીસ (Encoding and Edge Cases) ટેક્સ્ટના નિયમો સરળ લાગે છે જ્યાં સુધી તમે non-ASCII કેરેક્ટર્સ ન જુઓ. Mistune માં સ્ટેક્ડ ડિલીમીટર્સ (stacked delimiters) સાથે સમસ્યા હતી જે જનરેટર દ્વારા પેદા કરી શકાય છે. Wenmode યુનિકોડ કોમ્બાઈનિંગ માર્ક્સ (Unicode combining marks) હેન્ડલ કરતી વખતે નિષ્ફળ ગયું હતું. રિવ્યુમાં કેમ બચી જાય છે: ASCII દરેક ટેસ્ટ પાસ કરે છે. બગ્સ ફક્ત એવા ઇનપુટ સાથે જ દેખાય છે જે તમે જાતે ટાઇપ નથી કરતા. ચેક કરવાની રીત: ડિફરન્શિયલ ટેસ્ટ (differential test) નો ઉપયોગ કરો. તમારા આઉટપુટની સરખામણી અન્ય, સાબિત થયેલ ઇમ્પ્લીમેન્ટેશન સાથે કરો.
અનસેફ પાર્સિંગ (Unsafe Parsing) Vite માં એક મિડલવેર હતું જે ગાર્ડ વગર URL ને ડિકોડ કરતું હતું. એક ખોટી રીતે બનાવેલી (malformed) URL
URIErrorફેંકશે અને મિડલવેરને ક્રેશ કરી દેશે. ચેક કરવાની રીત: તમે જે કંઈ પણ ડિકોડ અથવા પાર્સ કરો છો જે તમે પોતે બનાવ્યું નથી, તેના માટેtry/catchબ્લોકની જરૂર છે. તમારો કોડ તૂટી જાય છે કે નહીં તે જોવા માટે તેમાં ખોટી સ્ટ્રિંગ્સ નાખીને જુઓ.
મારી આદત સાદી છે. જ્યારે હું કોઈ બગ ફિક્સ કરું છું, ત્યારે હું તેની બરાબર બાજુના કોડને પણ જોઉં છું. જો એક હેન્ડલરમાં બગ હોય, તો તેની સાથેના સમાન હેન્ડલરમાં પણ ઘણીવાર એ જ પ્રકારનો બગ હોય છે.
સ્ત્રોત: https://dev.to/greymothjp/the-same-few-bugs-keep-hiding-in-libraries-you-already-trust-1pgp
