मॉडलिंग सॉफ्टवेयर सिस्टम के क्या लाभ हैं?


20

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

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

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

यहां तक ​​कि अगर आरेख स्वयं सुसंगत हैं, तो आप यह सुनिश्चित नहीं कर सकते कि कोड वास्तव में उन्हें लागू करता है। हां, कोड जनरेटर हैं, लेकिन वे कभी भी सभी कोड उत्पन्न नहीं करते हैं।

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

मॉडलिंग सॉफ्टवेयर सिस्टम के लिए क्या तर्क मुझे याद आ रहे हैं?

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

स्पष्टीकरण:

प्रश्न अस्पष्ट होने के कारण इसे रोक दिया गया है। इसलिए मुझे कुछ स्पष्टीकरण जोड़ने दें:

मैं पूछ रहा हूं कि क्या यह सॉफ्टवेयर के डिजाइन के बारे में सत्य के प्राथमिक स्रोत के रूप में सॉफ्टवेयर को मॉडल करने वाले (गैर-कोड) दस्तावेजों का उपयोग करने के लिए समझ में आता है। मेरे पास ऐसा मामला नहीं है जहां इन दस्तावेजों से कोड का एक महत्वपूर्ण हिस्सा स्वचालित रूप से उत्पन्न होता है। यदि ऐसा होता, तो मैं स्वयं दस्तावेज़ों को स्रोत कोड के रूप में मानता हूँ न कि एक मॉडल के रूप में।

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



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

3
आपको अधिक "आईटी" लोगों को जानना चाहिए। या शायद मुझे कहना चाहिए, आपको उस छतरी के भीतर अधिक समुदायों से परिचित होना चाहिए।
डेरेक एलकिंस ने SE

@DocBrown: जबकि उस प्रश्न के उत्तर और विशेष रूप से आपकी टिप्पणी में जुड़े लेख प्रासंगिक जानकारी प्रदान करते हैं, मूल प्रश्न बहुत अलग है।
फ्रैंक पफर

@FrankPuffer: मैं इसके बारे में जानता हूं, फिर से खोलने के लिए मतदान किया। फिर भी मुझे लगता है कि आपके प्रश्न का मूल है - "सॉफ़्टवेयर डिज़ाइन क्या है" और "सॉफ़्टवेयर डिज़ाइन में मॉडलिंग की भूमिका", एक बहुत व्यापक प्रश्न है, शायद यहां भी समझदार तरीके से उत्तर दिया जाए।
डॉक्टर ब्राउन

जवाबों:


23

कोड में सभी बनाम मॉडलिंग सॉफ्टवेयर सिस्टम का लाभ है: मैं मॉडल को एक व्हाइटबोर्ड पर फिट कर सकता हूं।

मैं कागज की एक शीट पर संवाद करने के जादू में एक बड़ा विश्वास रखता हूं। अगर मैंने नए कोडर्स को हमारे सिस्टम को सिखाते हुए, व्हाइटबोर्ड पर कोड डालने की कोशिश की, तो अमूर्तता के आवश्यक स्तर पर कोई कोड नहीं है जो कि व्हाइटबोर्ड पर फिट बैठता है।

मुझे पता है कि मॉडलिंग के प्रति जुनून जिसे आप संदर्भित कर रहे हैं। लोग ऐसा इसलिए कर रहे हैं क्योंकि इससे पहले कि वे ऐसा क्यों कर रहे हैं, इस बारे में सोचे बिना वे ऐसा कर रहे हैं। मैं इसे औपचारिकता कहता हूं। मैं अनौपचारिक रूप से काम करना पसंद करता हूं क्योंकि परंपरा के पीछे नीरसता को छिपाना कठिन है।

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

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

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

उन्होंने कहा, मैं उन कोडर्स को पसंद करता हूं जो अपने यूएमएल और उनके डिजाइन पैटर्न को जानते हैं। वे आसानी से संवाद कर रहे हैं। जब तक वे जानते हैं कि आरेख का निर्माण एक पूर्णकालिक काम नहीं है।


2
"अमूर्तता के उस स्तर पर बस कोई कोड नहीं है जो एक व्हाइटबोर्ड पर फिट बैठता है" जो एक दिलचस्प सवाल लाता है। क्यों नहीं? बहुत उच्च स्तर पर समझाने के लिए किसी प्रणाली के प्रवेश बिंदु के लिए क्या सही होगा?
रबरडुक

2
क्योंकि कोड सभी लोगों के लिए सभी चीजें होनी चाहिए (और कम से कम एक कंपाइलर)। एक मॉडल में एक केंद्रित दर्शक हो सकता है।
candied_orange

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

3
मेरी समस्या मॉडलिंग से नहीं है। यह महत्वपूर्ण सोच के प्रतिस्थापन के रूप में औपचारिक समारोहों का उपयोग करने के साथ है। मैं मॉडल को कोसने के लिए बहुत कुछ कहने की कोशिश कर रहा हूं क्योंकि उस भीड़ के साथ मॉडलिंग का बहुत हिस्सा गिर गया था। मॉडलिंग बहुत अच्छी हो सकती है। लेकिन इसका एक स्याह पक्ष है।
कैंडिड_ओरेंज

1
"मैं मॉडल को एक व्हाइटबोर्ड पर फिट कर सकता हूं" यह कहने का एक बहुत ही ठोस (उत्कृष्ट!) तरीका है "मैं किसी ऐसी चीज़ का अमूर्त बना सकता हूं जो समझने में मदद करने या संवाद करने के लिए अधिक जटिल है जो मुझे लगता है कि महत्वपूर्ण है।" यह अच्छा मॉडलिंग सामान्य रूप से करता है, चाहे वह सॉफ्टवेयर हो या कुछ और जटिल।
फुहरामैनट

6

मैं पूछ रहा हूं कि क्या यह सॉफ्टवेयर के डिजाइन के बारे में सत्य के प्राथमिक स्रोत के रूप में सॉफ्टवेयर का मॉडल बनाने वाले (गैर-कोड) दस्तावेजों का उपयोग करने के लिए समझ में आता है

नहीं, यह कभी समझ में नहीं आता है। आपका कोड आपका प्राथमिक डिज़ाइन दस्तावेज़ है, अर्थात "सॉफ़्टवेयर डिज़ाइन के बारे में सच्चाई का प्राथमिक स्रोत"। केवल कोड ही वर्णन करता है कि एप्लिकेशन क्या करता है क्योंकि कंपाइलर उस डिज़ाइन को लेता है और उससे एप्लिकेशन बनाता है।

हर तरह से पूरक डिजाइन दस्तावेजों के रूप में आरेखों का उपयोग करें, हालांकि यदि वे कोड से ऑटो-जेनरेट नहीं होते हैं, तो उन्हें वास्तविक डिज़ाइन के लिए एक अलग कहानी बताने से सावधान रहें। यदि यूएमएल आपकी नाव को तैरता है, तो इसका उपयोग करें। यदि नहीं, तो कुछ और उपयोग करें।

कुछ लोगों को कोड लिखना शुरू करने से पहले आरेख रूप में अपनी सोच को स्केच करना उपयोगी लगता है। लेकिन याद रखें कि अंकल बॉब ने इस मामले पर क्या कहा:

" तो, हाँ, आरेख कई बार अनुचित हो सकते हैं। वे कब अनुचित होते हैं? जब आप उन्हें मान्य करने के लिए बिना कोड के बनाते हैं, और तब उनका अनुसरण करने का इरादा रखते हैं। एक विचार का पता लगाने के लिए आरेख खींचने में कुछ भी गलत नहीं है। "

यदि आप किसी डिज़ाइन का पता लगाने के लिए यूएमएल का उपयोग करते हैं, तो कोडिंग शुरू करने पर उन्हें फेंक दें। एक परीक्षण लिखें, फिर इसे पास करने के लिए कुछ कोड लिखें। दोहराएँ। इस तरह, आप एक मान्य डिज़ाइन के साथ समाप्त करेंगे। यूएमएल आपको कभी भी अपने डिजाइन के सत्यापन के समान स्तर की पेशकश नहीं कर सकता है।


एक काउंटर उदाहरण (?) :: मॉडल-व्यू सेपरेशन (या किसी भी GoF पैटर्न) को एक वास्तुकार द्वारा प्रस्तावित डिजाइन (खाका) के एक इच्छित सत्य के रूप में आसानी से तैयार किया जा सकता है । डेवलपर्स जो उस इरादे से भटकते हैं वे बेकार (इच्छित) मॉडल को प्रस्तुत नहीं करते हैं। हां, कोड "सत्य" है, लेकिन यह जरूरी नहीं कि डिजाइन हो। सत्यापन को यूएमएल या कुछ मॉडल के साथ स्वचालित होने की आवश्यकता नहीं है। तथ्य यह है कि यह एक मॉडल कचरा योग्य नहीं है।
फ्यूहरमैनेटर

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

5

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

मैं इस बात से असहमत नहीं हूँ कि आपके जानने वाले सभी लोग इस पर विश्वास करते हैं, लेकिन मुझे नहीं लगता कि यह जरूरी नहीं कि पूरे बोर्ड में आम हो। 1970 में, विंस्टन रॉयस को पता था कि सॉफ्टवेयर विकास में डिज़ाइन और कोड गतिविधियों के बीच कुछ स्तर का पुनरावृत्ति था। 1992 में, जैक रीव्स ने कोडिंग के बारे में लिखा कि यह सही डिज़ाइन गतिविधि है ( सी 2 विकी पर भी चर्चा की गई है )।

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

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

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

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

यहां तक ​​कि अगर आरेख स्वयं सुसंगत हैं, तो आप यह सुनिश्चित नहीं कर सकते कि कोड वास्तव में उन्हें लागू करता है। हां, कोड जनरेटर हैं, लेकिन वे कभी भी सभी कोड उत्पन्न नहीं करते हैं।

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

ऐसे उपकरण हैं जो विभिन्न डिग्री के लिए, विभिन्न भाषाओं के लिए इसका समर्थन करते हैं। भाषाओं और प्रतिमानों की प्रकृति को देखते हुए, यह दूसरों की तुलना में कुछ के लिए आसान है।

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

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

मॉडलिंग सॉफ्टवेयर सिस्टम के क्या लाभ हैं?

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


5

मैं पूछ रहा हूं कि क्या यह सॉफ्टवेयर के डिजाइन के बारे में सत्य के प्राथमिक स्रोत के रूप में सॉफ्टवेयर को मॉडल करने वाले (गैर-कोड) दस्तावेजों का उपयोग करने के लिए समझ में आता है। मेरे पास ऐसा मामला नहीं है जहां इन दस्तावेजों से कोड का एक महत्वपूर्ण हिस्सा स्वचालित रूप से उत्पन्न होता है। यदि ऐसा होता, तो मैं स्वयं दस्तावेज़ों को स्रोत कोड के रूप में मानता हूँ न कि एक मॉडल के रूप में।

गैर-कोड दस्तावेजों से भरपूर ब्लूप्रिंट के रूप में उपयोगी हैं । यही है, डिजाइन के "सत्य" को इस दिशा का पालन करना चाहिए। यह उन तत्वों को मॉडल करने का एक तरीका है जो एक डिज़ाइन को पूरा करना चाहिए। आप उन्हें आवश्यकता दस्तावेजों को कॉल कर सकते हैं, लेकिन यह शायद उन सभी उदाहरणों में बहुत मजबूत है जो मैं दे सकता था। मैंने इन्हें बनाने के लिए PlantText.com के माध्यम से PlantUML का उपयोग किया है ।

  • उपयोग-केस आरेख उपयोगकर्ताओं या बाहरी सिस्टम के साथ इच्छित सुविधाओं और इंटरैक्शन दिखा सकता है। यहां छवि विवरण दर्ज करें

  • गतिविधि आरेख व्यावसायिक प्रक्रियाओं को दिखा सकते हैं जिन्हें किसी सॉफ़्टवेयर को समर्थन देने की आवश्यकता होती है। यहां छवि विवरण दर्ज करें

  • राज्य चित्र किसी वेब साइट पर इच्छित गतिशील दिखा सकते हैं: यहां छवि विवरण दर्ज करें

  • गैंग ऑफ़ फोर डिज़ाइन पैटर्न को स्थिर और गतिशील मॉडल के रूप में प्रस्तुत किया गया है। उदाहरण के लिए, मेमेंटो:
    यहां छवि विवरण दर्ज करें
    यहां छवि विवरण दर्ज करें

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

यदि आप अपने अनुभव के बाहर यूएमएल के उपयोग के बारे में कुछ वास्तविक जानकारी में रुचि रखते हैं, तो कुछ अध्ययन हैं जो किए गए थे (मैंने गैर-भुगतान लेखों के लिंक खोजने की कोशिश की):


0

हम डेवलपर्स हमारी दुनिया को समझाने के लिए छवियों का उपयोग करना पसंद करते हैं, इसलिए यहां कार के उत्पादन के साथ एक है:

  • कार उत्पादन श्रृंखला का परिणाम है, कोड के लिए समान है (पाठ्यक्रम की तैनाती प्रक्रिया जोड़ें)।
  • कार का डिज़ाइन दस्तावेज़ सॉफ्टवेयर के डिज़ाइन दस्तावेज़ के समान है।

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

कोडिंग के बिना पहले उन दस्तावेज़ों को बनाकर (फेसिबिलिटी, ... के लिए अवधारणा के प्रमाण की तरह कुछ भी छोड़कर):

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

नोट: उन पुष्टिकरण का मानना ​​है कि कोड वास्तव में डिज़ाइन का प्रतिबिंब है और वे दोनों ही अद्यतित हैं ...


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

यदि आप हर चीज के हर पहलू पर विचार करके शुरू करते हैं, तो आप कहीं नहीं जाएंगे। आप जो भी तरीका इस्तेमाल करें। और आपके द्वारा कही गई एक लंबी सूची केवल कोड करते समय पूरी तरह से मान्य है।
वालफ्रैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.