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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

आज सॉफ्टवेयर विकास के भीतर उपयोग की जाने वाली कई अवधारणाओं के संस्थापक एडवर्ड डिजस्ट्रा ने 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