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

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

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


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

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

इसके विपरीत, सर्च-बेस्ड एप्लीकेशन शब्द, किसी अन्य औद्योगिक अनुप्रयोग में सर्च तकनीकों के अतिरिक्त सर्च-इंजन इंजीनियरिंग का उपयोग करने को संदर्भित करता है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

इस क्रिया में एक चिंता यह भी है कि एसबीएसई सॉफ्टवेयर इंजीनियर को निरर्थक बना सकता है। इस कारण विशेष समर्थकों का प्रमाण यह है कि एसबीएसई की प्रेरणा इंजीनियर और कार्यक्रम के बीच संबंध को बढ़ाना होता है।

यह भी देखें

 * प्रोग्राम एनालिसिस (कंप्यूटर विज्ञान)
 * डायनैमिक प्रोग्राम एनालिसिस
 * जेनेटिक सुधार

बाहरी संबंध

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