الكشف الآلي عن التعليمات البرمجية الميتة في تطبيق C++ الأصلي على نظام التشغيل Windows؟

StackOverflow https://stackoverflow.com/questions/307478

سؤال

خلفية

لدي طلب مكتوب بلغة C++ الأصلية على مدار عدة سنوات وهو حوالي 60 KLOC.هناك العديد من الوظائف والفئات التي ماتت (ربما 10-15٪ مثل السؤال المماثل المستند إلى Unix أدناه).لقد بدأنا مؤخرًا في إجراء اختبار الوحدة على جميع التعليمات البرمجية الجديدة وتطبيقها على التعليمات البرمجية المعدلة كلما أمكن ذلك.ومع ذلك، أود أن أشير إلى أن لدينا أقل من 5٪ من تغطية الاختبار في الوقت الحالي.

الافتراضات / القيود

يجب أن تدعم الطريقة و/أو الأدوات ما يلي:

  • أصلي (أي.غير مُدار) C++
  • ويندوز إكس بي
  • فيجوال ستوديو 2005
  • يجب ألا يتطلب حالات اختبار مقدمة من المستخدم للتغطية.(على سبيل المثاللا يمكن الاعتماد على اختبارات الوحدة لإنشاء تغطية التعليمات البرمجية)

إذا كانت الأساليب تدعم أكثر من هذه المتطلبات، فهذا رائع.

ملحوظة: نحن نستخدم حاليًا الإصدار الاحترافي من Visual Studio 2005، وليس نظام الفريق.ولذلك، قد يكون استخدام نظام الفريق صالح اقتراح (لا أعرف، لم أستخدمه مطلقًا) ولكنني آمل ألا يكون كذلك فقط حل.

لماذا يمثل استخدام اختبارات الوحدة لتغطية التعليمات البرمجية مشكلة؟

أعتقد أنه من المستحيل أن تتمكن أداة عامة من العثور على جميع الموتى (على سبيل المثال:رمز لا يمكن الوصول إليه) في أي تطبيق عشوائي بدون نتائج إيجابية كاذبة (أعتقد أن هذا سيكون معادلاً لمشكلة التوقف).ومع ذلك، أعتقد أيضًا أنه من الممكن لأداة عامة العثور على العديد من أنواع التعليمات البرمجية الميتة التي من المحتمل جدًا أن تكون ميتة في الواقع، مثل الفئات أو الوظائف التي لا يتم الرجوع إليها مطلقًا في التعليمات البرمجية بأي شيء آخر.

باستخدام اختبارات الوحدة لتوفير هذه التغطية، فإنك لم تعد تستخدم خوارزمية عامة، وبالتالي تزيد من النسبة المئوية للتعليمات البرمجية الميتة التي يمكنك اكتشافها واحتمال ألا تكون أي نتائج إيجابية كاذبة.على العكس من ذلك، قد يؤدي استخدام اختبارات الوحدة إلى نتائج سلبية كاذبة نظرًا لأن اختبارات الوحدة نفسها قد تكون الشيء الوحيد الذي يمارس جزءًا معينًا من التعليمات البرمجية.من الناحية المثالية، سأقوم بإجراء اختبار الانحدار الذي يمارس جميع الأساليب المتاحة خارجيًا، وواجهات برمجة التطبيقات، وعناصر تحكم المستخدم، وما إلى ذلك.والتي من شأنها أن تكون بمثابة قياس أساسي لتحليل تغطية الكود لاستبعاد طرق معينة من كونها إيجابيات كاذبة.ولكن للأسف، ليس لدي هذا الاختبار الآلي في الوقت الحاضر.

نظرًا لأن لدي قاعدة تعليمات برمجية كبيرة مع نسبة تغطية منخفضة لحالة الاختبار، فأنا أبحث عن شيء يمكن أن يساعد دون الحاجة إلى استثمار قدر كبير من الوقت في كتابة حالات الاختبار.

سؤال

كيف يمكنك اكتشاف التعليمات البرمجية الميتة بطريقة آلية أو شبه آلية في تطبيق C++ أصلي على نظام التشغيل Windows باستخدام بيئة تطوير Visual Studio 2005؟

أنظر أيضا

اكتشاف التعليمات البرمجية الميتة في مشروع C/C++ القديم أريد أن أخبر مترجم VC++ أن يقوم بتجميع كل التعليمات البرمجية.ويمكن أن يتم ذلك؟

هل كانت مفيدة؟

المحلول

اطلب من الرابط إزالة الكائنات غير المرجعية (/OPT:REF).إذا كنت تستخدم الارتباط على مستوى الوظيفة، ومخرجات الرابط المطول، فإن مخرجات الرابط سوف تسرد كل وظيفة يمكن إثبات أنها غير مستخدمة.قد تكون هذه القائمة بعيدة عن الاكتمال، ولكن لديك بالفعل الأدوات اللازمة.

نصائح أخرى

نحن نستخدم إصابة دقيقة للهدف, ، ويمكنني أن أوصي به.لا يلزم تشغيله من بيئة اختبار الوحدة، على الرغم من أن هذا ما نقوم به.

استخدم أداة تغطية التعليمات البرمجية مقابل مجموعة اختبار الوحدة الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top