2010-08-30 18 views
5

मैं दो सीआरसी कार्यान्वयन कैसे सत्यापित कर सकता हूं वही चेकसम उत्पन्न करेगा?सीआरसी तर्क का परीक्षण करने का सबसे अच्छा तरीका?

मैं सीआरसी के लिए विशिष्ट पद्धति मूल्यांकन पद्धति का मूल्यांकन कर रहा हूं।

+2

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

उत्तर

2

एक ही इनपुट के साथ कई यूनिट परीक्षण बनाएं जो एक-दूसरे के खिलाफ दोनों कार्यान्वयन के आउटपुट की तुलना करेंगे।

+1

मुझे यह जगह मिल गई है, लेकिन हम कैसे जान सकते हैं कि हमने सभी संभव इनपुट को कवर किया है (कम से कम एक सार्थक टुकड़ा)? मैं यहां सीआरसी की प्रकृति से संबंधित कुछ ढूंढ रहा हूं जो हमें इन परीक्षणों को इस तरह से लिखने की दिशा में इंगित कर सकता है कि प्रभावी ढंग से इनपुट रेंज को कवर किया जाए। –

+2

@ जो- विभिन्न आकारों के 20-30 यादृच्छिक इनपुट की एक श्रृंखला साबित करने के लिए पर्याप्त होनी चाहिए कि सीआरसी एल्गोरिदम बराबर आउटपुट उत्पन्न करते हैं। मैंने कभी दो कार्यान्वयन नहीं देखा है जो आउटपुट उत्पन्न करते हैं जो एक-दूसरे के "करीबी" थे; इसके बजाए, यहां तक ​​कि मामूली मतभेदों ने भी उत्पादन में बड़े बदलाव किए।ऐसा कहा जा रहा है, अगर ये घर का बना सीआरसी कार्यान्वयन हैं जो बग-फ्री नहीं हैं, तो कोडिंग बग आपके परीक्षणों के लिए समस्याएं पैदा कर सकता है। – bta

+0

मुझे पता है कि मेरी उपर्युक्त टिप्पणी "काउंटररेक्स नमूना की कमी से सबूत" है, लेकिन विचार अभी भी है। यदि कार्यान्वयन विभिन्न बहुपदों का उपयोग करते हैं, तो आपको मूल रूप से अलग-अलग परिणाम मिलेंगे। – bta

0

प्रत्येक के लिए एक यूनिट परीक्षण लिखकर जो एक ही इनपुट लेता है और अपेक्षित आउटपुट के खिलाफ सत्यापित करता है।

+0

मैं समझता हूं - यह वही है जो हम कर रहे हैं - लेकिन हम कैसे जानते हैं कि हम संभव इनपुट स्थान को समाप्त कर चुके हैं (या थकने के करीब भी आते हैं)? मैं सीआरसी विशेष रूप से काम करने के तरीके के आधार पर कुछ ढूंढ रहा हूं। –

1

सबसे पहले, यदि यह एक मानक सीआरसी कार्यान्वयन है, तो आपको नेट पर कहीं ज्ञात मूल्यों को खोजने में सक्षम होना चाहिए।

दूसरा, आप कुछ पेलोड उत्पन्न कर सकते हैं और प्रत्येक सीआरसी को पेलोड पर चला सकते हैं और जांच सकते हैं कि सीआरसी मूल्य मेल खाते हैं।

5

आप समस्या को किनारे के मामलों और यादृच्छिक नमूने में अलग कर सकते हैं।

एज मामलों। सीआरसी इनपुट, बाइट्स की संख्या और प्रत्येक बाइट के मूल्य में दो चर हैं। तो 0 से MAX_BYTE_VALUE तक के मानों के साथ 0, 1, और MAX_BYTES के सरणी बनाएं। एज केस सूट कुछ ऐसा होगा जो आप संभवतः एक जुनीट सूट में रखना चाहते हैं।

यादृच्छिक नमूने। उपरोक्त श्रेणियों का उपयोग करके, एक लूप में बाइट्स के यादृच्छिक रूप से जेनरेट किए गए सरणी पर सीआरसी चलाएं। जितना अधिक आप लूप चलाते हैं, उतना ही आप इनपुट को समाप्त करते हैं। यदि आप कंप्यूटिंग पावर पर कम हैं, तो परीक्षण को ईसी 2 पर तैनात करने पर विचार करें।

2

सीआरसी की एक अच्छी संपत्ति यह है कि पैरामीटर (बहुपद, प्रतिबिंब, प्रारंभिक अवस्था इत्यादि) के दिए गए सेट के लिए आपको मूल डेटासेट + मूल सीआरसी पर सीआरसी का पुनर्मूल्यांकन करते समय निरंतर मूल्य मिलेगा। इन स्थिरांक आम सीआरसी के लिए दस्तावेज हैं, लेकिन आप बस आँख बंद करके उन्हें दो अलग अलग यादृच्छिक डेटा सेट का उपयोग कर पैदा करते हैं और जाँच है कि वे एक ही हैं कर सकते हैं:

implementation 1: crc(rand_data_1 + crc(rand_data_1)) -> constant_1 
implementation 2: crc(rand_data_2 + crc(rand_data_2)) -> constant_2 
assert constant_1 == constant_2 

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

यह तकनीक शक्तिशाली है लेकिन यह एक स्वतंत्र परीक्षण जोड़ना भी बुद्धिमान होगा जो पैथोलॉजिकल केस के लिए ज्ञात इनपुट के आधार पर परिणाम की पुष्टि करता है जहां आपके सीआरसी कार्यान्वयन दोनों निरंतर समकक्ष जांच प्राप्त करने वाले खराब परिणामों का उत्पादन करते हैं।

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