ما هو اختبار الوحدة البرمجية Unit testing

اقرأ في هذا المقال


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

ما هو اختبار الوحدة

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

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

كيف يعمل اختبار الوحدة

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

اختبار الصندوق الأبيض:

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

اختبار الصندوق الأسود:

هو نوع من الاختبار يكون فيه المختبِر لا يدرك الدالة الداخلية للنظام، والهيكل الداخلي للوظيفة المراد اختبارها غير معروف.

اختبار الصندوق الرمادي:

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

لماذا يعتبر اختبار الوحدة مهمًا

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

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

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

كيفية القيام باختبار الوحدة

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

  • يتم اجراءه يدوياً.
  • يتم اجراءه آلياً.

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

تقنيات اختبار الوحدة

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

  • تغطية البيان.
  • تغطية القرار.
  • تغطية الفرع.
  • تغطية الحالة.
  • تغطية آلة الحالة المحدودة.

أدوات اختبار الوحدة

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

1- Junit: هي أداة اختبار مجانية تستخدم في لغة برمجة (Java)، توفر تأكيدات لتحديد طريقة الاختبار، تختبر هذه الأداة البيانات أولاً ثم تُدرج في جزء الكود.

2- NUnit: تستخدم على نطاق واسع إطار عمل اختبار الوحدة لجميع لغات (.net)، وهي أداة مفتوحة المصدر تسمح لكتابة البرامج النصية يدويًا، وتدعم الاختبارات التي تعتمد على البيانات والتي يمكن إجراؤها بالتوازي.

3- JMockit: أداة اختبار وحدة مفتوحة المصدر، هي أداة تغطية الكود مع مقاييس الخط والمسار، تسمح بالكائنات المزيفة. توفر هذه الأداة تغطية الخط وتغطية المسار وتغطية البيانات.

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

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

ميزات اختبار الوحدة

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

مساوئ اختبار الوحدة

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

المصدر: Unit Testing Techniques and Best PracticesUnit Testing Tutorial: What is, Types, Tools & Test EXAMPLE? What Is Unit Testing


شارك المقالة: