اختبار التوافق

اختبار التوافق (Compatibility Testing) يتحقق من أن المنتج يعمل بشكل صحيح مع كل ما يحيط به: الأنظمة التي يتبادل معها البيانات، والبرمجيات الأخرى التي تشاركه الجهاز أو المتصفح، والمنصات والإصدارات التي يَعِد بدعمها، والبيانات وتطبيقات العميل (Clients) التي خلّفتها إصداراته السابقة. فتطبيق حجز مواعيد في العيادات قد ينجح في كل الاختبارات الوظيفية ثم يرسل إلى نظام الجدولة في العيادات مواعيد منزاحة بساعة، أو يتعطل حين يضيف مدير كلمات المرور أيقونة إلى حقل تسجيل الدخول، أو يرفض طلبات إصدار التطبيق الذي لم يحدّثه معظم المرضى بعد.

وكما في درس جودة البرمجيات، يعطي ⁦ISO/IEC 25010:2023⁩ الكلمة معنى ضيقاً: التوافق هو التعايش (Co-existence) مع قابلية التشغيل البيني (Interoperability)، أما العمل على أنظمة تشغيل ومتصفحات وأجهزة مختلفة فيقع تحت المرونة (Flexibility)، التي كانت تسمى قابلية النقل (Portability) في إصدار ⁦2011⁩. وتسمي معظم الفرق ذلك كله «اختبار التوافق»، وكذلك يفعل هذا الدرس، لكن التقسيم مفيد لأن كل جزء يحتاج إلى اختبارات مختلفة.

لماذا يهم

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

والخطر على المختبِر هو التغطية الوهمية: حزمة انحدار تعمل على تثبيت جديد، مقابل خدمات بديلة (Mocks) تحاكي أنظمة الشركاء، على أحدث منصة، قد تنجح كلها بينما يواجه المستخدمون الحقيقيون الإخفاقات. أما تسمية علاقات التوافق في المنتج، واختيار ما يُختبر منها بناءً على بيانات الاستخدام، وتوثيق ما تُرك، فيحوّل عبارة «يعمل هنا» إلى بيان يستطيع الفريق الاعتماد عليه.

التوافق في ⁦ISO/IEC 25010⁩

يصف ⁦ISO/IEC 25010:2023⁩ التوافق بأنه درجة قدرة المنتج على تبادل المعلومات مع منتجات أخرى، أو أداء وظائفه وهو يشاركها بيئة وموارد مشتركة، أو كليهما. ويذكر منهج ISTQB للمستوى التأسيسي التوافق ضمن الخصائص التي يقيّمها الاختبار غير الوظيفي. وكل واحدة من خاصيتيه الفرعيتين، ومن الخاصية التي تضم دعم المنصات، ومن العلاقة بين الإصدارات، تقود إلى نوع مختلف من الاختبار:

  • قابلية التشغيل البيني (Interoperability): تتبادل الأنظمة المعلومات وتستطيع استخدام ما تبادلته. فوصول الملف لا يكفي؛ يجب أن يقرأ المستقبِل المبالغ والتواريخ والرموز بالمعنى الذي قصده المرسِل.
  • التعايش (Co-existence): يؤدي المنتج وظائفه وهو يشارك بيئةً وموارد مع منتجات أخرى دون أن يضرّها. فعليه أن يصمد بين جيرانه وألا يعطّلهم.
  • المرونة (Flexibility): تغطي قابلية التكيّف (Adaptability) العمل على أنظمة تشغيل ومتصفحات وأجهزة أخرى؛ وتغطي قابلية التثبيت (Installability) وقابلية الاستبدال (Replaceability) تثبيت المنتج وحلول إصدار جديد محل إصدار قديم، وهنا مكان اختبار الترقية.
  • التوافق مع الإصدارات السابقة والتوافق المستقبلي (Backward and Forward Compatibility): ليس في المعيار مصطلح مستقل للتوافق بين إصدارات المنتج الواحد. وهو عملياً قابلية تشغيل بيني بين الإصدارات، مثل تطبيق قديم يتحدث مع خادم جديد، إضافة إلى قابلية الاستبدال.
أبعاد التوافق الخمسة مقابل ⁦ISO/IEC 25010:2023⁩: التشغيل البيني والتعايش تحت التوافق، ودعم المنصات تحت المرونة، والتوافق مع الإصدارات السابقة واللاحقة، مع سؤال واختبار لكل بعد.
البعدفي ⁦ISO/IEC 25010:2023⁩السؤال الذي يجيب عنهمثال على اختبار
قابلية التشغيل البينيالتوافقخاصية فرعيةهل يستطيع الطرفان استخدام ما تبادلاه؟أنشئ حجزاً في التطبيق وافحصه حقلاً حقلاً في نظام العيادة
التعايشالتوافقخاصية فرعيةهل يعمل بجوار برمجيات أخرى دون أن يضرّها؟سجّل الدخول وإضافة مدير كلمات المرور مثبتة
دعم المنصاتالمرونةقابلية التكيّف؛ قابلية النقل في ⁦2011⁩هل يعمل على كل نظام تشغيل ومتصفح وجهاز وعد بدعمه؟الرحلات الحرجة على أقدم إصدار مدعوم من نظام التشغيل والإصدار الحالي
التوافق مع الإصدارات السابقةلا مصطلح مستقلتشغيل بيني بين الإصدارات، وقابلية الاستبدالهل يقبل الإصدار الجديد البيانات القديمة وتطبيقات العميل القديمة؟أعد إرسال طلبات التطبيق ⁦N-1⁩ دون تغيير إلى الخادم الجديد
التوافق المستقبليلا مصطلح مستقلتشغيل بيني بين الإصداراتهل يتعامل إصدار أقدم مع بيانات أحدث؟تراجع عن الإصدار ثم افتح سجلات حفظها الإصدار الجديد

قابلية التشغيل البيني: اختبر التبادل لا المرسِل وحده

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

  • الأنظمة المتصلة: أنشئ سجلاً في منتجك وتحقق منه في النظام الآخر حقلاً حقلاً: المبالغ مع العملة والمنازل العشرية، والتواريخ مع منطقتها الزمنية، ورموز الحالة مقابل رموز المستقبِل، والأسماء العربية سليمة. ثم المسارات السلبية (Unhappy Paths): الشريك بطيء، أو يرفض السجل، أو يستلمه مرتين.
  • صيغ الاستيراد والتصدير: افتح ملفات التصدير في البرامج التي يستخدمها العملاء فعلاً، واستورد الملفات التي تنتجها تلك البرامج. غيّر الترميز (UTF-8 مع علامة ترتيب البايتات BOM وبدونها)، والفاصل (يصف RFC ⁦4180⁩ ملفات CSV مفصولة بفواصل، لكن برامج الجداول في المناطق التي تستخدم الفاصلة العشرية تكتب غالباً فاصلة منقوطة)، وصيغ التواريخ والأرقام، وفواصل الأسطر داخل الحقول المقتبسة، وملفاً فارغاً.
  • إصدارات الواجهة البرمجية والمخطط: قارن العقد القديم بالجديد، مثل وصف OpenAPI (قائمة مقروءة آلياً بنقاط النهاية في الواجهة وحقولها) أو مخطط JSON Schema للاستجابة (القواعد التي يجب أن تتبعها حقولها). إضافة حقل اختياري آمنة عادةً؛ أما حذف حقل أو إعادة تسميته، أو تغيير نوعه، أو جعل حقل اختياري في الطلب إلزامياً، أو إضافة قيمة إلى تعداد (enum)، فقد يعطّل تطبيقات عميل صدرت بالفعل. أعد إرسال طلبات العميل السابق كما هي دون تغيير.
  • تكاملات الأطراف الثالثة: مزوّدو الدفع والخرائط وتسجيل الدخول والرسائل النصية يغيّرون خدماتهم وفق جدولهم الخاص. اختبر في بيئة الاختبار المعزولة (Sandbox) لدى المزوّد على إصدار الواجهة البرمجية الذي يثبّته منتجك، واقرأ سجل التغييرات وإشعارات الإيقاف التدريجي (Deprecation)، وتحقق مما يفعله منتجك حين يكون المزوّد متوقفاً.
Pharmacy order response, v1 (read by every released app)
{ "id": "A-1042", "total": 149.5, "deliveryDate": "2026-10-04" }

Pharmacy order response, v2 (proposed)
{ "id": "A-1042", "total": "149.50", "currency": "SAR",
  "delivery": { "date": "2026-10-04", "slot": "AM" } }

Change                        Effect on released clients
"currency" added              usually safe if clients ignore unknown fields
"total" number -> string      breaking: arithmetic and validation fail
"deliveryDate" moved          breaking: the field old clients read is gone

جرّبها: مقارنة عقود الاستجابات جرّبها: مدقّق JSON Schema جرّبها: مولّد مجموعات بيانات CSV

التعايش: مشاركة البيئة

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

  • الموارد المشتركة: كاميرا أو ميكروفون أو مخرج صوت يستخدمه تطبيق آخر؛ ملف أو منفذ أو طابعة يحجزها برنامج آخر؛ مساحة تخزين أو ذاكرة منخفضة؛ قاعدة بيانات أو طابور رسائل مشترك مع خدمات أخرى. يجب أن ينتظر منتجك أو يشرح أو يتعافى، وأن يحرّر ما أخذه.
  • البرمجيات الأخرى: برنامج مكافحة فيروسات يفحص ملفاتك، وشبكة VPN تغيّر الاتصال، وقارئ شاشة، ومكالمة هاتفية تقاطع عملية دفع.
  • إضافات المتصفح: قد تخفي أدوات حجب الإعلانات عناصر تطابق قوائم التصفية لديها، مثل شريط له صنف CSS باسم ad-banner؛ ويُدرج مديرو كلمات المرور وأدوات الترجمة أيقونات أو يعيدون كتابة النص؛ وتعيد إضافات الوضع الداكن تلوين الصفحات. اختبر الرحلات الحرجة مع الإضافات التي يذكرها المستخدمون، في ملف تعريف مستقل للمتصفح.
  • الإصدارات المتجاورة: إصداران مثبتان على حاسوب واحد، أو نسخة اختبار بجوار نسخة المتجر على هاتف واحد، أو تبويبان يشغّل أحدهما تطبيق الويب القديم بعد النشر. تحقق من الإعدادات والملفات والتخزين المحلي المشتركة، ومن الإصدار الذي يفتح الرابط.

سياسة الدعم والتوافق مع الإصدارات السابقة واللاحقة

لا يحدّث المستخدمون تطبيقاتهم معاً. ففي يوم الإطلاق يلتقي الخادم الجديد بكل إصدار مثبت من التطبيق، وبأجهزة على أقدم نظام تشغيل مدعوم، وببيانات كتبتها الإصدارات السابقة. وتحدد سياسة الدعم المكتوبة ما يجب أن يعمل من ذلك: أدنى إصدارات أنظمة التشغيل، والمتصفحات، وعدد إصدارات التطبيق التي ما زال الخادم يخدمها (غالباً الحالي والسابق، ⁦N⁩ و⁦N-1⁩) وإلى متى، وما يراه المستخدم غير المدعوم، مثل دعوة واضحة للتحديث بدلاً من خطأ صامت.

التوافق مع الإصدارات السابقة (Backward Compatibility) يعني أن الإصدار الجديد يعمل مع ما أنتجته الإصدارات الأقدم ومع تطبيقات العميل الأقدم التي ما زالت مستخدمة. والتوافق المستقبلي (Forward Compatibility) هو الصورة المعكوسة: إصدار أقدم يتعامل مع بيانات إصدار أحدث، عادةً بتجاهل الحقول التي لا يعرفها؛ وعليه يعتمد التراجع عن الإصدار (Rollback). اختبر مسارات الترقية انطلاقاً من العالم القديم، لا من تثبيت نظيف فقط:

  • بيانات قديمة وشيفرة جديدة: نفّذ الترقية على حسابات واقعية (طلبات، وعناوين محفوظة، ونموذج نصف مكتمل)، وافتح التصديرات والإشارات المرجعية القديمة. يجب أن يبقى كل شيء موجوداً وصحيحاً وقابلاً للاستخدام.
  • تطبيقات عميل قديمة وخادم جديد: شغّل كل إصدار مدعوم من تطبيق العميل، دون تغيير، مقابل الخادم الجديد، وتحقق من دعوة التحديث في أول إصدار غير مدعوم.
  • ترحيل الإعدادات: يجب أن تبقى اللغة وإعدادات الإشعارات وإمكانية الوصول وتسجيل الدخول المحفوظ والتفضيلات سليمة بعد الترقية، بما في ذلك القفز فوق عدة إصدارات، مثل الانتقال من ⁦3.8⁩ إلى ⁦4.2⁩ مباشرة.
  • بيانات جديدة وشيفرة قديمة: احفظ بيانات بالإصدار الجديد، ثم تراجع عنه أو افتحها في تطبيق العميل السابق؛ يجب أن يتجاهل الإصدار القديم ما لا يعرفه، لا أن ينهار أو يكتب فوقه.

جرّبها: مقارنة JSON

مثال تطبيقي: مصفوفة تغطية واحدة من بيانات الاستخدام

سلسلة صيدليات تبيع عبر موقع إلكتروني وتطبيقين لنظامَي Android وiOS. يغيّر الإصدار ⁦4.2⁩ واجهة الطلبات البرمجية ويضيف موعداً للتوصيل؛ وبعد مقارنة العقود في قسم قابلية التشغيل البيني أبقى الفريق total رقماً وأبقى deliveryDate، فتظل تطبيقات العميل الصادرة قادرة على قراءة الاستجابة. وبدلاً من قوائم منفصلة، يبني المختبِر مصفوفة تغطية توافق واحدة يأتي كل صف فيها من دليل: تحليلات ⁦90⁩ يوماً، وترويسة إصدار العميل في سجل الواجهة البرمجية، وإحصاءات الإصدارات في متجرَي التطبيقات، وقائمة التكاملات، وتذاكر الدعم. ويحصل كل صف على عمق اختبار، ويُكتب ما تُرك، وتُجمع المعاملات المتبقية داخل الصف، مثل اللغة وطريقة الدفع، بالاختيار الزوجي (Pairwise) بحيث يظهر كل زوج من القيم في اختبار واحد على الأقل، كما في درس الاختبار الزوجي. الأرقام توضيحية.

وتعيد صفوف المنصات استخدام عمل سابق بدلاً من تكراره: يقدّم درس الاختبار المتجاوب (Responsive Testing) عروض منفذ العرض ونقاط التوقف، ويقدّم درس الاختبار عبر المتصفحات (Cross-Browser Testing) المحركات وطبقات الدعم (Tiers): تُشغَّل على الطبقة 1 الرحلات الحرجة وحزمة الانحدار مع كل إصدار، وعلى الطبقة 2 اختبار دخان للرحلات الحرجة، وعلى الطبقة 3 فحوص بأفضل جهد فقط؛ ويبيّن درس تجزؤ الأجهزة (Device Fragmentation)، لاحقاً في وحدة اختبار تطبيقات الجوال، كيف تُختار الهواتف. وتضيف هذه المصفوفة ما لا تغطيه تلك الدروس: إصدارات العميل، والأنظمة المتصلة، والصيغ، والجيران، والترقية، لتجيب صفحة واحدة عن سؤال: ماذا اختبرنا، ومقابل ماذا، وماذا تركنا؟ وقد كشفت الخطة ثلاثة عيوب:

  • تطبيق قديم وخادم جديد: التطبيق ⁦4.1⁩، الذي يأتي منه ⁦31%⁩ من الطلبات، لا يرسل حقل deliverySlot الجديد في طلب إنشاء الطلبية (أما الاستجابة فتعيد الموعد في delivery.slot). وتعامل الواجهة ⁦4.2⁩ الحقل على أنه إلزامي وتردّ بـ 400 Bad Request بدلاً من تطبيق القيمة الافتراضية، وهو الكسر من جهة الطلب الذي يحذّر منه قسم قابلية التشغيل البيني. وهذا يوقف الإطلاق.
  • قابلية التشغيل البيني: يكتب التصدير الجديد إلى نظام المخزون التواريخ بصيغة 04/10/2026 واليوم أولاً، فيقرؤها نظام المخزون على أنها ⁦10⁩ أبريل. نجح النظامان في اختباراتهما الخاصة، ولم يكشف العيب إلا الفحص حقلاً حقلاً.
  • التعايش: تضع إضافة شائعة لإدارة كلمات المرور أيقونتها فوق زر إظهار كلمة المرور في صفحة تسجيل الدخول. لا يخطئ أي من المنتجين وحده، فينقل الفريق الزر.
Release 4.2 compatibility coverage matrix (illustrative numbers, last 90 days)

Area          Row                                     Evidence          Depth
Platforms     Tiers 1 and 2, cross-browser plan       analytics         per tier
              Android: oldest supported, current      store statistics  critical journeys
              iOS: previous and current               store statistics  critical journeys
Clients       app 4.2 (new)                           -                 full regression
              app 4.1 (31% of orders)                 API client log    critical journeys
              app 4.0 and older (2%, unsupported)     API client log    update prompt
Interop       payment provider, pinned API version    integration list  pay, fail, refund
              stock system export (CSV)               integration list  field by field
              SMS provider                            integration list  send, outage
Co-existence  password-manager extension              support tickets   sign-in journey
Upgrade       4.0 and 4.1 to 4.2, real accounts       -                 data, settings
Rollback      4.2 data opened in app 4.1              -                 forward check
Left out (recorded in the test plan): Firefox on Android (0.3%), tablets in landscape

جرّبها: مولّد الاختبار الزوجي (Pairwise) جرّبها: محلّل User-Agent

أخطاء شائعة

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

من منظور ضمان الجودة

ينتمي التوافق إلى تخطيط الاختبار. اسأل مالك المنتج والمطوّرين: مع أي أنظمة نتبادل البيانات، وبأي صيغ وإصدارات من الواجهات البرمجية؟ أي أنظمة تشغيل ومتصفحات وإصدارات تطبيق تَعِد بها سياسة الدعم، وإلى متى؟ ماذا يرى المستخدم غير المدعوم؟ هل تغيير الواجهة البرمجية هذا إضافي أم كاسر (Breaking)؟ واطلب الأدلة ممن يملك التحليلات والتشغيل، واكتب الإجابات في مصفوفة التغطية مع تاريخها.

أثناء التنفيذ، اختبر أقدم ما هو مدعوم أولاً، لأن الإطلاقات تفشل هناك. وعندما يظهر عيب توافق، اعزل المتغير الوحيد المختلف، مثل إصدار العميل أو الإضافة أو الإعداد المحلي (Locale) أو إصدار الواجهة البرمجية لدى الشريك، وأبلغ عن طرفَي التبادل: ما أُرسل، وما وصل، وما فعله المستقبِل به. ويذكر تقرير إتمام الاختبار (Test Completion Report) الصفوف المغطاة والصفوف المتروكة وسبب تركها.

تمرين عملي

ابنِ مصفوفة تغطية توافق لتطبيق مدرسي

المطلوب

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

المادة
حقائق (توضيحية)
- الجلسات: ⁦55%⁩ للتطبيق على Android، و⁦30%⁩ للتطبيق على iOS، و⁦15%⁩ للموقع
  على الحواسيب المدرسية
- إصدارات التطبيق في سجل الواجهة البرمجية: ⁦1.9⁩: ⁦64%⁩، و⁦1.8⁩: ⁦27%⁩،
  و⁦1.7⁩ وما قبله: ⁦9%⁩
- سياسة الدعم: الإصدار الحالي والسابق من التطبيق (⁦N⁩ و⁦N-1⁩)؛ وأحدث أربعة
  إصدارات رئيسية من Android؛ وأحدث إصدارين من iOS
- الرسوم: بوابة دفع بنكية، وإصدار واجهتها البرمجية مثبَّت في إعدادات التكامل
- الدرجات: تُصدَّر بصيغة CSV إلى نظام التقارير في الوزارة؛ وأسماء الطلاب عربية
- تذاكر الدعم: ⁦14⁩ تذكرة في الفصل الماضي عن صفحات معطوبة على الحواسيب
  المدرسية، كلها مع إضافة تصفية المحتوى التي يثبّتها فريق تقنية المعلومات
- الإصدار ⁦2.0⁩: تُحفظ الواجبات بصيغة جديدة؛ وتضيف الواجهة البرمجية للرسوم
  حقل "discount"
الخطوات
  1. اذكر علاقات التوافق: المنصات، وإصدارات العميل، والأنظمة المتصلة، والصيغ، والجيران، والترقية والتراجع.
  2. سجّل لكل صف الدليل من الحقائق واختر العمق.
  3. اكتب ما لن تختبره، ولماذا.
  4. اختر الفحوص الثلاثة الأعلى خطراً واكتب أسئلتك.
إظهار الإجابة النموذجية
الإجابة النموذجية

المنصات (الدليل: توزيع الجلسات وسياسة الدعم): الرحلات الحرجة على أقدم إصدارات Android الأربعة المدعومة وعلى الإصدار الحالي، وعلى إصدارَي iOS المدعومَين، وعلى الموقع في الحواسيب المدرسية، مع أخذ المتصفحات من خطة الاختبار عبر المتصفحات. تطبيقات العميل (الدليل: سجل الواجهة البرمجية والسياسة): انحدار كامل للإصدار ⁦2.0⁩؛ والإصدار ⁦1.9⁩ (⁦N-1⁩، ⁦64%⁩) ينفّذ الرحلات الحرجة مقابل خادم ⁦2.0⁩، ومنها فتح واجبات محفوظة بالصيغة الجديدة؛ أما ⁦1.8⁩ وما قبله فيكفيه فحص دعوة التحديث، لأن السياسة لم تعد تدعمها.

قابلية التشغيل البيني (الدليل: إعدادات التكامل وملاحظات الإصدار): بيئة Sandbox لبوابة الدفع على إصدار الواجهة البرمجية المثبَّت (دفع، فشل، استرداد، إشعار مكرر)؛ واستجابات الرسوم مع حقل discount الجديد وبدونه، كما يقرؤها الإصدار ⁦1.9⁩؛ وملف CSV للدرجات محمَّلاً في نظام الوزارة بأسماء عربية والفاصل والترميز المتفق عليهما وشعبة دراسية بلا طلاب. التعايش (الدليل: تذاكر الدعم الأربع عشرة): الرحلات الحرجة للموقع على حاسوب مدرسي مع إضافة تصفية المحتوى. الترقية والتراجع (الدليل: صيغة الواجبات الجديدة): من ⁦1.8⁩ و⁦1.9⁩ إلى ⁦2.0⁩ مع واجبات موجودة وأطفال مرتبطين بالحساب وإعدادات إشعارات؛ ثم فتح واجبات حفظها الإصدار ⁦2.0⁩ بعد إرجاع الخادم إلى الإصدار السابق، ويجب ألا ينهار أمام الصيغة الجديدة ولا يكتب فوقها. المتروك والموثّق مع السبب: إصدارا Android الأوسطان (الأقدم والحالي يحدّان النطاق، ويُدرج الأوسطان بالتناوب في الإصدارات اللاحقة)، والرحلات الكاملة على ⁦1.8⁩ وما قبله (غير مدعومة، فيكفي فحص دعوة التحديث)، والموقع على الهواتف والحواسيب المنزلية (تُظهر الجلسات أنه يُستخدم على الحواسيب المدرسية).

الفحوص الثلاثة الأولى: التطبيق ⁦1.9⁩ مقابل خادم ⁦2.0⁩ مع واجبات بالصيغة الجديدة، والترقية ببيانات وإعدادات حقيقية، وملف CSV للدرجات في استيراد الوزارة. الأسئلة: ما زال ⁦27%⁩ من حركة التطبيق يأتي من ⁦1.8⁩ الذي لم تعد السياسة تدعمه؛ فهل نحجب أولياء الأمور هؤلاء يوم الإطلاق أم نمدّد الدعم؟ من يستطيع أن يعطينا حساب اختبار لنظام الوزارة؟ أي إصدار من الإضافة يثبّته فريق تقنية المعلومات؟ هل تخطط البوابة لإيقاف إصدار الواجهة البرمجية المثبَّت؟

أسئلة شائعة

هل اختبار التوافق هو نفسه الاختبار عبر المتصفحات؟

لا. الاختبار عبر المتصفحات (Cross-Browser Testing) يفحص جزءاً واحداً من دعم المنصات. أما اختبار التوافق فيغطي أيضاً قابلية التشغيل البيني مع الأنظمة المتصلة، والتعايش مع البرمجيات الأخرى، ودعم إصدارات أنظمة التشغيل والتطبيق، والتوافق مع الإصدارات السابقة والتوافق المستقبلي. وحتى التكامل بين خادمين بلا أي واجهة مستخدم يحتاج إلى اختبار توافق.

هل إضافة حقل إلى استجابة الواجهة البرمجية آمنة دائماً؟

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

ما الفرق بين التوافق مع الإصدارات السابقة والتوافق المستقبلي؟

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

هل يمكن أتمتة اختبار التوافق؟

جزء كبير منه. تستطيع فحوص العقود مقارنة وصفَي الواجهة البرمجية القديم والجديد في كل بناء، ويمكن إعادة إرسال الطلبات المسجّلة من العميل السابق إلى الخادم الجديد، ويمكن أن تبدأ اختبارات الترقية من نسخة محفوظة من البيانات القديمة. أما البرمجيات المجاورة وأنظمة الشركاء الحقيقية والحكم على ما فعله المستقبِل بالبيانات فما زالت تحتاج إلى جلسات يدوية مخططة.

المراجع

تدرّب بأدوات متقن

مقارنة استجابة API فعلية بعقد متوقَّع (مثال أو مخطط) والإبلاغ عن الفروق الكاسرة وغير الكاسرة.

التحقق

التحقق من مستند JSON مقابل مخطط JSON Schema (الكلمات المفتاحية الأساسية في draft-07 / 2019-09 / 2020-12).

JSON والبيانات

مقارنة مستندي JSON دلالياً وإبراز القيم المضافة والمحذوفة والمتغيرة.

JSON والبيانات

تحليل سلاسل User-Agent إلى المتصفح والإصدار والمحرك ونظام التشغيل ونوع الجهاز مع كشف الروبوتات.

الويب

للتعمّق أكثر

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة

قبل هذا الموضوع

الموضوعات التالية