سبق وأن طرحت موضوع حول الإختبارات البرمجية والذي يمثل أهم الإختبارات التي يمكن عملها عند بناء تطبيقات , ومن الأجزاء المهمه هي الوحدات الإختبارية “unit testing” , قبل أن نتطرق إلى فنيات الكود وكيفية تطبيق الوحدة الإختبارية دعونا أولا أن نعرف ما هي الوحدة الإختبارية , وما هي الفائدة المرجوة من عملها
unit test (الوحدة الإختبارية) :
هي أصغر وحدة إختبار موجوده في النظام يتم من خلالها إختبار function أو وحدة كاملة من الcode, وهي تتكون من أكواد بسيطة تقوم بإستدعاء ال function أو وحدة ال code وإدخال قيم تجربية في حال كانت مطلوبة والتحقق من أن المخرج لهذه ال functions يوافق المتوقع
أهمية الوحدة الإختبارية:
هناك من يقلل من أهمية الوحدة الإختبارية نظرا لأن التطبيقات التي يقوم عليها بسيطه , ولكن الأمر يختلف تماما عند إنشاء تطبيقات معقدة أو دائمة التطوير حيث أن الوحدات الإختبارية تساعد في تماسك التطبيق دائما , كما أنه في حال حدوث أي تغيير في المشروع أو تطوير , يمكن تشغيلها لمعرفة ما إذا كان قد حدث خلل في التطبيق بالتغيرات الجديده وبالتالي معرفة حدوث المشاكل دون الحاجة لإختبار كل التطبيق بشكل سريع وبسيط
تنظيم الوحدات الإختبارية :
يمكن تنظيم الوحدات الإختبارية بإنشاء ملف خاص لكل مهمة أساسية في النظام أو بالشكل الذي يحقق متطلبات النظام , ويتم تجميع هذه الوحدات بما يسمى ب test suite “مركبات الإختبار” , بحيث يتم ربط كل الوحدات الإختبارية فيها ويتم تشغيلها لتقوم بفحص كل ما تحويه من الوحدات وتظهر الأخطاء بكل وحده , هذه المركبات يمكن تنظيمها على حسب طريقة العمل , فيمكن على سبيل المثال عمل وحدة إختبارية خاصة بتسجيل المستخدم وأخرى خاصة بالتحكم فيه وأخرى خاصة بحذفه .. إلخ فيمكن وضع كل هذه الوحدات في مركبة إختبارية تسمى “عمليات المستخدم” تقوم بإختبار جميع الوحدات.
مثال / تطبيق الوحدات الإختبارية بإستخدام ال PHP :
توجد مكتبات عديدة تساعد في عمل الوحدات الإختبارية ومن أكثرها شيوعا simpletest , phpUnit وغيرها الكثير سنقوم بإستخدام
phpUnit
ملاحظة : يمكن إستعمال Zend Studio والذي يرتبط بمكتبة ال phpUnit وفيه آليات جاهزه لتشغيل الوحدات الإختباريه
لنفرض أن لدينا class
<?php
class mathClass{
public function sum($x,$y){
return ($x+$y);
}
}
?>
سنقوم بإنشاء وحدة إختبار
<?php
class TestMathClass extends PHPUnit_Framework_TestCase /*التصنيف الرئيسي للإختبارات*/{
protected $_mathClass;
public function setUp() { //دالة يتم تشغيلها عند بدء تشغيل الإختبار
parent::setUp ();
$this->_mathClass = new mathClass();
}
public function test_sum() {
//يجب أن تبدأ أي دالة إختبار بكلمة
//test حتى تمر على الإختبار
$functionResult=$this->_mathClass->sum(1,2);//الراجع من الدالة المراد إختبارها
$expectedResult=3; //النتيجة المتوقعة
//هناك أنواع كثيرة من التحققات من خلال دوال
// و التي تقوم بالتأكد من مدخلات وفي حال حدث أمر غير متوقع تقوم بإخراج الرسالة المرفقة , وتعطي إنطباع بأن هذه الدالة لا تعملassert
$this->assertTrue ((($functionResult==$expectedResult) ? true : false), ‘حدث خلل في الجمع , تأكد من مراجعة المدخلات’);
}
}
?>
وعند تشغيل الإختبار فإنه سيتحقق ما إذا كانت الدالة تعمل بشكل صحيح أم لا , وبالتالي يمكن القياس على كل الدوال بنفس الطريقة , بمعنى كتابة إختبارات للتأكد من عملها وتشغيلها عند التغييرات للتأكد بأنها تقوم بمهامها على الوجه الأساسي , بحيث كلما زادت إختبارات الدالة الواحدة زاد التحقق وبالوقت ذاته زاد تكلفة كتابة الإختبار
لذلك علينا عند كتابة الوحدات الإختبارية الموائمة أن تقوم بتغطية أغلب الإحتمالات دون تعقيد , كما وأن المطور الذي يقوم بالتطوير يقوم بعمل وحدات إختبارية للكود فيكون جزء لا يتجزأ من تطويره وتكون عادة دائمة عند التطوير
كانت هذه نبذة مختصرة عن الوحدة الإختبارية
دمتم بود إلى تدوينة أخرى