सर्च बेस्ड सॉफ़्टवेयर इंजीनियरिंग

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

एसबीएसई समस्याओं को दो प्रकारों में विभाजित किया जा सकता है:


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

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

संक्षिप्त इतिहास
सॉफ़्टवेयर इंजीनियरिंग समस्या के लिए ऑप्टिमाइज़ेशन (गणित) लागू करने के शुरुआती प्रयासों में से एक सॉफ़्टवेयर परीक्षण के क्षेत्र में 1976 में वेब मिलर और डेविड स्पूनर द्वारा रिपोर्ट किया गया था। 1992 में, एस. ज़ैंथाकिस और उनके सहयोगियों ने पहली बार किसी सॉफ़्टवेयर इंजीनियरिंग समस्या के लिए एक खोज तकनीक लागू की। एसबीएसई शब्द का प्रयोग पहली बार 2001 में मार्क हरमन (कंप्यूटर वैज्ञानिक) और जोन्स द्वारा किया गया था। 2013 तक शोध समुदाय में 800 से अधिक लेखक शामिल हो गए, जिसमें 40 देशों के लगभग 270 संस्थान शामिल थे।

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

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

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

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

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

सॉफ़्टवेयर का अनुकूलन
कार्यक्रम अनुकूलन में एसबीएसई का उपयोग, या गति और संसाधन उपयोग के मामले में इसे और अधिक कुशल बनाने के लिए सॉफ़्टवेयर के एक टुकड़े को संशोधित करना, सफल शोध का उद्देश्य रहा है। एक उदाहरण में, 50,000 लाइन प्रोग्राम में आनुवंशिक रूप से सुधार किया गया, जिसके परिणामस्वरूप प्रोग्राम औसतन 70 गुना तेज हो गया। बेसियोस एट अल द्वारा एक हालिया काम। पता चलता है कि डेटा संरचना को अनुकूलित करके, Google गुवा ने निष्पादन समय पर 9% सुधार, मेमोरी खपत पर 13% सुधार और सीपीयू उपयोग पर 4% सुधार पाया।

परियोजना प्रबंधन
कई निर्णय जो आमतौर पर एक प्रोजेक्ट मैनेजर द्वारा लिए जाते हैं, स्वचालित रूप से किए जा सकते हैं, उदाहरण के लिए, प्रोजेक्ट शेड्यूलिंग।

उपकरण
SBSE के लिए उपलब्ध टूल में OpenPAT, इवोसु और Coverage, पायथन के लिए एक कोड कवरेज माप उपकरण।

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

उद्योग स्वीकृति
अनुसंधान के अपेक्षाकृत नए क्षेत्र के रूप में, एसबीएसई को अभी तक व्यापक उद्योग स्वीकृति का अनुभव नहीं हुआ है।

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

यह भी देखें

 * प्रोग्राम विश्लेषण (कंप्यूटर विज्ञान)
 * गतिशील कार्यक्रम विश्लेषण
 * आनुवंशिक सुधार

बाहरी संबंध

 * Repository of publications on SBSE
 * Metaheuristics and Software Engineering
 * Software-artifact Infrastructure Repository
 * International Conference on Software Engineering
 * Genetic and Evolutionary Computation (GECCO)
 * Google Scholar page on Search-based software engineering