2011-04-29 7 views
5

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

उदाहरण के लिए, मान लें कि वर्तमान कोड कवरेज 20% (विरासत आवेदन) है और नए यूनिट परीक्षण लिखे गए हैं, कोड कवरेज 25% तक बढ़ता है। फिर, कोई यूनिट परीक्षण के बिना नए कोड में चेक करता है और कोड कवरेज 24% तक गिर जाता है। मैं टीमसिटी को बिल्ड में असफल होना चाहता हूं क्योंकि कोड कवरेज 25% से 24% तक गिर गया है।

उत्तर

1

यह एक पुरानी सवाल है, लेकिन मैं यह है कि इस असफलता "शर्तें" सुविधा के माध्यम से TeamCity के नए संस्करण में संभव है उल्लेख करना चाहता था। विफलता की स्थिति स्थिरांक के साथ-साथ पहले जेनरेट की गई मीट्रिक की तुलना में भी उपयोग कर सकती है। इस मामले में, एक विफलता की स्थिति इस प्रकार दिखाई देगा:

enter image description here

9

मेरे पास कोड कवरेज के बारे में कुछ पालतू सिद्धांत हैं जो मैं प्रश्न का उत्तर देने से पहले पहले समझाऊंगा।

पहले कुछ संदर्भ:

  • Code coverage के कई प्रकार होते हैं, लेकिन मैं केवल लाइन कवरेज के बारे में बात करने जा रहा हूँ, लेकिन आप एक अलग तरह से प्रतिस्थापित करने का सक्षम होना चाहिए।
  • प्रश्न से: "... कोई यूनिट परीक्षण और कोड कवरेज बूंदों के बिना नए कोड में जांचता है ..." जो कि इसी तरह से संबंधित है: "कुछ (रिफैक्टर/डुप्लिकेट को हटाता है/एल्गोरिदम को प्रतिस्थापित करता है और) परीक्षण को हटा देता है कोड और कवरेज बूंदों। "
  • कवरेज को एक एकल सूट चलाने के परिणामस्वरूप मापा जाना चाहिए। यह है कि, एप्लिकेशन को चलाने और बाहर से उत्तेजित नहीं है।
  • प्रतिशत के रूप में कवरेज बहुत भ्रामक है।
    मुझे इसके बारे में एक विचार था और वास्तव में आप केवल यह जानना चाहते हैं कि कोड की कितनी लाइनें शामिल नहीं हैं।
    इस उत्तर पर मेरी टिप्पणी देखें: Ensure minimal coverage on new Subversion commits
  • कवरेज जितना संभव हो उतना उच्च होना चाहिए। प्रश्न "... बैकस्लाइडिंग की अनुमति के बिना सुधार ..."
  • 100% coverage is possible
    मैंने लाइब्रेरी के बावजूद इसे किया है।

मैं एक theory है कि आप जहाँ तक कोड कवरेज का सवाल है सिर्फ दो भागों में अपने कोड को विभाजित करना चाहिए:

  1. एक प्रभाग जहां सभी कोड 100% कवर किया जाता है।
  2. एक विभाजन जहां कोई कोड शामिल नहीं है।

या तो विभाजन कई परियोजनाओं द्वारा गठित किया जा सकता है, लेकिन विभाजन के सदस्यों को फाइलें होनी चाहिए (यह देखते हुए कि जावा और सी # दोनों में स्रोत फाइलें हैं) और अधिमानतः फाइलों के पूरे फ़ोल्डर। आपके पास पहले डिवीजन में प्रोजेक्ट का एक सेट और दूसरे डिवीजन में एक और सेट हो सकता है।

अब कवरेज की कमी की रिपोर्ट दूसरे विभाजन में लाइनों की संख्या है।

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

अब

, वापस सवाल का:
नहीं, मैं TeamCity बिल्कुल अलग JetBrains वेबसाइट पर एक संक्षिप्त देखो से पता नहीं है, इसलिए मैं कैसे कवरेज अद्यतन करने के लिए पता नहीं है, लेकिन मेरे सिद्धांत के अनुसार यह 100% या कुछ भी नहीं होना चाहिए, तो क्या आप प्रति परियोजना सीमा निर्धारित कर सकते हैं? यदि आप कर सकते हैं, तो पहले विभाजन के लिए 100% की निश्चित सीमा।
यदि आप दो डिवीजन प्राप्त कर सकते हैं तो आप दूसरे विभाजन के लिए कोड मीट्रिक की एक पंक्ति के साथ स्वचालित अपडेट चीज करना चाहते हैं, प्रगतिशील रूप से कम बेहतर है।

+0

+1। क्या एक शानदार जवाब है! – bragboy

+1

+1 अच्छा जवाब - मेरे पास समान सिद्धांत हैं और मैंने हमारे कोड बेस में कई पुस्तकालयों के लिए 100% कवरेज प्राप्त किया है। –

0

परीक्षण चलाने के बाद, कवरेज देखें और पर्यावरण परिवर्तक को निकटतम पांच से अधिक न करें, शायद?

यदि आपका थ्रेसहोल्ड प्रारंभ में 25 था और कवरेज 31 तक पहुंच गया, तो इसे 30 तक अपडेट करें और थ्रेसहोल्ड 30 से नीचे गिरने पर यह टूट जाएगा। बेशक आप कूदते समय इसे 31 बना सकते हैं।

इसलिए हर परीक्षण चलाने के बाद, आप अगर वर्तमान कवरेज वर्तमान सीमा से अधिक है देख सकते हैं और नए मूल्य के लिए सीमा निर्धारित?

+0

धन्यवाद - यह वही है जो मैं वर्तमान में कर रहा हूं लेकिन यह एक मैन्युअल प्रक्रिया है और मैं इसे स्वचालित करना चाहता हूं। –

+0

मैंने सोचा कि मैंने इसे करने का स्वचालित तरीका कहा है! टीमसिटी में, जो भी आप अपनी बिल्ड स्क्रिप्ट करते हैं, परीक्षण चलाने के बाद, कवरेज मान के आधार पर अपडेट भी होते हैं। यदि आप मुझे अपनी बिल्ड स्क्रिप्ट पर अधिक जानकारी दे सकते हैं, तो आप कैसे नवर को कॉल करते हैं, आदि। मैं आपको यह करने के लिए सही स्वचालित तरीका बताऊंगा! – manojlds

+0

क्षमा करें - मुझे "स्वचालित" निहितार्थ नहीं देखा :)। बिल्ड रनर एमएसबिल्ड है और मुझे कोड कवरेज आंकड़ों को निर्यात करने में कोई समस्या नहीं है। थ्रेसहोल्ड वर्तमान में टीमसिटी में एक पर्यावरण चर के रूप में स्थापित है। आपकी सहायताके लिए धन्यवाद! –

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