सॉफ्टवेयर विकास में नियमित कार्य की मात्रा और अनुमान पर इसका प्रभाव


11

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

मुझे बताएं कि मैं इस निष्कर्ष पर कैसे आया और मुझे बताएं कि क्या तर्क में कोई गंभीर दोष है:

  1. उच्च सटीकता के साथ जो अनुमान लगाया जा सकता है वह सब रूटीन का काम है, जिसका अर्थ है कि पहले की गई चीजें। अनुसंधान और रचनात्मकता से जुड़े अन्य सभी प्रकार के कार्यों का वास्तव में अनुमान नहीं लगाया जा सकता है, कम से कम सटीकता के साथ नहीं, चलो कहते हैं, +/- 20 प्रतिशत।

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

इन दो बिंदुओं से मैं उपरोक्त निष्कर्ष निकालता हूं।

वास्तव में मैं काफी समय से सोच रहा था कि इस संबंध का उल्लेख हर अन्य चर्चा, ब्लॉग पोस्ट या सॉफ्टवेयर आकलन के बारे में लेख में क्यों नहीं किया गया है। क्या यह बहुत सैद्धांतिक है? क्या मेरी धारणाएँ गलत हैं? या यह बहुत तुच्छ है - लेकिन फिर भी, मुझे पता है कि ज्यादातर डेवलपर्स क्यों मानते हैं कि वे +/- 20 प्रतिशत की सटीकता के साथ अनुमान लगा सकते हैं या बेहतर?


7
कर्नेल जैसे बाहरी क्षेत्रों के सभी सॉफ्टवेयर विकास का 99% पहले भी हजारों बार किया जा चुका है। बहुत से डेवलपर्स अभी भी एक नए फैंसी तरीके से सब कुछ करना चाहते हैं, वही पुरानी समस्याओं को बार-बार रोकते हैं।
बेंट

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

1
@rwong: बेशक यह पुस्तकालयों का उपयोग करने के लिए समझ में आता है। लेकिन एक पुस्तकालय में सही फ़ंक्शन ढूंढना और इसका उपयोग करने का सही तरीका या तो शोध कार्य है (यदि लिबास कंप्लेक्स है और / या आप इसे अच्छी तरह से नहीं जानते हैं) या तुच्छ (यदि आप क्षेत्र को उस फ़ंक्शन को जानते हैं)। जिसे आप 'ग्लू कोड' कहते हैं, वह मेरे अनुभव में अक्सर जटिल होता है। इसे कार्यान्वित करना कोई नियमित कार्य नहीं है।
फ्रैंक पफर

1
@ JohnR.Strohm: मैंने इन विशिष्ट पुस्तकों को नहीं पढ़ा, लेकिन COCOMO की मूल बातों से परिचित हूँ - हालांकि, व्यवहार में इसका उपयोग कभी नहीं किया। इसके अलावा मैंने डेमार्को की दो या तीन अन्य पुस्तकें पढ़ी हैं। क्या आप इस बात का संकेत दे सकते हैं कि मेरे प्रश्न से संबंधित विशिष्ट सामग्री क्या है?
फ्रैंक पफर

2
@FrankPuffer, सॉफ्टवेयर अनुमान के लिए बोहम के "सॉफ्टवेयर इंजीनियरिंग अर्थशास्त्र" को पढ़ना आवश्यक है। डेमारको की किताब भी पीछे नहीं है। SHORT का उत्तर यह है: यदि आप इस बात से परिचित हैं कि सॉफ़्टवेयर को AT AT का अनुमान लगाने के लिए क्या करना चाहिए, तो आप अपेक्षाकृत सामान्य दिनचर्या पर विचार करने के लिए पर्याप्त रूप से परिचित हैं।
जॉन आर। स्ट्रोह्म

जवाबों:


11

किसी भी दिए गए प्रोजेक्ट पर यह सच हो सकता है। हालाँकि, यदि आप कई वर्षों से विभिन्न कंपनियों के लिए इसी तरह की परियोजनाओं पर काम करते हैं, तो आप मूल रूप से केवल थोड़ी भिन्नता के साथ कई बार मूल रूप से एक ही समस्या को हल कर सकते हैं।

उदाहरण के लिए, मैंने डेटा एक्सेस लेयर्स को कई बार लिखा है, अब मैं महीने के लोकप्रिय ORM का उपयोग करने के बजाय इसे 'लॉन्ग हैंड' करना पसंद करता हूं। तीसरी पार्टी के घटकों में नए प्रश्नों को खोजने और हल करने की तुलना में ज्ञात समाधानों के साथ 'नियमित समस्याओं' से निपटना मेरे लिए तेज और आसान है।

जाहिर है कि मैं अपने स्वयं के ओआरएम को किसी अन्य सिस्टम में अज्ञात quirks जोड़े बिना पुनरावृत्ति कोड को सरल बनाने के लिए लिख सकता था, लेकिन यह कोड उस कंपनी का होगा जो मैं उस समय के लिए काम कर रहा था, और अन्य डेवलपर्स इसे क्वर्की के रूप में पाएंगे। किसी भी अन्य 3 पार्टी ORM।

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

यह कहने के लिए नहीं कि अनुमान आसान है! यह आसान है, लेकिन मुझे लगता है कि इन दिनों अनुमान की समस्या समय व्यतीत होने वाली कोडिंग के बजाय आवश्यकताओं की अपर्याप्तता के कारण है।

आवश्यकताएँ तीन श्रेणियों में आती हैं:

  1. अस्पष्ट, विवरण डेवलपर के लिए छोड़ दिया गया।

"मुझे एक वेबसाइट बनाओ, इसे शांत करना होगा और मेरे विजेट बेचना होगा"

ये अनुमान लगाने में सबसे आसान होते हैं, क्योंकि जब एक कठिन अप्रत्याशित समस्या होती है, तो आप आवश्यकताओं को कुछ कार्यात्मक रूप से समकक्ष में बदल सकते हैं और समस्या से बच सकते हैं।

  1. बहुत विशिष्ट है

"हेडर पृष्ठभूमि रंग बनाओ # ff1100"

सुपर जल्दी करने के लिए और, फिर से, अनुमान लगाने में आसान। परंतु! आवश्यकता परिवर्तन के लिए बाध्य है। "हम्म नहीं दूसरे विचारों पर, इस दूसरे लाल की कोशिश करो" या "रुको! मेरा मतलब केवल उस एक पृष्ठ पर है!" इसलिए "हेडर कलर से खुश होने तक" का वास्तविक समय अवधि कोडिंग अनुमानों से कोई लेना-देना नहीं है

  1. अस्पष्ट, विवरण ग्रहण किया

"मुझे एक वेबसाइट बनाओ, (फेसबुक की तरह)"

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

अनुभव के साथ कोडिंग बहुत तेज है, लेकिन डिजाइनिंग आवश्यकताएं (आमतौर पर) कठिन है, और यह अधिक से अधिक गैर-कोडर्स पर वापस धकेल दिया जाता है। चुस्त कार्यप्रणाली के साथ डेवलपर्स के बजाय इस जिम्मेदारी को 'व्यवसाय' में ले जाकर कोडिंग वेग बढ़ाते हैं।


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

जाहिर है इसकी तरह मैं 3 पार्टी सामान का उपयोग कभी नहीं। बिंदु यह है कि यदि आप जानते हैं कि टूल एक्स के साथ पहले से ही कुछ करना है तो अनुमान आसान है
इवान

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

चलो एक 'सबसे अच्छा प्रोग्रामर' लौ युद्ध में नहीं मिलता है। सभी im कह रही है कि आपके द्वारा कम नए सामान से पहले किया गया अधिक सामान है। यदि आपकी सभी परियोजनाएं अधिकांश विशेषताओं के लिए नई तकनीक का उपयोग करना
इवान

@ ईवन "अवधारणाएँ या प्रौद्योगिकियाँ"। मेरे लिए पहले एक व्यवसाय नियमों और / या डिजाइनर क्या चाहता है से संबंधित है। यह केवल नई तकनीकों के बारे में नहीं है।
इज़काता

6

अधिकांश डेवलपर्स मुझे क्यों पता है कि वे अनुमान लगा सकते हैं कि वे सटीकता के साथ +/- 20 प्रतिशत या बेहतर कर सकते हैं?

क्योंकि हम वास्तविक समस्या से कहीं अधिक समस्या के साथ अपने धैर्य का अनुमान लगाते हैं।

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

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

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


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

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