उत्पादकता और SLOC के बारे में
SLOC के साथ समस्या
एसएलओसी मीट्रिक के साथ समस्या यह है कि यह कोड की मात्रा के एक अनुमान को मापता है, जिसे ध्यान में रखे बिना:
- कोड की गुणवत्ता (यानी क्या होगा यदि प्रत्येक 100 SLOC के लिए आपको बग के कारण एक और 90 SLOC जोड़ना होगा, लेकिन यह कि आपको पता नहीं है कि आपका कोड किस समय वितरित किया गया है?)
- लक्ष्य कोड के साथ पहुंच गए (यानी 10K SLOC सभी अपेक्षित उपयोग के मामलों या उपयोगकर्ता कहानियों को संभालती है? या केवल एक छोटे उपसमूह को?)
- कोड की स्थिरता (यानी आपको उभरती आवश्यकताओं की उम्मीद करने के लिए कोड को समायोजित करने के लिए 1% या 50% अधिक कोड जोड़ना होगा?)।
अन्यथा कहा गया है, बहुत से कॉपी-पेस्ट किए गए भागों के साथ त्रुटि रहित अनपेक्षित स्पेगेटी कोड के उत्पादन को सावधानीपूर्वक इंजीनियर पुन: प्रयोज्य कोड की तुलना में अधिक उत्पादक माना जाएगा।
तो SLOC निश्चित रूप से उत्पादकता को मापने का सबसे अच्छा तरीका नहीं है।
हम किस उत्पादकता पर विचार कर रहे हैं?
उत्पादकता को एक प्रक्रिया के लिए मापा जाता है। इसलिए SLOC अकेले कोडिंग प्रक्रिया के लिए पूरी तरह से वैध संकेतक हो सकता है।
उदाहरण के लिए, यदि आप गरीब आवश्यकताओं को गलत समझते हैं, तो सॉफ्टवेयर का निर्माण करने के लिए पांच महीने का समय दें, उपयोगकर्ता को दिखाएं, यह पता लगाएं कि यह बिल्कुल गलत है और इसे खरोंच से अच्छे के लिए फिर से लिखने के लिए एक और 5 महीने खर्च करें, आपके पास SLOC में समान उत्पादकता होगी / माह, कि एक टीम पहली बार सही कोड लिख रही है, उदाहरण के लिए क्योंकि वे एक चुस्त प्रक्रिया का उपयोग करते थे जो अक्सर फीड-बैक के माध्यम से गलतफहमी को कम करता है। यह स्पष्ट समान उत्पादकता भारी समस्याओं को छिपाती है।
इसलिए, सॉफ्टवेयर विकास उत्पादकता को मापने के लिए पूरी प्रक्रिया को ध्यान में रखना चाहिए, जिसमें आवश्यकताओं का विश्लेषण करना, कोड, कोडिंग, परीक्षण, डिबगिंग को डिजाइन करना और उपयोगकर्ता की अपेक्षाओं को पूरा करना शामिल है। चूंकि ये सभी गतिविधियां बहुत अलग हैं, इसलिए सबसे अच्छी बात यह है कि केवल यही सोचें कि क्या मायने रखता है: कार्यशील सॉफ़्टवेयर, अर्थात उत्पादित सॉफ़्टवेयर उपयोगकर्ता के लिए क्या मायने रखता है ।
सॉफ्टवेयर डिलिवरेबल्स कैसे मापें?
कई दृष्टिकोण मौजूद हैं:
- शास्त्रीय सॉफ्टवेयर इंजीनियरिंग में विशिष्ट दृष्टिकोण फंक्शन पॉइंट्स (एफपी) है। पूरा करने के लिए आवश्यकताओं के आधार पर फंक्शन पॉइंट मापा जाता है (उदाहरण के लिए फॉर्म की संख्या, प्रत्येक फॉर्म में फ़ील्ड की संख्या, आदि ...)। उत्पादकता को तब एफपी प्रति यूनिट समय और प्रति व्यक्ति में मापा जाता है। कुछ कंपनियों के पास डेटा भी होता है, जो यह बताता है कि किसी दिए गए डोमेन के लिए एक भाषा में कितने फंक्शन पॉइंट प्रति यूनिट का उत्पादन कर सकते हैं। एफपी के साथ समस्या यह है कि इसके लिए बहुत विस्तृत आवश्यकताओं की आवश्यकता है और यह समय लेने वाली है।
- एक अधिक आधुनिक और व्यावहारिक दृष्टिकोण कहानी अंक (एसपी) है। इनका उपयोग कोड की जटिलता का उत्पादन करने के लिए किया जाता है, और नियमित रूप से विकास टीमों के वेग का मूल्यांकन करने के लिए उपयोग किया जाता है। हालांकि, एसपी सभी विवरणों को ज्ञात करने से पहले किए गए कार्य के लिए एक आकलन उपाय है। यह वास्तव में क्या हुआ, इसका अंतिम उपाय नहीं है। इसलिए इसे उत्पादकता के उपाय के रूप में उपयोग करते समय कुछ सावधानी बरतनी चाहिए क्योंकि यह अनुमान प्रक्रिया पर वापस आ सकता है ।
स्थिर बनाम गतिशील टाइपिंग की उत्पादकता के बारे में
मुझे यह स्वीकार करना होगा कि मैं व्यक्तिगत रूप से वैधानिक रूप से टाइप की जाने वाली भाषाओं का प्रशंसक हूं, क्योंकि अपने भीतर के स्वयं को मैं जानता हूं कि यह अधिक विश्वसनीय है (कोडिंग के वर्षों ने मुझे यह साबित कर दिया है)।
अतः एक बात जो मैं सुनिश्चित करता हूं वह यह है कि स्टेटिक टाइप की गई भाषाओं की तुलना में स्टेटिकली टाइप की गई भाषा संकलन के समय (उदाहरण के लिए टाइपो, बेमेल टाइप) में बहुत अधिक त्रुटियों / बग्स को रोकने में सक्षम है। लेकिन सभी निष्पक्षता में, मैं इसे उच्च उत्पादकता के रूप में अपमानजनक रूप से सामान्य बनाने की हिम्मत नहीं करूंगा।
क्या आपका आर्किटेक्ट सही है?
शायद शायद नहीं।
लेकिन उनकी दलीलें मान्य नहीं लगती हैं: सांख्यिकीय रूप से टाइप की गई भाषा का उत्पादकता लाभ उन त्रुटियों की एक महत्वपूर्ण संख्या से आता है, जो संकलक द्वारा पकड़ी जाती हैं।
नतीजतन यह गतिशील रूप से टाइप की गई भाषाओं के लिए आवश्यक rework को देखे बिना अकेले SLOC को देखकर इस "उच्च" उत्पादकता लाभ का पता लगाना संभव नहीं है। इसलिए उनकी तुलना निष्पक्ष नहीं हो सकती।
तुलनीय परिस्थितियों का तर्क भी नहीं रखता है। कुछ गतिशील रूप से टाइप की गई भाषाएं कुछ उच्च स्तर के निर्माणों की अनुमति देती हैं, जिन्हें क्लासिक रूप से टाइप की गई भाषाओं में से एक में भी कम कोड की आवश्यकता होती है। तो आपको कम समय की आवश्यकता हो सकती है, कम कोड लिख सकते हैं, लेकिन एक ही विश्लेषण, परीक्षण और सत्यापन ओवरहेड जोड़ें। इसलिए SLOC द्वारा उत्पादकता को मापना संभावित उत्पादकता लाभ को कम करेगा, इस प्रकार गतिशील रूप से टाइप की गई भाषा के खिलाफ पूर्वाग्रह पैदा करेगा।
उस दावे का समर्थन करने के लिए कोई अध्ययन?
इस विषय पर कई हालिया अकादमिक अध्ययन मौजूद हैं। यद्यपि उनमें से कुछ को स्थिर टाइपिंग का लाभ दिखाई देता है, यह सामान्य रूप से एक विशिष्ट उद्देश्य (प्रलेखन, खराब दस्तावेज कोड या एपीआई, आदि .. के पुन: उपयोग) तक सीमित है। विवेकपूर्ण शब्दों का उपयोग इसलिए भी किया जाता है क्योंकि आधुनिक IDE ने डायनामिक टाइपिंग से संबंधित जोखिमों को काफी कम कर दिया है: