कार्यक्रम विश्लेषण

From alpha
Jump to navigation Jump to search

कंप्यूटर विज्ञान में, कार्यक्रम विश्लेषण[1] शुद्धता, मजबूती, सुरक्षा और सजीवता जैसी संपत्ति के संबंध में कंप्यूटर प्रोग्राम के व्यवहार का स्वचालित रूप से विश्लेषण करने की प्रक्रिया है। कार्यक्रम विश्लेषण दो प्रमुख क्षेत्रों पर केंद्रित है: कार्यक्रम अनुकूलन और कार्यक्रम शुद्धता। पहला संसाधन उपयोग को कम करते हुए कार्यक्रम के प्रदर्शन को बेहतर बनाने पर ध्यान केंद्रित करता है जबकि बाद वाला यह सुनिश्चित करने पर ध्यान केंद्रित करता है कि कार्यक्रम वह करता है जो उसे करना चाहिए।

कार्यक्रम विश्लेषण कार्यक्रम (स्थैतिक कार्यक्रम विश्लेषण) को क्रियान्वित किए बिना, रनटाइम (गतिशील कार्यक्रम विश्लेषण) के दौरान या दोनों के संयोजन में किया जा सकता है।

स्टेटिक प्रोग्राम विश्लेषण

कार्यक्रम की शुद्धता के संदर्भ में, स्थैतिक विश्लेषण कार्यक्रम के विकास चरण के दौरान कमजोरियों की खोज कर सकता है।[2] परीक्षण चरण के दौरान पाई गई कमजोरियों की तुलना में इन कमजोरियों को ठीक करना आसान है क्योंकि स्थिर विश्लेषण भेद्यता की जड़ तक ले जाता है।

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

गलत अनुकूलन अत्यधिक अवांछनीय हैं। इसलिए, प्रोग्राम ऑप्टिमाइज़ेशन के संदर्भ में, कम्प्यूटेशनल रूप से अनिर्णीत विश्लेषण को संभालने के लिए दो मुख्य रणनीतियाँ हैं:

  1. एक ऑप्टिमाइज़र जिसे अपेक्षाकृत कम समय में पूरा करने की उम्मीद है, जैसे कि एक अनुकूलन संकलक में ऑप्टिमाइज़र, एक विश्लेषण के एक छोटे संस्करण का उपयोग कर सकता है जिसे सीमित समय में पूरा करने की गारंटी दी जाती है, और केवल खोजने की गारंटी दी जाती है सही अनुकूलन।
  2. एक तृतीय-पक्ष अनुकूलन उपकरण को इस तरह से लागू किया जा सकता है कि कभी भी गलत अनुकूलन न हो, लेकिन यह भी कि यह कुछ स्थितियों में अनिश्चित काल तक चलना जारी रख सकता है जब तक कि यह एक नहीं मिल जाता (जो कभी नहीं हो सकता)। इस मामले में, टूल का उपयोग करने वाले डेवलपर को टूल को रोकना होगा और कोड के उस टुकड़े पर टूल को फिर से चलाने से बचना होगा (या संभवतः टूल को ट्रिपिंग से बचने के लिए कोड को संशोधित करना होगा)।

हालाँकि, एक तीसरी रणनीति भी है जो कभी-कभी उन भाषाओं के लिए लागू होती है जो पूरी तरह से निर्दिष्ट नहीं होती हैं, जैसे C (प्रोग्रामिंग भाषा)। एक ऑप्टिमाइज़िंग कंपाइलर कोड उत्पन्न करने के लिए स्वतंत्र है जो रनटाइम पर कुछ भी करता है – यहां तक ​​कि दुर्घटनाग्रस्त हो जाता है – यदि यह स्रोत कोड का सामना करता है जिसका शब्दार्थ उपयोग में भाषा मानक द्वारा अनिर्दिष्ट है।

नियंत्रण-प्रवाह

नियंत्रण-प्रवाह विश्लेषण का उद्देश्य यह जानकारी प्राप्त करना है कि कार्यक्रम के निष्पादन के दौरान विभिन्न बिंदुओं पर कौन से कार्यों को बुलाया जा सकता है। एकत्रित जानकारी को नियंत्रण-प्रवाह ग्राफ़ (CFG) द्वारा दर्शाया जाता है जहाँ नोड प्रोग्राम के निर्देश होते हैं और किनारे नियंत्रण के प्रवाह का प्रतिनिधित्व करते हैं। कोड ब्लॉक और लूप की पहचान करके सीएफजी कंपाइलर-निर्मित अनुकूलन के लिए एक प्रारंभिक बिंदु बन जाता है।

डेटा प्रवाह विश्लेषण

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

सार व्याख्या

सार व्याख्या वास्तव में कार्यक्रम को क्रियान्वित किए बिना किसी कार्यक्रम के संभावित निष्पादन के बारे में जानकारी निकालने की अनुमति देती है। इस जानकारी का उपयोग कंपाइलर्स द्वारा संभावित अनुकूलन के लिए या बग के कुछ वर्गों के विरुद्ध प्रोग्राम को प्रमाणित करने के लिए किया जा सकता है।

सिस्टम टाइप करें

प्रकार प्रणालियाँ प्रकारों को उन कार्यक्रमों से संबद्ध करती हैं जो कुछ आवश्यकताओं को पूरा करते हैं। उनका उद्देश्य किसी भाषा के कार्यक्रमों के उपसमुच्चय का चयन करना है जो किसी गुण के अनुसार सही माने जाते हैं।

  • Type_system#Type_checking - सत्यापित करें कि प्रोग्राम टाइप सिस्टम द्वारा स्वीकार किया गया है या नहीं।

प्रोग्रामिंग ऑब्जेक्ट्स का उपयोग कैसे किया जाता है और वे क्या कर सकते हैं, इसे सीमित करने के लिए टाइप चेकिंग का उपयोग प्रोग्रामिंग में किया जाता है। यह संकलक या दुभाषिया (कंप्यूटिंग) द्वारा किया जाता है। टाइप चेकिंग यह सुनिश्चित करके भेद्यता को रोकने में भी मदद कर सकता है कि एक हस्ताक्षरित मान एक अहस्ताक्षरित चर के लिए जिम्मेदार नहीं है। प्रकार की जाँच स्थिर रूप से (संकलन समय पर), गतिशील रूप से (रनटाइम पर) या दोनों के संयोजन से की जा सकती है।

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

प्रभाव प्रणाली

प्रभाव प्रणालियाँ औपचारिक प्रणालियाँ हैं जिन्हें किसी कार्य या विधि को निष्पादित करने वाले प्रभावों का प्रतिनिधित्व करने के लिए डिज़ाइन किया गया है। एक प्रभाव संहिताबद्ध करता है कि क्या किया जा रहा है और क्या किया जा रहा है – आमतौर पर क्रमशः प्रभाव प्रकार और प्रभाव क्षेत्र के रूप में जाना जाता है।[clarification needed]


मॉडल की जाँच

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

गतिशील कार्यक्रम विश्लेषण

डायनेमिक विश्लेषण रनटाइम सुरक्षा प्रदान करते हुए, विश्लेषण की सटीकता बढ़ाने के लिए प्रोग्राम के रनटाइम ज्ञान का उपयोग कर सकता है, लेकिन यह केवल समस्या के एकल निष्पादन का विश्लेषण कर सकता है और रनटाइम चेक के कारण प्रोग्राम के प्रदर्शन को कम कर सकता है।

परीक्षण

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

निगरानी

कार्यक्रम की निगरानी कार्यक्रम के बारे में विभिन्न प्रकार की जानकारी जैसे संसाधन उपयोग, घटनाओं और बातचीत को रिकॉर्ड और लॉग करती है, ताकि असामान्य व्यवहार के कारणों को खोजने या इंगित करने के लिए इसकी समीक्षा की जा सके। इसके अलावा, इसका उपयोग सुरक्षा ऑडिट करने के लिए किया जा सकता है। कार्यक्रमों की स्वचालित निगरानी को कभी-कभी रनटाइम सत्यापन कहा जाता है।

प्रोग्राम स्लाइसिंग

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

यह भी देखें

संदर्भ

  1. Nielson, F., Nielson, H. R., & Hankin, C. (2015). Principles of program analysis. Springer.
  2. Jovanovic, N., Kruegel, C., & Kirda, E. (2006, May). Pixy: A static analysis tool for detecting web application vulnerabilities. In Security and Privacy, 2006 IEEE Symposium on (pp. 6-pp). IEEE.


अग्रिम पठन

  • Agrawal, Hiralal; Horgan, Joseph R. Dynamic program slicing (PDF).
  • Chunlei, Wang; Gang, Zhao; Yiqi, Dai (2009). "An Efficient Control Flow Security Analysis Approach for Binary Executables". 2009 2nd IEEE International Conference on Computer Science and Information Technology. pp. 272–276. doi:10.1109/ICCSIT.2009.5234950. ISBN 978-1-4244-4519-6.
  • Nielson, Flemming; Nielson, Hanne Riis; Hankin, Chris (2005). Principles of Program Analysis. Springer Science+Business Media.


बाहरी संबंध