كائن وهمي

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

التشبيه

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

تحفيز

في اختبار الوحدة ، يمكن للكائنات الوهمية محاكاة سلوك الكائنات الحقيقية المعقدة، ولذلك فهي مفيدة عندما يكون من غير العملي أو المستحيل دمج كائن حقيقي في اختبار الوحدة. إذا كان للكائن أي من الخصائص التالية، فقد يكون من المفيد استخدام كائن وهمي بدلاً منه:

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

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

التفاصيل الفنية

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

نسخ مقلدة أو مزيفة أو ناقصة

تختلف تعريفات الكائنات الوهمية (mock) والكائنات المزيفة (fake) والكائنات البديلة (stub) في المراجع العلمية. [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] ومع ذلك، فإنها جميعًا تمثل كائنًا إنتاجيًا في بيئة اختبار من خلال عرض نفس الواجهة.

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

قد يحتوي كائن الاختبار هذا على تأكيدات لفحص سياق كل استدعاء. على سبيل المثال، قد يؤكد كائن وهمي ترتيب استدعاء أساليبه، أو يؤكد اتساق البيانات عبر استدعاءات الأساليب.

في كتاب "فن اختبار الوحدات " [ 7 ] ، تُعرَّف الكائنات الوهمية بأنها كائنات زائفة تُستخدم لتحديد نجاح أو فشل الاختبار من خلال التحقق من حدوث تفاعل مع كائن ما. أما ما عدا ذلك، فيُعرَّف بأنه كائنات بديلة. في ذلك الكتاب، تُعرَّف الكائنات الزائفة بأنها أي شيء غير حقيقي، والتي، بناءً على استخدامها، يمكن أن تكون إما كائنات بديلة أو كائنات وهمية .

تحديد التوقعات

لنفترض مثالاً حيث تم محاكاة نظام فرعي للتفويض. يُنفذ الكائن المُحاكى دالةً [ 8 ] تُطابق تلك الموجودة في فئة التفويض الحقيقية. تترتب على ذلك مزايا عديدة إذا كشف أيضاً عن خاصية غير موجودة في الفئة الحقيقية. يسمح هذا لرمز الاختبار بتحديد توقعات منح المستخدم الإذن أو رفضه في الاستدعاء التالي بسهولة، وبالتالي اختبار سلوك بقية النظام في كلتا الحالتين.isUserAllowed(task : Task) : booleanisAllowed : boolean

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

كتابة سلاسل السجل

قد لا تحتوي طريقة كائن قاعدة البيانات الوهمي على الكثير من التعليمات البرمجية التنفيذية (إن وجدت). قد تتحقق من وجود كائن الشخص المُمرر للحفظ، وربما من صحته (انظر مناقشة الكائنات الوهمية مقابل الكائنات المزيفة أعلاه)، ولكن بخلاف ذلك، قد لا يكون هناك أي تنفيذ آخر.save(person : Person)

هذه فرصة ضائعة. يمكن للدالة الوهمية إضافة مدخل إلى سلسلة سجلات عامة. لا يشترط أن يتجاوز المدخل عبارة "تم حفظ بيانات الشخص" [ 9 ] : 146-147 ، أو قد يتضمن بعض التفاصيل من كائن بيانات الشخص، مثل الاسم أو المعرّف. إذا تحقق رمز الاختبار أيضًا من المحتويات النهائية لسلسلة السجلات بعد سلسلة من العمليات التي تتضمن قاعدة البيانات الوهمية، فمن الممكن التحقق من أنه في كل حالة تم تنفيذ العدد المتوقع بالضبط من عمليات حفظ البيانات. وهذا بدوره يكشف عن أخطاء خفية تؤثر سلبًا على الأداء، على سبيل المثال، عندما يقوم مطور، خوفًا من فقدان البيانات، بكتابة استدعاءات متكررة لدالة save()كان من الممكن أن تكفي استدعاء واحد لها.

يُستخدم في تطوير البرمجيات الموجه بالاختبار

يستخدم المبرمجون الذين يعملون بمنهجية التطوير الموجه بالاختبار (TDD) الكائنات الوهمية عند كتابة البرامج. تلبي الكائنات الوهمية متطلبات واجهة الكائنات الحقيقية الأكثر تعقيدًا، وتحل محلها؛ مما يسمح للمبرمجين بكتابة واختبار وظائف وحدة واحدة دون الحاجة إلى استدعاء فئات معقدة أساسية أو متعاونة . [ 9 ] : 144-145. يتيح استخدام الكائنات الوهمية للمطورين تركيز اختباراتهم على سلوك النظام قيد الاختبار دون القلق بشأن تبعياته. على سبيل المثال، يمكن التعبير بوضوح عن اختبار خوارزمية معقدة تعتمد على وجود كائنات متعددة في حالات معينة باستخدام الكائنات الوهمية بدلًا من الكائنات الحقيقية.

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

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

القيود

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

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

انظر أيضاً

مراجع

  1. "أفضل ممارسات اختبار الوحدات باستخدام .NET Core و .NET Standard - لنتحدث لغة واحدة (Fake، Stubs، وMocks)" . وثائق مايكروسوفت . مؤرشف من الأصل في 3 سبتمبر 2022.
  2. دارسي، هاملت (21 أكتوبر 2007). "الجواسيس ليسوا جواسيس" . خلف العصر . مؤرشف من الأصل في 20 يونيو 2017.
  3. "نماذج وهمية، مزيفة، ناقصة، ونماذج تجريبية" . XUnitPatterns.com . مؤرشف من الأصل بتاريخ 17 يناير 2024.
  4. "ما الفرق بين الكائن الوهمي والكائن البديل؟" . ستاك أوفرفلو . مؤرشف من الأصل في 4 يوليو 2022.
  5. "ما الفرق بين التظاهر والسخرية والتظاهر بالضعف؟ "
  6. فيذرز، مايكل (2005). "الاستشعار والفصل". العمل بفعالية مع البرامج القديمة . نيوجيرسي: برنتيس هول. ص 23 وما يليها. ISBN  0-13-117705-2.
  7. أوشيروف، روي (2009). "اختبار التفاعل باستخدام الكائنات الوهمية وما إلى ذلك". فن اختبار الوحدات . مانينغ. ISBN 978-1-933988-27-6.
  8. تستخدم هذه الأمثلة مصطلحات مشابهة لتلك المستخدمة في لغة النمذجة الموحدة
  9. 1 2 بيك، كينت (2003). تطوير البرمجيات الموجه بالاختبار من خلال الأمثلة . بوسطن: أديسون ويسلي. ISBN 0-321-14653-0.
  10. من InJava.com إلى السخرية | أورايلي ميديا