Mythical man महीने में 10 लाइनों प्रति डेवलपर दिन - बड़ी परियोजनाओं पर कैसे करीब? [बन्द है]


129

हर कोई हमेशा कहता है कि वे "पौराणिक पुरुष महीना" से "प्रति दिन 10 लाइनों प्रति डेवलपर" को हरा सकते हैं, और एक परियोजना शुरू कर सकते हैं, मैं आमतौर पर एक दिन में दो सौ लाइनें प्राप्त कर सकता हूं।

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

दूसरे लोग कैसे कर रहे हैं? और आप किस प्रकार की आवश्यकताओं का सामना करते हैं (मैं इसके कारक की कल्पना करता हूं)?


13
सामुदायिक विकि होना चाहिए।
मैलफिस्ट

24
यदि "10" बाइनरी में था, तो यह निशान के करीब होगा।
जियोफ्टफ्नज

2
बहुत ही रोचक सवाल। :)
एमिल एच

9
मुझे यह अच्छा उद्धरण मिला "कोड की तर्ज पर प्रोग्रामिंग प्रगति को मापना वजन द्वारा विमान निर्माण प्रगति को मापने जैसा है।" इस वेबसाइट में [लिंक] ( devtopics.com/101-great-computer-programming-quotes )
mm24

2
@Greg बेकन, बिल द छिपकली: मैं वास्तव में इस सवाल को फिर से खोलना चाहूंगा। यह एसओ के नियमों के बिल्कुल अनुकूल नहीं है, लेकिन यह निश्चित रूप से आगंतुकों को आकर्षित कर रहा है। (35875 दर्शक अब तक)
स्किप्पी फास्टोल

जवाबों:


46

मुझे लगता है कि जोड़े गए लाइनों की संख्या परियोजना की स्थिति पर अत्यधिक निर्भर है, एक नई परियोजना को जोड़ने की दर एक प्रारंभिक परियोजना की दर से बहुत अधिक होगी।

दोनों के बीच काम अलग है - एक बड़ी परियोजना में आप आमतौर पर अधिकांश समय भागों के बीच संबंधों का अनुमान लगाते हैं, और वास्तव में बदलने / जोड़ने के लिए केवल एक छोटी राशि। एक नए प्रोजेक्ट में जबकि - आप ज्यादातर लिखते हैं ... जब तक यह काफी बड़ा नहीं हो जाता और रेट घट जाता है।


वास्तव में। उक्त परियोजना के आरंभ में नेट विज्ञापन बहुत बड़ा था।
मथायस वंडेल

1
इसलिए, यह एक बड़ी परियोजना को कई स्वतंत्र भागों (यहां तक ​​कि स्वतंत्र परियोजनाएं भी हो सकती है) को विभाजित करने के सिद्धांत को बनाए रखता है।
सेरगज़ैच

108

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

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

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


49
नकारात्मक रेखाओं के योगदान के लिए +1। मैंने एक बार एक छोटी सी परियोजना पर काम किया था जहाँ मैंने नई सुविधाओं को जोड़ते हुए लाइन की संख्या को 15K से 5K तक कम कर दिया (और बग काउंट को कम कर रहा था और गति बढ़ा रहा था)।
rmeador

55

मुझे यह उद्धरण पसंद है:

यदि हम कोड की पंक्तियों को गिनना चाहते हैं, तो हमें उन्हें "उत्पादित लाइनों" के रूप में नहीं बल्कि "खर्च की गई लाइनों" के रूप में समझना चाहिए। - एद्गर दिक्स्ट्रा

कुछ समय आपने कोड हटाने से अधिक योगदान दिया है


30

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


25
मैं इसे उत्पादकता मीट्रिक के रूप में उपयोग नहीं कर रहा था। यह मेरी अपनी जिज्ञासा के लिए एक निजी अभ्यास था।
मथायस वंडेल

3
काफी उचित। यहां तक ​​कि यह अधिक सटीक परिभाषा के बिना उत्तर देना कठिन है कि कोड की एक पंक्ति को क्या माना जाए।
ओट्टोवियो डेसियो

1
@ माथियास: मुझे उस ओपी में एडिट करना चाहिए अगर मैं आप होता तो मैं एक के लिए कम होता ... आक्रामक: पी
अन्नकटा

28

दूसरे लोग कैसे कर रहे हैं?

मैं हमारी कंपनी में एकमात्र पूर्णकालिक देव हूं और पिछले 7 वर्षों में OCaml और F # कोड की 500,000 लाइनें लिखी हैं, जो प्रति दिन लगभग 200 लाइनों के कोड के बराबर है। हालाँकि, उस कोड का अधिकांश भाग ट्यूटोरियल उदाहरण है जिसमें सैकड़ों अलग-अलग परियोजनाएं हैं जिनमें से प्रत्येक में कुछ सौ लाइनें लंबी हैं। इसके अलावा, OCaml और F # के बीच बहुत अधिक दोहराव है। हम 50kLOC से बड़े इन-हाउस कोड आधार को बनाए नहीं रख रहे हैं।

अपने खुद के सॉफ़्टवेयर को विकसित करने और बनाए रखने के अलावा, मैंने पिछले 7 वर्षों में उद्योग में कई ग्राहकों के लिए परामर्श किया है। के लिए पहले ग्राहक , मैं 3 महीने है, जो प्रतिदिन कोड के 20 लाइनों है से अधिक OCaml के 2000 लाइनों लिखा था। के लिए अगले ग्राहक , हम में से चार एक संकलक ने लिखा है कि 6 महीने जो प्रति डेवलपर प्रतिदिन कोड के 2000 लाइनों है में C / C ++ / पायथन / जावा / OCaml कोड के साथ ही दस्तावेज की लाइनों के उत्पन्न लाखों लोगों की। एक अन्य ग्राहक के लिए, मैंने 6 महीनों में F # की 6kLOC के साथ C ++ की 50kLOC को बदल दिया जो कि प्रति दिन कोड की -352 लाइनें है। के लिए अभी तक एक और ग्राहक , मैं एफ # जो इतनी प्रतिदिन कोड 0 लाइनों एक ही आकार के हो जाएगा में OCaml के 15kLOC पुनर्लेखन कर रहा हूँ।

के लिए हमारे वर्तमान ग्राहक , मैं जो प्रतिदिन कोड के -6000 लाइनों हो जाएगा (एक पूर्व-आरक्षित संकलक लिख कर) सी ++ और 1 साल में एफ # की ~ 160kLOC साथ मेथेमेटिका कोड के 1,600,000 लाइनों की जगह लेगा। यह आज तक की मेरी सबसे सफल परियोजना होगी और हमारे ग्राहक को प्रति वर्ष लाखों डॉलर की बचत होगी। मुझे लगता है कि हर किसी को प्रति दिन कोड की -6,000 लाइनें लिखने का लक्ष्य रखना चाहिए।


1
मुझे आपका उत्तर पसंद है और मैं व्यंग्य को समझता हूं। बस जिज्ञासा के रूप में, क्या आप स्पष्ट कर सकते हैं कि एफ # में कोड को फिर से लिखना क्यों आपके ग्राहक को पैसे बचाएगा? मैं OCaml से परिचित था और उस भाषा में एक दुभाषिया लिखता था और कुछ सालों से भाषा को नहीं छूता था, और अब मैं F # के बारे में
सुनता रहता

7
@ mm24 "क्या आप स्पष्ट कर सकते हैं कि क्यों एफ # में कोड को फिर से लिखना आपके ग्राहक को पैसे बचाएगा"। सबसे पहले, वे वुल्फ्राम रिसर्च द्वारा वास्तव में खराब हो गए, जिन्होंने उन्हें गणितीय रूप से गणितज्ञ उन्नयन में पेश की गई समस्याओं को ठीक करने के लिए £ 1m कंसल्टेंसी कॉन्ट्रैक्ट चार्ज किया, जैसे कि [लॉन्गडश] के शब्दार्थ को बदलना। दूसरे, उन्हें दो कोड आधार (Mathematica & C ++) को समेकित करने के लिए मिलता है जो वर्तमान में एक एफ # कोड आधार में मिलकर बनाए हुए हैं, न केवल डुप्लिकेट किए गए प्रयासों को कम करते हैं, बल्कि परीक्षण में पहचाने गए कई उत्पाद wrt उत्पाद अद्यतन और फ़िक्सेस।
JD

7
@ mm24 तीसरा, ऑटोमेशन। वे बहुत सी चीजें हाथ से कर रहे हैं जिसके लिए या तो पहले से मौजूद .NET टूल हैं या स्वचालित करने के लिए। .NET ऐसे टूल का निर्माण करना आसान बनाता है। कार्य में प्रदर्शन को मापने के लिए टाइमर के साथ इंस्ट्रूमेंटिंग कोड (एक प्रोफाइलर का उपयोग करें) शामिल है, हाथ से धारावाहिक लिखने (एक पुस्तकालय का उपयोग करें), हाथ से कुंजी-मूल्य के नाम (उपयोग प्रतिबिंब) की नकल करना और व्यवसाय द्वारा प्रस्तुत लाइव सिस्टम के लिए महत्वपूर्ण अपडेट लोगों द्वारा कार्रवाई की जाती है। हाथ से आईटी (एक उपकरण लिखें ताकि व्यवसाय सीधे परिवर्तन कर सकें)।
JD

7
@ mm24 चौथा, बड़े पैमाने पर प्रदर्शन में सुधार। F #, मैथमेटिका से अधिक परिमाण का आदेश है और F # में उनका प्रूफ-ऑफ-कॉन्सेप्ट कोड उनके उत्पादन C ++ कोड से 5 गुना अधिक तेज है। इसका मतलब है कि परीक्षण घंटों के बजाय सेकंड में निष्पादित होते हैं, जिस बिंदु पर परीक्षण विकास का एक अभिन्न अंग बन जाता है, नाटकीय रूप से उत्पादकता में सुधार होता है।
JD

7
@ mm24 पांचवीं, बढ़ी हुई क्षमताएं। वे मृत कोड उन्मूलन करना चाहते हैं और अपने परीक्षणों के कोड कवरेज को मापते हैं, लेकिन वे उन उपकरणों के साथ ऐसा नहीं कर सकते जो वे कर रहे हैं। .NET में जाना यह (और अधिक!) आसान बनाता है।
JD

13

वास्तव में "द माइथिकल मैन-मंथ" की मेरी कॉपी की जाँच किए बिना (इसे पढ़ने वाले हर व्यक्ति को वास्तव में आसानी से उपलब्ध एक प्रति होनी चाहिए), एक अध्याय था जिसमें ब्रूक्स ने लिखी लाइनों द्वारा उत्पादकता को देखा था। उनके लिए दिलचस्प बिंदु, प्रति दिन लिखी गई लाइनों की वास्तविक संख्या नहीं थी, लेकिन यह तथ्य कि यह कोडांतरक और PL / I में लगभग समान था (मुझे लगता है कि उच्च स्तरीय भाषा का उपयोग किया गया था)।

ब्रूक्स उत्पादकता के कुछ प्रकार के मनमाने आंकड़े को बाहर करने के बारे में नहीं था, लेकिन वह वास्तविक परियोजनाओं पर डेटा से काम कर रहा था, और सभी के लिए मुझे याद है कि वे औसतन 12 लाइनें / दिन हो सकते हैं।

उन्होंने कहा कि उत्पादकता में भिन्नता की उम्मीद की जा सकती है। उन्होंने कहा कि कंपाइलर आवेदन कार्यक्रमों की तुलना में तीन गुना कठिन थे, और ऑपरेटिंग सिस्टम कंपाइलरों की तुलना में तीन गुना कठिन थे। (वह तीन श्रेणियों के गुणकों का उपयोग करके अलग-अलग श्रेणियों में पसंद किया गया लगता है।)

मुझे नहीं पता कि अगर उन्होंने सराहना की तो प्रोग्रामर उत्पादकता के बीच व्यक्तिगत अंतर (हालांकि एक आदेश-परिमाण तर्क में उन्होंने सात अंतर का एक कारक पोस्ट किया), लेकिन जैसा कि हम जानते हैं कि बेहतर उत्पादकता सिर्फ लिखने की बात नहीं है कोड, लेकिन काम करने के लिए सही कोड भी लिखना।

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

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


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

11

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


वास्तव में। लेकिन आप उस परिदृश्य को अधिक बार मारेंगे क्योंकि परियोजना बड़ी हो जाती है। मैंने सही 10 लाइन प्रोग्राम लिखे हैं जिनमें कोई बग नहीं था। इसके सभी पैमाने हैं।
मथायस वंडेल

1
ऐसे प्रोग्राम नहीं हैं जिनमें कोई बग नहीं है।
डैनियल मौरा

14
बाह! आपके व्याकरण में कीड़े हैं ...
RAL

3
@DanielMoura ओह, मैं इससे सहमत नहीं हूँ ... एक "हैलो वर्ल्ड" कार्यक्रम बहुत उपयोगी नहीं हो सकता है, लेकिन आप बहुत आत्मविश्वास से कह सकेंगे कि इसमें कोई कीड़े नहीं थे :)
वेंडीकिड

10

यह महसूस करना बेहतर होगा कि कोड की भौतिक लाइनों की बात करना बहुत ही व्यर्थ है। कोड की भौतिक रेखाएं (LoC) कोडिंग शैली पर इतनी निर्भर हैं कि यह एक डेवलपर से दूसरे एक के परिमाण के क्रम में भिन्न हो सकती है।

.NET दुनिया में एलओसी की गणना करने के लिए एक सुविधाजनक तरीका है। अनुक्रम बिंदु । एक अनुक्रम बिंदु डिबगिंग की एक इकाई है, यह एक ब्रेक पॉइंट लगाते समय गहरे लाल रंग में हाइलाइट किया गया कोड भाग है। अनुक्रम बिंदु के साथ हम तार्किक एलओसी की बात कर सकते हैं , और इस मीट्रिक की तुलना विभिन्न .NET भाषाओं में की जा सकती है। तार्किक LoC कोड मीट्रिक, VisualStudio कोड मीट्रिक, ND निर्भर या NCover सहित अधिकांश .NET टूल द्वारा समर्थित है।

उदाहरण के लिए, यहां एक 8 एलओसी विधि है (शुरुआत और अंत कोष्ठक अनुक्रम बिंदुओं पर ध्यान नहीं दिया जाता है):

वैकल्पिक शब्द

एलओसी के उत्पादन को लंबी अवधि में गिना जाना चाहिए। कुछ दिन आप 200 एलओसी से अधिक खर्च करेंगे, कुछ अन्य दिन आप एक एलओसी नहीं जोड़कर बग को ठीक करने में 8 घंटे खर्च करेंगे। कुछ दिन आप डेड कोड को साफ कर देंगे और LoC को हटा देंगे, कुछ दिन आप अपना सारा समय मौजूदा कोड को रिफलेक्ट करने में लगाएंगे और कुल में कोई नया LoC नहीं जोड़ेंगे।

व्यक्तिगत रूप से, मैं अपने स्वयं के उत्पादकता स्कोर में एक ही एलओसी की गिनती करता हूं:

  1. यह इकाई-परीक्षणों द्वारा कवर किया गया है
  2. यह किसी प्रकार के कोड कॉन्ट्रैक्ट से जुड़ा है (यदि संभव हो तो सभी LoC को कॉन्ट्रैक्ट द्वारा चेक किया जा सकता है)।

इस स्थिति में, पिछले 5 वर्षों में .NET डेवलपर्स के लिए ND निर्भर उपकरण कोडिंग पर मेरा व्यक्तिगत स्कोर औसत है, जो किसी भी तरह की कोड गुणवत्ता का त्याग किए बिना प्रति दिन औसतन 80 भौतिक एलओसी है । लय कायम है और मुझे नहीं लगता कि यह जल्द ही किसी भी समय कम हो गया। कुल मिलाकर, एनडिपेंडेंट एक सी # कोड आधार है जो वर्तमान में 115K भौतिक एलओसी के आसपास वजन करता है

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


1
आपकी पोस्ट मौलिक है और बहुत अधिक उत्थान की हकदार है।
स्केपी फास्टोल

9

चांदी की गोली जैसी कोई चीज नहीं होती।

इस तरह की एक एकल मीट्रिक अपने आप में बेकार है।

उदाहरण के लिए, मेरे पास अपना स्वयं का पुस्तकालय है। वर्तमान में, निम्नलिखित आँकड़े सत्य हैं:

कुल पंक्तियाँ: 252.682
कोड लाइनें: 127.323
टिप्पणियाँ: 99.538
खाली लाइनें: 25.821

मान लेते हैं कि मैं कोई टिप्पणी नहीं लिख रहा हूं, वह है, कोड की 127.323 लाइनें। आपके अनुपात के साथ, वह कोड लाइब्रेरी मुझे लिखने के लिए लगभग 10610 दिनों का समय लेगी। वह 29 साल है।

मैंने निश्चित रूप से उस कोड को लिखने में 29 साल खर्च नहीं किए हैं, क्योंकि यह सब C # है, और C # उस लंबे समय के आसपास नहीं है।

अब, आप यह तर्क दे सकते हैं कि कोड सब कुछ अच्छा नहीं है, क्योंकि जाहिर है कि मैं आपकी 12 लाइनों को एक दिन मीट्रिक से पार कर चुका हूं, और हां, मैं इसके लिए सहमत हो जाऊंगा, लेकिन अगर मैं समयरेखा नीचे लाऊं जब 1.0 जारी किया गया था (और मैंने 2.0 रिलीज़ होने तक वास्तव में इसे बनाना शुरू नहीं किया था), जो कि 2002-02-13 है, लगभग 2600 दिन, औसत एक दिन में कोड की 48 लाइनें हैं।

कोड की वे सभी पंक्तियाँ अच्छी हैं? मत्स्यावरोध नहीं। लेकिन एक दिन में कोड की 12 लाइनों के नीचे?

मत्स्यावरोध नहीं।

सब कुछ निर्भर करता है।

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

और हाँ, कीड़े होंगे।

कुल आप चाहते हैं कि संतुलन है। कोड की मात्रा बदल गई, बनाम बग की संख्या, कोड की जटिलता, बनाम बनाम उन बगों को ठीक करने की कठिनाई।


तथास्तु! (प्लस रिक्त स्थान 15 चार मिनट को पूरा करने के लिए)
नैट

ध्यान दें, उन आंकड़ों की गणना DPack ( usysware.com/dpack ) द्वारा की गई थी ।
21:39 पर लेज़ वी। कार्लसन

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

6

स्टीव मैककोनेल अपनी पुस्तक "सॉफ्टवेयर अनुमान" (p62 तालिका 5.2) में एक दिलचस्प आँकड़ा देते हैं। वह परियोजना के प्रकारों (एवियोनिक, बिजनेस, टेल्को, आदि) और परियोजना के आकार 10 kLOC, 100 kLOC, 250LL के बीच अंतर करते हैं। LOC / StaffMonth में प्रत्येक संयोजन के लिए नंबर दिए गए हैं। ईजी एवियोनिक: 200, 50, 40 इंट्रानेट सिस्टम (आंतरिक): 4000, 800, 600 एंबेडेड सिस्टम: 300, 70, 60

जिसका अर्थ है: उदा। Avionic 250-kLOC परियोजना के लिए 40 (LOC / महीना) / 22 (दिन / महीना) == <2LOC / दिन हैं!


1
कोड की 250 टेरा लाइन्स? KLoC में क्या गलत है?
फ़ेडबाई

4

मुझे लगता है कि यह झरने के विकास के दिनों से आता है , जहां एक परियोजना का वास्तविक विकास चरण कुल परियोजना समय का 20-30% तक कम हो सकता है। कोड की कुल पंक्तियों को लें और पूरे प्रोजेक्ट समय से विभाजित करें और आपको लगभग 10 लाइनें / दिन मिलेंगे। बस कोडिंग अवधि से विभाजित करें, और आप उन लोगों के करीब पहुंच जाएंगे जो लोग उद्धृत कर रहे हैं।


3

लगभग 150 मानव-वर्षों के प्रयासों के लिए हमारा कोडबेस 2.2MLoC है। यह परियोजना के पूरे जीवन में प्रति दिन c ++ या c # प्रति डेवलपर की लगभग 75 लाइनें बनाता है ।


2

मुझे लगता है कि परियोजना का आकार और इसमें शामिल डेवलपर्स की संख्या बड़े कारक हैं। मैं अपने करियर से बहुत ऊपर हूं, लेकिन मैंने उस समय अकेले काम किया है ताकि अन्य प्रोग्रामर के साथ काम करने में कोई नुकसान न हो।


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

2

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

नीचे की रेखा, यदि आप प्रति घंटे 2 लाइनों पर मेरे लिए काम कर रहे थे, तो आप बेहतर होगा कि मुझे बहुत सारे कॉफ मिलें और मेरे झगड़े को खत्म कर दें ताकि आप निकाल न सकें।


1

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

यह बेकार है।


फिर आप किसी परियोजना के आकार का वर्णन कैसे करते हैं?
मथायस वंडेल

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

2
असतत कोड इकाइयाँ, कनेक्टिविटी पॉइंट्स (यानी, यूनिट इंटरैक्शन), टीयर, क्लासेस (OOP में) ... लगभग दस लाख तरीके हैं। KLOC वास्तव में जटिलता की संभावित इकाई के अलावा एक अच्छा उपाय नहीं है। (ईजी, "यह डिबग करने में 3 सप्ताह लग गए क्योंकि मुझे इसे खोजने के लिए 4 KLOCs के माध्यम से ताकना था!")
जॉन रूडी

2
@ डेविड: मुझे पता है कि यह कहां से है, मैं सवाल पढ़ सकता हूं और मैंने कहा है कि अभी मेरे सामने शेल्फ पर किताब है। दिलचस्प रूप से पहली प्रकाशित तारीख यह भी कहती है कि यह 3 साल बाद सी है। मेरी बात - स्पष्ट रूप से बुरी तरह से बनी हुई थी - कि यह पुरातन था, और आगे यह है कि बहुत ही अवधारणा बेकार है। हा! यह वास्तव में बाइबिल है।
अन्नकूट

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