2010-11-18 4 views
5

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

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

मुझे रूपरेखा है कि यह कैसे काम करेगा करते हैं:

  • पहले, संदर्भ के साथ ग्रेप की तरह एक सा है, यह "दिलचस्प" एक नियमित अभिव्यक्ति के आधार पर कोड का हिस्सा का एक सेट इकट्ठा होगा, इनमें से हजारों स्थान हो सकते हैं।
  • फिर, मुझे भाग के माध्यम से फिर से चलने दें, प्रत्येक को दिलचस्प या अनिच्छुक के रूप में चिह्नित करें। यह वास्तविक परिवर्तन स्थानों पर संभावित परिवर्तन स्थानों को कम करने के मैन्युअल नौकरी के मूल रूप से जितना संभव हो सके स्वचालित रूप से स्वचालित कर रहा है।
  • अंत में, मुझे सभी चयनित दिलचस्प स्थानों पर एक परिवर्तन (उदा। Sed-style substitution) लागू करने दें।

क्या यह उपकरण पहले से मौजूद है?

मैं इस उपकरण को स्वयं लिखने की सोच रहा हूं अगर मुझे पूर्व-मौजूदा नहीं मिल रहा है।

+2

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

उत्तर

1

यह वही है Coccinelle करने के लिए लिखा गया था के समान लगता है, हालांकि यह सिर्फ सी

+0

यह दिलचस्प है, लेकिन मुझे लगता है कि कोकिनेल का दृष्टिकोण शायद व्यावहारिक होने के लिए भी संरचित है; दूसरे शब्दों में, यह बहुत अधिक स्वचालित करने की कोशिश करता है, लेकिन जटिलता दूसरी तरफ अर्थपूर्ण पैच लिखने में खुलती है। चूंकि परिवर्तन सेट को पुन: प्रयोज्य करने की आवश्यकता नहीं है, मुझे लगता है कि व्यावहारिक एक-ऑफ मैन्युअल विकल्प बनाना बेहतर है जहां यह समझ में आता है। –

1

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

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

+0

मेरे पास जो टूल है, वह कुछ पॉलिश उत्पाद के बजाए (टूल-सृजन + रिफैक्टरिंग) के कुल कार्य समय को कम करने के लिए 200-लाइन हैक-जॉब होगा। क्वेरी-प्रतिस्थापन-नियमित-अभिव्यक्ति sed के आदेश से कहीं अधिक नहीं है; पहले पास के रूप में, मेरा टूल संभावित रूप से बड़े टेक्स्ट फ़ाइल में संशोधित करने के लिए भाग निकालने की संभावना होगी, जो हाथ से नीचे दबाया जाएगा, फिर sed, awk आदि के साथ संशोधित किया जाएगा, फिर मूल के साथ पुन: एकीकृत किया जाएगा। –

1

दिलचस्प लगता है। मैंने इस तरह के विचार के साथ भी खेला है लेकिन कमांड लाइन स्क्रिप्टिंग से दूर नहीं गया है। रिफैक्टरिंग तैयार करने के लिए मेरे दृष्टिकोण है:

  1. कोड का एक chunc पुनर्संशोधित
  2. समान कोड/पैटर्न और पाने की इस प्रकार के लिए स्थान की एक सूची बना लिए रेग-exp/लिपि उत्पन्न होने के लिए खोजें पैटर्न

उत्पादन फ़ाइल जीएनयू या एमएस उत्पादन प्रारूप में रेखाएं हों (जैसे: फ़ाइल: लाइन संदेश) तो यह (vim -q के) किसी भी आईडीई में लोड किया जा सकता और कोड हिस्सा पाया जा सकता है आसानी से "त्रुटि संदेश पर डबल-क्लिक्सिंग द्वारा s "।

वैसे, अगर कोड इंडेंट द्वारा एकीकृत किया गया था, तो grep को आसान बनाना आसान है।

1

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

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

यदि आप इसे अधिक विश्वसनीय आधार पर स्वचालित करना चाहते हैं, तो आपको सटीक खोज और प्रतिस्थापन की आवश्यकता है। हमारे DMS Software Reengineering Toolkit एक प्रोग्राम रूपांतरण उपकरण है जो जावा, सी ++, सी, सी #, कोबोल, सहित कई व्यापक रूप से उपयोग की जाने वाली भाषाओं के लिए ऐसा कर सकता है (आपने यह नहीं कहा कि आप कौन सी कर रहे थे) ... डीएमएस भी पूरी तरह से लिखित हो सकता है कार्यों के कस्टम सेट।

+0

ठीक है, मैं इसे 200 से कम लाइनों में कर सकता हूं, लेकिन यह संक्षेप में लिखने के लिए क्रमिक रूप से कठिन हो जाता है, और इसमें अधिक मैन्युअल कदम शामिल हैं :) - grep -n -C 10 के आउटपुट की समीक्षा एक टेक्स्ट फ़ाइल पर रीडायरेक्ट की गई, फिर पोस्ट-प्रोसेस किया गया एक diff में, और अंत में पैच के साथ लागू किया। लेकिन इस तरह के वर्कफ़्लो के आसपास डिज़ाइन किया गया एक दृश्य इंटरफ़ेस - और यह प्रकृति द्वारा वर्कफ़्लो समस्या है - जीवन को अधिक आसान बना देगा। इसे स्वचालित करना बिंदु नहीं है; इसके साथ पूरा मुद्दा प्रत्येक व्यक्तिगत मामले की परीक्षा की दोहराव है। –

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

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