غرض مقلد

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

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

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

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

## المقلد والمزيف (MOCKS AND FAKES)
بعض الكتاب يميزون بين الأغراض المزيفة والأغراض المقلدة. فالمزيفة هي الأبسط حيث تحقق الواجهة نفسها للأغراض التي تمثلها. بينما الأغراض المقلدة في هذه الحالة تفعل أكثر بقليل من الأغراض المزيفة حيث تحقيق (IMPLEMENT) توابعها الأعضاء موجودة ضمنها. هذا يعني أن الأغراض المقلدة ومن خلال المفهوم السابق ستقوم بفحص السياق لكل طلب وربما التدقيق في كل ترتيب لطلب التوابع الأعضاء METHODS أو ربما تأدية فحص على المعطيات التي ستمرر في كل استدعاء للتوابع الأعضاء كمعاملات.
## الإعدادات المطلوبة (SETTING EXPECTATION)
لنأخذ بالاعتبار المثال التالي:
نظام فرعي مقلد للسماحيات الغرض المقلد يحقق التابع: {IS USER ALLOWED (TASK TASK) :BOOLEAN;}
من صف السماحيات الحقيقي نحصل على العديد من الإيجابيات في حال طبقنا التابع IS ALLOWED():BOOLEAN; و الذي هو غير موجود في الصف الحقيقي مما يمكن كود الاختبار من تسهيل توقع مجموعة الاستخدامات التي سيحصل المستخدم على صلاحية لاستخدامها في الاستدعاء القادم وبذلك جاهزية الاختبار وسلوك باقي النظام في باقي الحالات. مما يمكن المطورين من اختبار سلوك الزبائن من اجل جميع حالات الأخطاء الواقعية مما يمكننا من وضع استجابات للأخطاء التي أصبحت متوقعة. من غير هذا النظام المقلد السهل المرن ستصبح دراسة الحالات المعقدة بحاجة إلى جهد كبير واعتبارات كثيرة.

استخدام الاختبارات المشتقة في عملية التطوير(USE IN TEST –DRIVEN DEVELOPMENT) :
المبرمجين الذين يعملون في توابع TDD (TEST- DRIVEN DEVELOPMENT) يستخدمون الأغراض المقلدة في كتابة البرامج. الأغراض المقلدة تحقق متطلبات الواجهات لأغراض حقيقية معقدة وبذلك يمكن للمبرمجين كتابة واختبار مقدار فاعلية التابع في مجال واحد بدون استدعاء معقد لصفوف مشتركة أو ضمنية. مما يعني إمكانية المطورين من التركيز على اختبارات في اختبار سلوك النظام المختبر (تحت الاختبار) بدون القلق على ارتباطه بالآخرين. على سبيل المثال :
اختبار خوارزمية معقدة تعتمد على أغراض متعددة بحالة ثابتة يمكن تمثيلها باستخدام أغراض مقلدة بدلا من أغراض حقيقية بغض النظر عن قضايا التعقيد والفوائد المكتسبة من خصائص الفصل هناك فرق في سرعة العملية حيث تطوير جزء حقيقي من برنامج باستخدام TDD يمكن أن يستخدم عدة مئات من الـ UNIT TEST إذا كان العديد من هذه الاتصالات السابقة يتطلب اتصال مع قاعدة المعطيات أوال WEB SERVICE أو عمليات على الشبكة مما يجعل وحدة الاختبار تتباطأ بسرعة.
عند الانتهاء من عملية الاختبار واستبدال الأغراض المقلدة بأغراض حقيقية وننتهي من اختبار الوحدة ونبدأ بعملية اختبار أخرى للأغراض الحقيقية وهذا ما يدعى باختبار التكامل.

## JSMOCK
هي مكتبة لها كل ميزات الأغراض المقلدة تعمل من اجل JAVA SCRIPT أي تقديم الأدوات الضرورية من اجل اختبارات تفاعلية فعالة. يزودنا JSMOCK بمسجل توقعات ومطابق (MATCHING) هو ذو واجهات بسيطة سهلة التعامل مما يجعل عملية الاختبار سهلة.

## تعريف وحدة الاختبار (UNIT TEST)
في البرمجة وحدة الاختبار هي طريقة تأكيد صحة عمل وحدة فردية (INDIVIDUAL UNIT) من الكود ولاختبارها. الوحدة هي اصغر جزء من التطبيق قابل للاختبار في البرمجة الإجرائية الوحدة يمكن أن تكون برنامج قائم بذاته أو تابع أو إجرائية أو..........في حين في البرمجة غرضية التوجه اصغر وحدة ممكنة هي ال METHOD التي يمكن أن تنتمي إلى صف BASE أو SUPER وبمعنى آخر صف مشتق DERIVED أو مجرد ABSTRACT.
بشكل مثالي كل حالة اختبار لا تعتمد أبدا على الأخرى.

TEST -DRIVEN DEVELOPMENT(TDD):
أثبتت سابقا أنها أفضل طريقة من اجل تطوير البرمجيات من خلال ال (TDD) نصل إلى حالة حيث أن أحد ال METHOD يحتاج إلى التواصل مع صفوف أخرى يعرف توابعها. ومن اجل فحص هذا ال METHOD يجب علينا إنشاء METHOD يقوم بالتعامل معه أولا. على أي حال هذا سيحرف مفهوم ال UNIT TESTING لكننا نملك أدوات مفيدة من اجل السيطرة على هذا النوع من الحالات مثل JMOCK وEASY MOCK والتي تقلد الأغراض وال METHODS التي تتفاعل معها. وبذلك نكون قد استغنينا عن استخدام غرض حقيقي لإنهاء الاختبار على هذا ال METHOD.

## المصادر

* www.jmock.com
* www.theserverside.com

تصنيف:اختبار الوحدة
تصنيف:برمجة قصوى
تصنيف:كائن (علوم الحاسوب)
تصنيف:نص برمجي مصدري
تصنيف:نماذج تصميم البرمجيات