2010-10-13 12 views
6

सभी के लिए एक परीक्षण वातावरण बनाने के लिए,एक बहु लड़ी आवेदन

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

उत्तर

10

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

यह कहा गया है कि आप को सभी संभावित अंतर-थ्रेड समय परिदृश्यों को कवर करने के लिए विशिष्ट परीक्षण परिदृश्य तैयार कर सकते हैं, जैसा आपने किया था। इस पर विचारों के लिए (और सामान्य रूप से थ्रेड-सुरक्षित कक्षाओं को डिजाइन करने के लिए), Java Concurrency in Practice पढ़ने की अनुशंसा की जाती है।

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

+0

अनुभवी आंखें और तनाव परीक्षण - कुल +1 :) – aperkins

+0

उत्कृष्ट उत्तर। – whiskeysierra

+0

+1 पुस्तक के लिए – Jayan

1

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

+0

के लिए धन्यवाद .. धन्यवाद –

+1

यह निश्चित रूप से सामान्य रूप से उपयोगी है, लेकिन यह समवर्ती कोड का परीक्षण करते समय ज़रूरी मदद नहीं कर सकता है। यह सुनिश्चित करने के लिए अच्छा है कि अधिकांश या सभी संभव निष्पादन पथ एक थ्रेड_ के साथ _vers जाते हैं। लेकिन इसका अंतर-थ्रेड समय पर कोई प्रभाव नहीं पड़ता है, जो समवर्ती मुद्दों की जड़ है। –

+0

हम्म ... जिस बिंदु को मैं बनाने की कोशिश कर रहा था वह यह है कि अंतर-थ्रेड समय को नियंत्रित करने वाले तत्वों को यथासंभव पूर्णता में निष्पादित किया जाएगा। यदि आप यह सुनिश्चित कर सकते हैं कि किसी भी समय तनाव-परीक्षण परिदृश्य ने अपने सभी रूपों में सभी संभावित निर्णयों का उपयोग किया है, तो आप कह सकते हैं कि तनाव परीक्षण उचित रूप से डिज़ाइन किया गया है और इसलिए आपका आवेदन ठीक से सत्यापित किया गया है। इसके अलावा, मुझे यह लिंक मिल गया है जो उपयोगी हो सकता है ... (http://www.springerlink.com/content/b2jk158074366499/) – EKI

1

हम बहु थ्रेडेड परीक्षण बनाने के लिए GroboUtils का उपयोग करते हैं।

+0

बहुत बहुत धन्यवाद !! –

0

यदि आपके पास यह कोड है जिसे आप विश्वसनीय बनाने के लिए परीक्षण करने की योजना बना रहे हैं, तो इसे एकल थ्रेडेड बनाएं।

थ्रेडिंग को कोड के लिए आरक्षित किया जाना चाहिए जिसे या तो विशेष रूप से काम करने की आवश्यकता नहीं है, या परीक्षण के बिना स्थिर रूप से विश्लेषण और साबित करने के लिए पर्याप्त सरल है।

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