कोड के लिए दस्तावेज़ीकरण कैसे किया जाता है और सॉफ़्टवेयर (अक्सर) खराब दस्तावेज क्यों है?


26

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

मेरे सभी सॉफ्टवेयर डेवलपमेंट स्टंट्स में, मुझे खराब दस्तावेज कोड से निपटना पड़ा है। मैंने निम्नलिखित बातों पर ध्यान दिया -

  1. कोड में कम या कोई टिप्पणी नहीं।
  2. विधि और चर नाम स्वयं का वर्णन नहीं कर रहे हैं।
  3. सिस्टम या व्यावसायिक प्रक्रियाओं में कोड कैसे फिट बैठता है इसके लिए बहुत कम या कोई दस्तावेज नहीं है।
  4. बुरे डेवलपर्स को किराए पर लेना या अच्छे लोगों का उल्लेख नहीं करना। वे सरल और साफ कोड नहीं लिख सकते। इसलिए कोड को दस्तावेज करने के लिए डेवलपर सहित किसी के लिए भी यह मुश्किल या असंभव है।

नतीजतन, मुझे बहुत सारे कोड से गुजरना पड़ा और कई लोगों से बातें सीखने के लिए बात करनी पड़ी। मुझे लगता है कि यह हर किसी का समय बर्बाद करता है। यह एक परियोजना के लिए नवागंतुकों के लिए केटी / ज्ञान हस्तांतरण सत्रों की आवश्यकता भी पैदा करता है।

मैंने सीखा कि निम्नलिखित कारणों के कारण प्रलेखन पर ध्यान नहीं दिया जाता है:

  1. आलस्य।
  2. डेवलपर्स को कुछ भी करना पसंद नहीं है लेकिन कोड।
  3. नौकरी की सुरक्षा। (यदि कोई आपके कोड को आसानी से नहीं समझ सकता है, तो आप आसानी से बदली नहीं जा सकते।)
  4. मुश्किल समय-सीमा दस्तावेज़ के लिए बहुत कम समय छोड़ती है।

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

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

क्या इस पागलपन को समाप्त करने या कम करने का एक तरीका है? "दस्तावेज़ संचालित विकास" शायद?


2
एक और कारण है कि अक्सर कोई उचित दस्तावेज नहीं होता है: अच्छा प्रलेखन लिखना बहुत कठिन होता है जो अंग्रेजी में कोड को केवल व्याख्या नहीं करता है, लेकिन यह बताता है कि क्यों कोड को इस तरह से डिज़ाइन / लिखा गया है। इस जानकारी की आवश्यकता स्पष्ट महीनों के बाद ही लिखी जानी चाहिए।
बार्ट वैन इनगेन शेनौ जूल

1
एक और गंभीर कारण: कई डेवलपर्स के पास दूसरी भाषा के रूप में अंग्रेजी है और / या बुरी तरह से अंग्रेजी लिखते हैं। आप बस उन्हें एक विधि के लिए एक-लाइनर लिखने के लिए मजबूर कर सकते हैं, लेकिन यदि आप चाहते हैं कि अच्छा प्रलेखन आप बेहतर इसके लिए भुगतान करने के लिए तैयार रहें, और इसे करने के लिए विशेषज्ञों को काम पर रखें।
david.pfx

जवाबों:


26

दस्तावेज कोड कैसे?

आपके पास पहले से ही एक संकेत है: देखो कि जावा एपीआई कैसे प्रलेखित है।

आम तौर पर, नियमों का कोई अनूठा सेट नहीं है जो हर परियोजना पर लागू होता है। जब मैं व्यावसायिक-महत्वपूर्ण बड़े पैमाने पर परियोजनाओं पर काम करता हूं, तो दस्तावेज़ीकरण का मेरे पास एक छोटे से खुला स्रोत पुस्तकालय के लिए लिखने के लिए कुछ भी नहीं होता है, जो बदले में, मेरे मध्यम-स्तरीय व्यक्तिगत परियोजना के प्रलेखन से कोई लेना-देना नहीं है। ।

क्यों कई खुले स्रोत परियोजनाओं को अच्छी तरह से प्रलेखित नहीं किया जाता है?

क्योंकि ज्यादातर ओपन सोर्स प्रोजेक्ट्स उन लोगों द्वारा किए जाते हैं जो उन प्रोजेक्ट्स में योगदान करते हैं क्योंकि यह मजेदार है। अधिकांश प्रोग्रामर और डेवलपर्स यह मानते हैं कि लेखन दस्तावेज मुफ्त में किए जाने के लिए पर्याप्त मजेदार नहीं है

क्यों कई बंद स्रोत परियोजनाओं को अच्छी तरह से प्रलेखित नहीं किया जाता है?

क्योंकि इसमें एक बड़ी रकम खर्च होती है (1) अच्छा दस्तावेज लिखना और (2) इसे बनाए रखना।

  1. तत्काल लागत (दस्तावेज लिखने की लागत) हितधारकों को स्पष्ट रूप से दिखाई देती है: यदि आपकी टीम परियोजना के दस्तावेज के अगले दो महीने खर्च करने के लिए कहती है, तो यह भुगतान करने के लिए दो महीने का अतिरिक्त वेतन है।

  2. दीर्घकालिक लागत (प्रलेखन को बनाए रखने की लागत) प्रबंधकों के लिए भी बहुत आसान हो जाती है, और अक्सर यह पहला लक्ष्य होता है जब उन्हें लागत कम करनी चाहिए या देरी को कम करना चाहिए। यह पुरानी प्रलेखन की एक अतिरिक्त समस्या का कारण बनता है जो जल्दी बेकार हो जाता है, और अद्यतन करने के लिए बहुत महंगा है।

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

मैं अक्सर यह देखता हूं कि:

  1. शुरुआत में, टीम एक बहुत दस्तावेज करने के लिए तैयार है।

  2. समय के साथ, समय सीमा और ब्याज की कमी के दबाव ने प्रलेखन को बनाए रखने के लिए इसे और अधिक कठिन बना दिया।

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

  4. यह देखते हुए कि, प्रबंधन प्रलेखन बनाए रखने के लिए डेवलपर्स को दोषी ठहराता है; डेवलपर्स इसे अपडेट करने में कुछ सप्ताह बिताने को कहते हैं।

    • यदि प्रबंधन उस के लिए कुछ सप्ताह देता है, तो चक्र दोहराता है।

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

परीक्षण की तरह ही प्रलेखन एक सतत प्रक्रिया होनी चाहिए। एक सप्ताह बिताओ बस कुछ हजारों LOC कोडिंग, और परीक्षण और प्रलेखन के लिए वापस बहुत, बहुत दर्दनाक है।

प्रलेखन लिखने के लिए टीम को कैसे प्रोत्साहित करें?

इसी तरह लोगों को स्वच्छ कोड लिखने के लिए प्रोत्साहित करने के लिए, नियमित रूप से रीफैक्टरिंग करने के लिए, डिज़ाइन पैटर्न का उपयोग करने के लिए या पर्याप्त इकाई परीक्षणों को जोड़ने के लिए।

  • मिसाल पेश करके। यदि आप अच्छे दस्तावेज लिखते हैं, तो आपके जोड़े भी ऐसा करना शुरू कर सकते हैं।

  • प्रलेखन का निरीक्षण करने पर लक्षित औपचारिक कोड समीक्षा सहित व्यवस्थित कोड समीक्षाएं करें।

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

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

  • सरगम का उपयोग करें। यह पिछले बिंदु के साथ आता है।

  • सकारात्मक / नकारात्मक सुदृढीकरण का उपयोग करें ।

  • ( SJuan76 द्वारा टिप्पणी देखें ) त्रुटियों के रूप में टिप्पणियों की कमी का इलाज करें। उदाहरण के लिए, Visual Studio में, आप XML प्रलेखन उत्पन्न करने के लिए एक विकल्प की जाँच कर सकते हैं। यदि आप यह भी जाँचते हैं कि सभी चेतावनियाँ त्रुटियों के रूप में मानी जाती हैं, तो किसी वर्ग या विधि के शीर्ष पर एक टिप्पणी का अभाव संकलन को रोक देगा।

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

    /// <summary>
    /// Gets or sets the PrimaryHandling.
    /// </summary>
    public Workflow PrimaryHandling { get; set; }

जो, हम्म ..., विशेष रूप से उपयोगी नहीं थे।

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

क्या कोई अच्छा उदाहरण है जब न्यूनतम या कोई प्रलेखन की आवश्यकता होती है?

वास्तुकला और डिजाइन की व्याख्या करने वाले प्रलेखन की आवश्यकता नहीं है:

  • एक प्रोटोटाइप के लिए,

  • किसी कार्य को पूरा करने के लिए कुछ घंटों में लिखे गए एक व्यक्तिगत प्रोजेक्ट के लिए, यह सुनिश्चित करते हुए कि इस परियोजना को अब और बनाए नहीं रखा जाएगा,

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

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

मुझे लगता है कि किसी प्रोजेक्ट के डिलीवर होने के बाद हमें डॉक्यूमेंटेशन रिव्यू करना चाहिए।

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


'कैसे प्रोत्साहित करें' के लिए, मुझे लगता है कि कई IDE चेतावनी के रूप में लापता प्रलेखन की अधिसूचना के लिए अनुमति देते हैं। वैकल्पिक रूप से, शायद प्रलेखन का स्थैतिक विश्लेषण ओएसबी में किया जा सकता है (निश्चित रूप से, यह अकेले पर्याप्त नहीं होगा)।
SJuan76

@ SJuan76: वास्तव में। विजुअल स्टूडियो भी टिप्पणियों की कमी को संकलन-समय त्रुटि के रूप में मान सकता है। मैंने उस बारे में एक नोट जोड़ने के लिए अपना जवाब संपादित किया।
आर्सेनी मूरज़ेंको

@ArseniMourzenko - मैंने पढ़ा कि हम दस्तावेज़ के लिए कहानियों को जोड़कर एजाइल में कुछ प्रलेखन को प्रोत्साहित कर सकते हैं। लेकिन, इन्हें अन्य कहानियों यानी अन्य कहानियों की परिभाषा को ब्लॉक नहीं करना चाहिए, इसमें दस्तावेजी कहानियों को पूरा करना शामिल नहीं होना चाहिए। वह कैसा लगता है ?
बोरट सगड़ीयेव

3

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

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

tl; डॉ

यदि आप हर परियोजना को अच्छी तरह से प्रलेखित करने के लिए कह रहे हैं, तो आप बहुत अधिक पूछ रहे हैं।


2
Fortunately software development is not scienceकृपया मुझे इस बारे में अधिक बताएं कि आप ऐसा क्यों मानते हैं।
बोरट सगड़ीयेव

3
@ बोरैट - सॉफ्टवेयर विकास एक इंजीनियरिंग अनुशासन है, जिसका अर्थ है कि यह विज्ञान द्वारा प्रदान किए गए उपकरणों का उपयोग करता है ।
लियोपोल्ड एस्परजर

मैं सब कुछ दस्तावेज के लिए नहीं कह रहा हूं। यह एक प्रणाली और कोड क्या करता है के एक उच्च स्तरीय अवलोकन देने के लिए बस पर्याप्त होना चाहिए। उदाहरण के लिए। कृपया मुझे बताएं कि मेरे टीवी का उपयोग कैसे करें। मुझे परवाह नहीं है अगर यह काम पाने के लिए एलसीडी, सीआरटी, वैक्यूम ट्यूब या ठोस राज्य उपकरणों का उपयोग करता है। अगर कोई मरम्मत करने वाला आदमी उस जानकारी को चाहता है, तो उसके लिए अलग से दस्तावेज तैयार करें।
बोरट सगड़ीयेव

यदि आप एक उच्च स्तरीय अवलोकन चाहते हैं, तो पहचानकर्ता नाम पर्याप्त हैं। जैसे आपके टीवी के बटन में "ऑन" लेबल हो सकता है। तो आप निम्न-स्तरीय विवरण मांग रहे हैं।
लियोपोल्ड एस्परगर

2
@ लियोपोल्डसैपर: मुझे लगता है कि बोरत वास्तुकला और डिजाइन के दस्तावेज के बारे में बात कर रहे हैं, न कि कक्षाओं में तरीके।
Arseni Mourzenko
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.