Dead Code Finder: સ્ટેટિક એનાલિસિસની કડવી વાસ્તવિકતા
મેં હેકાથોન માટે ડેડ કોડ શોધવા માટે એક ટૂલ બનાવ્યું હતું. ધ્યેય સરળ હતો. એવો કોડ શોધવો જેને કંઈપણ કોલ કરતું નથી.
જો તમે કોડ ડિલીટ કરો તો શું તૂટી જાય છે તે જાણવું મારે નહોતું. મારે એ જાણવું હતું કે કોઈ ચોક્કસ કોડના ભાગને કંઈ પણ કોલ કરે છે કે નહીં.
મેં તેને Dead Code Finder નામ આપ્યું. તે કોલ્સ અને ઇમ્પોર્ટ્સ શોધવા માટે નોલેજ ગ્રાફનો ઉપયોગ કરે છે. તે દરેક શોધને ત્રણ શ્રેણીઓમાં વિભાજિત કરે છે:
• Confident: શૂન્ય ઇનકમિંગ એજિસ અને એન્ટ્રી પોઈન્ટ નથી. • Uncertain: ઇનહેરિટન્સ (inheritance) જેવા કિસ્સાઓ જ્યાં સ્ટેટિક એનાલિસિસ પૂરતું નથી. • Skipped: ડેકોરેટર્સ અથવા ટેસ્ટ ફ્રેમવર્ક જેવી વસ્તુઓ જેને ટૂલ ઉકેલી શકતું નથી.
મેં એક કડક નિયમનું પાલન કર્યું. ક્યારેય એવું ન કહેવું કે કોડ ડિલીટ કરવા માટે સુરક્ષિત છે. રિપોર્ટ ફક્ત એટલું જ કહે છે કે ગ્રાફમાં કોઈ સંદર્ભ (reference) મળ્યો નથી.
પ્રોજેક્ટ મારી અપેક્ષા કરતા વધુ અઘરો હતો. મને પ્લેટફોર્મ સાથે બે મુખ્ય સમસ્યાઓનો સામનો કરવો પડ્યો:
- Missing Tools: કોન્ફિગમાં હોવા છતાં રનટાઇમ દરમિયાન ગ્રાફ ટૂલ્સ ખૂટતા હતા.
- Unreliable Injection: સિસ્ટમ ક્યારેક એજન્ટ માટે સંપૂર્ણ લોજિક પૂરૂ પાડવામાં નિષ્ફળ જતી હતી.
મેં ફોલબેક મોડ (fallback mode) બનાવીને આ સમસ્યાનું નિરાકરણ કર્યું. જો ગ્રાફ ટૂલ્સ ખૂટતા હોય, તો ટૂલ રિપોઝિટરીમાં રહેલી વાસ્તવિક ફાઇલો વાંચશે. તે સંદર્ભો શોધવા માટે ફાઇલ સર્ચનો ઉપયોગ કરે છે. જો તે આ પદ્ધતિનો ઉપયોગ કરે છે, તો તે શોધાયેલ પરિણામોને 'inferred' તરીકે માર્ક કરે છે.
મારે ચોક્કસ કિસ્સાઓ માટે લોજિકલ ભૂલો પણ સુધારવી પડી:
- Dunder methods:
__init__જેવા મેથડ્સ ઘણીવાર શૂન્ય ઇનકમિંગ એજિસ બતાવે છે કારણ કે ગ્રાફ કોલને મેથડને બદલે ક્લાસ સાથે લિંક કરે છે. મેં આને એન્ક્લોઝિંગ ક્લાસ (enclosing class) તપાસીને સુધાર્યું. - Decorators: ડિક્શનરીમાં સ્ટ્રિંગ લુકઅપ દ્વારા કોલ કરવામાં આવતા ફંક્શન્સ સ્ટેટિક ગ્રાફ માટે 'ડેડ' લાગે છે. મેં આને Skipped બકેટમાં ખસેડ્યા.
- Tests: ટેસ્ટ ફ્રેમવર્ક રિફ્લેક્શન (reflection) દ્વારા મેથડ્સ શોધે છે. આ પણ Skipped બકેટમાં જાય છે.
પરિણામો વિશ્વસનીય હતા. મારા ફોલબેક મોડેડે ડેડ કોડને યોગ્ય રીતે ઓળખ્યો અને વાસ્તવિક ગ્રાફ ડેટા સાથે મેળ ખાતો હતો. તેણે ઇનહેરિટન્સ જેવા અનિશ્ચિત કિસ્સાઓને પણ યોગ્ય રીતે લેબલ કર્યા.
શીખેલા પાઠ:
- જે લોજિક તેના પર આધારિત હોય તે લખતા પહેલા ઉપલબ્ધ ટૂલ્સની ખાતરી કરો.
- "મને ખબર નથી" એવું કહેતો રિપોર્ટ, આત્મવિશ્વાસ સાથે ખોટો રિપોર્ટ આપવા કરતા વધુ સારો છે.
- અનિશ્ચિતતાને લેબલ કરવાથી તમારા ચોક્કસ (confident) તારણો પર પગલાં લેવા યોગ્ય બને છે.
Optional learning community: https://t.me/GyaanSetuAi
