मैंने पहले से ही this पोस्ट को देखा है लेकिन यह अभी भी जावा के लिए सवाल पूछता है। ऐसा लगता है कि यह किसी ऐप के लिए एक दबदबात्मक मुद्दा होना चाहिए (मैं इस उपयोग के मामले में एक वेब ऐप का परीक्षण कर रहा हूं) जो बहु-थ्रेडेड है। आपने लोगों को इस तरह से कैसे निपटाया है जो आपके धागे को अंतःस्थापित करने की अनुमति देता है - मूल रूप से यादृच्छिक थ्रेड व्यवहार का परीक्षण करना।जावा में मैं प्रभावी ढंग से परीक्षण (इकाई/एकीकरण) समवर्ती कोड कैसे कर सकता हूं?
उत्तर
मुझे लगता है कि यह स्वाभाविक रूप से कठिन है, क्योंकि आप किसी (संभवतः) गैर-निर्धारक प्रणाली में किसी चीज की अनुपस्थिति साबित करना चाहते हैं। ऐसा कहकर, अपने बहु थ्रेडेड घटकों को तनाव देने के लिए दोहराने योग्य परीक्षण लिखना हमेशा योग्य होता है। यदि कोई समस्या उत्पन्न होती है, तो आप इसे दोहराने में सक्षम नहीं हो सकते हैं, लेकिन आप शायद निरीक्षण द्वारा बग पा सकते हैं। तो सुनिश्चित करें कि आपके परीक्षण प्रासंगिक अपवादों को बड़े विवरण (और संभवतः इनपुट पैरामीटर इत्यादि) में लॉग करते हैं
यह एक स्थिर कोड विश्लेषक चलाने के लायक भी है। ये चर के असंगत सिंक्रनाइज़ेशन (अन्य चीजों के साथ) उठाएंगे, और तुरंत चिंता के लिए क्षेत्रों को हाइलाइट करेंगे। FindBugs ऐसा एक उपकरण है।
यह जांचने का एक अच्छा तरीका यह सुनिश्चित करना है कि आपके पास बहु-सीपीयू मशीन तक पहुंच है, फिर अपने परीक्षण को जितना संभव हो उतना समय/जितना संभव हो उतना समय तक चलाएं। उदाहरण के लिए यदि आपके पास एक बहुप्रचारित उत्पादक उपभोक्ता एल्गोरिदम है, तो क्यूई को एक अच्छी आकार की सूची के साथ भरें और उत्पादन में जितनी अधिक हो सके उतनी थ्रेड का उपयोग करें। यह आपको कम से कम दौड़ की स्थिति या सिंक्रनाइज़ेशन मुद्दे को अधिक सामान्य रूप से मारने का मौका देना चाहिए। फिर इस परीक्षण को दैनिक निर्माण में चलाएं।
मैंने आम तौर पर एक यूनिट टेस्ट में एक बड़ी संख्या (जैसे 100) धागे पैदा किए हैं और दौड़ की स्थिति को मारने की उम्मीद में उन्हें इसके खिलाफ भेज दिया है :)। अफसोस की बात है, यह बहुत निश्चित नहीं है। हालांकि आप अपने धागे संवेदनशील क्षेत्रों में डीबग लाइनों के कारण अपनी बाधाओं को बेहतर बना सकते हैं जिससे सक्रिय धागा एक्स मिलिस के लिए सो जाता है। यह रणनीति आपको अंतराल वाली खिड़कियां छोड़ने की अनुमति देती है जहां अन्य धागे अंतःस्थापित हो सकते हैं। ये लाइनें केवल यूनिट परीक्षण के दौरान सक्रिय होंगी (पहलुओं या हार्ड कोड लाइनों का उपयोग करें जो केवल डीबग ध्वज सेट होने पर सक्रिय होती हैं)।
नकारात्मक प्रदान करना असंभव है। आप वास्तव में साबित नहीं कर सकते कि आपके पास एक सहमति समस्या नहीं है। आप जितना संभव हो उतना अभ्यास करने के लिए अपने परीक्षणों को स्थापित कर सकते हैं।
मेरा उत्तर उन स्थितियों को बनाने से बचने के लिए है जहां आप स्मार्ट डिज़ाइन और मौजूदा तकनीक के न्यायसंगत उपयोग के साथ दौड़ की स्थिति ले सकते हैं। उदाहरण के लिए, यदि आपका एमटी ऐप स्वयं निहित कार्य वस्तुओं का उपयोग करता है, तो आप थ्रेड के बीच संचार तंत्र के रूप में उपयोग करने के लिए अपने आवेदन में एक जेएमएस ब्रोकर एम्बेड कर सकते हैं। इसी प्रकार सिस्टम संसाधनों के साथ जो दौड़ की स्थिति के अधीन हो सकते हैं, उन हिस्सों को बहु-थ्रेडेड न बनाएं। यदि आपके पास ऐसी फाइलें हैं जिन्हें आपको लिखने की आवश्यकता है, तो उन्हें एक थ्रेड जेएमएस उपप्रणाली के माध्यम से पारित जानकारी का उपयोग करके लिखने के लिए जिम्मेदार बनाएं।
आखिरकार इकाई परीक्षण एमटी कोड के लिए संख्याओं के आधार पर कोई पेंट नहीं है यह सुनिश्चित करने के लिए कि यह दौड़ की स्थिति के लिए कमजोर नहीं है।
मेरा सुझाव है कि आपको Java Concurrency in Practice मिलें - न केवल आपको बताएगा कि दौड़ की स्थिति से पहले कैसे बचें, परीक्षण समेकन पर एक अनुभाग है।
जावा के लिए उपलब्ध समेकन के लिए स्थिर विश्लेषण उपकरण भी हैं - दुर्भाग्यवश, जबकि मुझे पता है कि वे वहां हैं, मैं उनका मूल्यांकन करने की स्थिति में नहीं हूं।
कोड जो गैर-निर्धारिती थ्रेडिंग समस्याओं के कारण संभवतः विफल हो सकता है परीक्षण नहीं किया जाना चाहिए। इसके बजाए, इसे हटाया जाना चाहिए, और कुछ ऐसा हो सकता है जो हो सकता है।
अधिकांश समय यह सब कुछ एकल-थ्रेडेड बनाकर किया जा सकता है - केवल कुछ छोटे ऐप्स को छोटी स्केलेबिलिटी बूस्ट की आवश्यकता होती है जो प्री-एम्प्टिव शेड्यूलिंग प्रदान करता है। वैकल्पिक रूप से, आप एक थ्रेडिंग आर्किटेक्चर स्थापित कर सकते हैं जहां ओएस, कंपाइलर या थर्ड-पार्टी टूल का उपयोग हार्ड गारंटी प्रदान करने के लिए किया जाता है कि गैर-निर्धारिती संचालन नहीं हो सकता है।
- 1. उल्का कोड प्रभावी ढंग से इकाई परीक्षण योग्य है?
- 2. मैं जावा से .NET कोड कैसे कॉल कर सकता हूं?
- 3. मैं जीसी परीक्षण कैसे कर सकता हूं?
- 4. मैं vbtml रेज़र फ़ाइलों में कोड इंडेंटेशन सही ढंग से कैसे व्यवहार कर सकता हूं?
- 5. मैं कैसे परीक्षण कर सकता हूं: RSpec
- 6. मैं जावा से क्लोजर में कैसे संक्रमण कर सकता हूं?
- 7. सी # में डेस्कटॉप पर प्रभावी ढंग से आकर्षित कैसे करें?
- 8. मैं सी में मॉनीटर कैसे कोड कर सकता हूं?
- 9. मैं डेटाबेस से जावा क्लास कैसे लोड कर सकता हूं?
- 10. मैं जेएसआर -303 सत्यापन और जैक्सन जेएसओएन मैपिंग को प्रभावी ढंग से कैसे समर्थन कर सकता हूं?
- 11. कैसे जावा कोड परीक्षण
- 12. मैं कोड से माउस इवेंट कैसे अनुकरण कर सकता हूं?
- 13. मैं CruiseControl.NET में समवर्ती बिल्ड को कैसे रोक सकता हूं?
- 14. मैं कोर डेटा माइग्रेशन का परीक्षण कैसे कर सकता हूं?
- 15. मैं पर्ल में यूनिट परीक्षण कैसे कर सकता हूं?
- 16. QTableView: मैं सही ढंग से QModelIndex कैसे बना सकता हूं?
- 17. मैं जावा में विंडोज ड्राइव कैसे माउंट कर सकता हूं?
- 18. 'प्रभावी जावा' conundrum: इस समवर्ती कोड में अस्थिर क्यों आवश्यक है?
- 19. विरासत कोड को प्रभावी ढंग से और कुशलता से कैसे दोबारा सुधारें?
- 20. मैं जावा ऑब्जेक्ट से एचटीएमएल कैसे उत्पन्न कर सकता हूं?
- 21. जावा: मैं इनपुटस्ट्रीम से एन्कोडिंग कैसे प्राप्त कर सकता हूं?
- 22. प्रभावी ढंग से lwp टाइमआउट को संभालें
- 23. GAE में सत्रों को प्रभावी ढंग से कार्यान्वित कैसे करें?
- 24. मैं अपने PHP कोड का परीक्षण कैसे करूं - मैं किस परीक्षण ढांचे का उपयोग कर सकता हूं?
- 25. मैं जावा में एक छवि वॉटरमार्क कैसे कर सकता हूं?
- 26. फ़्रेमलेस ग्रिड का प्रभावी ढंग से उपयोग कैसे करें?
- 27. मैं जावा में यूआरएल से छवि कैसे पढ़ सकता हूं?
- 28. मैं डेटाबेस में संग्रहीत कोड कैसे निष्पादित कर सकता हूं?
- 29. .NET में लघु गणना के लिए मैं सबसे अधिक प्रभावी ढंग से एकाधिक कोर का लाभ कैसे उठा सकता हूं?
- 30. विजुअल स्टूडियो (2008) में मैं कोड स्निपेट का त्वरित परीक्षण कैसे कर सकता हूं?
असल में मैंने इस विज्ञापन-प्रक्रिया विधि को '@ टेस्ट' में आजमाया और यह पंजीकरण भी नहीं किया, थ्रेड एक विधि पर कार्य करता है जो '@ पहले' पहलू को ट्रिगर करता है जो उस थ्रेड पर 'थ्रेडलोकल' सेट करता है थ्रेड एंडपॉइंट पर कहीं और इस्तेमाल किया जाता है - यह जेपीए के आसपास बनाया गया एक जटिल उपयोग केस है, मेरे अस्तित्व का झुकाव इसे एक बहु-थ्रेड परीक्षण को समझना है। हालांकि सामान्य जुनीट ठीक काम करता है। –