2010-04-17 15 views
8

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

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

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

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

उत्तर

6

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

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

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

11

पुस्तक Object-Oriented Reengineering Patterns इस विस्तार से संबंधित है। दुर्भाग्यवश कोई चांदी बुलेट संलग्न नहीं है :-)

हालांकि, यह विरासत कोड लेने के लिए बहुत उपयोगी तकनीकों की सूची देता है। संक्षिप्त

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

बस माइकल्स अच्छा आईडीई के उल्लेख में मदद कर सकते हैं, जिस पर विस्तृत करने के लिए है आप:

मैं निम्नलिखित ग्रहण सुविधाएं एक बहुत का उपयोग करें:

  • Shift-F2 जब कर्सर एक पहचानकर्ता में रखा गया है लाना उस पहचानकर्ता के लिए जावाडोक है, यदि कोई हो। नेविगेट करने के लिए अच्छा है।
  • पहचानकर्ता पर माउस को घुमाकर उसमें जावाडोक के साथ एक बॉक्स लाता है, यदि कोई हो। लिखते समय याद दिलाने के लिए अच्छा एक विधि कॉल
  • घोषणा दृश्य उस स्रोत को दिखाता है जहां कर्सर रखा गया कीवर्ड परिभाषित किया गया है। कर्सर चले जाने पर यह अद्यतन किया जाता है।
  • F3 वर्तमान पहचानकर्ता की परिभाषा पर जाता है।
  • एक पहचानकर्ता पर Ctrl-T पॉपअप में सभी सबक्लास और कार्यान्वयन दिखाता है। इंटरफेस पर काम करते समय बहुत उपयोगी।
  • एक पहचानकर्ता पर एफ 4 एक पैनल में उस पहचानकर्ता के कार्यान्वयन पदानुक्रम को लाता है, जिसे नेविगेट किया जा सकता है। चीजें जुड़े हुए हैं सीखने के लिए बहुत उपयोगी है। इसमें कक्षाएं और इंटरफेस दोनों शामिल हैं।
1

EclipseUML ओमंडो सर्वश्रेष्ठ जावा रिवर्स इंजीनियरिंग उपकरण है। यह सभी जावा कोड, सभी पैकेजों और इंटरफ़ेस के साथ क्लास इंटरैक्शन को उलट देता है यदि एक ही पैकेज में नहीं है। बस कमाल। तुम भी पलट सकता है: - .class - हाइबरनेट एनोटेशन - जेपीए एनोटेशन

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

0

मैं पूरे यूएमएल (जावा के साथ रिवर्स इंजीनियरिंग समेत) के लिए एंटरप्राइज़ आर्किटेक्ट का उपयोग करता हूं और यह पूरी तरह से काम करता है।

1

उच्च स्तरीय आर्किटेक्चर निकालने नहीं करता है, लेकिन यह आपके जावा कोड के चारों ओर चढ़ना आसान बनाता है: हमारे Java Source Code Browser। यह स्रोत कोड (और वर्ग वर्गों का समर्थन करता है) पढ़ता है और जावाडोक शैली दस्तावेज के साथ स्रोत टेक्स्ट द्वि-दिशात्मक रूप से हाइपरलिंक उत्पन्न करता है। (मैं इसके पीछे प्रिंसिपल में से एक हूं)।

+0

यह एक? http://www.semdesigns.com/Products/Formatters/JavaBrowser.html – TofuBeer

+0

@TofuBeer: हाँ, क्षमा करें, मैंने लिंक को बंगला दिया; उत्तर में भी तय किया गया है। –

+0

मैं लिंक संपादित करने जा रहा था ... लेकिन सोचा कि मुझे यह सुनिश्चित करना चाहिए कि यह सही था :-) – TofuBeer

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