paint-brush
कोड गुणवत्ता में सुधार के लिए प्रभावी स्थैतिक कोड विश्लेषण तकनीकेंद्वारा@launchable
27,166 रीडिंग
27,166 रीडिंग

कोड गुणवत्ता में सुधार के लिए प्रभावी स्थैतिक कोड विश्लेषण तकनीकें

द्वारा Launchable7m2023/03/09
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

स्टेटिक कोड विश्लेषण का अर्थ है बिना निष्पादित किए मुद्दों के लिए स्रोत कोड का विश्लेषण करना। यह गतिशील कोड परीक्षण के विपरीत है, जो निष्पादन योग्य को लॉन्च करता है और सही व्यवहार की पुष्टि करता है। तीन तकनीकों में सिंटैक्स विश्लेषण, डेटा और नियंत्रण प्रवाह विश्लेषण और सुरक्षा विश्लेषण शामिल हैं। विभिन्न प्रकार के स्थैतिक विश्लेषण और इसकी प्रभावशीलता को कैसे बढ़ाया जाए, इसके बारे में अधिक जानने के लिए आगे पढ़ें।
featured image - कोड गुणवत्ता में सुधार के लिए प्रभावी स्थैतिक कोड विश्लेषण तकनीकें
Launchable HackerNoon profile picture

प्रिडिक्टिव टेस्ट सिलेक्शन पर लेयरिंग द्वारा स्टेटिक कोड एनालिसिस इफेक्टिवनेस को कैसे बढ़ाया जाए

कंप्यूटर प्रोग्रामिंग पंच कार्ड के उत्कर्ष के बाद से एक लंबा सफर तय कर चुका है। वे दिन गए जब प्रोग्रामर मैन्युअल रूप से एक पेपर कार्ड में छेद करके एक कार्य को क्रमादेशित करते थे, इसे शुद्धता के लिए ट्रिपल-चेक करते थे, और उम्मीद करते थे कि जब वे अंततः प्रोग्राम को निष्पादित करेंगे तो यह काम करेगा।


कंप्यूटर


आज, डेवलपर्स कोड की शुद्धता की एक पंक्ति पर प्रतिक्रिया प्राप्त कर सकते हैं, जिसे वे इसे अपने कोड संपादक में टाइप करते हैं - स्थिर कोड विश्लेषण के क्षेत्र में नवाचारों के लिए छिद्रित कार्ड विकास प्रक्रिया से बहुत दूर।


स्टेटिक कोड विश्लेषण सॉफ़्टवेयर विकास प्रक्रिया के आरंभ में समस्याओं की पहचान कर सकता है और उन्हें रोक सकता है, लेकिन संसाधनों के जलने के जोखिम के बिना नहीं। जबकि स्टेटिक कोड विश्लेषण सॉफ्टवेयर की गुणवत्ता और विश्वसनीयता में सुधार के लिए एक मूल्यवान उपकरण हो सकता है, आप परीक्षण प्रभाव विश्लेषण करके और प्रिडिक्टिव टेस्ट चयन में जोड़कर मूल्य बढ़ा सकते हैं।


स्टेटिक कोड विश्लेषण का अर्थ है बिना निष्पादन के मुद्दों के लिए स्रोत कोड का विश्लेषण करना। यह गतिशील कोड परीक्षण के विपरीत है, जो निष्पादन योग्य को लॉन्च करता है और सही व्यवहार की पुष्टि करता है।


स्थैतिक विश्लेषक संभावित मुद्दों की पहचान करने के लिए एल्गोरिदम और नियमों का उपयोग करते हैं, उन्हें गंभीरता और प्रभाव के आधार पर वर्गीकृत करते हैं, और डेवलपर्स के साथ मुद्दों को ट्राइएज और हल करने के लिए पास करते हैं।

विभिन्न प्रकार के स्थैतिक विश्लेषण के बारे में और जानने के लिए आगे पढ़ें और जानें कि आप प्रिडिक्टिव टेस्ट सिलेक्शन पर लेयरिंग करके इसकी प्रभावशीलता को कैसे बढ़ा सकते हैं।

स्टेटिक कोड विश्लेषण तकनीक अवलोकन

स्थिर कोड विश्लेषण तकनीकों का उपयोग कोड में संभावित समस्याओं की पहचान करने से पहले किया जाता है, जिससे डेवलपर्स को परिवर्तन करने और सॉफ़्टवेयर की गुणवत्ता में सुधार करने की अनुमति मिलती है। तीन तकनीकों में सिंटैक्स विश्लेषण, डेटा और नियंत्रण प्रवाह विश्लेषण और सुरक्षा विश्लेषण शामिल हैं।

सिंटेक्स विश्लेषण

सिंटैक्स विश्लेषण में सिंटैक्स त्रुटियों और कोडिंग मानकों के उल्लंघन के लिए कोड की जाँच करना शामिल है, जैसे लापता कोष्ठक, अमान्य चर नाम और अनुचित इंडेंटेशन। अधिकांश आधुनिक आईडीई में सिंटैक्स विश्लेषण अंतर्निहित होता है। उदाहरण के लिए, विज़ुअल स्टूडियो और विज़ुअल स्टूडियो कोड में Intellisense फीचर में निर्मित कोड विश्लेषण है। नीचे दिए गए स्क्रीनशॉट में, विजुअल स्टूडियो 2022 कोड के संकलित होने से पहले लापता अर्धविराम के लिए C# सिंटैक्स त्रुटि दिखा रहा है।

वक्य रचना त्रुटि

सिंटेक्स विश्लेषण डेवलपर्स को "रन" बटन हिट करने से पहले बग पकड़ने में मदद करता है।

डेटा और नियंत्रण प्रवाह विश्लेषण

इस तकनीक में कोड के माध्यम से डेटा के प्रवाह को ट्रैक करना शामिल है, ताकि संभावित मुद्दों की पहचान की जा सके, जैसे कि गैर-प्रारंभिक चर, नल पॉइंटर्स और डेटा रेस की स्थिति। नियंत्रण प्रवाह विश्लेषण समान है और अनंत लूप और अगम्य कोड जैसे बग की पहचान करने में मदद करता है। कई आधुनिक कंपाइलरों में डेटा प्रवाह विश्लेषण और नियंत्रण प्रवाह विश्लेषण अंतर्निहित होता है। वे संकलन-समय की चेतावनियों या त्रुटियों के रूप में किसी भी निष्कर्ष को सामने लाते हैं।


उदाहरण के लिए, सी-भाषा परिवार के लिए बजना टूलसेट स्वचालित रूप से संकलन के दौरान प्रवाह विश्लेषण करता है। उन भाषाओं के लिए जो संकलित नहीं हैं, जैसे कि पायथन, आप कोडक्यूएल जैसे डेटा और नियंत्रण प्रवाह विश्लेषण उपकरण का मैन्युअल रूप से उपयोग कर सकते हैं।

सुरक्षा विश्लेषण

सुरक्षा स्थैतिक विश्लेषण में संभावित सुरक्षा भेद्यताओं के लिए कोड की जाँच करना शामिल है, जैसे कि बफर ओवरफ्लो, क्रॉस-साइट स्क्रिप्टिंग और इंजेक्शन हमले। वे ज्ञात कमजोरियों वाले पैकेजों के लिए आपकी तृतीय पक्ष निर्भरताओं को भी स्कैन कर सकते हैं और आपके स्रोत कोड में चेक किए गए प्रमाण-पत्रों का पता लगा सकते हैं।


स्थैतिक अनुप्रयोग सुरक्षा परीक्षण (SAST) उपकरणों में शामिल हैं:

उदाहरण: SemGrep के साथ स्थैतिक अनुप्रयोग सुरक्षा परीक्षण

SemGrep एक लोकप्रिय मुफ्त एप्लिकेशन सुरक्षा स्थिर विश्लेषण उपकरण है। OWASP जूस शॉप जैसे असुरक्षित कोड वाले प्रोजेक्ट पर SemGrep के सुरक्षा विश्लेषक को चलाने से कोड में दर्जनों सुरक्षा भेद्यताएं सामने आती हैं।


एक्सप्रेस सीक्वेलाइज इंजेक्शन

स्टेटिक कोड विश्लेषण लाभ: गुणवत्ता, रोकथाम, लागत

  1. बेहतर कोड गुणवत्ता और विश्वसनीयता। स्थैतिक विश्लेषण समस्याओं को जल्दी पकड़ने में मदद करके डेवलपर्स को बढ़ाता है। परिणाम बेहतर, अधिक विश्वसनीय कोड है।
  2. मुद्दों की शीघ्र पहचान और रोकथाम। एक बग खोजने के बजाय जब यह पहले से ही ग्राहक समस्याओं का कारण बन रहा है, स्थैतिक विश्लेषण पहली बार कोड चलाने से पहले उन्हें खोजने में मदद कर सकता है।
  3. दक्षता और लागत बचत में वृद्धि। यदि डेवलपर्स स्थैतिक विश्लेषण के साथ समस्याओं को जल्दी पकड़ सकते हैं, तो आपके सीआई/सीडी सूट में परीक्षणों को फिर से चलाने की आवश्यकता नहीं है। यह क्लाउड कंप्यूटिंग लागत बचाता है और विकास ताल को गति देता है।

स्थैतिक कोड विश्लेषण का उपयोग करने में चुनौतियाँ और विचार

जबकि स्टेटिक कोड विश्लेषण टीमों को पहले मुद्दों को पकड़ने में मदद करता है, यह एक सही दृष्टिकोण नहीं है और झूठी सकारात्मकता, झूठी नकारात्मकता में चल सकता है, और टूलसेट द्वारा सीमित है।

झूठी सकारात्मक

यदि आप किसी डेवलपर से पूछते हैं कि वे स्थिर विश्लेषण टूल के बारे में क्या नापसंद करते हैं, तो आपको एक ही उत्तर बार-बार सुनाई देगा: झूठी सकारात्मकता।


कोड की एक पंक्ति में निष्कर्ष निर्धारित करने के लिए स्टेटिक एनालाइज़र ह्यूरिस्टिक्स और नियमों का उपयोग करते हैं। हालांकि, वे सही नहीं हैं और अक्सर ऐसे परिणाम सामने आते हैं जो वास्तव में संदर्भ में जारी नहीं किए जाते हैं।


कोड उदाहरण की निम्न पंक्ति के लिए:

 // Set the password policy so that user passwords expire after 365 days. passwordExpiry = 365;


एक अपरिष्कृत सुरक्षा स्थिर विश्लेषक स्ट्रिंग "पासवर्ड" देखता है और इसे स्रोत कोड में एक क्रेडेंशियल के रूप में फ़्लैग करता है। जांच करने पर, यह स्पष्ट रूप से एक रहस्य नहीं है और इसके लिए किसी कोड परिवर्तन की आवश्यकता नहीं है। इस मुद्दे की जांच करने और इसे गलत सकारात्मक के रूप में फ़्लैग करने के लिए अतिरिक्त देव समय की आवश्यकता होती है, जो निराशाजनक हो सकता है।

झूठा नकारात्मक

सॉफ्टवेयर कोड जटिल हो सकता है और स्थिर विश्लेषक किसी स्थिति की बारीकियों को याद कर सकते हैं। इसलिए, आप अपने द्वारा लिखे गए 100% बग को खोजने के लिए स्थैतिक विश्लेषणकर्ताओं पर भरोसा नहीं कर सकते।

आपके क्लाउड वातावरण में लगभग दो समान सर्वर कॉन्फ़िगरेशन फ़ाइलें हैं: serverprod.config (उत्पादन) और servertest.config.dev (परीक्षण वातावरण)।


एक स्थिर विश्लेषक को .config फ़ाइल एक्सटेंशन के साथ फ़ाइलों को स्कैन करने के लिए कॉन्फ़िगर किया गया है और serverprod.config में समस्याओं को सही ढंग से ढूंढता है, लेकिन यह servertest.config.dev फ़ाइल में समान मुद्दों को याद करता है क्योंकि यह इसके फ़ाइल नाम पैटर्न से मेल नहीं खाता है।

कई उपकरणों और दृष्टिकोणों का उपयोग

एक भी स्थिर विश्लेषण उपकरण नहीं है जो यह सब करता है। कई विभिन्न वातावरणों, फ़ाइल प्रकारों और स्कैनिंग के प्रकारों के लिए विशिष्ट हैं। एक संगठन को सुरक्षा स्कैनिंग के लिए एक उपकरण की आवश्यकता हो सकती है, उनके टाइपस्क्रिप्ट फ़्रंटएंड के लिए एक अलग टूल, गोलंग बैकएंड को स्कैन करने के लिए एक तीसरा टूल, और उनके सर्वर कॉन्फ़िगरेशन टेराफ़ॉर्म फ़ाइलों के लिए एक और स्थिर विश्लेषक। प्रत्येक उपकरण मूल्य प्रदान करता है, लेकिन उन सभी को स्थापित करना और बनाए रखना कठिन हो सकता है।

स्थैतिक कोड विश्लेषण उपकरण

स्थैतिक कोड विश्लेषण के लिए यहां कुछ शीर्ष उपकरण दिए गए हैं:

  1. सोनारक्यूब : एक लोकप्रिय ओपन-सोर्स स्टैटिक कोड एनालिसिस टूल जो प्रोग्रामिंग लैंग्वेज की एक विस्तृत श्रृंखला का समर्थन करता है और विभिन्न बिल्ड और परिनियोजन टूल के साथ एकीकृत होता है।


  2. चेकस्टाइल : एक ओपन-सोर्स स्टैटिक कोड एनालिसिस टूल जो जावा कोड में कोडिंग स्टाइल और कन्वेंशन के उल्लंघन की जांच करता है।


  3. फाइंडबग्स : एक ओपन-सोर्स स्टैटिक कोड एनालिसिस टूल जो प्रदर्शन समस्याओं, सुरक्षा कमजोरियों और कोडिंग मानकों के उल्लंघन सहित जावा कोड में संभावित मुद्दों की पहचान करता है।


  4. पीएमडी : एक ओपन-सोर्स स्टैटिक कोड एनालिसिस टूल जो जावा, सी++ और पायथन सहित विभिन्न प्रोग्रामिंग भाषाओं में समस्याओं की जांच करता है।


  5. वेराकोड : एक वाणिज्यिक स्थिर कोड विश्लेषण उपकरण जो सॉफ्टवेयर में सुरक्षा कमजोरियों की पहचान करने और उन्हें संबोधित करने के लिए कई प्रकार की सुविधाएँ प्रदान करता है।


  6. कवरिटी : एक वाणिज्यिक स्थिर कोड विश्लेषण उपकरण जो कोड में सुरक्षा दोषों की पहचान करने और उन्हें रोकने पर केंद्रित है।


  7. ESLint : जावास्क्रिप्ट कोड में समस्याओं को खोजने और ठीक करने में सहायता के लिए एक ओपन-सोर्स प्रोजेक्ट। यदि आप टाइपस्क्रिप्ट का उपयोग कर रहे हैं, तो टाइपस्क्रिप्ट-एस्लिंट संस्करण देखें।


ये उपकरण कई प्रकार की सुविधाएँ प्रदान करते हैं, विभिन्न प्रोग्रामिंग भाषाओं का समर्थन करते हैं, और विभिन्न प्रकार के सॉफ़्टवेयर लाइसेंस रखते हैं। स्थैतिक कोड विश्लेषण उपकरण चुनते समय लाइसेंसिंग और संगठन की विशिष्ट आवश्यकताओं और आवश्यकताओं पर विचार करना महत्वपूर्ण है।

उदाहरण: ESLint के साथ JavaScript स्टेटिक कोड विश्लेषण

यहाँ ESLint का उपयोग करके JavaScript स्थिर कोड विश्लेषण का एक सरल उदाहरण दिया गया है:


जावास्क्रिप्ट स्थिर कोड


कोड की इस एकल पंक्ति में दो मुद्दे हैं जो ESLint को जल्दी मिल जाते हैं:


  1. स्ट्रिंग्स को दोहरे उद्धरण चिह्नों का उपयोग करने की आवश्यकता है
  2. एक चर को एक मान दिया जाता है लेकिन इसका कभी उपयोग नहीं किया जाता है।


स्थैतिक कोड विश्लेषण के माध्यम से इन मुद्दों की पहचान और समाधान करके, संगठन अपने सॉफ़्टवेयर की गुणवत्ता और विश्वसनीयता में सुधार कर सकते हैं। क्या आप स्वयं ESLint आज़माना चाहते हैं? आप ESLint Playground का ऑनलाइन उपयोग कर सकते हैं।

स्थैतिक कोड विश्लेषण और भविष्य कहनेवाला परीक्षण चयन

प्रिडिक्टिव टेस्ट सिलेक्शन एक ऐसी तकनीक है जो पिछले परीक्षण परिणामों का विश्लेषण करने के लिए मशीन लर्निंग का उपयोग करती है और भविष्यवाणी करती है कि भविष्य में कौन से परीक्षण विफल होने की संभावना है। परीक्षण प्रक्रिया की दक्षता और प्रभावशीलता में सुधार के लिए इसका उपयोग स्थैतिक कोड विश्लेषण के साथ किया जा सकता है।

सॉफ़्टवेयर गुणवत्ता रणनीति में स्थैतिक विश्लेषण केवल एक पहलू है।


अधिकांश संगठन अपने कार्यात्मक एंड-टू-एंड सॉफ़्टवेयर परीक्षणों को बढ़ाने के लिए स्थैतिक विश्लेषण का उपयोग करते हैं। स्थैतिक विश्लेषण परीक्षण केवल एक प्रकार के परीक्षण हैं जो CI/CD पाइपलाइन में चल सकते हैं।


एक तरीका है कि भविष्य कहनेवाला परीक्षण चयन स्थिर कोड विश्लेषण में मदद कर सकता है, कोड के परीक्षण को प्राथमिकता देकर जिसमें समस्याएं शामिल होने की सबसे अधिक संभावना है। पिछले परीक्षण के परिणामों का विश्लेषण करके और विफलता से संबंधित पैटर्न की पहचान करके, भविष्य कहनेवाला परीक्षण चयन कोड के सबसे महत्वपूर्ण या समस्याग्रस्त क्षेत्रों पर परीक्षण के प्रयास पर ध्यान केंद्रित करने में मदद कर सकता है। यह सुनिश्चित करने में मदद कर सकता है कि अनावश्यक परीक्षण पर खर्च किए जाने वाले समय और संसाधनों को कम करते हुए, सबसे महत्वपूर्ण मुद्दों की जल्द से जल्द पहचान और समाधान किया जाए।


कुल मिलाकर, स्थैतिक कोड विश्लेषण के साथ भविष्य कहनेवाला परीक्षण चयन को जोड़कर, संगठन अपनी परीक्षण प्रक्रिया की दक्षता और प्रभावशीलता में सुधार कर सकते हैं, और अपने सॉफ़्टवेयर की गुणवत्ता और विश्वसनीयता सुनिश्चित कर सकते हैं।

अंतिम विचार

कोड गुणवत्ता को बनाए रखने के लिए किसी संगठन के शस्त्रागार में स्थैतिक विश्लेषण एक महत्वपूर्ण उपकरण है। यह कोड दोषों को कम कर सकता है और रखरखाव में सुधार कर सकता है, लेकिन झूठी सकारात्मकताओं से भी व्याप्त हो सकता है और आपके संगठन को आवश्यक कवरेज प्राप्त करने के लिए कई उपकरणों की आवश्यकता हो सकती है।


उन मुद्दों के साथ भी, किसी भी संगठन के लिए गुणवत्ता कोड देने के लिए स्थैतिक विश्लेषण एक महत्वपूर्ण पहलू है।


प्रिडिक्टिव टेस्ट सिलेक्शन ** के साथ तेज, स्मार्ट स्टैटिक कोड एनालिसिस चलाएं **। यह टेस्ट टाइप, कमिट फ्रीक्वेंसी या ब्रांच काउंट की परवाह किए बिना आपके सीआई के साथ समेकित रूप से एकीकृत होता है।


भविष्य कहनेवाला परीक्षण चयन निष्क्रिय समय को 70% तक कम कर सकता है। स्केल करने वाले बुद्धिमान परीक्षण के साथ स्थिर विश्लेषण के साथ अपने डेवलपर्स को एक शानदार अनुभव दें।