لماذا الاختبارات الوظيفية ليست كافية؟ماذا تقدم اختبارات الوحدة؟

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

سؤال

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

حاولت أن أشرح لكني لم أذهب بعيدًا، واعتقدت أنه بإمكانكم القيام بعمل أفضل يا رفاق.؛-) لذا...

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

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

أنا أحب الطوب مقابل.مثال المنزل.أعتقد أن ما يقوله المطور الرئيسي هو أن اختبار جدران المنزل يكفي، ولا تحتاج إلى اختبار الطوب الفردي...:-)

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

المحلول

من أعلى رأسي

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

نصائح أخرى

اختبارات الوحدة مخصصة للمطورين لمعرفة مكان فشل الكود

الاختبارات الوظيفية مخصصة للشركة لمعرفة ما إذا كان الكود ينفذ ما طلبوه

اختبارات الوحدة مخصصة للمطورين لمعرفة مكان فشل الكود

الاختبارات الوظيفية مخصصة للشركة لمعرفة ما إذا كان الكود ينفذ ما طلبوه

تتحقق اختبارات الوحدة من أنك قمت بتصنيع الطوب الخاص بك بشكل صحيح

تتحقق الاختبارات الوظيفية من أن المنزل يلبي احتياجات العميل.

إنها أشياء مختلفة، ولكن الأخير سيكون أسهل بكثير، إذا تم تنفيذ الأول.

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

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

يفرض متجرنا اختبار الوحدة لهذا السبب وحده (أنا متأكد من أن هناك أسبابًا أخرى ولكن هذا يكفي بالنسبة لنا).

إذا كنت تستخدم منهجية البرمجة المتطرفة / التطوير السريع، فستكون اختبارات الوحدة مطلوبة دائمًا لأنها متطلبات التطوير.

في XP/Agile الخالص، يقوم المرء بإجراء جميع المتطلبات بناءً على الاختبارات التي سيتم إجراؤها على التطبيق

  • الاختبارات الوظيفية - إنشاء المتطلبات الوظيفية.
  • اختبارات الوحدة - إنشاء وظائف أو متطلبات الكائن.

بخلاف ذلك، يمكن استخدام اختبار الوحدة للحفاظ على المسار المستمر لمتطلبات الوظيفة.

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

في تد/بد, اختبارات الوحدة ضرورية لكتابة البرنامج.تسير العملية

اختبار الفشل -> الكود -> اجتياز الاختبار -> إعادة البناء -> التكرار

تشير المقالة المرتبطة أيضًا إلى فوائد TDD/BDD.في ملخص:

  • يقترب جدًا من التخلص من استخدام مصحح الأخطاء (أنا أستخدمه فقط في الاختبارات الآن ونادرًا جدًا بالنسبة لهم)
  • لا يمكن أن يظل الرمز فوضويًا لمدة أطول من بضع دقائق
  • أمثلة وثائقية لواجهة برمجة التطبيقات (API) المضمنة
  • قوات اقتران فضفاضة

يحتوي الرابط أيضًا على مثال تفصيلي (سخيف) لـ TDD/BDD، ولكنه موجود في PowerPoint (ew)، لذا هناإنها نسخة HTML.

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

  • اختبارات الوحدة تعمل بشكل أسرع.إذا سبق لك أن عملت في مشروع كبير حيث يستغرق تشغيل مجموعة الاختبار ساعات، فيمكنك فهم سبب أهمية الاختبارات السريعة.
  • من خلال تجربتي، من الناحية العملية، من المرجح أن تكون الاختبارات الوظيفية غير مستقرة.على سبيل المثال، في بعض الأحيان، لا يتمكن متصفح capybara-webkit مقطوعة الرأس من الوصول إلى خادم الاختبار الخاص بك لسبب ما، ولكنك تعيد تشغيله ويعمل بشكل جيد.
  • اختبارات الوحدة أسهل في التصحيح.بافتراض أن اختبار الوحدة اكتشف خطأ ما، فمن الأسهل والأسرع تحديد مكان المشكلة بدقة.

من ناحية أخرى، على افتراض أنك قررت الاحتفاظ فقط باختباراتك الوظيفية و لا إضافة أي اختبارات الوحدة

  • إذا كنت بحاجة إلى إعادة هندسة النظام بأكمله، فقد لا تضطر إلى إعادة كتابة أي اختبارات.إذا كان لديك اختبارات وحدة، فمن المحتمل أن يتم حذف الكثير منها أو إعادة كتابتها.
  • إذا كنت بحاجة إلى إعادة هندسة النظام بأكمله، فلا داعي للقلق بشأن التراجعات.إذا كنت قد اعتمدت على اختبارات الوحدة لتغطية الحالات الركنية، لكنك اضطررت إلى حذف اختبارات الوحدة هذه أو إعادة كتابتها، فمن المرجح أن تحتوي اختبارات الوحدة الجديدة على أخطاء فيها أكثر من اختبارات الوحدة القديمة.
  • بمجرد إعداد بيئة الاختبار الوظيفي بالفعل وتجاوز منحنى التعلم، غالبًا ما تكون كتابة اختبارات وظيفية إضافية أسهل في الكتابة وغالبًا ما تكون كتابتها بشكل صحيح أسهل من مجموعة اختبارات الوحدة واختبارات التكامل والاختبارات الوظيفية.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top