आटोमेटिक बग फिक्सिंग

आटोमेटिक बग फिक्सिंग :
स्वचालित बग-फिक्सिंग मानव प्रोग्रामर के हस्तक्षेप के बिना सॉफ़्टवेयर बग की स्वचालित मरम्मत है। इसे आमतौर पर स्वचालित पैच पीढ़ी, स्वचालित बग मरम्मत या स्वचालित प्रोग्राम मरम्मत के रूप में भी जाना जाता है।  इस तरह की तकनीकों का विशिष्ट लक्ष्य सॉफ्टवेयर प्रोग्रामों में बगैर किसी बाधा के सॉफ्टवेयर प्रोग्राम में बग को खत्म करने के लिए स्वचालित रूप से सही पैच जेनरेट करना है। 

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

तकनीक:
जनरेट और मान्य:
जेनरेट-एंड-वैलिडेट प्रत्येक परीक्षित पैच को इकट्ठा करने के लिए प्रत्येक उम्मीदवार पैच का संकलन और परीक्षण करते हैं जो टेस्ट सूट में सभी इनपुट के लिए अपेक्षित आउटपुट उत्पन्न करते हैं।इस तरह की तकनीक आम तौर पर कार्यक्रम के एक परीक्षण सूट के साथ शुरू होती है, अर्थात्, परीक्षण मामलों का एक सेट, जिसमें से कम से कम एक बग को उजागर करता है। बग-फिक्सिंग प्रणाली के आरंभिक और मान्य जेनरोग्रॉग हैं।  जेनरेट-एंड-वैलिड तकनीकों की प्रभावशीलता विवादास्पद बनी हुई है, क्योंकि वे आम तौर पर पैच शुद्धता की गारंटी नहीं देते हैं।  फिर भी, हाल ही में अत्याधुनिक तकनीकों के कथित परिणाम आम तौर पर आशाजनक हैं। उदाहरण के लिए, आठ बड़े सी सॉफ़्टवेयर प्रोग्रामों में व्यवस्थित रूप से 69 वास्तविक विश्व कीड़े एकत्र किए गए, अत्याधुनिक बग-फिक्सिंग सिस्टम पैगंबर 69 बगों में से 18 के लिए सही पैच उत्पन्न करता है। 
उम्मीदवार पैच उत्पन्न करने का एक तरीका मूल कार्यक्रम पर म्यूटेशन ऑपरेटरों को लागू करना है। उत्परिवर्तन संचालक मूल कार्यक्रम में हेरफेर करते हैं, संभवतः इसके सार सिंटैक्स ट्री प्रतिनिधित्व के माध्यम से, या अधिक मोटे-दाने वाले प्रतिनिधित्व जैसे कि बयान-स्तर या ब्लॉक-स्तर पर काम करना। पहले आनुवांशिक सुधार के दृष्टिकोण बयान स्तर पर काम करते हैं और एक मौजूदा स्रोत को हटाने या एक ही स्रोत फ़ाइल में किसी अन्य कथन के साथ किसी मौजूदा कथन को बदलने के रूप में सरल हटा / प्रतिस्थापित संचालन करते हैं।  हाल ही के दृष्टिकोण अभ्यर्थी पैच के अधिक विविध सेट उत्पन्न करने के लिए अमूर्त सिंटैक्स ट्री स्तर पर अधिक महीन दाने वाले ऑपरेटरों का उपयोग करते हैं। 
उम्मीदवार पैच उत्पन्न करने के लिए एक अन्य तरीका फिक्स टेम्प्लेट का उपयोग करना है। आमतौर पर बग्स के विशिष्ट वर्गों को ठीक करने के लिए फिक्स टेम्प्लेट पूर्वनिर्धारित परिवर्तन होते हैं।  फिक्स टेम्प्लेट के उदाहरणों में यह जाँचने के लिए एक सशर्त विवरण सम्मिलित करना शामिल है कि क्या एक चर का मान शून्य पॉइंटर अपवाद को ठीक करने के लिए अशक्त है, या एक-एक कर त्रुटियों को ठीक करने के लिए एक पूर्णांक स्थिरांक को बदल रहा है। . जनरेट-एंड-वेरिफ़ाइड एप्रोच के लिए स्वचालित रूप से खदानों को ठीक करना भी संभव है। 
कई उत्पन्न-और-मान्य तकनीक अतिरेक अंतर्दृष्टि पर निर्भर करती हैं: पैच का कोड आवेदन में कहीं और पाया जा सकता है। यह विचार जेनप्रॉग प्रणाली में पेश किया गया था, जहां एएसटी नोड्स के दो ऑपरेटर, इसके अलावा और प्रतिस्थापन, कहीं और से लिए गए कोड पर आधारित थे (यानी एक मौजूदा एएसटी नोड को जोड़ना)। इस विचार को आनुभविक रूप से मान्य किया गया है, दो स्वतंत्र अध्ययनों से पता चला है कि एक महत्वपूर्ण अनुपात (3% -17%) मौजूदा कोड से बना है।  इस तथ्य से परे कि पुन: उपयोग करने के लिए कोड कहीं और मौजूद है, यह भी दिखाया गया है कि संभावित मरम्मत सामग्री का संदर्भ उपयोगी है: अक्सर, दाता संदर्भ प्राप्तकर्ता के संदर्भ के समान है। 

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

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

सन्दर्भ

सॉफ़्टवेयर विकास