2009-01-18 15 views
9

अधिकांश स्थापित भाषाओं में उनके लिए ठोस परीक्षण कवरेज उपकरण उपलब्ध हैं, लेकिन कार्यक्षमता की गहराई एक से दूसरे में काफी भिन्न है।कोड कवरेज टूल विभिन्न भाषाओं में कैसे काम करते हैं?

इसके अलावा, सभी विभिन्न वीएम और कंपाइलर्स में ऐसी विषम संरचना है जो कोड कवरेज टूल लिखना लिस्पी की तुलना में सी में बहुत अलग काम होना चाहिए, उदाहरण के लिए।

  • अजगर sys.settrace है तो आप सीधे बताने के लिए जो लाइनों
  • Clover को क्रियान्वित कर रहे हैं (जावा के लिए) अपने स्वयं के संकलक का उपयोग करता है और डिबग मेटाडाटा (पिछली बार मैं इसे किसी तरह इस्तेमाल किया,) कहते हैं
  • Emma (जावा के लिए) तुरंत एक classloader जो फिर से लिखते हैं बाईटकोड
  • (लिस्प के लिए) एक टिप्पणी के साधन के लिए कोड

मैं इंटर हूँ पारित किया है COVER विभिन्न भाषाओं के लिए कोड कवरेज के कार्यान्वयन में दिलचस्पी:

  1. मुख्य दृष्टिकोण C0 कवरेज, जहाँ आप ट्रैक कर सकते हैं जो कोड की लाइनों के बाद मार दिया करने के लिए क्या हैं? मैं ऊपर देशी वीएम आत्मनिरीक्षण और स्थैतिक और गतिशील कोड उपकरण का उल्लेख - क्या अन्य विधियां हैं?

  2. C1 or C2 जैसे अधिक प्रबुद्ध कवरेज डेटा प्राप्त करना, सी 0 की तुलना में एक भाषा अज्ञेय कार्य की तरह लगता है। बड़े Karnaugh map मेरे लिए हेरफेर की smacks है; क्या वास्तव में इसे करने के तरीके पर सर्वोत्तम प्रथाएं हैं? fuzziness जैसी अधिक आधुनिक तर्क तकनीकें भूमिका निभाएं?

  3. परीक्षण कवरेज का एक बहुत अनदेखा पहलू प्रोग्रामर को परिणाम प्रदर्शित कर रहा है, जो सी 1 और सी 2 डेटा के साथ तेजी से कठिन हो रहा है। स्पष्ट रूप से, हालांकि उन्हें सी 0 के लिए काम मिल गया है, लेकिन मैं अधिकांश परीक्षण कवरेज इंटरफेस से अभिभूत हूं; कवरेज डेटा के लिए आपने कौन सा उपन्यास और अंतर्ज्ञानी इंटरफेस देखा है?

+0

मुझे पूरा यकीन नहीं है कि आप यहां क्या पूछ रहे हैं, क्या यह निम्न स्तर पर कोड कवरेज काम करता है जहां आप मूल रूप से पीसी का नमूना देते हैं (http: //en.wikipedia.org/wiki/Program_counter) और फिर परिणामों को अपने स्रोत कोड की ओर मानचित्रित करते हैं ??? या यह वह और कुछ है जिसे वह ढूंढ रहा है? – Johan

+0

दिलचस्प .. इसलिए पीसी का नमूनाकरण यह है कि (अधिकांश) कवरेज टूल उन भाषाओं के लिए कैसे काम करते हैं जो देशी कोड को संकलित करते हैं। सी 0 प्राप्त करने के लिए यह केवल एक ही दृष्टिकोण है, और मुझे तकनीकों में दिलचस्पी है जो अन्य भाषाओं के लिए काम करते हैं। मूल प्रश्न में दूसरे और तीसरे प्रश्नों के अलावा। –

+0

अधिकांश कोड कवरेज टूल पीसी नमूनाकरण का उपयोग नहीं करते हैं, क्योंकि यह सटीक नहीं है। –

उत्तर

6

आवश्यक रूप से कोड के कौन से हिस्सों को निष्पादित करने के लिए सभी कोड कवरेज टूल कोड को उपकरण का उपयोग करते हैं।

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

एक अन्य कारण मैं कह रहा हूँ सी 1 आसान है: कैसे आप साधन होगा:

if 
c > 1 && c 
< 10 
then 
blabla 
end 

ठीक है, सिर्फ एक विचार।

सी 2 के लिए, मैंने इसे अभ्यास में कभी नहीं देखा है।कारण यह है कि आप एक घातीय विस्फोट प्राप्त कर सकते है: कोड के

if c1 then * else * end 
if c2 then * else * end 
... 
if cn then * else * end 

n के लिए लाइनों, आप 2^n परीक्षण की आवश्यकता होगी। इसके अलावा, आप लूप के लिए क्या करते हैं? आम तौर पर, यदि आप बयानों को सरल मानते हैं (यानी प्रत्येक लूप के लिए आप परीक्षण करते हैं कि उसके शरीर को एक परीक्षण के लिए 0 बार निष्पादित किया गया था और कम से कम एक बार परीक्षण में)।

मेरा मानना ​​है कि पीसी नमूनाकरण कोड कवरेज करने का एक विशेष रूप से भयानक तरीका है क्योंकि आप कुछ कथन याद कर सकते हैं क्योंकि उन्होंने बहुत तेजी से निष्पादित किया है: डी समान फ़ज़ी लॉजिक के लिए जाता है, जिसका उपयोग अनुमानों के कारण करने के लिए किया जाता है; आम तौर पर आप अपने कोड कवरेज को निर्धारित करने के लिए चाहते हैं।

कर्णघ मानचित्रों का उपयोग बुलियन कार्यों को कम करने के लिए किया जाता है, और मुझे कोड कवरेज टूल के साथ कोई उपयोगी लिंक दिखाई नहीं देता है।

इसके अलावा, आपका प्रश्न कभी-कभी बहुत स्पष्ट नहीं होता है: क्या आप बेहतर कोड कवरेज प्राप्त करने के लिए तकनीक चाहते हैं या क्या यह केवल आपके लिए रुचि रखने वाले कोड कवरेज टूल का कार्यान्वयन है?

+0

धन्यवाद; सी 0/सी 1 के बारे में दिलचस्प बिंदु। कर्णघ मैप्स का उल्लेख करने का कारण यह है कि यदि आप सी 2 का प्रयास कर रहे हैं, तो वे सशर्तों के माध्यम से सभी संभावित मार्गों को व्यक्त करने का सबसे स्पष्ट तरीका प्रतीत होता है - जाहिर है के-मैप्स का खनन पीढ़ी पहलू यहां अप्रासंगिक है। –

+1

+1 "सी के लिए के रूप में, मैंने इसे अभ्यास में कभी नहीं देखा है"। मैंने सी 2 के बारे में सुना, सोचा कि यह एक अच्छा विचार की तरह लग रहा था, और एक उपकरण खोज रहा था जो वास्तव में ऐसा कर सकता था, जब तक कि मैं इसे पढ़ नहीं लेता। समय बर्बाद करने से मुझे बचाने के लिए धन्यवाद! –

-2

नेट में, पसंदीदा तरीका .NET Profiling API, जो मूल रूप से CLR अपने आप में संयुक्त अंक का एक समूह प्रदान करता है का उपयोग करें।

0

एक विधि जो लगभग हर भाषा के साथ काम करती है वह एक प्रोग्राम ट्रांसफॉर्मेशन सिस्टम का उपयोग करके उपकरण डालने के लिए है।

यहां मिले एक तकनीकी पेपर: http://www.semdesigns.com/Company/Publications/TestCoverage.pdf बताता है कि यह सामान्य रूप से कैसे किया जा सकता है।

मेरी कंपनी, अर्थ डिजाइन प्रदान करता है, कि प्रदान क्या ऊपर सी 1 कवरेज कहा जाता है (उदाहरण के लिए, "शाखा कवरेज") तो हाँ यह आमतौर पर किया है), विभिन्न भाषाओं के लिए परीक्षण कवरेज उपकरण के एक बड़े सेट (सी, सी ++, सी #, जावा, कोबोल, पीएचपी, सभी बोलियों में)। www.semdesigns.com/Products/TestCoverage/index.html

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