سؤال

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

شكرا لك -دانيل

تحرير: هل يمكن لأي شخص تقديم مرجع يوضح أنه لا ينبغي أن يحل محل الدكتوراه في اختبار الوحدة؟

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

المحلول

أنا (AB) المستخدمة doctest بدلا من unittest, ، مرة أخرى عندما بدأت بلدي GMPY المشروع منذ عدة سنوات-يمكنك تصفح مصادره ورؤية أن جميع الوظائف يتم اختبارها بدقة مع الدكتوراه (الوظيفة التي تم توفيرها بواسطة تمديد بيثون مرمّز C ، وفي المرة الأخيرة التي قمت فيها بتكوينها لقياس التغطية ، كنت أكثر من 95 ٪ من التغطية) . لماذا فعلت ذلك؟ لان doctest كان جديدًا ، كما كان gmpy, ، وكنت فضوليًا لمعرفة إلى أي مدى يمكنني دفعه.

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

إذا وجدت unittestأسلوب مرهق ، هناك بدائل ممتازة أخرى لا تزال عنى للاستخدام في اختبارات الوحدة ، مثل Py.Test و أنف -- doctest مخصص حقًا لغرض مختلف (دعم المستندات ، وليس اختبارات الوحدة العامة) ، وبينما يستحق ذلك بالطبع إضافة أي أدوات دكتوراه كتبتها لأغراض المستندات إلى بطارية الاختبار الخاصة بك ، إنها ليس يستحق صداع صيانة الاختبار استبدال اختبارات الوحدة معها.

نصائح أخرى

لا توجد بالفعل حجج مع أو ضد اختبارات DOC. هم ببساطة اختبارات. في الواقع ، هناك طريقة لإنشاء بدلات اختبار الوحدة من الدكتوراه:http://docs.python.org/library/doctest.html#unittest-api

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

ومع ذلك ، تقترح مستندات بيثون استخدام الدكتوراه لأشياء مثل:

  • أمثلة في الوثائق
  • اختبار الانحدار
  • كتابة وثائق البرنامج التعليمي

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

يرى:http://docs.python.org/library/doctest.html#soapbox

أتصور أن الدكتوراه سيكون من الصعب الكتابة لأشياء مثل اختبار التكامل. ومع ذلك ، كما ترون على Python و Django - فهي تستفيد مكثفة من الدكتوراه ، والتي تعطي وثائق ودروس تعليمية أكثر فهمًا.

كل هذا يتوقف على مشروعك. لا توجد طريقة "صحيحة" للاختبار.

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

هناك مثال ملموس في مكتبة Python القياسية التي تقنعني بأن الدكتوراه وحدها لا يكفي دائمًا ، أي decimal وحدة. لديها أكثر من 60000 testcases فردية (في lib/test/decimaltestdata) ؛ إذا تم إعادة كتابة كل هؤلاء كدقيقات ، فإن الوحدة العشرية ستصبح غير عملي للغاية. من الممكن أن يتم تقليل عدد الاختبارات بينما لا تزال تقدم تغطية جيدة ، ولكن العديد من الخوارزميات العددية معقدة بما فيه الكفاية لأنك بحاجة إلى أعداد كبيرة من الاختبارات الفردية لتغطية جميع المجموعات الممكنة من الفروع.

الدكتوراه رائعة لبعض الاستخدامات

  • الوثائق العمل وحديث
  • اختبارات عينة مضمنة في docstrings
  • المسامير أو مراحل التصميم عندما تكون API API ليست واضحة حقًا

اختبارات الوحدة أفضل في حالات الاختلاف:

  • عندما تحتاج إلى الإعداد/التمزق المعقد إلى حد ما
  • عند محاولة الحصول على تغطية أفضل لجميع الحالات ، حالات زاوية inclusinf
  • للحفاظ على الاختبارات المستقلة من بعضها البعض

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

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

ميزة أخرى unittest هو أن إطار الاختبار سيكون مألوفًا لشخص قادم من بيئة تطوير مختلفة تستخدم Junit أو Nunit أو ما شابه. ال doctest الوحدة مختلفة قليلا.

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

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