2008-10-16 10 views
6

मैंने हाल ही में एक बहुत बड़ी सी ++ परियोजना पर काम करना शुरू कर दिया है, जो कार्यान्वयन के 90% को पूरा करने के बाद, यह निर्धारित करता है कि उन्हें परीक्षण के दौरान 100% शाखा कवरेज प्रदर्शित करने की आवश्यकता है। परियोजना एक एम्बेडेड प्लेटफ़ॉर्म (ग्रीन हिल्स इंटेग्रिटी) पर होस्ट की जाती है। मैं StackOverflow पर दूसरों से सुझावों और अनुभवों की तलाश में हूं जिन्होंने समान वातावरण में कोड कवरेज उत्पादों का उपयोग किया है। मुझे इन प्रकार के औजारों के बारे में सकारात्मक और नकारात्मक दोनों टिप्पणियों में दिलचस्पी है।एंबेडेड सी ++ परियोजनाओं के लिए कोड कवरेज विश्लेषण

उत्तर

5

100% शाखा कवरेज? यह काफी आवश्यकता है, खासकर जब से कुछ शाखाएं (उदाहरण के लिए राज्य मशीनों के लिए बयान के मामले में चूक) को चलाने के लिए संभव नहीं होना चाहिए। मुझे उम्मीद है कि कुछ अपवाद हैं, और यदि आपको यह समझने की आवश्यकता हो कि आपको कवरेज परीक्षण शुरू करने से पहले क्या कर सकता है और पूरा नहीं कर सकता है - अन्यथा आप गलत बालों को छोड़कर अपने बालों को खींचकर खत्म कर देंगे।

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

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

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

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

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

यदि आपको सिस्टम पर ही ऐसा करना है, तो आपको प्रोसेसर के लिए कवरेज क्षमता के साथ एक एमुलेटर खरीदना होगा - एक सस्ती प्रस्ताव नहीं (कई अनुकरणकर्ताओं को उपकरण और अनुकरण हार्डवेयर के पूर्ण सेट के लिए $ 30k से ऊपर की लागत), लेकिन यह मोटर वाहन और एयरोस्पेस उद्योग जैसे उच्च विश्वसनीयता वातावरण में उपयोग किए जाने वाले कई उपकरणों में से एक है।

-Adam

अस्वीकरण: मैं कंपनी है कि MxVDev का उत्पादन के लिए काम करते हैं।

+0

बस एक ध्यान दें कि बुल्सआई इसके उपयोग पर विचार किसी के लिए भी Greenhills वफ़ादारी का समर्थन करने के प्रतीत नहीं होता। – Gary

2

एडम के साथ, हम अपने एम्बेडेड कोड को पीसी आधारित दोहन पर पोर्ट करते हैं और अधिकांश कवरेज और प्रोफाइलिंग करते हैं। मैंने AutomatedQA AQTime और Compuwares DevPartner का उपयोग किया है, जिनमें से दोनों अच्छे उत्पाद हैं,

यदि आपको कवरेज ओब-बोर्ड करना है, तो आपको एक कवरेज प्रोफाइलर का उपयोग करना होगा जिसने स्रोत का एक वाद्य संस्करण बनाया है।ऐसा करने के लिए वाणिज्यिक और ओपन सोर्स टूल दोनों उपलब्ध हैं, लेकिन आईएमओ, यह ज्यादा लाभ के लिए बहुत काम नहीं करता है।

100% कवरेज महत्वाकांक्षी है, क्योंकि आपको अपने सभी त्रुटि हैंडलर और अपवाद हैंडलर में जाने के लिए बहुत सारी गलती इंजेक्शन की आवश्यकता होगी। आईएमओ, ऑनबोर्ड की तुलना में दोहन में करना भी आसान होगा।

किसी भी व्यक्ति ने 100% कोड कवरेज के लिए कहा है कि 100% कोड कवरेज 100% परीक्षण कवरेज के बराबर नहीं है। उदाहरण के लिए निम्नलिखित कार्य पर विचार करें;

int div(int a, int b) 
{ 
return (a/b); 
} 

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

3

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

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

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

इसके अतिरिक्त इन उपकरणों को आरटीसीए/डीओ-178 बी मानक के लिए प्रमाणित किया गया है।

+0

कैंटटा के लिए +1 ... हमें इसका भी उपयोग करना होगा! – espais

0

SD C++ Test Coverage देखें। यह सी ++ (एएनएसआई, जीएनयू, एमएस ...) की विभिन्न बोलीभाषाओं के लिए (शाखा) परीक्षण कवरेज उपकरण का एक परिवार है जो बहुत ही कम पदचिह्न होने के कारण वास्तविक एम्बेडेड सिस्टम हार्डवेयर में भी अच्छी तरह से खेलता है, और एक आसान एकत्रित परीक्षण कवरेज डेटा निर्यात करने का तरीका। एक जीयूआई कवरेज डिस्प्ले है जो आपके वास्तविक एम्बेडेड हार्डवेयर पर निर्भर नहीं है, जो एक पूर्ण कवरेज रिपोर्ट सारांश भी तैयार करेगा।

[मैं कंपनी इन उपकरणों में प्रावधान है कि रखने वाले प्रमुख हूँ।]

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