మీరు నమ్మే లైబ్రరీలలో దాగి ఉన్న కొన్ని ఒకే రకమైన బగ్‌లు

నేను Langchain, Vite, మరియు Bat వంటి పెద్ద రిపోజిటరీలకు చిన్న చిన్న ఫిక్స్‌లను (fixes) పంపడానికి సమయం కేటాయిస్తాను.

ఈ ప్రాజెక్ట్‌లు వేర్వేరు భాషలను మరియు వేర్వేరు డొమైన్‌లను ఉపయోగిస్తాయి. వీటి మెయింటైనర్లు (maintainers) నిపుణులు.

ఆశ్చర్యకరమైన విషయం బగ్‌ల సంఖ్య కాదు. అవి అనుసరించే పద్ధతులు (patterns). చాలా బగ్‌లు వేర్వేరు రూపాల్లో ఉన్నప్పటికీ, అవి ఒకే రకమైన నమూనాలను కలిగి ఉంటాయి.

ఈ నమూనాలను మీరు గుర్తించగలిగితే, అవి ప్రొడక్షన్‌కు చేరుకోకముందే మీరు వాటిని పట్టుకోవచ్చు. నేను గుర్తించిన ఐదు సాధారణ పద్ధతులు ఇక్కడ ఉన్నాయి:

  • Wrong Input Keys Langchainలో, ఒక rename ఫంక్షన్ old_path అనే కీ కోసం వెతికింది. సిస్టమ్ నిజానికి path అనే కీని పంపింది. కోడ్ క్రాష్ అయింది. రివ్యూలో ఎందుకు బయటపడదు: డెవలపర్ ఫంక్షన్‌కు కావాల్సిన ఇన్‌పుట్‌ను మాన్యువల్‌గా తయారు చేశారు, సిస్టమ్ నిజంగా పంపే ఇన్‌పుట్‌ను కాదు. అందుకే యూనిట్ టెస్ట్ పాస్ అయింది. తనిఖీ చేయాల్సిన విధానం: ఒక ఫంక్షన్ ఏదైనా కీని చదువుతుంటే, ఆ ఆబ్జెక్ట్ ఎక్కడ తయారవుతుందో చూడండి. ఏదీ ఆ కీని సెట్ చేయకపోతే, మీరు ఒక బగ్‌ను కనుగొన్నట్లే. నిజమైన కాలర్‌తో (caller) టెస్ట్ చేయండి.

  • Truthiness Traps "ఈ విలువ సెట్ చేయబడిందా" అని తనిఖీ చేయాలనుకున్నప్పుడు, పొరపాటున truthiness చెక్‌ను ఉపయోగించడం ఒక సాధారణ తప్పు. ఉదాహరణ: const clause = defaultValue ? \DEFAULT ${defaultValue}` : '';` ఒకవేళ విలువ 0 అయితే, కోడ్ ఆ బ్రాంచ్‌ను స్కిప్ చేస్తుంది. 0 అనేది ఒక నిజమైన విలువ, కానీ అది "falsy". తనిఖీ చేయాల్సిన విధానం: ఎల్లప్పుడూ 0, ఖాళీ స్ట్రింగ్స్ (empty strings), మరియు false లను టెస్ట్ చేయండి. మీ కోడ్ "మిస్సింగ్" (missing) మరియు "ఉంది కానీ సున్నా" (present but zero) మధ్య తేడాను గుర్తించలేకపోతే, అది లోపభూయిష్టమైనది.

  • Unsigned Integer Underflow Bat ప్రాజెక్ట్‌లో, టెర్మినల్ వెడల్పును లెక్కించడానికి మ్యాథ్ (math) ఉపయోగించారు. వెడల్పు చాలా తక్కువగా ఉంటే, తీసివేత (subtraction) వల్ల అండర్‌ఫ్లో (underflow) ఏర్పడింది. అన్‌సైన్డ్ టైప్స్‌లో, ఇది ఒక భారీ సంఖ్యగా మారిపోతుంది లేదా క్రాష్ అవుతుంది. తనిఖీ చేయాల్సిన విధానం: యూజర్ ఇన్‌పుట్‌ను ఉపయోగించి అన్‌సైన్డ్ టైప్‌పై చేసే ఏ తీసివేతకైనా 'సట్యూరేటింగ్ సబ్‌ట్రాక్షన్' (saturating subtraction) అవసరం. 0 మరియు 1 తో టెస్ట్ చేయండి.

  • Encoding and Edge Cases non-ASCII క్యారెక్టర్లను చూసే వరకు టెక్స్ట్ రూల్స్ సరళంగా అనిపిస్తాయి. ఒక జనరేటర్ ఉత్పత్తి చేసే స్టాక్డ్ డెలిమిటర్లతో (stacked delimiters) Mistune సమస్యలను ఎదుర్కొంది. Unicode కంబైనింగ్ మార్క్‌లను హ్యాండిల్ చేసేటప్పుడు Wenmode విఫలమైంది. రివ్యూలో ఎందుకు బయటపడదు: ASCII ప్రతి టెస్ట్‌ను పాస్ అవుతుంది. మీరు స్వయంగా టైప్ చేయని ఇన్‌పుట్‌లతో మాత్రమే ఈ బగ్‌లు కనిపిస్తాయి. తనిఖీ చేయాల్సిన విధానం: డిఫరెన్షియల్ టెస్ట్ (differential test) ఉపయోగించండి. మీ అవుట్‌పుట్‌ను వేరొక నిరూపితమైన ఇంప్లిమెంటేషన్‌తో పోల్చండి.

  • Unsafe Parsing Viteలో ఒక మిడిల్‌వేర్ (middleware) ఉంది, అది ఎటువంటి గా