2009-06-05 13 views
15

क्या आपके पास कोई मल्टीथ्रेडेड एप्लिकेशन का परीक्षण करने के लिए कोई सलाह है?थ्रेड सुरक्षा के लिए परीक्षण कैसे करें

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

छिपे हुए थ्रेडिंग त्रुटियों की उच्च हिट दर प्राप्त करने के लिए कोई विचार या सर्वोत्तम अभ्यास?
(मैं .NET/C# का उपयोग कर रहा हूं)

+0

यहां एक समान प्रश्न है: http://stackoverflow.com/questions/111676/unit-testing-a-multithreaded- appplication –

+0

धन्यवाद, मेरे पास एक था चारों ओर देखो, लेकिन यह एक नहीं मिला। – tanascius

+0

ओह, डुप्लिकेट टिप्पणी। –

उत्तर

11

आप डेटा रेस, डेडलॉक्स, स्टॉलेड थ्रेड इत्यादि जैसे सभी थ्रेडिंग मुद्दों का परीक्षण करने के लिए कुछ अच्छे टूल का उपयोग कर सकते हैं intel-thread-checker एक ऐसा अच्छा टूल है।

तुम भी कोशिश कर सकते हैं, CHESS माइक्रोसॉफ्ट रिसर्च

+0

लिंक के लिए धन्यवाद - मैं अभी CHESS को देख रहा हूं - उदाहरण बहुत ही आशाजनक लग रहे हैं – tanascius

+1

CHESS निश्चित रूप से जाने का तरीका है, http://channel9.msdn.com/ पर वीडियो देखें –

5

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

अपनी घोषणाओं, ताले, अनलॉक, सेमफोर गिनती आदि को दो बार जांचें और सुनिश्चित करें कि वे समझ में आते हैं।

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

हॉल से कुछ लोगों को पकड़ो और 'हॉलवे उपयोगिता परीक्षण' करें (सॉफ़्टवेयर पर जोएल ने कहा कि मुझे लगता है?)। आम तौर पर, जो लोग नहीं जानते हैं कि आपका प्रोग्राम क्या करता है/इसके बारे में है, वे आसानी से इसे तोड़ने में सक्षम होंगे।

2

अच्छा प्रश्न द्वारा। मैं आमतौर पर कई धागे पैदा करके दौड़-परिस्थितियों का परीक्षण करता हूं और उन्हें उन परिचालनों को जंगली ढंग से करने देता हूं जो मुझे संदेह है कि दौड़ की स्थिति के अधीन हो सकता है।

शायद आप PNUnit देख सकते हैं - हालांकि यह संभवतः आप जो खोज रहे हैं उससे थोड़ा अलग है। लेखकों का कहना है कि उन्होंने इसे बनाया क्योंकि "हमें उसी सर्वर के खिलाफ सैकड़ों ग्राहकों को अनुकरण करने की आवश्यकता है"।

-1

थ्रेडिंग दिनचर्या के लिए कॉल के लिए grep कोड। यदि कोई पाया जाता है, तो परीक्षण विफल करें, क्योंकि आपके कोड में बहु-थ्रेडिंग बग हैं।

यदि यह गुजरता है, तो आपके द्वारा उपयोग की जाने वाली लाइब्रेरी के हिस्सों में अपनी खोज का विस्तार करें, जब तक कि यह विफल न हो या (संभावना नहीं है) थ्रेड-सुरक्षित साबित हो (यानी एकल-थ्रेडेड)।

एक बार जब आपको पता चले कि आपके पास थ्रेडिंग बग है, तो नौकरी का परीक्षण हिस्सा किया जाता है। यह सब कुछ है जो उन्हें ढूंढने और हटाने का मामला है ...

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