क्या ऑटो-जनरेट कोड प्रलेखन के लिए कोई तार्किक कारण है? [बन्द है]


60

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

/// <summary>
/// Initializes a new instance of the <see cref="Person"/> class.
/// </summary>
public Person() ...

सबसे बुरे में, यह वास्तव में विचित्र प्रलेखन उत्पन्न कर सकता है जो वास्तव में नाम के अर्थ का अनुमान लगाने की कोशिश में भ्रामक है:

/// <summary>
/// Riches the text selection changed.
/// </summary>
/// <param name="richTextBox">The rich text box.</param>
private void RichTextSelection_Changed(System.Windows.Controls.RichTextBox richTextBox) ...

ऐसा लगता है कि घोस्टडोक के साथ रवैया है, "यह आंतरिक रूप से बेहतर है कि किसी तरह का औपचारिक XML दस्तावेज हो", लेकिन जब वह दस्तावेज 100% बेमानी हो, तो क्यों? क्या यह सिर्फ अंतरिक्ष के एक टन को बर्बाद नहीं कर रहा है?

मेरे कार्यस्थल पर, हमें सब कुछ दस्तावेज़ करना होगा, और लगभग हमेशा घोस्टडॉक के ऑटो-जेनरेट किए गए डॉक्स के साथ। क्या आप ऐसा करते हैं, और क्या कोई तर्कसंगत कारण है कि यदि आप वास्तव में स्वयं दस्तावेज लिखना नहीं चाहते हैं तो कोड को अनजाने में नहीं छोड़ना है?



5
यदि आप अपने DLL का पुन: उपयोग करते हैं, और IntelliSense संकेत रखना चाहते हैं कि क्या तरीके और पैरामीटर करते हैं, तो आपको हर एक वर्ग, विधि और पैरामीटर पर टिप्पणी करने की आवश्यकता है। अन्यथा, परियोजना उड़ जाएगी और XML नहीं बनेगी। मुझे लगता है कि ऐसा करने के लिए एक हास्यास्पद आलसी दृष्टिकोण होने के लिए ऑटो-जनरेट की गई टिप्पणियों का उपयोग करना चाहिए।
क्रिलगर

11
यह अनावश्यक दस्तावेज बनाता है ताकि डेवलपर्स इससे नाराज हो जाएं और सही दस्तावेज भरें। हर जगह माइंड गेम।
क्रोल्टन

2
कभी-कभी आप डॉक दे सकते हैं लेकिन कोड नहीं
लियो

2
संक्षिप्त उत्तर: नहीं
थॉमस ईडिंग सेप

जवाबों:


14

[...] दस्तावेज़ सब कुछ, और लगभग हमेशा घोस्टडॉक के ऑटो-जेनरेट किए गए डॉक्स के साथ। क्या आप ऐसा करते हैं, और क्या कोई तर्कसंगत कारण है कि यदि आप वास्तव में स्वयं दस्तावेज लिखना नहीं चाहते हैं तो कोड को अनजाने में नहीं छोड़ना है?

नहीं। घोस्टडोक द्वारा निर्मित प्रलेखन बॉयलरप्लेट है (एक आईडीई में एक नया ओओ वर्ग बनाने के समान, एक निर्माणकर्ता या कुछ के साथ वर्ग के लिए बॉयलरप्लेट बनाता है)। प्रलेखन का उपयोगी हिस्सा वह है जो बॉयलरप्लेट को जोड़ने के बाद होगा।

आप जबकि करने के लिए है आपके कार्यस्थल पर सब कुछ दस्तावेज़, ऐसा लगता है अपने coleagues इसके चारों ओर सही रास्ता मिल गया: सिर्फ नाटक।


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

14
@David Hammen, मैं अच्छी तरह से जानता हूं कि एक परियोजना पर्याप्त दस्तावेज नहीं होने के कारण मर सकती है। इसके अलावा, "सिर्फ दिखावा" ओपी के लिए एक सलाह नहीं थी, लेकिन ओपी के सहयोगियों की आलोचना थी।
utnapistim 14

73

सांख्यिकीय रूप से टाइप की गई भाषा में, जावदोक-शैली का प्रलेखन लेखकों के लिए नहीं है, यह उपभोक्ताओं के लिए है। ऑटोजेनरेशन केवल लेखकों के लिए अन्य लोगों के उपभोग के लिए प्रलेखन को बनाए रखना आसान बनाता है।

यदि आप वैधानिक रूप से टाइप की गई भाषा का उपयोग कर रहे हैं और तीसरे पक्ष के उपभोग के लिए लाइब्रेरी नहीं लिख रहे हैं, तो ऑटोगेनेरेशन आपको अधिक नहीं खरीदता है, और मेरे अनुभव में शायद ही कभी इसका उपयोग किया जाता है। यदि आप गतिशील रूप से टाइप की गई भाषा का उपयोग कर रहे हैं, तो javadoc- शैली का प्रलेखन अक्सर केवल आंतरिक उपयोग के लिए, यहां तक ​​कि दस्तावेज़ों को टाइप करने के लिए उपयोग किया जाता है, लेकिन autogeneration प्रकारों को नहीं जानता है, इसलिए यह सब बचाता है आप बायलरप्लेट की मैन्युअल कॉपी से बच रहे हैं।

किसी भी तरह से, एक तैयार उत्पाद का उत्पादन करने के रूप में autogeneration के बारे में मत सोचो। इसे आप के लिए बॉयलरप्लेट के उत्पादन के रूप में सोचो, इसलिए आपके द्वारा मैन्युअल रूप से किए गए कोई भी परिवर्तन महत्वपूर्ण हैं।


26

क्या ऑटो-जनरेट कोड प्रलेखन के लिए कोई तार्किक कारण है?

किसके नजरिए से?

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

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

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


1
सिवाय इसके कि मेरे उदाहरण से पता चलता है कि घोस्टडॉक सभ्य प्रलेखन उत्पन्न करने में विफल हो सकता है, तब भी जब नाम वास्तव में बुरा नहीं है।
Jez

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

3
@ जेज - यकीन है, यह सिर्फ एक गंध है। कभी-कभी यह सही है, कभी-कभी यह नहीं है।
तेलस्टिन

1
एक सवाल का जवाब दे रहे हैं। नाइस;)
पियरे अरलाड

@Jez आपने कहा कि नाम वास्तव में उतना बुरा नहीं है। हालाँकि, RichTextSelection_Changedविधि का उपयोग करना आसान हो सकता है यदि यह चयन वस्तु से संबंधित है, और यदि इसका नाम इसके पैरामीटर के प्रकार के नाम पर नहीं है। यद्यपि टेलस्टाइन ने कहा, यह सिर्फ एक गंध है, जो आपके डिजाइन के लिए सही या गलत हो सकता है, और मेरे सुझाव शायद घोस्टडाउन आउटपुट में सुधार नहीं करेंगे।
dcorking

21

संपादित करें : मैंने मूल प्रश्न को गलत समझा; हालांकि मुझे लगता है कि प्रलेखन (यानी गैर-कोड दस्तावेज़ ) अत्यंत मूल्यवान हो सकते हैं (नीचे Doxygen के बारे में मूल उत्तर देखें), ऑटो-जनरेटिंग टिप्पणियां (जो कि वास्तव में घोस्टडॉक कुछ करती है) मुझे पागल लगती है। मुझे समझ नहीं आ रहा है कि कोई भी इस कार्यक्रम की अपेक्षा क्यों करेगा कि वह बिना स्रोत वाले स्रोत कोड को पढ़ सकेगा और ऐसी टिप्पणियाँ लिख सकेगा जो वास्तव में इसे स्पष्ट करेगी।

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

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

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


मूल उत्तर: क्यों स्वचालित प्रलेखन निष्कर्षण और स्वरूपण एक अच्छा विचार है

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

इसलिए हमारे Doxygen के उपयोग का ध्यान कोड से जानकारी निकालना नहीं है, बल्कि स्रोत कोड के प्रलेखन को यथासंभव रखने के लिए स्रोत कोड से ही है।

इससे हमें एक एकल टूल का उपयोग करने की अनुमति मिलती है, जो "संचालन के सिद्धांत" को बनाने के लिए हमारे संपूर्ण कोडबेस और "रिलीज नोट्स" के कई सेटों का वर्णन करता है जो सॉफ़्टवेयर उत्पाद का वर्णन करते हैं लेकिन वास्तव में इसमें कोई वास्तविक "कोड प्रलेखन" नहीं होता है सामान्य ज्ञान।

क्यों हमें अपने कोड के व्यवहार के गैर-स्रोत-कोड प्रलेखन की आवश्यकता होगी, इसके दो कारण हैं:

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

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


क्या Doxygen का उत्पादन अंग्रेजी में होता है, या यह केवल डॉकर स्ट्रिंग्स को प्रारूपित करता है जो पहले से ही अंग्रेजी में लिखे गए हैं?
dcorking

3
@dcorking उत्तरार्द्ध, हालांकि यह कोड की स्थिर संरचना के अनुसार सब कुछ व्यवस्थित करने की कोशिश करता है और हर जगह स्वचालित हाइपरलिंक प्रदान करता है (और ये अक्सर गलत होते हैं)।
काइल स्ट्रैंड

2
दरअसल, यह दोनों है। doxygen कोड और doxygen टिप्पणियों को पार्स करता है। वर्ग के नाम, मूल वर्ग के नाम, डेटा सदस्य के नाम, फ़ंक्शन के नाम, तर्क प्रकार और नाम, वापसी प्रकार: ये सभी पार्स कोड से आते हैं। उन बातों का क्या मतलब है, जो कि डॉक्सीजन टिप्पणियों से आई हैं। Doxygen यह शिकायत करता है कि क्या doxygen टिप्पणी में एक \ param के रूप में निर्दिष्ट कोई आइटम एक तर्क नहीं है, और इसे अनिर्दिष्ट वस्तुओं के बारे में शिकायत करने के लिए बनाया जा सकता है। इन न्यूनतम जांचों के अलावा, टिप्पणी बनाम कोड बेमेल की समस्या अभी भी एक संभावना है। उसने कहा, मुझे डॉक्सीजन से प्यार है। यह एपीआई को हाथ से लिखने से बहुत बेहतर है।
डेविड हैमेन 15

@David Hammen तो Doxygen वाक्यों को उत्पन्न करता है, जैसे "पाठ चयन बदल जाता है?" (मैंने कई वर्षों में इसका उपयोग नहीं किया है, और उन शुरुआती संस्करणों ने अंग्रेजी को उत्पन्न नहीं किया है जो मुझे याद है।)
12:11

@dcorking _ मुझे इस बात से कोई मतलब नहीं है। Doxygen प्रोग्रामर के दिमाग को नहीं पढ़ सकता है। Doxygen क्या कर सकता है, इसके एक अच्छे उदाहरण के लिए, Eigen के लिए यह शीर्ष-स्तरीय पृष्ठ देखें , न कि लोकप्रिय C ++ वैज्ञानिक कंप्यूटिंग पैकेज। खोजना! आप कुछ दस्तावेज देख सकते हैं जो स्पष्ट रूप से मनुष्यों द्वारा लिखे गए हैं, अन्य जो विशुद्ध रूप से ऑटो उत्पन्न होते हैं, फिर भी अन्य जो मानव-लिखित और ऑटो उत्पन्न का मिश्रण है। अगर कहा जाए, तो डॉक्सिज़न स्वचालित रूप से फैन-इन (जो इस फ़ंक्शन को संदर्भित करता है) और फ़ैन-आउट (यह फ़ंक्शन कॉल क्या करता है) उत्पन्न करेगा।
डेविड हैमेन

7

निश्चित रूप से, स्वचालित प्रलेखन विशेष रूप से सहायक होता है जब यह कोड लेखकों द्वारा लिखे गए व्यावहारिक, उपयुक्त विवरणों को पुन: पेश कर सकता है। अन्यथा, यह सिर्फ एक गौरवशाली स्वचालित फ़ॉर्मेटर है।

लेकिन स्वरूपण बेकार नहीं है। एक टकटकी में एक लार्ज घटक के सार्वजनिक तरीकों को खोजने में सक्षम होने के लिए मूल्य है, सॉर्ट किया गया है, और पूरा होने की गारंटी है। यदि आपको एक frobnickम्यूटेटर की आवश्यकता है , और यह वहां नहीं है, तो आप जानते हैं कि यह स्रोत कोड के माध्यम से वैडिंग के बिना नहीं है। (नकारात्मक परिणामों का भी मूल्य होता है: आप जानते हैं कि आपको कुछ करना है, और आपके पास इसे करने के लिए अधिक समय है क्योंकि आपको वेड नहीं करना है।)

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


4
मैं "स्रोत कोड के माध्यम से वैडिंग" के बारे में आपकी टिप्पणी को नहीं समझता। निश्चित रूप से दोनों मामलों में, आप 'फ्रोबनिक म्यूटेटर' या 'फ्रोबनिकम्यूटेटर' जैसी किसी चीज की खोज करेंगे ... ऑटो-जनरेट किए गए डॉक्यूमेंटेशन से कैसे मदद मिलती है?
Jez

2
@Jez को उन सभी लोगों के बारे में जानने की ज़रूरत नहीं है जो म्यूटर्स के बारे में जानते frobnickहैं, एक सॉफ्टवेयर देव बनने जा रहे हैं; वे यह नहीं समझ सकते कि स्रोत कोड को कैसे देखें (जिसे grep/ cscope/ ack/ etc के साथ परिचितता की आवश्यकता हो सकती है ), और यहां तक ​​कि अगर वे सही फ़ाइल ढूंढते हैं, तो उन्हें वास्तविक स्रोत कोड पढ़ने में आसान नहीं लगता, भले ही वह अच्छी तरह से टिप्पणी की गई हो एक एसडब्ल्यू परिप्रेक्ष्य से। एक इंडेक्स के माध्यम से देखने या खोज बार में टाइप करने की क्षमता, फिर पाठ के माध्यम से ब्राउज़ करें जो ऐसा दिखता है कि यह वेबपेज का हिस्सा है, काफी मूल्यवान हो सकता है।
काइल स्ट्रैंड

4
@Jez, गैर-प्रोग्रामर या कम से कम गैर-विशेषज्ञों के लिए एक मानव पठनीय दस्तावेज़ निरर्थक नहीं है। यह आवश्यक है। स्पष्ट रूप से व्यक्त करने के लिए क्या कोड है इरादा करने के लिए। किसी भी कोड को लिखने से पहले उसे पकड़ना होगा। और समस्या के ज्ञान के रूप में अपडेट किया गया और समाधान (एस) बढ़ता है। उद्धृत किए गए उदाहरण रखने योग्य नहीं हैं, लेकिन 'स्रोत कोड में इसके सभी' बच्चे को स्नान के पानी से बाहर निकाल रहे हैं। "ऑटो पीढ़ी" बुरा लगता है, "कोई डॉक्स नहीं, बस स्रोत पढ़ें" बदतर है। इसकी तरह जब आप किसी से पूछते हैं, "वह क्या करता है?" और वे कहते हैं, "हम्म, इसे चलाने और पता लगाने दो!"
बिल IV

6

इस रूप में यह बेकार से भी बदतर है, लेकिन केवल इसलिए कि यह अकेले सार्वजनिक हस्ताक्षर पर निर्भर करता है (जो कि, Javadoc के मामले में, एपीआई डॉक पढ़ने वाले किसी भी व्यक्ति को वैसे भी दिखाई देता है)।

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

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

उस अनुभव के आधार पर प्रश्न का उत्तर है: हाँ, लेकिन हमें बहुत चालाक उपकरण चाहिए।

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

लेकिन अगर लक्षित दर्शक उसी उत्पाद पर काम करने वाले अन्य डेवलपर्स हैं, तो स्वचालित रूप से कार्यान्वयन विवरणों पर जानकारी जोड़ते हैं, जैसे कि एक निश्चित क्षेत्र को संशोधित करने या पढ़ने के तरीके दोनों स्वीकार्य और काफी उपयोगी हैं।


6

मैं अन्य वातावरण के बारे में नहीं जानता, लेकिन जब यह बड़े (अक्सर खुले स्रोत) PHP परियोजनाओं की बात आती है, जो अन्य लोगों ने लिखा है, तो phpXRef एक निरपेक्ष जीवन रक्षक है (विशेषकर यदि डॉक्टर को ऑनलाइन रखा गया है और Google इसे अनुक्रमित कर सकता है)।

यहां तक ​​कि एक बुरी तरह से टिप्पणी की गई परियोजना कम से कम मुझे यह ट्रैक करने में मदद कर सकती है कि चीजें कहां परिभाषित की गई हैं और उनका उपयोग कहां किया जाता है (उदाहरण के लिए जब रिफैक्टिंग)।

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

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

वे स्वयं-समान टिप्पणी ब्लॉक भी इनलाइन पूरा करने में "मदद" पाठ का निर्माण करते हैं, इसलिए मैं ठीक वही देख सकता हूं जो मैं (दूसरे कोडर द्वारा) फ़ंक्शन कॉल लिख रहा था। यह मेरे लिए एक बड़े पैमाने पर उत्पादकता को बढ़ावा देने वाला है (विशेष रूप से उन दुर्लभ मामलों में जहां कुछ अन्य सहायक डेवलपर ने "अच्छाई के लिए / do-not X" के लिए लिखा है - जो बहुत दर्द को बचा सकता है।

मैं पर्याप्त तनाव नहीं कर सकता कि यह जटिल (और अक्सर बुरी तरह से नामित) PHP परियोजनाओं और कम अक्सर उपयोग किए जाने वाले तरीकों में तर्क क्रम में निर्दिष्ट इनपुट प्रकारों के लिए कितना उपयोगी है। यहां तक ​​कि अपने स्वयं के कोड के साथ, मैं हमेशा याद नहीं रख सकता कि मैंने एक उम्र में जो कुछ नहीं छुआ है, उसके लिए मैंने क्या तर्क दिए हैं।

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

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

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

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

तो, कारणों में शामिल हैं:

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

इसके अलावा, एक बटन के स्पर्श में नुकीले बालों वाले मालिकों को खुश रखने के मूल्य को कम मत समझो।

संक्षेप में "ऑटो प्रलेखन टिप्पणियाँ" मेरी कोडिंग आदतों के लिए महत्वपूर्ण हैं। मुझे यकीन है कि बहुत से लोग हैं जो सोचते हैं कि यह लंगड़ा है, लेकिन मैं यह भी सुनिश्चित करता हूं कि कुछ निष्पक्ष लोग हैं जो वास्तव में जानते हैं कि मैं क्या कह रहा हूं। मुझे नहीं पता कि मैं phpXRef (और मेरी पसंदीदा आईडीई) की खोज करने से पहले कैसे बच गया।


4

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


3

C # -dveloper के रूप में, मैं Stylecop का उपयोग करता हूं, जो सभी वर्गों, विधियों आदि के लिए टिप्पणियों को अनिवार्य करता है। मैं इन टिप्पणियों का उपयोग एक टूल का उपयोग करके करता हूं। अधिकांश समय, टूल द्वारा उत्पन्न टिप्पणियां पर्याप्त हैं और ऑब्जेक्ट के नाम से समझी जा सकती हैं, जैसे कि एक व्यक्ति वर्ग और आईडी फ़ील्ड।

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

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


हालांकि स्टाइलकॉप नियम को निष्क्रिय किया जा सकता है। नियम SA1600 अगर मैं गलत नहीं हूँ।
Jez

@ जेजे हां, लेकिन मैंने इसके खिलाफ फैसला किया। यह बहुत सारी अनावश्यक टिप्पणियों की ओर जाता है, लेकिन यह मुझे आवश्यक टिप्पणियां लिखने के लिए भी प्रोत्साहित करता है। यह सही नहीं है, लेकिन क्या है? मैंने जो अक्षम किया वह वर्तनी जाँच था, जो स्पष्ट रूप से बुनियादी आईटी शब्दों को भी नहीं जानता है
क्रिश्चियन सॉयर

3

टाटोलॉजी से बचें

केवल समय आप कोड के लिए दस्तावेज़ के किसी भी प्रकार की आवश्यकता चाहिए समझाने के लिए है क्यों एक विधि / समारोह कुछ कर रहा है, नाम के लिए पर्याप्त होना चाहिए क्या यह कर रही है।

यदि आप कुछ ऐसा कर रहे हैं जो मुहावरेदार नहीं है, या कम से कम विस्मय के सिद्धांत का उल्लंघन करता है तो प्रलेखन की आवश्यकता है।

ऑटो जेनरेटेड डॉक्यूमेंटेशन जो कि सूचना के आउटपुट के लिए सिर्फ एक फॉर्मेटर है, आपके कोड के उपभोक्ताओं द्वारा लगभग मांग की जाती है। Javadoc यह बहुत अच्छी तरह से करता है।

प्रत्येक वस्तु को मैन्युअल रूप से प्रलेखित नहीं किया जाना चाहिए

गेटएक्सएक्सएक्स / सेटएक्सएक्सएक्स तरीकों जैसी चीजें स्व-व्याख्यात्मक होनी चाहिए, इसलिए ऑटो-जनरेटिंग प्रलेखन जो आपको पता है कि वे मौजूद हैं, अच्छी तरह से प्राप्त करेंगे।


2

कोड प्रलेखन, कम से कम "स्वचालित" प्रकार, आवेदन को समझने की कोशिश कर रहे लोगों के लिए कम से कम सामान्य भाजक का प्रतिनिधित्व करता है।

सबसे परिष्कृत उपयोगकर्ता स्वचालित कोड प्रलेखन की सराहना नहीं करेंगे। उनके पास बहुत अधिक "लक्षित" प्रलेखन होगा जो उन्हें बताता है कि उन्हें क्या (थोड़ा) बताया जाना चाहिए।

कम से कम परिष्कृत उपयोगकर्ता इसके विपरीत कारण की सराहना नहीं करेंगे; वे इसे वैसे भी नहीं समझेंगे।

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


0

"क्यों डॉक्स जेनरेट करें" का सरल उत्तर केवल MSDN दिखा कर दिया जा सकता है।

एक ऐसे प्रोग्राम को लिखने की कोशिश करें जो किसी भी पुस्तकालय का उपयोग करता है जहां कोई एपीआई प्रलेखन नहीं है। यह एक बुरा सपना होगा। MSDN एक प्रकार का डॉक्टर है जो स्रोत कोड और टिप्पणियों से उत्पन्न हो सकता है और डेवलपर्स के लिए एक आवश्यक संसाधन बना सकता है।

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

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

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

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