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

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

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

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

सॉफ्टवेयर अभियांत्रिकी शब्द की उत्पत्ति के लिए विभिन्न स्रोतों को जिम्मेदार ठहराया गया है। सॉफ्टवेयर अभियांत्रिकी शब्द कंप्यूटर और ऑटोमेशन के जून 1965 के अंक में कंपनियों द्वारा प्रदान की जाने वाली सेवाओं की सूची में दिखाई दिया और अगस्त 1966 में अधिक औपचारिक रूप से उपयोग किया गया। एसीएम अध्यक्ष एंथनी ए. ओटिंगर द्वारा एसीएम (खंड 9, संख्या 8) "एसीएम सदस्यता के लिए पत्र" के संचार का मुद्दा, यह 1968 में सॉफ्टवेयर अभियांत्रिकी पर पहला सम्मेलन, प्रोफेसर फ्रेडरिक एल बाउर द्वारा नाटो सम्मेलन के शीर्षक से भी जुड़ा हुआ है। मार्गरेट हैमिल्टन (सॉफ्टवेयर इंजीनियर) ने अपोलो मिशन के समय अनुशासन सॉफ्टवेयर अभियांत्रिकी का वर्णन किया, जो वे वैधता प्रदान कर रहे थे। उस समय सॉफ्टवेयर संकट माना जाता था।   सॉफ्टवेयर अभियांत्रिकी पर 40वां अंतर्राष्ट्रीय सम्मेलन (आईसीएसई 2018) सॉफ्टवेयर अभियांत्रिकी के 50 साल पूरे होने का जश्न फ्रेडरिक ब्रूक्स और मार्गरेट हैमिल्टन (वैज्ञानिक) के पूर्ण सत्रों के मुख्य समस्या के साथ मना रहा है।

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

सॉफ्टवेयर अभियांत्रिकी के लिए आधुनिक, सामान्यतः स्वीकृत सर्वोत्तम प्रथाओं को ISO/IEC JTC 1/SC 7 उपसमिति द्वारा एकत्र किया गया है और सॉफ्टवेयर अभियांत्रिकी ज्ञान का निकाय (स्वेबोक) के रूप में प्रकाशित किया गया है। सॉफ्टवेयर अभियांत्रिकी को प्रमुख कम्प्यूटिंग विषयों में से माना जाता है।

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

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

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

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

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

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

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

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

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

शिक्षा
सॉफ्टवेयर इंजीनियर बनने के लिए कंप्यूटर प्रोग्रामिंग का ज्ञान शर्त है। 2004 में आईईईई कंप्यूटर सोसायटी ने स्वेबोक का निर्माण किया, जिसे ISO/IEC विधि रिपोर्ट 1979:2005 के रूप में प्रकाशित किया गया है, जिसमें ज्ञान के उस भाग का वर्णन किया गया है जिसे वे चार साल के अनुभव वाले स्नातक सॉफ्टवेयर इंजीनियर द्वारा महारत हासिल करने की सलाह देते हैं। कई सॉफ्टवेयर इंजीनियर व्यावसायिक स्कूल में विश्वविद्यालय की डिग्री या प्रशिक्षण प्राप्त करके पेशे में प्रवेश करते हैं। अंडरग्रेजुएट सॉफ्टवेयर अभियांत्रिकी डिग्री के लिए मानक अंतरराष्ट्रीय पाठ्यक्रम को आईईईई कंप्यूटर सोसाइटी और संगणक तंत्र संस्था के कंप्यूटिंग पाठ्यक्रम पर संयुक्त कार्य बल द्वारा परिभाषित किया गया था, और 2014 में अद्यतन किया गया था। कई विश्वविद्यालयों में सॉफ्टवेयर अभियांत्रिकी डिग्री प्रोग्राम हैं;, संयुक्त राज्य अमेरिका में 244 कैंपस बैचलर ऑफ सॉफ्टवेयर अभियांत्रिकी कार्यक्रम, 70 ऑनलाइन कार्यक्रम, 230 मास्टर स्तर के कार्यक्रम, 41 डॉक्टरेट स्तर के कार्यक्रम और 69 प्रमाणपत्र स्तर के कार्यक्रम थे।

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

सॉफ्टवेयर अभियांत्रिकी डिग्री प्रोग्राम
सभी चिकित्सकों में से आधे के पास आज कंप्यूटर विज्ञान, सूचना प्रणाली या सूचना प्रौद्योगिकी में शैक्षणिक डिग्री है। छोटे, लेकिन बढ़ते हुए, चिकित्सकों की संख्या में सॉफ्टवेयर अभियांत्रिकी की डिग्री है। 1987 में, इंपीरियल कॉलेज लंदन में कंप्यूटिंग विभाग, इंपीरियल कॉलेज लंदन ने यूके और दुनिया में पहली तीन वर्षीय सॉफ्टवेयर अभियांत्रिकी स्नातक डिग्री के प्रारंंभ की; अगले वर्ष, शेफ़ील्ड विश्वविद्यालय ने इसी तरह का कार्यक्रम स्थापित किया। 1996 में, प्रौद्योगिकी के रोचेस्टर संस्थान ने संयुक्त राज्य अमेरिका में पहला सॉफ्टवेयर अभियांत्रिकी स्नातक डिग्री प्रोग्राम स्थापित किया, चूंकि, इसे 2003 तक ABET मान्यता प्राप्त नहीं हुई, उसी समय चावल विश्वविद्यालय, क्लार्कसन विश्वविद्यालय, मिल्वौकी स्कूल ऑफ अभियांत्रिकी और मिसिसिपी स्टेट यूनिवर्सिटी उनका प्राप्त किया। 1997 में, कोयंबटूर में PSG कॉलेज ऑफ टेक्नोलॉजी, भारत सॉफ्टवेयर अभियांत्रिकी में पांच वर्षीय एकीकृत मास्टर ऑफ साइंस की डिग्री शुरू करने वाला पहला था। तब से, सॉफ्टवेयर अभियांत्रिकी स्नातक डिग्री कई विश्वविद्यालयों में स्थापित की गई हैं। अंडरग्रेजुएट सॉफ्टवेयर अभियांत्रिकी डिग्री, SE2004 के लिए मानक अंतरराष्ट्रीय पाठ्यक्रम, 2001 और 2004 के बीच एसोसिएशन फॉर कंप्यूटिंग मशीनरी और आईईईई कंप्यूटर सोसाइटी से वित्त पोषण के साथ संचालन समिति द्वारा परिभाषित किया गया था।, यू.एस. में, लगभग 50 विश्वविद्यालय सॉफ्टवेयर अभियांत्रिकी डिग्री प्रदान करते हैं, जो कंप्यूटर विज्ञान और अभियांत्रिकी सिद्धांतों और प्रथाओं दोनों को पढ़ाते हैं। पहली सॉफ्टवेयर अभियांत्रिकी मास्टर डिग्री सिएटल विश्वविद्यालय में 1979 में स्थापित की गई थी। तब से कई और विश्वविद्यालयों से स्नातक सॉफ्टवेयर अभियांत्रिकी की डिग्री उपलब्ध कराई गई है। इसी तरह कनाडा में, कैनेडियन काउंसिल ऑफ प्रोफेशनल इंजीनियर्स के कनाडाई अभियांत्रिकी प्रत्यायन बोर्ड (सीईएबी) ने कई सॉफ्टवेयर अभियांत्रिकी कार्यक्रमों को मान्यता दी है।

1998 में, यूएस नौसेना स्नातकोत्तर स्कूल (NPS) ने दुनिया में सॉफ्टवेयर अभियांत्रिकी में पहला डॉक्टर की उपाधि प्रोग्राम स्थापित किया। इसके अतिरिक्त, सॉफ्टवेयर अभियांत्रिकी में कई ऑनलाइन उन्नत डिग्री दिखाई दी हैं जैसे कि कैलिफोर्निया स्टेट यूनिवर्सिटी, फुलर्टन में कंप्यूटर साइंस एंड अभियांत्रिकी विभाग के माध्यम से सॉफ्टवेयर अभियांत्रिकी में मास्टर ऑफ साइंस (एमएसई) डिग्री की प्रस्तुति की गई है। स्टीव मैककोनेल का मानना ​​है कि क्योंकि अधिकांश विश्वविद्यालय सॉफ्टवेयर अभियांत्रिकी के अतिरिक्त कंप्यूटर विज्ञान पढ़ाते हैं, इसलिए सच्चे सॉफ्टवेयर इंजीनियरों की कमी है। इकोले डे टेक्नोलॉजी सुप्रीयर (École de technologie supérieure) विश्वविद्यालय और यूक्यूएएम (Université du Québec à Montréal) को आईईईई द्वारा सॉफ्टवेयर अभियांत्रिकी बॉडी ऑफ़ नॉलेज (स्वेबोक) विकसित करने के लिए अनिवार्य किया गया था, जो ISO मानक बन गया है है। सॉफ्टवेयर इंजीनियर इस शरीर का अध्ययन करके वर्णित करता है।

व्यवसाय
जानकीर सॉफ्टवेयर इंजीनियरों के लाइसेंस या प्रमाणित के लिए कानूनी आवश्यकताएं दुनिया भर में अलग-अलग हैं। यूके में, सॉफ़्टवेयर इंजीनियर पद ग्रहण करने या उसका उपयोग करने के लिए कोई लाइसेंसिंग या कानूनी आवश्यकता नहीं है। कनाडा के कुछ क्षेत्रों में, जैसे अलबर्टा, ब्रिटिश कोलंबिया, ओंटारियो, और क्यूबेक, सॉफ्टवेयर इंजीनियर व्यावसायिक अभियंता (P.Eng) पदनाम और/या सूचना प्रणाली जानकीर (I.S.P.) पदनाम धारण कर सकते हैं। यूरोप में, सॉफ्टवेयर इंजीनियर यूरोपीय इंजीनियर (EUR ING) जानकीर उपाधि प्राप्त कर सकते हैं।

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

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

रोजगार
श्रम सांख्यिकी ब्यूरो|यू. एस. श्रम सांख्यिकी ब्यूरो (बीएलएस) ने संयुक्त राज्य अमेरिका में 1,365,500 सॉफ्टवेयर डेवलपर्स की नौकरी की गणना की। यू.एस. 2018 में। अध्ययन के क्षेत्र के रूप में इसके सापेक्षिक नवीनता के कारण, सॉफ्टवेयर अभियांत्रिकी में औपचारिक शिक्षा को अधिकांशतः कंप्यूटर विज्ञान पाठ्यक्रम के हिस्से के रूप में पढ़ाया जाता है, और कई सॉफ्टवेयर इंजीनियरों के पास कंप्यूटर विज्ञान की डिग्री होती है। बीएलएस का अनुमान है कि 2014 से 2024 तक कंप्यूटर सॉफ्टवेयर अभियांत्रिकी में 17% की वृद्धि होगी। यह सॉफ्टवेयर अभियांत्रिकी के लिए 2012 से 2022 बीएलएस अनुमान 22% से नीचे है। और, उनके 30% 2010 से 2020 बीएलएस अनुमान से और नीचे है। इस प्रवृत्ति के कारण, पिछले दशक के समय नौकरी की वृद्धि उतनी तेज नहीं हो सकती है, क्योंकि संयुक्त राज्य अमेरिका में कंप्यूटर सॉफ्टवेयर इंजीनियरों को जाने वाली नौकरियों को भारत और अन्य विदेशी देशों जैसे कंप्यूटर सॉफ्टवेयर इंजीनियरों को आउटसोर्स किया जाएगा। इसके अतिरिक्त, कंप्यूटर प्रोग्रामर्स के लिए बीएलएस जॉब आउटलुक, 2014–24 -8% (उनके शब्दों में गिरावट) की भविष्यवाणी करता है। फिर जॉब आउटलुक में गिरावट, 2019-29 -9%, और कंप्यूटर प्रोग्राम करने वालों के लिए 2021-2031 के लिए 10% की गिरावट हुई।  इसके अतिरिक्त, अन्य अभियांत्रिकी क्षेत्रों की तुलना में कई सॉफ्टवेयर क्षेत्रों में महिलाओं की संख्या में भी कमी आई है। चूंकि, यह प्रवृत्ति भविष्य में बदल सकती है या धीमी हो सकती है क्योंकि अमेरिकी बाजार में कई सम्मलित सॉफ्टवेयर इंजीनियर अगले कुछ दशकों में पेशा या बाजार की उम्र की लहर को छोड़ देते हैं।

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

अधिकांश सॉफ्टवेयर इंजीनियर और प्रोग्रामर सप्ताह में 40 घंटे कार्य करते हैं, लेकिन लगभग 15 प्रतिशत सॉफ्टवेयर इंजीनियर और 11 प्रतिशत प्रोग्रामर ने 2008 में सप्ताह में 50 घंटे से अधिक कार्य किया। इन व्यवसायों में संभावित चोटें संभव हैं क्योंकि अन्य श्रमिकों की तरह जो लंबे समय तक बैठे रहते हैं स्वास्थ्य जोखिम कंप्यूटर टर्मिनल के सामने कीबोर्ड पर टाइपिंग करते हैं, इंजीनियरों और प्रोग्रामरों को आंखों में खिंचाव, पीठ की तकलीफ, सिंड्रोम, और कार्पल टनल जैसी हाथ और कलाई की समस्याओं का खतरा होता है।

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

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

यूके में ब्रिटिश कंप्यूटर सोसायटी ने चार्टर्ड आईटी प्रोफेशनल (CITP) नामक कानूनी रूप से मान्यता प्राप्त व्यावसायिक प्रमाणित विकसित किया है, जो पूरी तरह से योग्य सदस्यों (MBCS) के लिए उपलब्ध है। सॉफ्टवेयर इंजीनियर अभियांत्रिकी और प्रौद्योगिकी संस्थान की सदस्यता के लिए पात्र हो सकते हैं और इसलिए चार्टर्ड इंजीनियर की स्थिति के लिए अर्हता प्राप्त कर सकते हैं। कनाडा में कनाडाई सूचना प्रसंस्करण सोसायटी ने कानूनी रूप से मान्यता प्राप्त व्यावसायिक प्रमाणीकरण विकसित किया है जिसे सूचना प्रणाली जानकीर (ISP) कहा जाता है। ओंटारियो, कनाडा में, सॉफ्टवेयर इंजीनियर जो कनाडाई अभियांत्रिकी प्रत्यायन बोर्ड (सीईएबी) मान्यता प्राप्त कार्यक्रम से स्नातक हैं, सफलतापूर्वक पीईओ (प्रोफेशनल इंजीनियर्स ओंटारियो) व्यावसायिक अभ्यास परीक्षा (पीपीई) पूरा करते हैं और कम से कम 48 महीने का स्वीकार्य अभियांत्रिकी अनुभव रखते हैं, वे लाइसेंस प्राप्त करने के पात्र हैं। प्रोफेशनल इंजीनियर्स ओंटारियो के माध्यम से और प्रोफेशनल इंजीनियर्स P.Eng बन सकते हैं। चूंकि पीईओ किसी भी ऑनलाइन या दूरस्थ शिक्षा को मान्यता नहीं देता है; और दोनों के बीच जबरदस्त ओवरलैप के अतिरिक्त कंप्यूटर साइंस प्रोग्राम को सॉफ्टवेयर अभियांत्रिकी प्रोग्राम के समकक्ष नहीं मानता है। इससे विवाद और प्रमाणित युद्ध छिड़ गया है। इसने पेशे के लिए पी.इंजी धारकों की संख्या को असाधारण रूप से कम रखा है। क्षेत्र में कार्य करने वाले अधिकांश जानकीर सीएस में डिग्री रखते हैं, एसई नहीं। गैर-एसई डिग्री धारकों के लिए कठिन प्रमाणीकरण पथ को देखते हुए, अधिकांश लाइसेंस प्राप्त करने के लिए परेशान नहीं होते हैं।

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

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

पुरस्कार
सॉफ्टवेयर अभियांत्रिकी के क्षेत्र में कई पुरस्कार हैं:
 * सॉफ्टवेयर और सूचना उद्योग संघ कोडआई पुरस्कार सॉफ्टवेयर उद्योग के भीतर सॉफ्टवेयर विकास में उत्कृष्टता के लिए सॉफ्टवेयर और सूचना उद्योग संघ द्वारा जारी किया जाने वाला वार्षिक पुरस्कार है।
 * झटका पुरस्कार सॉफ्टवेयर उद्योग में पुरस्कार हैं।
 * स्टीवंस पुरस्कार सॉफ्टवेयर अभियांत्रिकी अवार्ड है जो वेन स्टीवंस की स्मृति में दिया जाता है।
 * हार्लन मिल्स#हरलन डी. मिल्स पुरस्कार सॉफ्टवेयर अभियांत्रिकी पर केंद्रित सूचना विज्ञान के सिद्धांत और व्यवहार में योगदान के लिए पुरिस्कृत किया।

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

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

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

आज सॉफ्टवेयर विकास के भीतर उपयोग की जाने वाली कई अवधारणाओं के संस्थापक एडवर्ड डिजस्ट्रा ने 2002 में अपनी मृत्यु तक सॉफ्टवेयर अभियांत्रिकी के विचार को खारिज कर दिया, यह तर्क देते हुए कि ये शब्द किस चीज के लिए खराब अनुरूप थे। उन्होंने कंप्यूटर विज्ञान की मौलिक नवीनता को कहा:

अध्ययन और अभ्यास

 * कंप्यूटर विज्ञान
 * डेटा अभियांत्रिकी
 * सॉफ्टवेयर शिल्प कौशल
 * सॉफ्टवेयर डेवलपमेंट
 * रिलीज अभियांत्रिकी

भूमिकाएं

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

जानकीर पहलू

 * सूचना प्रौद्योगिकी में विज्ञान स्नातक
 * बैचलर ऑफ सॉफ्टवेयर अभियांत्रिकी
 * सॉफ्टवेयर अभियांत्रिकी सम्मेलनों की सूची
 * कंप्यूटर विज्ञान पत्रिकाओं की सूची (सॉफ्टवेयर अभियांत्रिकी पत्रिकाओं सहित)
 * सॉफ्टवेयर अभियांत्रिकी संस्थान

बाहरी कड़ियाँ

 * Guide to the Software Engineering Body of Knowledge
 * The Open Systems Engineering and Software Development Life Cycle Framework OpenSDLC.org the integrated Creative Commons SDLC
 * Software Engineering Institute Carnegie Mellon