2010-12-17 14 views
10

मैं एक बड़ी कंपनी से मालिकाना भाषा के लिए एक स्थिर कोड विश्लेषण उपकरण को समझने और बनाने की प्रक्रिया में हूं। ऐसा करने का कारण, मुझे एक बड़े कोड बेस की समीक्षा करनी है, और एक स्थिर कोड विश्लेषण बहुत मदद करेगा और उनके पास अब तक भाषा के लिए कोई नहीं है।स्थिर कोड विश्लेषण उपकरण कैसे बनाएं?

मैं जानना चाहता हूं कि कोई स्थिर कोड विश्लेषण टूल बनाने के बारे में कैसे जाता है, उदाहरण के लिए सी

के लिए लिंट या स्प्लिंट कोई भी किताबें, लेख, ब्लॉग, साइट..एटीसी मदद करेगा।

धन्यवाद।

+1

यह एक बहुत ही व्यापक सवाल है, इसलिए मैं एक समान व्यापक टिप्पणी दूंगा - भूलें कि चावल के प्रमेय के कारण आप क्या विश्लेषण नहीं कर सकते हैं। – Robert

+0

आप क्या विश्लेषण करना चाहते हैं? –

+0

@Noon, मैं गलतियों के लिए विश्लेषण करना चाहता हूं। – codeanalyser

उत्तर

1
  1. जाहिर है आपको भाषा के लिए एक पार्सर चाहिए। एक अच्छा उच्च स्तर एएसटी उपयोगी है।
  2. आपको भाषा में "गलतियों" का एक सेट गिनने की आवश्यकता है। प्रश्न में भाषा के बारे में और जानने के बिना, हम यहां मदद नहीं कर सकते हैं। उदाहरण: सी, इत्यादि में आवंटित पॉइंटर्स
  3. एएसटी को # 2 में गलतियों के साथ संयोजित करें।
+0

एएसटी का उपयोग करके गलतियों को कैसे ढूंढता है। – codeanalyser

+1

@codeanalyser: आप बहुत ज्यादा नहीं करते (या आप छोटे लोगों का पीछा करते हैं)। किसी भी तरह के दिलचस्प विश्लेषण के लिए आपको केवल एएसटी की तुलना में बहुत कुछ चाहिए। Www.semanticdesigns.com/Products/DMS/LifeAfterParsing.html देखें। –

3

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

सभी नींव मशीनरी का निर्माण वास्तव में बहुत कठिन है, और यह आपको अपना विशिष्ट कार्य करने में मदद नहीं करता है। लोग प्रत्येक कोड के लिए ऑपरेटिंग सिस्टम नहीं लिखते हैं; आपको सभी बुनियादी ढांचे का निर्माण क्यों करना चाहिए? एक ओएस की तरह, यह बेहतर है कि आप केवल अच्छे बुनियादी ढांचे को हासिल करें।

लोग आपको लेक्स और yacc के बारे में बताएंगे। ऐसा लगता है कि आप ओएस के वास्तविक समय के सामान्य भाग का उपयोग करने का सुझाव देते हैं; उपयोगी, लेकिन वास्तव में आपको आवश्यक सभी बुनियादी ढांचे से दूर।

हमारे DMS Software Reengineering Toolkit सभी आवश्यक अव्यवस्था प्रदान करता है। इसका उपयोग many language front ends के साथ-साथ many tools को ऐसी भाषाओं के लिए परिभाषित करने के लिए किया गया है।

इस तरह के बुनियादी ढांचे से आप अपेक्षाकृत तेज़ी से अपनी विशिष्ट गैर मानक भाषा को परिभाषित कर सकते हैं, और फिर अपने विशेष चेक कोडिंग के अपने कार्य को प्राप्त कर सकते हैं।

+0

DMSToolkit मुझे सूट नामक एक अन्य भाषा मैनिपुलेशन ढांचे की याद दिलाता है (http://sable.github.io/soot/)। डीएमएसटीयूल्किट की तरह, सूट कॉल फ्लो ग्राफ, कंट्रोल फ्लो ग्राफ इत्यादि का भी खुलासा करता है और इसके बारे में सबसे दिलचस्प बात इंटरमीडिएट प्रतिनिधि का संपर्क है। –

+1

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

+0

@ बैक्सटर: हाँ मैं उस पर आपसे सहमत हूं, सूट विशेष रूप से जावा के लिए है। बस यह उपकरण डीएमएस के साथ बहुत समान था, हालांकि मैं इसका उल्लेख करने लायक हूं। –

4

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन उत्तर वास्तव में संतोषजनक नहीं लगते हैं। This article स्थिर विश्लेषण उपकरण के पीछे प्रौद्योगिकी के लिए एक बहुत अच्छा परिचय है, और उदाहरणों के कई लिंक हैं।

ब्रायन चेस्ट और जैकब वेस्ट द्वारा एक अच्छी पुस्तक "स्टेटिक विश्लेषण के साथ सुरक्षित प्रोग्रामिंग" है।

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