2009-07-09 9 views
35

सभी सॉफ़्टवेयर की तरह कंपाइलर्स भी बग, तार्किक त्रुटियों के लिए प्रवण होंगे।कंपाइलर परीक्षण के मामले या एक कंपाइलर का परीक्षण कैसे करें

संकलक द्वारा उत्पन्न आउटपुट को कैसे मान्य करता है। आम तौर पर, मेरा प्रश्न है (0)

  • यह सत्यापित करने के लिए कि मशीन कोड जेनरेट सही है?

  • कैसे सुनिश्चित करना है कि मशीन उत्पन्न कोड भाषा विवरणों के आधार पर है।

  • यह भावना सिर्फ एक ओपन सोर्स प्रोजेक्ट सिर्फ "संकलक" के माध्यम से यह संकलन करने (यदि कोई भी सी में एक संकलक लिख रहा है सी में) लेने के लिए बनाने करता है। उस मामले में, यह भी तय करें कि संकलक अपेक्षा के अनुसार व्यवहार कर रहा है।

  • वहाँ कोई औपचारिक परीक्षण मामलों (साहित्य) भाषा मानक समिति है कि एक "भाषा का पालन करने" संकलक को पूरा करने के है द्वारा प्रदान की?

  • सुनिश्चित करें कि "एवेज दें" कि कंपाइलर द्वारा संकलित प्रोग्राम में समस्या एक कंपाइलर बग है और प्रोग्राम बग नहीं है।

    - कोई उदाहरण हैं, जहां मुख्य धारा compilers भ्रमित हो और कोड गलत संकलन? किसी भी साहित्य के लिए

लिंक की सराहना की जाएगी।

+0

बहुत व्यापक रूप से बंद करने के लिए वोटिंग। –

+0

एक बड़ा मालिकाना परीक्षण: http://www.solidsands.nl/supertest- सामान्य –

उत्तर

8

वहां कई कंपाइलर परीक्षण सूट हैं। हमने सी संकलक के लिए Plum Hall परीक्षण सूट का उपयोग करके कुछ भाग्य प्राप्त किया है। इसमें विशेष रूप से भाषा मानक के खिलाफ परीक्षण करने के लिए लिखे गए सी कोड का एक बड़ा सेट होता है। यह सत्यापित करता है कि संकलक भाषा वाक्यविन्यास और अर्थशास्त्र को संभाल सकता है।

+0

सब कुछ जवाब नहीं देता है लेकिन लिंक उत्कृष्ट है। धन्यवाद। –

5

सामान्य व्यवहार छोटे प्रोग्राम हैं जो प्रत्येक संकलक से एक पहलुओं का प्रदर्शन का एक बड़ा सेट बनाने के लिए है। इनमें दोनों प्रोग्राम शामिल होंगे जो संकलित करते हैं और जिन्हें नहीं करना चाहिए। सामान्य एएसएम पीछे की ओर आ रहा है चेक नहीं किया गया है, बल्कि कार्यक्रम चलाया जाता है और इसकी आउटपुट की जांच की जाती है। यह सुनिश्चित करने के लिए कि परीक्षण मामलों में कोई बग नहीं है: उन्हें 5-10 लाइनों में, जैसे छोटे बनाएं।

ये टेस्ट सूट सैकड़ों से हजारों परीक्षणों के लिए बहुत बड़े हो सकते हैं (उदाहरण के लिए: an out of date test suite for the D programming language) और आम तौर पर रिपोर्ट की गई हर बग के लिए एक या अधिक परीक्षण मामले शामिल होते हैं।

+0

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

+1

यह नहीं करता है। लेकिन यह बहुत अधिक संभावना है कि आपका कंपाइलर छोटे कार्यक्रमों में से एक को विफल कर देगा। साबित करने का कोई भी संभावित तरीका नहीं है कि एक कंपाइलर किसी दिए गए स्रोत को सही तरीके से संकलित कर सकता है - यह रोक समस्या को हल करने के बराबर होगा। –

+0

आम तौर पर आप परीक्षा के मामलों का मिश्रण प्राप्त करते हैं जो भाषा की कल्पना (ज्यादातर वास्तव में छोटे) से उत्पन्न होते हैं और बग के मामले (प्रजनन मामले के रूप में छोटे के रूप में छोटा हो सकता है)। चीजों को जानने के लिए सभी मामलों में काम करेगा, मुझे यकीन नहीं है कि आप (ज्यादातर भाषाओं के लिए) यह भी साबित कर सकते हैं कि spec अकेले ही अकेले रहने दें कि इसे सही ढंग से लागू किया गया है। – BCS

2

एक earlier question related to this for C था, लेकिन यह एक सावधानी से लिखा संकलक टेस्ट स्वीट करने के लिए नीचे आता है।

जब संकलक कोड को गलत करते हैं, तो मैंने अक्सर अपने पेशेवर करियर में पर्याप्त रूप से मारा है, धन्यवाद। यह समय के साथ कम और कम हुआ है, लेकिन इस सप्ताह I found a bug in MS C++ compilers targeting CLI

2

एफिल संकलक खुला स्रोत है और परीक्षण मामलों और आंतरिक डिजाइन अनुबंध की एक विस्तृत पुस्तकालय है। असली भाषाओं के लिए

http://dev.eiffel.com

9

अच्छा परीक्षण स्वीट बनाने और बनाए रखने के लिए महंगे हैं। एक कारण है कि the Plum Hall test suite, जो एएनएसआई   सी के लिए उद्योग मानक है, इतना खूनी महंगा है।

जॉर्ज नेकुला का translation validation एक शानदार विचार है लेकिन इसे लागू करने के लिए काफी महंगा है।

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

4

विचार एक बड़ा ओपन सोर्स प्रोजेक्ट को संकलित करने के लिए:

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

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