unit-testing - tutorial - unit testing شرح




هل اختبار الوحدة يستحق كل هذا الجهد؟ (20)

يطلب thetalkingwalnut:

ما هي بعض الطرق الجيدة لإقناع المطورين المتشككين في فريق قيمة اختبار الوحدة؟

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

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

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

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

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

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

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

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

ومع ذلك ، نحن بحاجة إلى فهم تأثير "المزيد من اختبارات الوحدة". يمكن لمطوّر البرامج كتابة سطور N من الأكواد في الأسبوع فقط ، وتحتاج إلى معرفة النسبة المئوية لهذه الشفرة التي يجب أن تكون رمز اختبار الوحدة مقابل رمز الإنتاج. قد تحتوي مساحة العمل المتساهلة على 10٪ من الكود كاختبارات وحدة و 90٪ من الشفرة كرمز إنتاج ، مما ينتج عنه الكثير من المزايا (وإن كان ذلك في غاية العربة) (أعتقد أن MS Word). من ناحية أخرى ، فإن متجرًا صارمًا مع اختبارات وحدة بنسبة 90٪ ورمز إنتاج بنسبة 10٪ سيكون له منتج صخري صلب مع ميزات قليلة جدًا (أعتقد "vi"). قد لا تسمع أبدًا أي تقارير عن تحطم المنتج الأخير ، ولكن من المحتمل أن يكون لهذا علاقة بالمنتج الذي لا يبيع بشكل جيد بقدر ما يتعلق بجودة الرمز.

والأسوأ من ذلك ، ربما يكون اليقين الوحيد في تطوير البرمجيات هو أن "التغيير أمر لا مفر منه". نفترض أن المتجر الدقيق (اختبارات وحدة 90٪ / رمز إنتاج 10٪) ينشئ منتجًا يحتوي على ميزتين تمامًا (على افتراض 5٪ من رمز الإنتاج == 1 ميزة). إذا جاء العميل وتغير واحدًا من الميزات ، فإن هذا التغيير يقوم بتخريب 50٪ من الشفرة (45٪ من اختبارات الوحدة و 5٪ من رمز الإنتاج). يحتوي متجر التراخي (10٪ وحدة اختبارات / 90٪ رمز إنتاج) على منتج يحتوي على 18 ميزة ، لا يعمل أي منها بشكل جيد. يعمل زبونهم على تجديد متطلبات 4 من ميزاته تمامًا. على الرغم من أن حجم التغيير يبلغ 4 أضعاف ، فإن نصف عدد قواعد الشفرة فقط يحصل على الحضيض (~ 25٪ = ~ 4.4٪ من اختبارات الوحدة + 20٪ من رمز الإنتاج).

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

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


[لديّ نقطة تجعلني غير قادر على رؤيتها أعلاه]

"كل وحدة اختبارات ، لا يدركون ذلك بالضرورة - حقيقة"

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

هذا هو اختبار وحدة - الأساسية وضعت بشكل سيئ ولكن معا اختبار قطعة من التعليمات البرمجية لحالات قليلة.

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

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


أفضل طريقة لإقناع ... العثور على خطأ ، كتابة اختبار وحدة لذلك ، وإصلاح الخلل.

من غير المحتمل أن يظهر هذا الخطأ مرة أخرى ، ويمكنك إثبات ذلك من خلال الاختبار.

إذا فعلت هذا بما فيه الكفاية ، سوف يمسك الآخرون بسرعة.


أنا أتفق مع وجهة نظر عكس الأغلبية هنا: لا بأس كتابة اختبارات الوحدة خصوصًا أن البرمجة ذات النموذج الأولي الثقيل (AI على سبيل المثال) يصعب دمجها مع اختبار الوحدة.


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


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

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

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


اختبار وحدة هو بالتأكيد يستحق كل هذا الجهد. للأسف ، اخترت سيناريو صعب (ولكنه شائع للأسف) لتنفيذه.

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

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


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

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

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


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


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


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

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


كل يوم في مكتبنا هناك تبادل الذي يذهب شيء من هذا القبيل:

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

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

ولكن ، تجاهل ذلك ، وهنا محاولتي!

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

  2. يساعدك TDD على معرفة متى يتم إيقاف الترميز. تمنحك اختباراتك الثقة بأنك قمت بما يكفي في الوقت الحالي ويمكن أن تتوقف عن التغيير والتبديل إلى الشيء التالي.

  3. تعمل الاختبارات والشفرة معًا لتحقيق رمز أفضل. قد تكون التعليمات البرمجية الخاصة بك سيئة / عربات التي تجرها الدواب. يمكن أن يكون الاختبار الخاص بك سيئة / عربات التي تجرها الدواب. في TDD أنت تعتمد على فرص أن تكون سيئة / عربات التي تجرها الدواب منخفضة. غالباً ما يكون الاختبار هو الذي يحتاج إلى الإصلاح ولكنه لا يزال نتيجة جيدة.

  4. يساعد TDD مع الإمساك الترميز. عندما تواجهك مجموعة كبيرة من الأعمال الشاقة ، فإن كتابة الاختبارات ستجعلك تتحرك بسرعة.

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

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

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

  8. أعتقد أن فاولر هو الذي قال: "الاختبارات غير الكاملة ، التي يتم إجراؤها بشكل متكرر ، هي أفضل بكثير من الاختبارات المثالية التي لم تُكتب على الإطلاق". أفسر هذا على أنه يمنحني الإذن لكتابة الاختبارات حيث أعتقد أنها ستكون مفيدة للغاية حتى لو كانت بقية التغطية البرمجية غير مكتملة بشكل محزن.

  9. يمكن أن تساعد اختبارات الوحدة الجيدة على توثيق وتحديد ما هو الشيء المفترض القيام به

  10. تساعد اختبارات الوحدة في إعادة استخدام الكود. ترحيل كل من التعليمات البرمجية والاختبارات الخاصة بك إلى مشروعك الجديد. أعد إدخال الرمز حتى تعمل الاختبارات مرة أخرى.

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


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

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

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

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

لن تحدث التغييرات طوال الليل ، ولكن مع قليل من الصبر ، يمكنك تحقيق هدفك.


لقد ألعبت مع وحدة اختبار عدد من المرات ، وما زلت على اقتناع بأن الأمر يستحق الجهد المبذول في وضعي.

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

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

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


لقد كتبت مشاركة مدونة كبيرة جدًا حول الموضوع. لقد وجدت أن اختبار الوحدة وحده لا يستحق العمل ، وعادة ما يتم خفضه عندما تقترب المواعيد النهائية.

بدلاً من التحدث عن اختبار الوحدة من وجهة نظر التحقق "test-after" ، يجب أن ننظر إلى القيمة الحقيقية التي تم العثور عليها عند البدء في كتابة المواصفات / الاختبار / الفكرة قبل التنفيذ.

لقد غيرت هذه الفكرة البسيطة الطريقة التي أكتب بها البرمجيات ولن أعود إلى الطريقة "القديمة".

كيف تغير تطور الاختبار الأول حياتي


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


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

واحدة من الحيل المفضلة لدي عند استكشاف أطر عمل جديدة أو codebases هي كتابة اختبارات الوحدة لـ "it" لاكتشاف كيفية عمل الأشياء. إنها طريقة رائعة لمعرفة المزيد عن شيء جديد بدلاً من قراءة مستند جاف :)


يجب عليك اختبار أقل قدر ممكن!

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

في كثير من الأحيان أرى الكثير من الاختبارات التي لن تنكسر أبداً ، وهي كبيرة وخرقاء ولا تقدم الكثير من القيمة ، بل إنها في نهاية المطاف تبطئك.


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

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

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

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

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


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

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

قم بالتحضير للأمام ، وقليلًا من الجهد الإضافي ، ويدفع 10 أضعاف في وقت لاحق عندما يكون عليك البدء في التجريب باستخدام الميزات / الوظائف الأساسية.

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







unit-testing