ما هو اختبار القرد والغوريلا؟ أمثلة، الفرق

⚡ ملخص ذكي

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

  • 🐒 الفكرة الأساسية: النقرات العشوائية وضغطات المفاتيح والإيماءات تختبر النظام بحثًا عن نقاط التعطل بدلاً من النتائج المتوقعة.
  • 🦍 مقارنة الغوريلا: يركز اختبار Gorilla على اختبار وحدة واحدة بشكل متكرر، بينما يتجول اختبار monkey عبر التطبيق بأكمله.
  • 🧠 ثلاث درجات: تختلف القرود الغبية والذكية واللامعة في مدى معرفتها بالنظام قيد الاختبار.
  • 🇧🇷 مقايضة صادقة: رخيص وسريع التشغيل، لكن من الصعب إعادة إنتاج العيوب ولا يمكن ضمان التغطية.
  • 🛠️ الأدوات: Android تقوم أدوات مثل UI/Application Exerciser Monkey و MonkeyRunner وما شابهها بإنشاء تدفقات الأحداث تلقائيًا.
  • 🎯 الأنسب: الإصدارات المبكرة، والواجهات التفاعلية، واختبارات الاستقرار، دائماً ما تقترن بالاختبارات المكتوبة والاستكشافية.

مقارنة بين اختبار القرود واختبار الغوريلا في اختبار البرمجيات

ما هو اختبار القرود؟

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

الاسم مشتق من صورة بسيطة، موضحة أدناه.

يقوم المختبِر بدور القرد الذي يُدخل بيانات عشوائية أثناء اختبار القرد.

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

ما هو اختبار الغوريلا؟

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

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

أنواع اختبار القرد

يُقسّم اختبار القرود إلى فئات حسب مدى معرفة المختبِر بالنظام. يلخص الرسم البياني أدناه الأنواع الثلاثة.

أنواع اختبارات القرود: الغبية، والذكية، والعبقرية

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

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

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

اختبار القرود مقابل اختبار الغوريلا

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

اختبار القرود مقابل الاختبار المخصص

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

مزايا وعيوب اختبار القرود

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

مزايا اختبار القرود

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

مساوئ اختبار القرود

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

كيفية إجراء اختبار القرود

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

  1. قم بتسجيل التطبيق قيد الاختبار باستخدام الأداة أو الخادم المخصص الذي سيقوم بتشغيله.
  2. قم بإعداد المراجع والتكوينات التي تحتاجها الأداة لإنشاء مجموعة اختبار.
  3. قم بتشغيل مجموعة الاختبارات المُنشأة.
  4. دع الأداة تكتب سجلها - يسجل ملف سجل "اختبار القرد" كل حدث تم إنشاؤه والنتائج.
  5. اسمح باستمرار التشغيل حتى يصل النظام إلى نقطة تعطل، وعندها يتم تسجيل الإجراء المخالف في السجل.
  6. قم بمشاركة التقرير مع الفريق المسؤول واحفظ بيانات الاختبار للرجوع إليها مستقبلاً.

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

أدوات اختبار القرود

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

  • قرد اختبار واجهة المستخدم/التطبيقات: أداة سطر أوامر مدمجة في Android الذي يجري في بنك التنمية الآسيوي شل ويرسل تدفقات شبه عشوائية من أحداث المستخدم، مثل النقرات والإيماءات وضغطات المفاتيح، بالإضافة إلى أحداث على مستوى النظام، إلى جهاز أو محاكي.
  • مونكي رانر: منفصلة Python API يقوم هذا البرنامج بتشغيل الأجهزة والمحاكيات من محطة العمل، وإرسال أوامر محددة والتقاط لقطات شاشة. على الرغم من اسمه، إلا أنه ليس نفس أداة "القرد المُمرِّن".
  • أداة أتمتة واجهة المستخدم و Appium: جنرال لواء اختبار المحمول أطر عمل يمكن برمجتها لإطلاق تسلسلات أحداث شبه عشوائية في عملية البناء.
  • أدوات اختبار التشويش مثل AFL: نفس فكرة الإدخال العشوائي تُطبق على البيانات بدلاً من الإيماءات، وهو ما تم تناوله في اختبار التشويش.

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

متى يُستخدم اختبار القرود؟

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

استخدمه عندما:

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

تجنبه عندما:

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

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

الأسئلة الشائعة

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

الاختبار الاستكشافي مُتعمّد: يضع المُختبِر فرضية، ويتحقق منها، ثم يُعدّلها. أما اختبار القرود فهو غير مُوجّه مُسبقًا. يعتمد الأول على التقدير، بينما يعتمد الثاني على الكمّ والعشوائية.

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

ينتمي برنامج Chaos Monkey إلى هندسة الفوضى: فهو يعطل الخدمات أو يعطل البنية التحتية بشكل عشوائي لاختبار مرونتها. الفكرة المشتركة هي العشوائية، لكن الهدف هو النظام الأساسي قيد التشغيل، وليس واجهة المستخدم.

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

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

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

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

تلخيص هذه التدوينة بـ: