اختبار تطبيقات الجوال: دليل عملي
اختبار الجوال (Mobile testing) هو اختبار التطبيقات التي تعمل على الهواتف والأجهزة اللوحية — التطبيقات الأصلية (Native)، والتطبيقات متعددة المنصات والهجينة، ومواقع الويب على الجوال، وتطبيقات الويب التقدمية (PWA). الأسئلة الوظيفية هي نفسها كما في أي مكان آخر؛ أما ما يتغير فهو كل ما يحيط بها: آلاف التركيبات من الأجهزة وأنظمة التشغيل، وشبكة تنقطع وتعود، ومستخدم يُقاطَع كل بضع دقائق، ونظام تشغيل قد يُنهي التطبيق وهو في الخلفية، وأذونات يستطيع المستخدم سحبها في أي وقت.
يرسم هذا الدليل المحوري خريطة المجال كله: ما الذي يجعل الجوال مختلفاً، وكيف تختار الأجهزة، وأي المخاطر تستحق اختباراً، وكيف تنطبق الواجهة الخلفية وإمكانية الوصول والأمان على التطبيقات، وأي إرشادات المنصات تقيس التطبيق عليها، وأين تقع الأتمتة وبوابات الإصدار. ويتفرع منه دليلان أعمق — كتالوج سيناريوهات اختبار تطبيقات الجوال (دورة الحياة، والأذونات، والمقاطعات، والشبكات، والموارد، والإشعارات الفورية) وشرح لأتمتة اختبار الجوال باستخدام Appium وEspresso وXCUITest.
ما الذي يجعل اختبار الجوال مختلفاً
يعمل تطبيق الويب في متصفحات يستطيع الفريق حصرها، وعلى شبكة يستطيع الفريق افتراض استقرارها غالباً. أما تطبيق الجوال فيعمل على عتاد لا يتحكم فيه الفريق، تحت نظام تشغيل يدير حياته: النظام هو من يقرر متى يُوقَف التطبيق مؤقتاً، ومتى يُنهى لتحرير الذاكرة، ومتى يُسمح له باستخدام الشبكة في الخلفية، وأي البيانات يحق له قراءتها. ويتناول منهج ISTQB لاختبار تطبيقات الجوال (CT-MAT) هذه الأمور بوصفها التحديات الخاصة بالجوال: تنوّع الأجهزة والمنصات، والاتصال، ومحدودية الموارد، والطرق التي يستخدم بها الناس جهازاً يحملونه في كل مكان.
وبلغة ISO/IEC 25010، يرفع الجوال وزن التوافقية (التعايش مع التطبيقات الأخرى ومع النظام)، والموثوقية تحت المقاطعة، وكفاءة الأداء (البطارية والذاكرة والبيانات)، وقابلية التفاعل (الشاشات الصغيرة واللمس والاستخدام بيد واحدة)، والأمان (جهاز قد يُفقد أو يُشارَك أو يُكسر حمايته). يجب أن تبيّن استراتيجية اختبار الجوال كيف يُغطّى كل واحد من هذه الجوانب، لا أن تكتفي بالسؤال عمّا إذا كانت الميزات تعمل.
- السياق يتغير باستمرار — الشبكة، والموقع، والاتجاه، ومستوى البطارية، والعمل في المقدمة أو في الخلفية.
- النظام يملك دورة الحياة — يجب أن يستعيد التطبيق حالة المستخدم بعد إنهائه، لا بعد إيقافه مؤقتاً فقط.
- المستخدمون يشغّلون إصدارات قديمة — على عكس الموقع، لا تستطيع إجبار الجميع على أحدث بناء، فالواجهة الخلفية تخدم عدة إصدارات من التطبيق في آن واحد.
- التوزيع له بوابات — تمر الإصدارات بمراجعة المتجر والطرح المرحلي، فيستغرق إصلاح عيب في الإنتاج وقتاً أطول مما في الويب.
- الإدخال مختلف — اللمس، والإيماءات، ولوحات المفاتيح على الشاشة، والإدخال الصوتي، والتقنيات المساعدة مثل TalkBack وVoiceOver.
الأصلي ومتعدد المنصات والهجين والويب وPWA
نوع التطبيق يحدد المخاطر الموجودة والأدوات القادرة على الوصول إلى الواجهة. اعرف أي نوع تختبر — وفي التطبيق الهجين، أي الشاشات أصلية وأيها ويب — قبل أن تخطط لأي شيء.
- التطبيقات الأصلية (Native apps) — تُكتب لمنصة واحدة بحزمة تطويرها الخاصة (Kotlin أو Java على Android، وSwift أو Objective-C على iOS). لها وصول كامل إلى ميزات الجهاز، وتعمل أُطر اختبار المنصة (Espresso وXCUITest) عليها مباشرة. عامل كل منصة كمنتج مستقل يتشارك المتطلبات.
- التطبيقات متعددة المنصات (Cross-platform) — قاعدة شيفرة واحدة تُبنى للمنصتين (مثلاً باستخدام React Native أو Flutter). منطق العمل مشترك، لكن العرض والأذونات ولوحات المفاتيح والتكامل مع المنصة تبقى مختلفة، فكل منصة تحتاج جولة اختبار واجهة خاصة بها.
- التطبيقات الهجينة (Hybrid apps) — غلاف أصلي يستضيف محتوى ويب داخل WebView. اختبر نقطة الالتقاء: التنقل بين الشاشات الأصلية وشاشات الويب، ومشاركة الجلسة وملفات تعريف الارتباط، وزر الرجوع، ورفع الملفات والوصول إلى الكاميرا من محتوى الويب، وما يراه المستخدم عندما يفشل تحميل محتوى الويب.
- ويب الجوال (Mobile web) — موقع يُستخدم في متصفح الجوال. افحص التخطيط المتجاوب، وأهداف اللمس، ومنفذ العرض والتكبير، وتغطية لوحة المفاتيح للحقول، والفروق بين محركات متصفحات الجوال. وسلاسل وكيل المستخدم (User-Agent) في تحليلاتك تبيّن المتصفحات التي يأتي بها المستخدمون فعلاً؛ لكن كثيراً من المتصفحات صارت تقلّص إصدار النظام وطراز الجهاز في هذه السلسلة أو تثبّتهما (مثل Chrome على Android)، فخذ إصدارات الأنظمة وطرازات الأجهزة من User-Agent Client Hints أو من أداة التحليلات في تطبيقك.
- تطبيقات الويب التقدمية (PWA) — تطبيقات ويب لها ملف بيان (Web app manifest) وعامل خدمة (Service worker)، يمكن تثبيتها على الشاشة الرئيسية والعمل دون اتصال. اختبر قابلية التثبيت، والسلوك دون اتصال، وتحديث الذاكرة المؤقتة (هل يحل الإصدار الجديد محل المخزّن؟)، والإشعارات الفورية حيث تدعم المنصة إشعارات الويب لتطبيقات الويب المثبتة.
تجزؤ الأجهزة وإصدارات الأنظمة والشاشات
التجزؤ (Fragmentation) هو عدد البيئات المختلفة التي يجب أن يعمل فيها تطبيقك. في Android ينتج عن كثرة الشركات المصنّعة، ولكل منها طبقة نظام مخصصة، وعن إصدارات كثيرة من النظام مستخدمة في الوقت نفسه، وعن مدى واسع من أحجام الشاشات وكثافاتها والعتاد. وفي iOS نطاق الأجهزة أضيق، لكن عدة إصدارات من iOS وأحجام شاشات تبقى مستخدمة معاً، إضافة إلى أجهزة iPad مع تعدد المهام بتقسيم الشاشة. وتضيف الأجهزة القابلة للطي والأجهزة اللوحية شاشات يتغير حجمها أثناء عمل التطبيق.
فروق إصدارات النظام مهمة لأن المنصات تغيّر سلوكها بين الإصدارات: نموذج الأذونات، وحدود التنفيذ في الخلفية، وقواعد الإشعارات، وميزات الخصوصية. قد يفشل تطبيق كان سليماً على نظام العام الماضي على نظام هذا العام دون تغيير سطر واحد من شيفرته. اقرأ ملاحظات تغيّر السلوك في كل إصدار جديد، وحوّل كل بند يمس تطبيقك إلى اختبار — وشغّل حزمة اختبارات الانحدار على النسخة التجريبية من النظام قبل أن تصل إلى المستخدمين.
- حجم الشاشة ونسبة الأبعاد — هواتف صغيرة، وهواتف طويلة، وأجهزة لوحية، وأجهزة قابلة للطي مطوية ومفتوحة، وتقسيم الشاشة وتعدد النوافذ.
- الكثافة — تستخدم التخطيطات وحدات مستقلة عن الكثافة (dp على Android وpoints على iOS)؛ افحص الصور بحثاً عن الضبابية والنصوص بحثاً عن القص في الكثافات المنخفضة والعالية.
- القواطع وأشرطة النظام — محتوى مخفي تحت شريط الحالة أو فتحة الكاميرا أو مؤشر الشاشة الرئيسية.
- الاتجاه — العمودي والأفقي والتدوير نفسه: هل تحتفظ الشاشة بحالتها وبما أدخله المستخدم؟ ويشترط معيار نجاح WCAG 2.2 رقم 1.3.4 الاتجاه (Orientation) ألا يُقيَّد المحتوى باتجاه واحد إلا إذا كان ذلك الاتجاه ضرورياً.
- السلوك المتجاوب — في ويب الجوال وPWA افحص نقاط التوقف ومنفذ العرض والتمرير الأفقي والتكبير؛ وفي التطبيقات تأكد أن التخطيط يتكيف بدلاً من أن يتمدد.
- طبقات الشركات المصنّعة — تحسين بطارية شديد، وشاشات أذونات مخصصة، وحوارات نظام معدّلة على بعض أجهزة Android.
استراتيجية الأجهزة: المحاكيات والأجهزة الحقيقية ومزارع الأجهزة
لا يستطيع أي فريق الاختبار على كل جهاز، فاستراتيجية الأجهزة قرار مبني على المخاطر. وهي تجيب عن ثلاثة أسئلة: أي البيئات مهمة (من البيانات لا من الآراء)، وأي نوع من الأجهزة يحتاجه كل اختبار، وكم مرة تُختبر كل تركيبة.
محاكيات Android (Emulators) ومحاكيات iOS (Simulators) سريعة ومجانية وقابلة للبرمجة — مثالية للتطوير ولخط التكامل المستمر (CI). لكنها لا تعيد إنتاج كل شيء: الأداء والسلوك الحراري الحقيقيين، واستنزاف البطارية، والكاميرا والمستشعرات، وعتاد القياسات الحيوية، والشبكات الخلوية، وتخصيصات الشركات المصنّعة، وأجزاء من مسار الإشعارات الفورية. ومحاكي iOS ليس محاكياً للعتاد أصلاً: فهو يشغّل تطبيقاً مبنياً للحاسوب المضيف، فيكون أبعد عن عتاد الجهاز الحقيقي. الأجهزة الحقيقية ضرورية قبل الإصدار للأداء والبطارية والكاميرا وBluetooth وNFC والمدفوعات والقياسات الحيوية وكل ما يمس طبقة الشركة المصنّعة. أما مزارع الأجهزة السحابية (Device farms) فتؤجّر أجهزة حقيقية (ومحاكيات) عن بُعد لتشغيل حزم آلية أو جلسات يدوية — تغطية واسعة دون شراء مختبر وصيانته.
ابنِ مصفوفة الأجهزة من تحليلاتك أنت: اسرد إصدارات الأنظمة وطرازات الأجهزة وفئات الشاشات، وفي ويب الجوال المتصفحات، مرتبةً حسب حصتها من المستخدمين النشطين. غطِّ الأجهزة التي تحمل معظم حركتك، وأقدم إصدار نظام ما زلت تدعمه، وأحدث إصدار (ونسخته التجريبية)، وشاشة صغيرة وأخرى كبيرة، وأي عائلة أجهزة تسببت في حوادث. ثم اجمع بقية المعاملات — اللغة والاتجاه والشبكة وحجم الخط — بالاختيار الثنائي (Pairwise) بدلاً من الضرب الكامل لكل التركيبات.
وفي المثال التوضيحي أدناه تُقسَّم المصفوفة إلى ثلاث طبقات. الطبقة 1 (Tier 1) أجهزة حقيقية تُختبر مع كل إصدار: الأجهزة التي تحمل أكبر حصة من الجلسات، وأقدم إصدار Android مدعوم على جهاز اقتصادي بشبكة بطيئة. والطبقة 2 (Tier 2) تُختبر أيضاً مع كل إصدار، على المحاكيات أو في مزرعة أجهزة: تكبير الخط إلى 200% مع واجهة RTL، وiPhone بشاشة صغيرة مع أكبر حجم Dynamic Type، وiPad بتقسيم الشاشة. والطبقة 3 (Tier 3) لا تُختبر إلا قبل الإصدارات الكبرى، في مزرعة أجهزة: بقية الطرازات التي تتجاوز حصتها 1% من الجلسات، وجهاز قابل للطي، وجهاز لوحي.
Example device matrix (illustrative; build yours from your analytics)
Tier 1 — every release, real devices
Android latest · Samsung mid-range · 6.4" · ar-SA · 4G (largest share of sessions)
iOS latest · iPhone standard · 6.1" · ar-SA · Wi-Fi
Android oldest supported · budget device, 3 GB RAM · en-IN · slow 3G
Tier 2 — every release, emulators/simulators or device farm
Android latest · Pixel · font scale 200% · RTL
iOS latest − 1 · small-screen iPhone · largest Dynamic Type size
iPadOS latest · Split View · landscape
Tier 3 — before major releases, device farm
long tail: remaining models above 1% of sessions, one foldable, one tablet
Combination rule
language × orientation × network × font size → pairwise set, not the full productجرّبها: مولّد الاختبار الزوجي (Pairwise) جرّبها: محلّل User-Agent
ماذا تختبر على الجوال: خريطة المخاطر
يستخدم الاختبار الوظيفي للميزات التقنيات نفسها المستخدمة في أي مكان آخر، ويغطيها دليل كتابة حالات الاختبار. أما ما يخص الجوال فهو مجموعة من مناطق المخاطر يجب أن يغطيها كل تطبيق. ولكل منها سيناريوهات مفصّلة في الدليل المرافق عن سيناريوهات اختبار تطبيقات الجوال؛ وهذه هي الخريطة.
- التثبيت والتحديث وإلغاء التثبيت — تثبيت نظيف، وتحديث من كل إصدار قديم مدعوم مع ترحيل البيانات، وإعادة التثبيت بعد الحذف، ومسح بيانات التطبيق، والنسخ الاحتياطي والاستعادة.
- الأذونات — الطلب الأول، والرفض، والرفض الدائم، والسحب من إعدادات النظام أثناء عمل التطبيق، والمنح لمرة واحدة.
- المقاطعات — المكالمات الواردة، والإشعارات، والمنبهات، والتبديل بين التطبيقات، وقفل الشاشة، وتحذيرات انخفاض البطارية، وإنهاء النظام للتطبيق في الخلفية.
- الشبكة — من Wi-Fi إلى الشبكة الخلوية والعكس، وانعدام الاتصال، ووضع الطيران، والاتصالات البطيئة والمتقطعة، وبوابات الشبكات المقيدة (Captive portals)، والتغييرات دون اتصال التي يجب أن تتزامن عند عودة الاتصال.
- الجهاز والعرض — أحجام الشاشات، والاتجاه، والوضع الداكن، وتكبير الخط، ولوحة المفاتيح على الشاشة، والإيماءات، والأجهزة القابلة للطي، وتعدد النوافذ.
- الموارد — استنزاف البطارية، والمعالج، والذاكرة (التسرب والإنهاء بسبب نقص الذاكرة)، والتخزين (امتلاء القرص وتضخم الذاكرة المؤقتة)، واستهلاك البيانات على الشبكة الخلوية.
- الإشعارات الفورية (Push notifications) — الوصول والتطبيق في المقدمة أو في الخلفية أو بعد إنهائه، والانتقال بالنقر إلى الشاشة الصحيحة، والسلوك عند تعطيل الإشعارات.
- إمكانية الوصول والتوطين والأمان والامتثال لمتطلبات المتجر — تُغطّى أدناه وفي أدلتها الخاصة.
Typical mobile defects (illustrative bug titles)
- Address form loses entered data after rotating the device (Android)
- App crashes on resume after camera permission is revoked in Settings (iOS)
- Order submitted twice when the network drops during "Place order" and the user retries
- Update from 3.8 to 4.0 signs every user out (stored session not migrated)
- Tapping an order notification opens the home screen instead of the order
- "Pay" button hidden behind the keyboard on small screens
- Checkout total truncated at the largest system font size
- Offline edits silently overwritten after reconnectingجرّبها: مولّد سيناريوهات الاختبار جرّبها: مولّد انتقالات الحالات
الواجهة الخلفية للجوال: الواجهات البرمجية والإصدارات ومعالجة الأخطاء
كثير من عيوب الجوال التي تصل إلى المستخدمين ليست في الواجهة، بل في طريقة تواصل التطبيق مع واجهته الخلفية. والواجهة البرمجية (API) هي الجزء الذي تستطيع اختباره بأسرع ما يمكن وبأعلى دقة: يمكن إرسال الطلبات نفسها التي يرسلها التطبيق من عميل API، ويمكن إحداث الحالات التي يصعب خلقها على الجهاز — 503، أو انتهاء المهلة، أو رمز منتهي الصلاحية، أو جسم مشوّه — عن قصد.
مسألتان خاصتان بالجوال تستحقان اختبارات خاصة بهما. الأولى هي تفاوت الإصدارات: المستخدمون يحدّثون متأخرين، فيجب أن تستمر الواجهة الخلفية في خدمة كل إصدار ما زلت تدعمه، وكل تغيير في API يحتاج إلى فحص مقابل أقدم عميل مدعوم. والثانية هي الشبكة المعادية: الطلبات تُعاد وتتكرر وتنقطع في منتصفها. يجب أن تكون نقاط نهاية الطلبات والمدفوعات متساوية الأثر (Idempotent)، وأن يعرض التطبيق حالة واضحة عندما تكون نتيجة الطلب مجهولة.
- استدعِ كل نقطة نهاية يستخدمها التطبيق بحقول صحيحة وغير صحيحة وناقصة، وتحقق من الاستجابات مقابل المخطط.
- اجعل التطبيق يواجه الاستجابات 401 و403 و404 و409 و429 و500 و503 والاستجابات البطيئة؛ وافحص الرسالة والتعافي على الشاشة.
- دع رمز الوصول ينتهي والتطبيق في الخلفية، ثم استأنفه: يجب أن يجدّد التطبيق الرمز بصمت أو يطلب من المستخدم تسجيل الدخول، لا أن ينهار أو يدخل في حلقة.
- افحص أحجام الحمولات: الاستجابات الكبيرة تكلّف وقتاً وبيانات على الشبكات الخلوية.
- قبل كل إصدار للواجهة الخلفية، شغّل أقدم إصدار مدعوم من التطبيق عليها.
جرّبها: مختبِر REST API جرّبها: محاكي رموز حالة API جرّبها: مولّد استجابات خطأ وهمية جرّبها: محلّل حجم الاستجابة
إمكانية الوصول على الجوال
لمنصات الجوال تقنياتها المساعدة الخاصة، ويجب اختبار التطبيق بها: TalkBack على Android وVoiceOver على iOS (قارئا شاشة يُداران بالإيماءات)، والوصول بالمفاتيح البديلة (Switch access)، والتكبير، وتكبير نص النظام (حجم الخط على Android والنص الديناميكي Dynamic Type على iOS). وتنطبق WCAG 2.2 على محتوى الجوال كما على الويب — ومعايير نجاح مثل 1.3.4 الاتجاه (Orientation) و2.5.1 إيماءات المؤشر (Pointer Gestures) و2.5.8 حجم الهدف (الحد الأدنى) (Target Size (Minimum)) وثيقة الصلة بواجهات اللمس — وتضيف إرشادات Android وApple الخاصة بإمكانية الوصول توقعات ملموسة.
يغطي دليل اختبار إمكانية الوصول المنهجية بعمق، بما في ذلك اختبار قارئ الشاشة وإمكانية الوصول المرئية. على الجوال ابدأ بهذه الفحوص:
- لكل عنصر تفاعلي تسمية منطوقة ذات معنى، ودور، وحالة؛ والأزرار المكوّنة من أيقونة فقط هي الإخفاق المعتاد.
- ترتيب التنقل بالسحب في TalkBack أو VoiceOver يتبع الترتيب المرئي والمنطقي، بما في ذلك في التخطيطات من اليمين إلى اليسار.
- يكبُر النص مع إعداد النظام دون قص أو تداخل أو أزرار مبتورة؛ اختبر عند أكبر الأحجام.
- أهداف اللمس كبيرة بما يكفي ومتباعدة: تحدد إرشادات Apple للواجهات 44×44 نقطة حجماً افتراضياً لعناصر التحكم في iOS (و28×28 نقطة حداً أدنى)، وتوصي إرشادات Android بما لا يقل عن 48×48 dp.
- للإيماءات المخصصة بديل بسيط مثل زر، ولا تعتمد أي وظيفة على هز الجهاز أو إمالته وحدهما.
- التباين يبقى كافياً في الوضعين الفاتح والداكن.
أمان الجوال: نظرة سريعة على MASVS وMASTG
يحدد معيار OWASP للتحقق من أمان تطبيقات الجوال (MASVS) ما يجب أن يفعله تطبيق الجوال الآمن، ويصف دليل OWASP لاختبار أمان تطبيقات الجوال (MASTG) كيفية التحقق من ذلك. ويجمع MASVS ضوابطه في مجالات: التخزين، والتشفير، والمصادقة، والاتصال الشبكي، والتفاعل مع المنصة، وجودة الشيفرة، والصمود أمام الهندسة العكسية، والخصوصية. فريق ضمان الجودة الوظيفي لا يحل محل تقييم أمني متخصص للجوال، لكنه يستطيع فحص الأساسيات في كل إصدار ومعرفة متى يستدعي مختصاً.
- التخزين — لا كلمات مرور ولا رموز ولا بيانات شخصية بنص صريح في ملفات التطبيق أو التفضيلات أو السجلات أو لقطات الشاشة المخزنة؛ مكان الأسرار هو Keystore أو Keychain في المنصة. افحص ما يبقى على الجهاز بعد تسجيل الخروج.
- الشبكة — كل الحركة عبر TLS، دون رجوع إلى HTTP الصريح، وأخطاء الشهادات تُرفض لا تُتجاهل.
- المصادقة والجلسة — الرموز تنتهي صلاحيتها، وتسجيل الخروج يُنهي الجلسة على الخادم لا على الجهاز فقط؛ وفتح القفل بالقياسات الحيوية مرتبط بجلسة صالحة على الخادم.
- التفاعل مع المنصة — الروابط العميقة (Deep links) والمكوّنات المكشوفة للتطبيقات الأخرى تتحقق من مدخلاتها؛ والشاشات الحساسة تُخفى في معاينة مبدّل التطبيقات حيث تتطلب المخاطر ذلك.
- الخصوصية — تُطلب الأذونات عند الحاجة فقط وتُشرح في سياقها؛ والبيانات المجمعة تطابق إفصاحات الخصوصية في المتجر.
إرشادات جودة المنصات والجاهزية للمتجر
تنشر المنصتان ما تعدّانه تطبيقاً عالي الجودة، وهذه الوثائق قوائم فحص جيدة. تضع إرشادات Google لجودة التطبيقات الأساسية (Core app quality) في Android معايير أساسية للتجربة المرئية، والوظائف، والأداء والاستقرار، والخصوصية والأمان، مع الاختبارات المستخدمة للتحقق منها. وتصف إرشادات Apple لواجهات المستخدم (Human Interface Guidelines) السلوك المتوقع لواجهات iOS — التنقل وعناصر التحكم والتخطيط وإمكانية الوصول — وتصف إرشادات مراجعة App Store ما يجب أن يستوفيه التطبيق ليُقبل.
استخدمها مرجعاً للحكم (Oracle) على أسئلة نادراً ما يجيب عنها المتطلب: هل يجب أن تغلق إيماءة الرجوع هذه اللوحة؟ ماذا يجب أن يرى المستخدم عندما يعود بعد ساعات؟ هل يُطلب الإذن في سياقه؟ الانحراف عنها ليس عيباً تلقائياً، لكن يجب أن يكون قراراً لا مصادفة.
- التنقل للخلف — زر الرجوع أو إيماءته في Android وإيماءة السحب للرجوع في iOS تتصرف بشكل متوقع في كل شاشة.
- استعادة الحالة — يعود التطبيق إلى حيث كان المستخدم بعد نقله إلى الخلفية أو إنهائه.
- الاستقرار — لا انهيارات ولا حوارات «التطبيق لا يستجيب» (ANR) في المسارات الأساسية.
- بدء التشغيل — البدء البارد حتى شاشة قابلة للاستخدام مقبول على أضعف جهاز تدعمه.
- صفحة المتجر — لقطات الشاشة وإفصاحات الخصوصية ونصوص الغرض من الأذونات تطابق التطبيق.
الأتمتة وCI وبوابات الإصدار
تتبع أتمتة الجوال الهرم نفسه الذي يتبعه أي منتج (انظر دليل الاختبار اليدوي مقابل الآلي): اختبارات وحدة سريعة وكثيرة، وطبقة متينة من اختبارات API على الواجهة الخلفية، ومجموعة أصغر من اختبارات الواجهة للرحلات الحرجة. تستخدم طبقة الواجهة أطر المنصات — Espresso لـ Android وXCUITest لـ iOS — أو Appium الذي يقود المنصتين عبر بروتوكول WebDriver. وتعتمد اختبارات الواجهة المستقرة على معرّفات إمكانية الوصول (Accessibility identifiers) كمحددات، وعلى مزامنة الإطار بدلاً من الانتظار الثابت، وعلى حالة جهاز مضبوطة. ويقارن الدليل المرافق عن أتمتة اختبار الجوال بين الأطر ويسرد مصادر عدم الاستقرار.
في CI شغّل اختبارات الوحدة واختبارات الدخان (Smoke) على المحاكيات مع كل تغيير، وحزمة أوسع على أجهزة حقيقية في مزرعة أجهزة كل ليلة أو قبل الإصدار؛ واحتفظ بالفيديو ولقطات الشاشة وسجلات الجهاز لكل إخفاق. ولأن إصدار الجوال لا يمكن التراجع عنه فوراً، فإن خط الاختبار الأخير يكون حول المتجر: التوزيع الداخلي والتجريبي أولاً (TestFlight على iOS ومسارات الاختبار في Google Play)، ثم طرح مرحلي يصل إلى نسبة صغيرة من المستخدمين قبل الجميع، مع مراقبة معدلات الانهيار وANR وأخطاء API في كل خطوة. وكثيراً ما يكون مفتاح عن بُعد يعطّل ميزة معطوبة أسرع إصلاح متاح.
- بوابة — لا مجموعة انهيارات جديدة في البناء التجريبي خلال فترة المراقبة المتفق عليها.
- بوابة — أقدم إصدار مدعوم من التطبيق ما زال يجتاز فحوص الدخان لـ API مقابل الواجهة الخلفية الجديدة.
- الطرح — أوقفه مؤقتاً إذا انخفض معدل الجلسات الخالية من الانهيار أو معدل نجاح مسار أساسي عن الحد المتفق عليه.
- 1CI مع كل تغييراختبارات الوحدة واختبارات الدخان على المحاكيات
- 2أجهزة حقيقيةحزمة أوسع في مزرعة أجهزة، كل ليلة أو قبل الإصدار؛ فيديو ولقطات شاشة وسجلات الجهاز لكل إخفاق
- 3التوزيع الداخلي والتجريبيTestFlight على iOS ومسارات الاختبار في Google Play
بوابة: لا مجموعة انهيارات جديدة في البناء التجريبي خلال فترة المراقبة المتفق عليها
- 4الطرح المرحلييصل إلى نسبة صغيرة من المستخدمين أولاً، مع مراقبة معدلات الانهيار وANR وأخطاء API في كل خطوة
فرع: أوقفه مؤقتاً إذا انخفض معدل الجلسات الخالية من الانهيار أو معدل نجاح مسار أساسي عن الحد المتفق عليه
- 5الجميع
- مفتاح عن بُعديعطّل ميزة معطوبة؛ وكثيراً ما يكون أسرع إصلاح متاح
- إصدارات الواجهة الخلفية: بوابة منفصلةأقدم إصدار مدعوم من التطبيق ما زال يجتاز فحوص الدخان لـ API مقابل الواجهة الخلفية الجديدة
فترة المراقبة والحدود هي ما يتفق عليه فريقك؛ ولا يفترض الشكل لها قيماً محددة.
الأسئلة الشائعة
ما الفرق بين اختبار تطبيقات الجوال واختبار ويب الجوال؟
يفحص اختبار ويب الجوال موقعاً في متصفحات الجوال: التخطيط المتجاوب واللمس ومنفذ العرض وفروق المتصفحات. ويضيف اختبار التطبيقات كل ما يتحكم فيه النظام — التثبيت والتحديثات، والأذونات، وحالات الخلفية والإنهاء، والإشعارات الفورية، وعتاد الجهاز.
هل أختبر على المحاكيات أم على الأجهزة الحقيقية؟
على الاثنين. المحاكيات سريعة وقابلة للبرمجة، فاستخدمها في التطوير وCI. واستخدم الأجهزة الحقيقية قبل الإصدار للأداء والبطارية والكاميرا والمستشعرات والقياسات الحيوية والشبكات الخلوية والسلوك الخاص بالشركات المصنّعة.
على كم جهاز أحتاج أن أختبر؟
على العدد الذي تتطلبه مخاطرك، مختاراً من تحليلاتك: الأجهزة التي تحمل معظم حركتك، وأقدم وأحدث إصدار نظام مدعوم، وشاشة صغيرة وأخرى كبيرة، والأجهزة المعروفة بمشكلاتها. واجمع بقية المعاملات بالاختيار الثنائي.
ما تجزؤ الأجهزة؟
تنوّع البيئات التي يجب أن يعمل فيها التطبيق — الشركات المصنّعة وإصدارات الأنظمة وأحجام الشاشات وكثافاتها والعتاد. وهو الأكبر في Android، لكن iOS أيضاً فيه عدة إصدارات وأحجام شاشات مستخدمة في آن واحد.
هل أستطيع استخدام الاختبارات الآلية نفسها لـ Android وiOS؟
جزئياً. يتيح Appium لقاعدة شيفرة اختبار واحدة قيادة المنصتين إذا تشارك التطبيقان المسارات ومعرّفات إمكانية الوصول، لكن الشاشات وسلوك المنصة يبقيان مختلفين. أما أطر المنصات (Espresso وXCUITest) فتحتاج حزمة لكل منصة، لكنها عادةً أسرع وأكثر استقراراً.
ما OWASP MASVS؟
معيار OWASP للتحقق من أمان تطبيقات الجوال: مجموعة متطلبات أمنية لتطبيقات الجوال مجمّعة في مجالات مثل التخزين والتشفير والمصادقة والشبكة والتفاعل مع المنصة والشيفرة والصمود والخصوصية. ويصف MASTG كيفية اختبارها.
هل تنطبق WCAG على تطبيقات الجوال؟
كُتبت WCAG لمحتوى الويب، لكن مبادئها ومعظم معايير نجاحها تُطبّق على تطبيقات الجوال الأصلية أيضاً، وبعضها — الاتجاه وإيماءات المؤشر وحجم الهدف — أهم ما يكون على شاشات اللمس. وتنشر Android وApple إرشاداتهما الخاصة لإمكانية الوصول كذلك.
المراجع
- Certified Tester Mobile Application Testing (CT-MAT)منهج ISTQB التخصصي لاختبار تطبيقات الجوال: أنواع التطبيقات وتحديات الأجهزة والمنصات وأنواع الاختبار والأدوات.
- Core app quality guidelinesمعايير Google الأساسية لجودة تطبيقات Android — التجربة المرئية والوظائف والأداء والخصوصية والأمان — مع الاختبارات المستخدمة للتحقق منها.
- Test apps on Androidإرشادات Android الرسمية للاختبار: أنواع الاختبارات ونطاقاتها، والاختبارات المحلية مقابل المُجهَّزة على الجهاز، وأفضل الممارسات.
- OWASP Mobile Application Security Verification Standard (MASVS)متطلبات OWASP الأمنية لتطبيقات الجوال، مجمّعة في مجالات ضبط مثل التخزين والتشفير والمصادقة والشبكة والتفاعل مع المنصة.
- OWASP Mobile Application Security Testing Guide (MASTG)دليل الاختبار المرافق لـ MASVS: تقنيات وحالات اختبار للتحقق من أمان تطبيقات الجوال.
- Accessibility — Human Interface Guidelinesإرشادات Apple لتصميم إمكانية الوصول في iOS وغيره: VoiceOver والنص الديناميكي والتباين وأهداف اللمس والحركة.
- Appium Documentationالتوثيق الرسمي لأتمتة التطبيقات الأصلية والهجينة وتطبيقات الويب على iOS وAndroid.
- Web Content Accessibility Guidelines (WCAG) 2.2توصية W3C التي تحدد معايير النجاح القابلة للاختبار لإتاحة محتوى الويب، مرتّبةً تحت أربعة مبادئ وثلاثة مستويات مطابقة (A وAA وAAA).
تمرين عملي
خطّط لاختبار إصدار تطبيق جوال
أنت مختبِر تطبيق لحجز مواعيد العيادات (مثال خيالي) على Android وiOS. يأتي الإصدار 5.2 بثلاثة تغييرات: صورة وصفة طبية تُرفق بالموعد، وتذكير بالمواعيد عبر الإشعارات الفورية (Push notifications)، وعربون حجز يُدفع في صفحة الويب الخاصة بمزوّد الدفع داخل التطبيق. وتعرض المادة أدناه التغييرات، وتحليلات التطبيق لآخر 30 يوماً، وحادثتين سابقتين، وأجهزة الفريق، وطريقة الإصدار.
اكتب على الورق نهجاً لاختبار الجوال في الإصدار 5.2 في صفحة واحدة، والدليل بين يديك: نوع التطبيق، ومصفوفة الأجهزة، وخريطة المخاطر، وفحوص الواجهة الخلفية، وبوابات الإصدار. واذكر سبب كل قرار حتى يستطيع الفريق مناقشته. ويساعدك في خطوتين من الخطوات مولّد الاختبار الزوجي (Pairwise) من أدوات الدليل، ومولّد الحالات الحدّية بحالات الملفات والتزامن فيه. خصّص لذلك 40–45 دقيقة.
تطبيق حجز مواعيد العيادات (مثال خيالي) - الإصدار 5.2 لـ Android وiOS
قاعدة شيفرة Flutter واحدة للمنصتين. ويُدفع العربون في صفحة ويب يستضيفها
مزوّد الدفع، وتُعرض في WebView داخل التطبيق.
ما يغيّره الإصدار 5.2
التغيير C1: إرفاق صورة وصفة طبية بالموعد، من الكاميرا أو من معرض الصور.
الرفع: POST /v2/appointments/{id}/attachments
التغيير C2: إشعار فوري (Push) للتذكير قبل الموعد بساعتين؛ والنقر عليه يفتح
ذلك الموعد.
التغيير C3: دفع عربون حجز قدره 50.00 ريال في صفحة الدفع المستضافة.
يعيد الطلب POST /v2/appointments/{id}/deposit (مع الترويسة Idempotency-Key)
عنوان صفحة الدفع.
تُطلق الواجهة الخلفية 5.2 في 18 أكتوبر 2026، ويتبعها التطبيقان بعد أسبوع واحد
بطرح مرحلي. إصدارات التطبيق المدعومة: من 4.9 إلى 5.2.
التحليلات لآخر 30 يوماً (الحصة من المستخدمين النشطين)
منصة Android: 64%
جهاز Samsung متوسط الفئة، شاشة 6.5 بوصة: 19%
جهاز Samsung اقتصادي، ذاكرة 3 GB RAM: 11%
جهاز Xiaomi اقتصادي: 9%
جهاز Pixel: 4%
طرازات أخرى، حصة كل منها أقل من 1%: 21%
إصدارات النظام: الأحدث N: 12%، وN-1: 27%، وN-2: 16%، والأقدم منها: 8%،
والإصدار Android 10 (أقدم إصدار مدعوم): 1%
منصة iOS: 36%
جهاز iPhone قياسي، شاشة 6.1 بوصة: 17%
جهاز iPhone كبير، شاشة 6.7 بوصة: 8%
جهاز iPhone صغير، شاشة 4.7 بوصة: 6%
جهاز iPad: 2%
طرازات أخرى، حصة كل منها أقل من 1%: 3%
إصدارات النظام: الأحدث N: 27%، وN-1: 7%، وN-2 (أقدم إصدار مدعوم): 2%
اللغة: العربية 71%، والإنجليزية 29%. أكبر حجم لخط النظام: 3% من المستخدمين.
الحوادث
الحادثة INC-41 (الإصدار 5.0): لم تصل تأكيدات الحجز (Push) إلى أجهزة Xiaomi
بعد إغلاق التطبيق بسحبه من قائمة التطبيقات الأخيرة؛ والسبب موفّر البطارية
الخاص بالشركة المصنّعة.
الحادثة INC-44 (الإصدار 5.1): على أجهزة Samsung الاقتصادية، بعد التقاط صورة
الملف الشخصي عاد التطبيق إلى الشاشة الرئيسية وضاعت الصورة.
معاملات أخرى للجمع
اللغة: ar وen | الاتجاه: عمودي وأفقي
الشبكة: Wi-Fi و4G و3G بطيئة | حجم الخط: الافتراضي والأكبر
إعداد الفريق
المختبر (أجهزة حقيقية): Samsung متوسط الفئة (Android N-1) وiPhone قياسي (iOS N)
مزرعة الأجهزة: أجهزة حقيقية ومحاكيات للطرازات أعلاه، تُحجز لكل جلسة
خط CI: اختبارات دخان على محاكي Android ومحاكي iOS مع كل دمج
النسخة التجريبية: TestFlight ومسار اختبار مغلق في Google Play (موظفو العيادات)
المفاتيح عن بُعد: C1 نعم، C2 لا، C3 نعم- سمِّ نوع التطبيق واكتب ما يعنيه للخطة: ما الذي توفّره قاعدة شيفرة Flutter المشتركة، وما الذي لا توفّره، وما الذي تضيفه صفحة الدفع داخل WebView.
- ابنِ مصفوفة الأجهزة في ثلاث طبقات: أجهزة حقيقية مع كل إصدار؛ ومحاكيات أو مزرعة الأجهزة مع كل إصدار؛ ومزرعة الأجهزة قبل الإصدارات الكبرى، مع سبب من المادة لكل بند. وحدّد الاختبارات التي تحتاج إلى جهاز حقيقي. ثم اجمع بقية المعاملات بالاختيار الثنائي (Pairwise): كم تشغيلاً تحتاج بدلاً من الضرب الكامل لكل التركيبات؟
- مرّ على خريطة المخاطر في الدليل للتغييرات C1 وC2 وC3: سمِّ مناطق المخاطر التي تنطبق على كل تغيير، واكتب ثلاث أفكار اختبار على الأقل، الأهم أولاً.
- اسرد الفحوص التي تجريها بعميل API قبل إطلاق الواجهة الخلفية في 18 أكتوبر 2026: تفاوت الإصدارات، والعربون، والرفع الجديد، واستجابات الخطأ التي يجب أن يتعامل معها التطبيق.
- اكتب بوابات الإصدار وخطة الطرح: ما الذي يجب أن ينجح قبل كل خطوة، وما الذي تراقبه أثناء الطرح المرحلي، ومتى توقفه مؤقتاً، وماذا يعني غياب المفتاح عن بُعد للتغيير C2.
إظهار الإجابة النموذجية
نوع التطبيق. يجعل Flutter التطبيقَ متعدد المنصات (Cross-platform): منطق العمل مشترك، لكن العرض وحوارات الأذونات ولوحات المفاتيح والتنقل للخلف والتكامل مع الإشعارات الفورية تبقى مختلفة بين المنصتين، فيحتاج كل من C1 وC2 وC3 إلى جولة اختبار واجهة على Android وأخرى على iOS؛ ونجاح الجولة على منصة لا يقول شيئاً عن الأخرى. أما ما توفّره الشيفرة المشتركة فهو منطق العمل: اختبارات الوحدة له تُكتب مرة واحدة. وصفحة الدفع تجعل التطبيق هجيناً (Hybrid) في موضع واحد، فاختبر نقطة الالتقاء: هل تُفتح الصفحة بجلسة الدفع التي أعادها طلب العربون، أي لهذا الموعد وبمبلغ 50.00 ريال؛ وماذا يحدث عند زر الرجوع في Android وإيماءة السحب للرجوع في iOS في منتصف الدفع؛ وماذا يرى المستخدم عندما يفشل تحميل الصفحة (دون اتصال، أو استجابة 503)؛ وماذا يعرض التطبيق عند العودة من الصفحة (تم الدفع، أو لم يتم، أو أُلغي). وقبل أن تَعِد بتغطية آلية لخطوة الدفع، تأكد أن أداة أتمتة الواجهة لديك تستطيع الوصول إلى المحتوى داخل WebView.
مصفوفة الأجهزة، الطبقة 1 (Tier 1): أجهزة حقيقية مع كل إصدار. (1) جهاز Samsung متوسط الفئة على Android N-1، بالعربية، على شبكة 4G: الطراز الأكثر استخداماً (19%) على إصدار Android الأكثر استخداماً (27%)، وهو في المختبر. (2) جهاز iPhone القياسي على iOS N، بالعربية، على Wi-Fi: طراز iOS الأكثر استخداماً (17%) على إصدار iOS الأكثر استخداماً (27%)، وهو في المختبر أيضاً. (3) جهاز Samsung الاقتصادي بذاكرة 3 GB على Android N-2 من مزرعة الأجهزة: 11% من المستخدمين على ثاني أكثر إصدارات Android استخداماً (16%)، والحادثة INC-44 هي العلامة المعتادة على أن النظام أنهى التطبيق والكاميرا مفتوحة ثم لم يستعد التطبيق حالته، وهذا هو المسار الذي يسلكه C1. (4) جهاز Xiaomi الاقتصادي على أحد الإصدارات الأقدم من N-2 (8% مجتمعةً) من مزرعة الأجهزة: 9% من المستخدمين، والحادثة INC-41 تُظهر أن موفّر البطارية الخاص بالشركة المصنّعة يوقف الإشعارات الفورية، وهذا هو المسار الذي يسلكه C2. والجهازان 3 و4 في الطبقة 1 بسبب حوادثهما، وهي سبب مستقل في الدليل، لا بسبب حصتهما وحدها.
الطبقة 2 (Tier 2): مع كل إصدار، على المحاكيات أو في مزرعة الأجهزة. الإصدار Android 10، وهو أقدم إصدار مدعوم (1%)، لأن نموذج الأذونات فيه مختلف: لا تحتاج الإشعارات إلى إذن وقت التشغيل إلا ابتداءً من Android 13، ولا يوجد المنح لمرة واحدة («Only this time») لإذن الكاميرا إلا ابتداءً من Android 11، فيسلك C1 وC2 هناك مسارات أخرى؛ وAndroid N (12%) على محاكي Pixel، مع النسخة التجريبية من إصدار Android التالي حين تتوفر؛ وiPhone بشاشة 4.7 بوصة (6%) على iOS N-2، أقدم إصدار iOS مدعوم (2%)، بأكبر حجم للنص (3% من المستخدمين)، فهي الشاشة الصغيرة التي قد تُخفي فيها لوحة المفاتيح زر «ادفع» في صفحة الدفع وقد تُبتر فيها المبالغ؛ وiPhone بشاشة 6.7 بوصة (8%) على iOS N-1 (7%) بوصفها الشاشة الكبيرة. الطبقة 3 (Tier 3): قبل الإصدارات الكبرى، في مزرعة الأجهزة: جهاز iPad (2%) بتقسيم الشاشة (Split View) وبالاتجاه الأفقي، وعيّنة من الطرازات قليلة الاستخدام، إذ لا يبلغ أي طراز آخر 1% من المستخدمين. والجهاز الحقيقي ضروري لالتقاط الصورة في C1 (الكاميرا)، ولوصول الإشعارات الفورية في حالتي الخلفية والإنهاء وخلف موفّر البطارية في Xiaomi في C2. وتكفي المحاكيات للتخطيط، والعرض من اليمين إلى اليسار، وحجم الخط، وحوارات الأذونات في Android 10، وحالات التحميل والخطأ في WebView.
الاختيار الثنائي (Pairwise). اللغة (2) × الاتجاه (2) × الشبكة (3) × حجم الخط (2) تعطي 24 تشغيلاً في الضرب الكامل. ويحتاج الاختيار الثنائي إلى 6 تشغيلات على الأقل، لأن أزواج الشبكة × اللغة وحدها 3 × 2 = 6، وكل تشغيل يغطي زوجاً واحداً منها فقط. ومن المجموعات الصحيحة: (1) Wi-Fi، العربية، عمودي، الخط الافتراضي؛ (2) Wi-Fi، الإنجليزية، أفقي، الخط الأكبر؛ (3) 4G، العربية، أفقي، الخط الأكبر؛ (4) 4G، الإنجليزية، عمودي، الخط الافتراضي؛ (5) 3G بطيئة، العربية، عمودي، الخط الأكبر؛ (6) 3G بطيئة، الإنجليزية، أفقي، الخط الافتراضي. قد تُخرج الأداة 6 صفوف أو 7؛ المهم أن يظهر كل زوج. ووزّع الصفوف على أجهزة الطبقتين 1 و2 بدلاً من تشغيل الستة كلها على كل جهاز.
التغيير C1، صورة الوصفة: الأذونات، والمقاطعات والموارد، والشبكة، والأمان والخصوصية، وإمكانية الوصول. (1) إذن الكاميرا: الطلب الأول، والرفض، والرفض الدائم (يبقى معرض الصور متاحاً ويشرح التطبيق كيف يُسمح بالكاميرا من الإعدادات)، والمنح لمرة واحدة، والسحب من إعدادات النظام والتطبيق في الخلفية ثم الاستئناف: دون انهيار. (2) على جهاز Samsung بذاكرة 3 GB: افتح الكاميرا من موعد، والتقط الصورة، وعُد؛ يجب أن يبقى الموعد والصورة حتى لو أنهى النظام التطبيق في الأثناء (INC-44). ويساعد خيار المطوّرين في Android «Don’t keep activities» على إعادة إنتاج ذلك على أجهزة أخرى. (3) الرفع على شبكة 3G بطيئة ومع انقطاع الاتصال في المنتصف: تقدّم ظاهر ورسالة واضحة عند فشل الرفع، وإعادة محاولة دون مرفق مكرر، وحجم صورة معقول على البيانات الخلوية. (4) الوصفة الطبية بيانات صحية: افحص ما يبقى في ملفات التطبيق وذاكرته المؤقتة بعد الرفع وبعد تسجيل الخروج، وتأكد أن إفصاحات الخصوصية في المتجر تذكر الصور. (5) لزر الكاميرا، وكثيراً ما يكون أيقونة فقط، تسمية منطوقة ذات معنى في TalkBack وVoiceOver.
التغيير C2، التذكيرات: الإشعارات الفورية، والأذونات، والواجهة الخلفية، والخصوصية. (1) الوصول والتطبيق في المقدمة، وفي الخلفية، وبعد إنهائه (بسحبه من قائمة التطبيقات الأخيرة)، على جهاز Xiaomi خلف موفّر البطارية (INC-41) وعلى iPhone. (2) النقر على التذكير يفتح ذلك الموعد لا الشاشة الرئيسية، حتى إذا انتهت صلاحية رمز الوصول والتطبيق في الخلفية: يجدّد التطبيق الرمز بصمت أو يطلب من المستخدم تسجيل الدخول ثم يفتح الموعد، ولا ينهار ولا يدخل في حلقة. (3) رفض الإشعارات: على iOS وعلى Android 13 وما بعده يستطيع المستخدم الرفض عند الطلب؛ وعلى Android من 10 إلى 12 تكون مفعّلة افتراضياً ويمكن إيقافها من الإعدادات. وفي الحالتين يقول التطبيق إن التذكيرات متوقفة بدلاً من أن يفشل بصمت. (4) الموعد الملغى أو المنقول لا يصل له تذكير بالوقت القديم. (5) اسأل مالك المنتج عمّا يجوز أن يظهر في التذكير على الشاشة المقفلة: اسم العيادة أو التخصص قد يكشف معلومات صحية.
التغيير C3، العربون: نقطة الالتقاء الهجينة، والشبكة، والمقاطعات، والعرض، والأمان. (1) نقطة الالتقاء كما وُصفت في نوع التطبيق. (2) ينقطع الاتصال مباشرة بعد أن يؤكد المستخدم الدفع، ثم يعيد المحاولة: يُخصم العربون مرة واحدة، إذ يحمل طلب العربون المكرر القيمة نفسها في Idempotency-Key، ويعرض التطبيق أنه يتحقق من حالة الدفع بدلاً من أن يعرض الدفع مرة ثانية. (3) المقاطعات: إذا طلبت صفحة الدفع رمزاً لمرة واحدة، ينتقل المستخدم إلى تطبيق الرسائل ليقرأه ثم يعود، فتبقى الصفحة وما كُتب فيها؛ والأمر نفسه بعد مكالمة واردة. (4) على iPhone بشاشة 4.7 بوصة لا تُخفي لوحة المفاتيح زر «ادفع»، ولا يُبتر المبلغ عند أكبر حجم للخط. (5) لا تُحمَّل الصفحة إلا عبر HTTPS، وأخطاء الشهادات تُرفض لا تُتجاهل؛ والتحقق من الثانية يحتاج إلى وسيط اعتراض (Intercepting proxy)، فخطّط له مع مختص أمني (مجال الشبكة في MASVS).
فحوص الواجهة الخلفية قبل 18 أكتوبر، على بيئة Staging، بعميل API وبإصدارات التطبيق القديمة. (1) تفاوت الإصدارات: تُطلق الواجهة الخلفية قبل التطبيقين بأسبوع، فيستخدم كل المستخدمين في ذلك الأسبوع الإصدارات من 4.9 إلى 5.1 مع الواجهة الخلفية 5.2. شغّل الإصدار 4.9، أقدم إصدار مدعوم، والإصدار 5.1 عليها: تسجيل الدخول، وعرض المواعيد وحجزها وإلغاؤها، وإشعار تأكيد الحجز، وذلك أيضاً مع موعد له صورة وعربون مدفوع، فالتطبيق القديم يصادف مثل هذا الموعد حين يستخدم الحساب نفسه الإصدار 5.2 على جهاز آخر. ونجاح ذلك هو بوابة إصدار الواجهة الخلفية. (2) العربون: أرسل POST /v2/appointments/{id}/deposit مرتين بالقيمة نفسها في Idempotency-Key؛ فيعيد الطلب الثاني جلسة الدفع نفسها لا جلسة جديدة. والمفتاح الجديد لموعد مدفوع سابقاً يُرفض كما يحدد عقد API، مثلاً بالاستجابة 409 Conflict. (3) الرفع: صورة صحيحة، ونوع ملف خاطئ أو مزيّف، وملف فارغ، وحقول ناقصة، وملف يتجاوز حد الحجم، مع التحقق من كل استجابة مقابل المخطط؛ ويسرد مولّد الحالات الحدّية حالات الملفات والإرسال المزدوج. (4) اجعل التطبيق يواجه الاستجابات 401 و403 و404 و409 و429 و500 و503 واستجابة بطيئة في نقطتي النهاية الجديدتين وفي تحميل الموعد الذي يفتحه التذكير (محاكي رموز حالة API، ومولّد استجابات خطأ وهمية)، وافحص الرسالة والتعافي على الشاشة. (5) أحجام الاستجابات والملفات المرفوعة (محلّل حجم الاستجابة)، فهي تكلّف وقتاً وبيانات على الشبكات الخلوية.
الإصدار. في CI تعمل اختبارات الوحدة واختبارات الدخان على المحاكيات مع كل دمج، وتعمل الحزمة الأوسع على أجهزة حقيقية في مزرعة الأجهزة كل ليلة وقبل الإصدار، مع الاحتفاظ بالفيديو ولقطات الشاشة وسجلات الجهاز لكل إخفاق. البوابة 1، قبل 18 أكتوبر: يجتاز الإصدار 4.9 فحوص الدخان لـ API مقابل الواجهة الخلفية 5.2. البوابة 2، النسخة التجريبية: يبقى المستخدم مسجّل الدخول ومواعيده محفوظة بعد التحديث إلى 5.2 من 4.9 ومن 5.1، ويستخدم موظفو العيادات الإصدار 5.2 من TestFlight ومن مسار الاختبار المغلق، ولا تظهر مجموعة انهيارات جديدة خلال فترة المراقبة المتفق عليها. ثم الطرح المرحلي في Google Play والإصدار المرحلي (Phased release) في App Store: راقب في كل خطوة معدل الجلسات الخالية من الانهيار، وحالات ANR على Android، ومعدلات أخطاء API، ومعدلات نجاح المسارات الثلاثة الجديدة (رفع الصورة، وفتح موعد من تذكير، ودفع العربون)، وأوقف الطرح مؤقتاً إذا انخفض أحدها عن الحد المتفق عليه. ويمكن تعطيل C1 وC3 عن بُعد إذا تعطّلا. أما C2 فلا: عيب في طريقة تعامل التطبيق مع التذكيرات يصل إلى كل من حدّث التطبيق، ولا يُصلَح إلا بإصدار جديد يمر بمراجعة المتجر. فاطلب مفتاحاً عن بُعد، أو على الأقل طريقة لإيقاف إرسال التذكيرات من الخادم، قبل إطلاق الإصدار 5.2؛ وإن رفض الفريق فسجّله خطراً على الإصدار، وامنح C2 أكبر وقت على الأجهزة الحقيقية في النسخة التجريبية.
إن اختلفت خطتك فقارن الأسباب لا القوائم. يحتاج كل جهاز إلى سبب من المادة: حصة المستخدمين، أو أقدم إصدار مدعوم أو أحدثه، أو حجم شاشة، أو حادثة. أما اختبار كاميرا أو إشعارات مخطط له على المحاكيات وحدها، أو مصفوفة بلا أقدم الإصدارات المدعومة، أو واجهة خلفية تُطلق قبل تشغيل إصدارات التطبيق القديمة عليها، فهي الثغرات التي يجب سدّها.
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.
جزء من مسار تعلم ضمان الجودة
قبل هذا الموضوع
الموضوعات التالية
الأدوات المذكورة في هذا الدليل
ولّد أصغر مجموعة اختبارات زوجية (all-pairs) من المعاملات وقيمها.
تحليل سلاسل User-Agent إلى المتصفح والإصدار والمحرك ونظام التشغيل ونوع الجهاز مع كشف الروبوتات.
اختبر نقاط نهاية REST بتحكم كامل في الطريقة والترويسات وجسم JSON، ثم أضف تأكيدات على الحالة والترويسات ومسارات JSON.
احصل على نقطة نهاية عامة تعيد أي رمز حالة HTTP، مع تأخير اختياري وجسم JSON مخصّص، لاختبار معالجة الأخطاء في العميل.
ولّد استجابات خطأ منظّمة (التحقق والمصادقة وعدم العثور وتحديد المعدّل وخطأ الخادم) بالصيغ الشائعة.
حلّل حجم الاستجابة: البايتات الخام مقابل المضغوطة، وحجم الترويسات، ووزن بنية JSON، وأكبر الحقول.
عرّف الحالات والأحداث، ثم ولّد جدول الانتقالات واختبارات الانتقالات الصالحة/غير الصالحة وتغطية 0-switch/1-switch.
ولّد سيناريوهات اختبار عالية المستوى تغطي الجوانب الوظيفية والسلبية والأمنية وسهولة الاستخدام والتوافق لأي ميزة.
ولّد السجلات نفسها بلغات متعددة (الإنجليزية والعربية والهندية وغيرها) لاختبار التدويل (i18n) واختلاط RTL/LTR.