मौजूदा कोड आधार का दस्तावेजीकरण करने की पद्धति


35

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

मेरा प्रश्न इस प्रकार है:

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

किस विधि का उपयोग आप सही तरीके से और जल्दी से एक बड़े अनुप्रयोग के लिए करेंगे, जिसमें कोई मौजूदा इनलाइन दस्तावेज़ नहीं है, और न ही बाह्य दस्तावेज़ के लिए इनलाइन संदर्भ?


1
+1 इसे कैसे प्रबंधित किया जाए यह महत्वपूर्ण है कि इसे कैसे किया जाए।

1
अधिकांश कोड जो मैंने देखा है, प्रलेखित नहीं है। मैंने अन्य लोगों के कोड को साफ करने की कोशिश की, और इसके लिए चिल्लाया और यह मेरी वार्षिक समीक्षा पर दिखाई दिया। यदि आपके पास दुनिया में हर समय है, या वे परवाह नहीं करते हैं कि आप अपने 50 काम कैसे बिताते हैं, तो सवाल निश्चित रूप से "मुझे कैसे करना चाहिए?"। हालांकि, क्या आप सुनिश्चित हैं कि आप इसे करना चाहते हैं? बहुत कुछ कंपनी की संस्कृति पर निर्भर करता है कि वे बिक्री बढ़ाने के लिए कितने बेताब हैं, वे सॉफ्टवेयर व्यवसाय को कितनी अच्छी तरह समझते हैं, ... वे किस भाषा और उपकरणों का उपयोग करते हैं। C # के लिए एक निफ्टी टूल है जिसे StyleCop और साथ ही घोस्टडॉक कहा जाता है। उपकरण मौजूद हैं लेकिन समय दुर्लभ है।
जॉब

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

जवाबों:


18

दस्तावेज़ीकरण विरासत कोड-बेस

मैं विरासत कोड-ठिकानों के साथ स्काउट नियम का पालन ​​करने की अत्यधिक सलाह दूंगा। स्वतंत्र रूप से उस पर काम करने के लिए एक विरासत परियोजना का दस्तावेजीकरण करने की कोशिश सिर्फ कभी नहीं होगी।

इन-कोड प्रलेखन

सबसे महत्वपूर्ण बात यह है कि आपके चुने हुए विकास के माहौल में प्रलेखन सुविधाओं का उपयोग करना है, इसलिए इसका अर्थ है कि python के लिए pydoc , जावा में javadoc या C # में xml टिप्पणियाँ । ये कोड लिखने के साथ ही प्रलेखन लिखना आसान बनाते हैं।

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

प्रलेखन के रूप में परीक्षण

एक अन्य महत्वपूर्ण पहलू अच्छा एकीकरण और इकाई परीक्षण है।

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

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

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

उच्च स्तरीय प्रलेखन

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

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

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


4
लड़के-स्काउट के लिए +1, लेकिन और अधिक क्योंकि आप परीक्षणों का उल्लेख करने वाले एकमात्र व्यक्ति हैं। टेस्ट कोड के बारे में आपकी मान्यताओं को मान्य करते हैं, डेवलपर्स के लिए लिंगुआ फ्रेंका हैं और कभी भी सिंक से बाहर नहीं निकलते हैं (बशर्ते आप उन्हें पास करते रहें)।
इयरकैम

16

टेढ़ा प्रश्न। मूल रूप से, मैं "रीफैक्टरिंग" विधि का उपयोग करूंगा, जिसे मैं "कोड को छूने, इसे दस्तावेज़ करने" के रूप में लिखूंगा।

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

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

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


क्या आप फीचर बहाव के बारे में अधिक बता सकते हैं? मैं समझता हूं कि यह प्रलेखन के लिए घातक है; चूंकि दस्तावेज़ और सॉफ़्टवेयर के विचलन की संभावना है। लेकिन क्या फीचर बहाव कुछ ऐसा है जिसे टाला जाना चाहिए? सकारात्मक पक्ष यह है कि सॉफ्टवेयर अपनी बदलती आवश्यकताओं के साथ विकसित होता है। हम अपने डिजाइन को फीचर ड्रिफ्ट को ध्यान में रखते हुए बना सकते हैं: एक नीचे की वास्तुकला आर्किटेक्चर को बदलने योग्य सॉफ्टवेयर के लिए आगे बढ़ने के लिए है: उदाहरण के लिए Emacs और TeX hasbottom up archictectures। सॉफ्टवेयर के लिए फीचर बहाव के बुरे पहलू क्या हैं?
कैस्पर वैन डेन बर्ग

4

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

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

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

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


3

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


2

मैं Doxygen टिप्पणियों का उपयोग करूंगा। Doxygen के अधिक आउटपुट स्वरूप हैं जो अधिकांश अन्य मुक्त प्रारूप हैं और सीखना सरल है।

आप ऐसा करने के लिए एक ठेकेदार को काम पर रखने पर भी विचार कर सकते हैं, जैसा कि हम में से कुछ लोग इसे जीने के लिए करते हैं। हालाँकि, इस विकल्प के साथ आपको अभी भी डॉक्स की समीक्षा करने के लिए प्रतिबद्ध होना है।

एक और आम तकनीक कोड को दस्तावेज करने के लिए नए देव को सौंपना है। फिर प्रत्येक नए व्यक्ति को इसके माध्यम से जाना है क्योंकि वे गति के लिए उठते हैं। ध्यान रखें कि कुछ देव इसे मूल नहर के रूप में देखते हैं - केवल प्रत्यक्ष मामलों में आवश्यक, एलओएल।


1

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

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

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