मैं एक परियोजना में मौजूद तकनीकी ऋण की मात्रा को कैसे निर्धारित कर सकता हूं?


67

क्या किसी को पता है कि कोड बेस के एक प्रकार के कोड के तकनीकी ऋण पर नंबर डालने के लिए किसी प्रकार का टूल है या नहीं? यदि नहीं, तो क्या किसी को एल्गोरिथ्म या इसके लिए हेयुरेटिक्स के सेट के बारे में पता है?

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

मुझे C # कोड आधार का विश्लेषण करने और उसका आकलन करने में सबसे अधिक दिलचस्पी है, लेकिन कृपया अन्य भाषाओं के लिए भी झिझक महसूस करें, खासकर अगर अवधारणा भाषा पारगमन हो।


12
तकनीकी ऋण निर्णयों से आता है, न कि कोड से। यह खराब प्रबंधन विकल्पों के कारण अर्जित होता है। यह स्पष्ट नहीं है कि "विधि, एक वर्ग, एक नाम स्थान, एक विधानसभा" में तकनीकी ऋण शामिल हैं। जब कोई बेहतर विकल्प उपलब्ध हो तो वे एक दायित्व का प्रतिनिधित्व करते हैं।
S.Lott

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

3
"क्या उस पल में कोई कर्ज है?" ऋण जमा करने की आवश्यकता है, आप सही हैं। लेकिन यह कोड नहीं है; यह "काम" की मात्रा है जिसे पूर्ववत करने की आवश्यकता है। विनिर्देशों, डिजाइन, कोड, डीबीए-काम, सभी को फिर से काम करना होगा। सॉफ्टवेयर कलाकृतियों से ऋण मापना (कोड की स्रोत लाइनों की तरह) विकास लागत की भविष्यवाणी करने के समान है।
S.Lott

7
तकनीकी ऋण को मापना कठिन है, साथ ही यह प्रबंधकों को भ्रमित करता है। हालांकि, मैं आपको तकनीकी ऋण से लड़ने का एक अच्छा तरीका बता सकता हूं: सस्ते, अच्छे और कामकाजी प्रोटोटाइप, खासकर अगर कोड आधार जीयूआई के साथ घूमता है। जैसा कि जोएल ने यहां सुझाव दिया है: joelonsoftware.com/articles/fog0000000332.html , हर दिन सफाई करने में थोड़ा समय व्यतीत करें। परिवर्तन में सकारात्मक सुधार होना चाहिए, न कि "ओएमजी, हमारे तकनीकी ऋण = पेंटाबोब्स और यह तेजी से बढ़ रहा है ... आकाश गिर रहा है।" बस काइज़ेन पर हर दिन थोड़ा समय इस तरह से बिताएं कि काम करने वाली चीजें टूटें नहीं। दोस्त बनाओ।
नौकरी

6
@ZoranPavlovic आपका विचित्र और अनचाही झूठी दुविधा एक तीसरा विकल्प याद कर रही है: मैं जानना चाहता था कि क्या कोई उपकरण थे जो तकनीकी ऋण का मूल्यांकन करने का प्रयास करते थे।
एरिक डायट्रिच

जवाबों:


38

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

कई मीट्रिक हैं जो आपको कोड की गुणवत्ता के अनुसार कुछ संकेत दे सकते हैं:

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

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

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


1
मैं वर्तमान में आपके द्वारा बताए गए मेट्रिक्स ( हाल्टड उपायों के अपवाद के साथ, जो मैं आगे देखूंगा ) पर नजर रखने के लिए ND निर्भर ( ndepend.com ), कोडरश और वीएस कोड मैट्रिक्स का उपयोग करता हूं। मैं सोच रहा था कि मैं इन मैट्रिक्स के कुछ समामेलन का उपयोग किसी दिए गए कोड तत्व पर किसी प्रकार की संख्या डालने का प्रयास कर सकता हूं जो मोटे तौर पर एक नज़र में, कितना चल रहे विकास के लिए कितना महंगा है।
एरिक डायट्रिच

@ErikDietrich आप सक्षम हो सकते हैं, लेकिन मैं शायद उस मूल्य को निर्धारित नहीं करूंगा। समय के साथ बदलाव के संबंध में आपके मीट्रिक उपकरण आपको जो बताते हैं, उस पर शायद "कार्यकारी सारांश" शैली की रिपोर्ट अधिक उपयुक्त होगी।
थॉमस ओवेन्स

2
एक और साधारण मीट्रिक जो मैं सूची में जोड़ूंगा वह TODO / HACK / WTF की संख्या है? कोडबेस में टिप्पणियाँ ...
MaR

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

1
@ थोमस ओवेन्स: सहमत हैं, लेकिन लगभग किसी भी मीट्रिक को अकेले धोखा दिया जा सकता है। यदि सही और ईमानदारी से उपयोग किया जाता है, तो "TODO मीट्रिक" सस्ते अवलोकन प्रदान करता है कि क्या कोड वास्तव में गायब है या उसे बदला जाना चाहिए (= कोड-आधारित आधारित मैट्रिक्स के लिए अदृश्य ऋण)।
MaR

23

सोनार के पास एक तकनीकी ऋण है और साथ ही एक सॉफ्टवेयर परियोजना के लिए उपयोगी कई अन्य सुविधाएँ भी हैं।

यह भाषाओं की एक विस्तृत श्रृंखला का भी समर्थन करता है।

सोनारक्यूब (पूर्व में सोनार ) कोड गुणवत्ता के सतत निरीक्षण के लिए एक खुला स्रोत मंच है ...

  • 25+ भाषाओं का समर्थन करें: जावा, C / C ++, C #, PHP, Flex, Groovy, JavaScript, Python, PL / SQL, COBOL, आदि।
  • SonarQube का उपयोग Android Deveopment में भी किया जाता है।
  • डुप्लिकेटेड कोड, कोडिंग मानकों, यूनिट परीक्षणों, कोड कवरेज, जटिल कोड, संभावित बग, टिप्पणियों और डिजाइन और वास्तुकला पर रिपोर्ट प्रदान करता है।
  • टाइम मशीन और अंतर दृश्य।
  • पूरी तरह से स्वचालित विश्लेषण: मावेन, चींटी, ग्रैडल और निरंतर एकीकरण उपकरण (एटलसियन बांस, जेनकिंस, हडसन, आदि) के साथ एकीकृत करता है।
  • ग्रहण विकास पर्यावरण के साथ एकीकृत करता है
  • बाहरी उपकरणों के साथ एकीकृत करता है: जिरा, मेंटिस, एलडीएपी, फोर्टिफाई आदि।
  • प्लगइन्स के उपयोग के साथ विस्तार योग्य।
  • लागू करता SQALE गणना करने के लिए कार्यप्रणाली तकनीकी ऋण ...

1
अच्छा है धन्यवाद! मेरे पास मेरे C # काम के लिए ND निर्भरता है और मैं इसका उपयोग करता हूं, लेकिन मैं जावा का थोड़ा सा काम भी करता हूं और वहां के मेट्रिक्स में भी दिलचस्पी रखता हूं। बहुत कम से कम, यह मुझे जावा के लिए कार्यक्षमता प्रदान करता है, और यह एनडिपेंडेंट का एक अच्छा पूरक हो सकता है।
एरिक डायट्रिच

बहुत बढ़िया, हम सोनार का उपयोग करते हैं जहां मैं काम करता हूं और यह कुछ बहुत अच्छी चीजें करता है जो आपको अपने कोडबेस की स्थिति के बारे में जानकारी देते हैं।
राबर्ट ग्रीनर

2
@ ErikDietrich, FYI करें सोनार में C # प्लगइन भी है।
पेटर टॉर्क

@ErikDietrich FYI करें वहाँ अब सोनार के लिए एक NDepend प्लगइन है ndepend.com/docs/sonarqube-integration-ndepend
NDepend देव - पैट्रिक Smacchia

क्या खुला स्रोत विकल्प है?
हेलबॉय

5

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

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

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


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

5

डेवलपर्स के बीच तकनीकी ऋण का एक काफी विश्वसनीय माप WTFs / मिनट लगता है

इस "मीट्रिक" के साथ मुद्दा यह है कि आमतौर पर "बाहर" संवाद करना मुश्किल है।

मेट्रिक जिसने "बाहरी लोगों" के लिए तकनीकी ऋण को संप्रेषित करने में मेरे लिए काम किया था , सफल प्रसव के लिए आवश्यक परीक्षण और बग फिक्सिंग प्रयास (विशेषकर प्रतिगमन कीड़े को ठीक करने के लिए) की मात्रा थी ।

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

  • यह लागू करने के लिए इतना आसान है कि 3 सप्ताह के कुल खर्च को लागू करने की सुविधा पर ए की तुलना में
     
    मैंने 14 घंटे खर्च किए ड्राफ्ट के कार्यान्वयन पर एक तो ए के 29 घंटे धूम्रपान परीक्षण पर फिर 11 घंटे के लिए सुधारों को लागू करने पर मुझे पता चला, फिर 18 घंटे का परीक्षण क्यूए पहले से ही सुविधा कार्यान्वयन। उसके बाद, क्यूए लोगों ने प्रारंभिक उम्मीदवार रिलीज के परीक्षण पर 17 घंटे बिताए। उसके बाद मैंने प्रारंभिक अभ्यर्थी की रिहाई के लिए क्यूए द्वारा प्रस्तुत कीड़े का विश्लेषण करते हुए 13 घंटे बिताए और सुधारों को लागू करने में 3 घंटे लगाए। उसके बाद, मैंने धुंआ परीक्षण पर 11 घंटे बिताए जो मैंने प्रारंभिक उम्मीदवार को जारी किए गए परिवर्तनों का परीक्षण किया था। उसके बाद...

वैसे भी परीक्षण और बग फिक्सिंग प्रयास के बारे में डेटा मेरे अनुभव में संवाद करने में काफी आसान है।

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


सावधानी का एक और शब्द। 90% से अधिक डेटा की व्याख्या न केवल तकनीकी ऋण के संकेत के रूप में की जा सकती है, बल्कि यह भी (आश्चर्य की बात है) एक के संकेत के रूप में प्रोग्रामिंग / विशेष तकनीक में काफी कुशल नहीं है। "आप अपने कोड में बहुत अधिक बग बनाते हैं"।

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

  • यह कहें कि यदि एक ही डेवलपर (एस) द्वारा बनाए गए दो समान घटक / एप्लिकेशन हैं, तो पहले "अपशिष्ट दर" को लगभग 50% और दूसरे को 80-90 पर जारी किया जाता है, यह तकनीकी ऋण के दूसरे होने के पक्ष में एक बहुत मजबूत मामला बनाता है ।

यदि परियोजना में समर्पित परीक्षक हैं, तो वे डेटा के अधिक उद्देश्य मूल्यांकन में भी योगदान कर सकते हैं। जैसा कि मैंने एक अन्य उत्तर में उल्लेख किया है ,

परीक्षकों के साथ, आपको किसी को डिजाइन मुद्दों की अपनी समझ का बैकअप लेने के लिए मिलता है। जब कोड विकास के बारे में शिकायत करने वाले केवल डेवलपर्स होते हैं , तो यह अक्सर बंद दरवाजे के पीछे से व्यक्तिपरक डब्ल्यूटीएफ की तरह लगता है ।
 
लेकिन जब यह क्यूए आदमी द्वारा यह कहते हुए गूँजती है कि component A10 नई सुविधाओं के लिए 100 प्रतिगमन कीड़े थे, component Bजिसके विरोध में प्रति 20 नई सुविधाओं में 10 प्रतिगमन कीड़े थे , संचार अचानक पूरे दूसरे गेम में बदल जाता है।


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

4

मुझे लगता है कि सवाल यह है कि आपके तकनीकी ऋण को "वापस खरीदने" में कितना खर्च आएगा - यानी इसे ठीक करने के लिए कितना काम है? खैर, यह टीम के ऊपर है कि वह इसका पता लगाए।

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

यदि आप कोई घोटाला नहीं कर रहे हैं, तो मैं अपने आधार से चिपक जाऊंगा - तकनीकी ऋण को उपाय की लागत से मापा जाना चाहिए।


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

1
@ एरिक डिट्रिच - ठीक है, टीडी निश्चित रूप से समाधान में जटिलता जोड़ रहा है। मुश्किल यह हो सकती है कि टीडी टुकड़े को ठीक करना एक थोक समाधान की तुलना में अधिक महंगा हो सकता है। इस प्रकार यह हो सकता है कि आपके पास 3 कहानियाँ हैं जिन्हें 5 पर रेट किया जाएगा यदि टीडी को समाप्त कर दिया गया था, लेकिन 8 प्रत्येक जगह ऋण के साथ हैं - इसलिए टीडी के 9 अंक तक जुड़ जाते हैं। टीडी को एक पूरे के रूप में ठीक करने का काम (कहानियों के बावजूद) वास्तव में 8. हो सकता है। इसलिए आप यह तर्क दे सकते हैं कि थोक समाधान में टुकड़ा (9) की तुलना में कम (8) खर्च होता है। यह बातचीत का हिस्सा होगा
मैथ्यू फ्लिन

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

2

वहाँ एक बहुत मजबूत मंच है जिसे CAST कहा जाता हैबड़े अनुप्रयोगों में तकनीकी ऋण की तलाश करना। हमने इसे एक ऐसी परियोजना पर इस्तेमाल किया, जहां हमने एक विरासत प्रणाली के लिए एक बड़ी वृद्धि संभाली। यह आपको नहीं बताता है कि लोगों के सिर में क्या था, जिन्होंने कोड लिखा था, लेकिन यह कोड की जांच करता है और कोड और आर्किटेक्चर की खामियों का पता लगाता है, यदि आप चाहते हैं तो तकनीकी ऋण की मात्रा निर्धारित करता है। हालांकि, यह देखने में असली उपयोग $ राशि नहीं है, लेकिन कोड में पहले से ही समस्याओं की सूची है। यह आपको आपके द्वारा दिए गए तकनीकी ऋण के एक हिस्से के बारे में बताता है (इसलिए मैं ऊपर दिए गए कुछ उत्तरों से असहमत हूं)। कुछ तकनीकी ऋण है जो विशुद्ध रूप से डिज़ाइन-आधारित है और यह बहुत व्यक्तिपरक है - जैसे पोर्नोग्राफी - आप इसे तब देखते हैं जब आप इसे देखते हैं और संदर्भ जानते हैं। मैं तर्क दूंगा कि क्या वास्तव में "तकनीकी" ऋण है। कुछ तकनीकी ऋण है जो विशुद्ध रूप से कार्यान्वयन में है और मेरा मानना ​​है कि '


मैंने ट्विटर पर इस सवाल को साझा किया, और किसी ने कास्ट के बारे में बात करते हुए जवाब दिया। मैं वास्तव में स्पष्ट नहीं हूं कि उनकी वेबसाइट की जाँच के बाद यह सब क्या करता है। वहाँ किसी भी मौका द्वारा एक परीक्षण ड्राइव के लिए लेने के लिए एक freebie या डेमो संस्करण है?
एरिक डायट्रिच

2

यहां बड़े सॉफ्टवेयर सिस्टम में तकनीकी ऋण पर अनुसंधान का वर्णन करने वाले एमआईटी से एक वेबिनार है: http://sdm.mit.edu/news/news_articles/webinar_050613/sturtevant-webinar-nchnical-debt.html

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

वेबिनार में वर्णित कार्य हार्वेस्ट बिजनेस स्कूल में एलन मैककॉर्मैक और कार्लिस बाल्डविन द्वारा किए गए मॉड्यूलरिटी रिसर्च पर आधारित है। मैं उनके कागज भी देखूंगा। उनकी 'प्रचार लागत' वह हो सकती है जो आप खोज रहे हैं।


1

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


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

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

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

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

0

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


2
एक वास्तविक दृष्टिकोण से, मैं यह तर्क दूंगा कि अल्पकालिक परिणामों के लिए दीर्घकालिक बुरा होने के लिए सबसे अधिक इच्छुक लोग शायद अपने फैसले का दस्तावेजीकरण करने की संभावना भी कम से कम लोग करते हैं। इसलिए, मैं सिद्धांत रूप में आपके विचार से सहमत हूं, लेकिन मुझे लगता है कि धारावाहिक "पक्ष अनुरोध" एहसान के संतुलन का ट्रैक रखने की कम से कम संभावना होगी।
एरिक डाईट्रिच

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

0

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

आपके क्या विचार हैं? आपकी प्रतिक्रिया सुनने के लिए किसी भी प्रश्न और भूख का जवाब देने के लिए खुश :)।

दोष और अवांछित तकनीक ऋण को रोकने के लिए स्वामित्व

स्वामित्व इंजीनियरिंग स्वास्थ्य का एक प्रमुख संकेतक है।

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

यह कुछ भविष्य कहनेवाला शक्ति प्रदान करता है: कोडबेस के कमजोर स्वामित्व वाले भागों में समय के साथ ऋण जमा होने और साथ काम करने के लिए तेजी से कठिन हो जाता है। विशेष रूप से, यह संभव है के लिए ऋण किए जाने अनजाने पर ले लिया बस अधूरी जानकारी का एक पक्ष प्रभाव के रूप में, और कोड की गुणवत्ता के स्वामित्व पतला।

यह कुछ हद तक कॉमन्स की त्रासदी के अनुरूप है ।

वास्तुकला में सुधार करने के लिए सामंजस्य

सामंजस्य अच्छी तरह से परिभाषित घटकों का अनुगामी सूचक है।

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

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

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

समस्या क्षेत्रों की पहचान करने के लिए मंथन करें

मंथन (बार-बार की जाने वाली गतिविधि) एक बढ़ती प्रणाली में रिफैक्टिंग के लिए पके हुए क्षेत्रों को पहचानने और रैंक करने में मदद करता है।

जैसे-जैसे सिस्टम बढ़ता है, डेवलपर्स के लिए उनकी वास्तुकला को समझना कठिन हो जाता है। यदि डेवलपर्स को एक नई सुविधा देने के लिए कोडबेस के कई हिस्सों को संशोधित करना पड़ता है, तो उनके लिए बगों से होने वाले दुष्प्रभावों से बचने के लिए मुश्किल होगा, और वे कम उत्पादक होंगे क्योंकि उन्हें अधिक तत्वों और अवधारणाओं से परिचित होने की आवश्यकता होती है।

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

इन सक्रिय फाइलों को मंथन करें ताकि आप तय कर सकें कि आपके कोडबेस में परिवर्तन के सतह क्षेत्र को कम करने के लिए उन्हें तोड़ा जाना चाहिए या नहीं।


-1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.