سؤال

هل هناك أي طريقة لقياس تغطية الكود مع Dunit؟ أم أن هناك أي أدوات مجانية تحقق ذلك؟ ماذا تستخدم لذلك؟ ما هي تغطية الكود التي عادة ما تذهب إليها؟

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

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

المحلول

لقد قمت للتو بإنشاء مشروع مفتوح المصدر جديد على رمز Google مع أداة تغطية رمز أساسية لـ Delphi 2010. https://sourceforge.net/projects/delphicodecoverage/

في الوقت الحالي ، يمكنه قياس تغطية الخط لكنني أخطط لإضافة تغطية الفصل والطريقة أيضًا.

إنه يولد تقارير HTML مع ملخص بالإضافة إلى مصدر ملحوظ يوضح لك الخطوط المغطاة (الأخضر) ، والتي لم تكن (حمراء) وبقية الخطوط التي لم يكن لديها أي رمز تم إنشاؤه لهم.

تحديث:اعتبارا من الإصدار 0.3 من تغطية رمز دلفي يمكنك إنشاء تقارير XML متوافقة مع المكون الإضافي Hudson Emma لعرض اتجاهات تغطية الرمز داخل هدسون.

تحديث:الإصدار 0.5 يجلب إصلاحات الأخطاء وزيادة التكوين وتنظيف التقارير

تحديث:الإصدار 1.0 يجلب الدعم لإخراج EMMA وتغطية الفصول والأساليب وتغطية DLLs و BPLS

نصائح أخرى

لا أعرف أي أدوات مجانية. aqtime هو تقريبا معيار defacto لتوصيف دلفي. لم أستخدمها ، ولكن تم العثور على بحث سريع اكتشف لدلفي, ، وهو الآن مفتوح المصدر ، ولكن فقط تغطية رمز.

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

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

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

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

هناك أدوات لتتبع مسارات التعليمات البرمجية التي يتم استخدامها عند تشغيل البرنامج ، ولكن هذا لا يمكن الاعتماد عليه إلا لأنه لن يتم استخدام جميع مسارات الكود في كل مرة. مثل هذا الرمز الخاص الذي يجب عليك التعامل معه في السنة ، سيتم تشغيله كل أربع سنوات فقط. لذلك إذا أخرجته ، فسيتم كسر برنامجك كل أربع سنوات.

أعتقد أنني لم أجيب حقًا على سؤالك حول تغطية Dunit و Code ، لكنني أعتقد أنني ربما تركتك مع المزيد من الأسئلة ثم بدأت بها. ما نوع تغطية الكود التي تبحث عنها؟

تحديث: إذا كنت تتخذ نهجًا TDD ، فلا يتم كتابة رمز حتى تكتب اختبارًا له ، لذلك بالطبيعة لديك 100 تغطية اختبار. بالطبع لمجرد ممارسة كل طريقة من خلال اختبار لا يعني أن مجموعة السلوكيات الكاملة تمارس. SmartInspect يوفر طريقة سهلة حقًا لقياس الأساليب التي تسمى مع التوقيت ، وما إلى ذلك. إنها أقل بقليل من الوقت ، ولكنها ليست مجانية. مع بعض الأعمال الإضافية من جانبك ، يمكنك إضافة أجهزة لقياس كل مسار رمز (فروع من عبارات "if" ، وما إلى ذلك) بالطبع ، يمكنك أيضًا إضافة قطع التسجيل الخاصة بك إلى أساليبك لتحقيق تقرير تغطية ، وهذا مجاني (حسنًا ، توقع وقتك ، والذي ربما يستحق أكثر من الأدوات). إذا كنت تستخدم Jedi Debug ، فيمكنك الحصول على مكدس استدعاء أيضًا.

لا يمكن تطبيق TDD بسهولة بأثر رجعي على التعليمات البرمجية الحالية دون الكثير من إعادة إعادة البناء. على الرغم من أن Ides Delphi الأحدث لديها القدرة على إنشاء كوب اختبار الوحدة لكل طريقة عامة ، والتي تمنحك تغطية 100 ٪ لطرقك العامة. ما تضعه في تلك الرعب يحدد مدى فعالية تلك التغطية.

أنا أستعمل اكتشف لدلفي وهو يقوم بالعمل ، لاختبار الوحدة مع Dunit والاختبار الوظيفي مع TestComplete.

يمكن تكوين اكتشاف لتشغيله من سطر الأوامر للأتمتة. كما في:

Discover.exe Project.dpr -s -c -m

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

لقد كنت أستخدم Discover "لسنوات ، عملت بشكل ممتاز حتى BDS2006 (الذي كان آخر نسخة قبل XE* من Delphi التي استخدمتها وما زلت أستخدمها) ، ولكن حالتها الحالية ، من غير الواضح كيفية جعلها تعمل معها إصدارات XE* من Delphi. من العار حقًا ، لأنني أحببت هذه الأداة ، سريعة ومريحة في كل شيء تقريبًا. لذا ، أنتقل الآن إلى Delphi-Code-Coverage ...

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