2010-12-02 7 views
8

मुझे एहसास हुआ है कि एक प्रोग्रामिंग छात्र के रूप में मेरी सबसे बड़ी कमजोरी अन्य लोगों के कोड को समझने की मेरी खराब क्षमता है।अपरिचित कोड की समझ में सुधार करने के लिए उपकरण और तकनीकें?

मुझे 'पाठ्यपुस्तक' कोड, या स्पष्ट रूप से टिप्पणी कोड के साथ कोई परेशानी नहीं है, लेकिन जब कुछ सौ लाइनों का एक कार्यक्रम दिया जाता है, जिसमें एक दर्जन या उससे अलग कार्य होते हैं और कोई टिप्पणी नहीं होती है, तो मुझे यह भी मुश्किल लगता है शुरू।

मुझे पता है कि इस प्रकार का कोड मुझे अपने करियर में होने की संभावना अधिक है, और मुझे लगता है कि खराब कोड समझ कौशल मेरे लिए एक बड़ा बाधा बनने वाला है, इसलिए मैं ध्यान केंद्रित करना चाहता हूं इस क्षेत्र में अपने कौशल में सुधार करने के लिए।

आपके उपकरण में कोड समझ में सुधार करने के लिए कौन से टूल्स/तकनीकों ने मदद की है?

अपरिचित, असम्बद्ध कोड से निपटने के लिए आप कैसे हैं? क्यूं कर? आपकी तकनीक के बारे में क्या आपको मदद मिलती है?

धन्यवाद

+1

एक सभ्य डीबगर के साथ कोड के माध्यम से कदम उठाने का एक अच्छा तरीका यह है कि यह एक साथ फिट बैठता है। –

उत्तर

2

मुझे लगता है कि कॉल-ग्राफ और विरासत के पेड़ बाहर ड्राइंग अक्सर मेरे लिए काम करता है। आप किसी भी उपकरण का उपयोग कर सकते हैं जो आपके पास आसान है; मैं आमतौर पर सिर्फ एक व्हाइटबोर्ड का उपयोग करता हूं।

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

छोटा प्रारंभ करें। अपने आप से कहें: "मैं x को पूरा करना चाहता हूं, तो कोड में यह कैसे किया जाता है?" जहां x कुछ छोटा ऑपरेशन है जिसे आप ढूंढ सकते हैं। फिर, बस कुछ पता लगाने के लिए कोड का पता लगाएं कि आप ट्रेस के बाद वापस देख सकते हैं।

फिर, x चुनें और प्रक्रिया दोहराएं। हर बार जब आप ऐसा करते हैं तो कोड के लिए आपको बेहतर महसूस करना चाहिए।

जब कुछ लागू करने का समय आता है, तो आपके द्वारा पता लगाई गई चीज़ों में से एक को समान (लेकिन लगभग समान नहीं) चुनें। ऐसा करने से, आप ट्रेस-स्तरीय समझ से कार्यान्वयन-स्तर की समझ में जाते हैं।

यह उस व्यक्ति से बात करने में भी मदद करता है जिसने पहली बार कोड लिखा था। अप्रासंगिक के विस्तार की तरह जब तक आप समस्या डोमेन के बारे में थोड़ा समझ में -

2

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

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

4

विदेशी कोड

साथ परिचित codebase काफी छोटा है, तो आप कर सकते हैं यह सीधे पढ़ना प्रारंभ करें। कुछ बिंदु पर टुकड़े एक साथ गिरना शुरू हो जाएगा।

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

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

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

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

डिबगिंग विदेशी कोड

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

+0

महान बिंदु -> सफेद शोर/चक्कर से विचलित न हों। – CedricB

0

Understand एक भयानक कोड विश्लेषण उपकरण है। यह मेरे पिछले नियोक्ता (एल -3) में व्यापक उपयोग में था इसलिए मैंने इसे खरीदा जहां मैं वर्तमान में काम करता हूं।

1

मैं आपकी निराशा को समझता हूं, लेकिन ध्यान रखें कि वहां बहुत सारे बुरे कोड हैं, इसलिए अपनी ठोड़ी रखें। नहीं सभी कोड बुरा :)

इस प्रक्रिया है कि मैं का पालन करने के लिए करते हैं है: किसी भी इकाई परीक्षण के लिए

  1. नज़र के रूप में वे दस्तावेज़ होना चाहिए कि कोड क्या करना चाहिए है ...
  2. नेविगेट कोड रश/रिशेर्पर/विजुअल स्टूडियो शॉर्टकट का उपयोग कर कोड के माध्यम से - यह आपको लॉजिकल और भौतिक स्तरों के बारे में कुछ विचार बताएगा ...
  3. सामान्य पैटर्न, नामकरण सम्मेलनों और कोड शैलियों की तलाश में पहले कोड को स्कैन करें - इससे आपको टीम मानकों और शायद मूल कोडर दिमाग सेट में अंतर्दृष्टि मिलनी चाहिए ...
  4. जैसा कि मैं कोड उत्तराधिकारी के माध्यम से नेविगेट करता हूं। उपयोग की जा रही वस्तुओं का एक नोट बनाओ ... आमतौर पर पेन & पेपर ड्राइंग एक साधारण activity diagram:
  5. मैं एक सामान्य प्रविष्टि बिंदु से शुरू होता हूं, इसलिए यदि यह यूआई है, तो दृश्य से शुरू करें और अपना रास्ता बनाएं यदि आप कर सकते हैं - डेटा का उपयोग करने के लिए कोड है, अगर इसकी एक सेवा सीमा से सेवा शुरू करने और डेटा का उपयोग कोड के माध्यम से अपने तरीके से काम ... कोड के लिए
  6. देखो कि पुनर्संशोधित किया जा सकता है के माध्यम से कोड है कि पुनर्संशोधित किया जा सकता है, तो आप सीखा है कि कैसे अपने व्यवहार को बदलने के बिना यह आसान बनाने के लिए ...
  7. अभ्यास एक ही बात है कि आप समीक्षा कर रहे हैं का निर्माण, लेकिन एक अलग तरीके से देखते हैं ...
  8. के रूप में आप के माध्यम से पढ़ने अपरीक्षित कोड, तरीके यह परीक्षण योग्य बनाने के लिए के बारे में सोच ...
  9. उपयोग कोड भीड़ निदान उपकरण तरीकों कि उच्च रखरखाव जटिलता या cyclomatic जटिलता के हैं और इन क्षेत्रों पर विशेष ध्यान देना है क्योंकि संभावना खोजने के लिए, यह वह जगह है जहाँ सबसे कीड़े हैं ...

गुड लक

संबंधित मुद्दे