ما البرمجيات؟
البرمجيات (Software) هي مجموعة التعليمات والمعلومات التي تجعل الحاسوب أو الهاتف أو أي جهاز آخر يؤدي عملاً ما. فحين تطلب طعاماً من تطبيق، تعرض البرمجيات قائمة الطعام، وتحسب الإجمالي، وتستلم الدفع، وتمرّر الطلب إلى المطعم. والبرمجيات في نظر المختبِر أكثر من مجرد شيفرة: إنها برنامج، وبيانات يعمل عليها، وإعدادات تتحكم فيه، وكلها تعمل فوق طبقات من برمجيات وأجهزة أخرى.
لماذا يهم
لا يمكنك أن تختبر جيداً ما لا تستطيع وصفه. فالإجمالي الخاطئ في شاشة الدفع قد يأتي من الشاشة، أو من قاعدة عمل على الخادم، أو من سعر في قاعدة البيانات، أو من إعداد يختلف بين نظام الاختبار والنظام الحي. ومعرفة الأجزاء تتيح لك أن تحدد أين تظهر المشكلة وأن تسأل الشخص المناسب.
وكلفة المشكلة تتوقف أيضاً على موضعها: فالتسمية المقطوعة تزعج المستخدمين، أما نسبة الضريبة المضبوطة أعلى من قيمتها الصحيحة في الإعدادات فتحمّل كل عميل مبلغاً زائداً منذ لحظة نشرها.
البرنامج والبيانات والإعدادات
يجمع كل نظام قيد التشغيل ثلاثة أنواع من المكوّنات تتغير بسرعات مختلفة. وقد يتصرف البرنامج نفسه بطريقة مختلفة مع بيانات أو إعدادات أخرى: فإتمام الشراء الذي ينجح في بيئة الاختبار قد يُخفق في بيئة الإنتاج لأن الإنتاج يستخدم خدمة دفع أخرى، أو لأن البيانات الحقيقية تحتوي على اسم منتج أطول من أي اسم في بيانات الاختبار. لذلك سجّل النسخة والبيانات والبيئة مع كل نتيجة اختبار.
- البرنامج أو الشيفرة (Program/Code): تعليمات يكتبها المطورون ثم تُبنى في صورة قابلة للتشغيل، مثل الشيفرة التي تضيف ضريبة القيمة المضافة إلى الطلب. ولا يتغير إلا مع إصدار جديد.
- البيانات (Data): المعلومات التي يعمل عليها البرنامج ويحفظها، مثل العملاء والمنتجات والأسعار والطلبات. ويغيّرها المستخدمون طوال اليوم دون أي إصدار جديد.
- الإعدادات (Configuration): قيم تغيّر السلوك دون تغيير الشيفرة، مثل نسبة الضريبة أو عنوان خدمة الدفع أو مدة انتهاء الجلسة. وتختلف عادةً من بيئة إلى أخرى، كبيئة الاختبار وبيئة الإنتاج.
PROGRAM total = subtotal + round(subtotal * vat_rate, 2)
CONFIGURATION vat_rate: 0.15
payment_service: https://payments.test.example.com
session_timeout_minutes: 30
DATA {"sku": "1042", "name": "Arabic coffee 250 g", "price": 38.00}أنواع البرمجيات التي ستختبرها
يخبرك نوع البرمجيات أين تعمل، وكيف تصل إلى المستخدمين، وأيّ المخاطر أهمّ. وكثير من المنتجات يجمع عدة أنواع: فقد يشغّل البنك موقع ويب، وتطبيقات جوال، وواجهة برمجية (API) للشركاء، وبرمجيات في أجهزة الدفع بالبطاقات.
- تطبيقات الويب (Web applications) تعمل في المتصفح وتحمّل صفحاتها من خادم. فلا يثبّت المستخدم شيئاً، لكن كل صفحة يجب أن تعمل في متصفحات وأحجام شاشات ولغات مختلفة.
- تطبيقات الجوال (Mobile apps) تُثبَّت على أجهزة Android أو iOS، وعليها أن تتعامل مع طرازات أجهزة كثيرة، ومع الأذونات، والمقاطعات كالمكالمات، والشبكات الضعيفة.
- تطبيقات سطح المكتب (Desktop applications) تُثبَّت على Windows أو macOS أو Linux، مثل برنامج نقطة البيع عند صندوق المحاسبة في المتجر. ويصبح التثبيت والتحديثات والطابعات المحلية جزءاً من الاختبار.
- الواجهات البرمجية والخدمات (APIs and services) لا شاشة لها: تستدعيها برامج أخرى عبر الشبكة، كما يستدعي المتجرُ خدمةَ الدفع. وتختبرها بإرسال الطلبات وفحص الاستجابات.
- البرمجيات المدمجة (Embedded software) تعمل داخل أجهزة مثل أجهزة الدفع بالبطاقات والعدّادات الذكية، بذاكرة محدودة في الغالب، وعلى عتاد حقيقي دائماً. وقد يكون تحديث الأجهزة في الميدان بطيئاً أو صعباً، لذا يكون إصلاح العيب الذي يصل إليها مكلفاً.
طبقات تطبيق الويب المعتاد
تقسّم معظم برمجيات الأعمال عملها إلى طبقات، لكل منها مهمة واحدة. وتسمّيها الفرق بأسماء مختلفة (طبقات العرض والتطبيق والبيانات، أو العميل والخادم)، لكن تطبيق الويب المعتاد يضم الطبقات الأربع التالية. وتطبيق الجوال يشارك عادةً الواجهة الخلفية وقاعدة البيانات والبنية التحتية نفسها، فالتطبيق ذاته واجهة أمامية أخرى.
- الواجهة الأمامية (Front end) أو طبقة العرض: صفحات الويب في المتصفح أو شاشات التطبيق. تعرض المعلومات، وتجمع المدخلات، وتُجري فحوصاً أولية مثل «هذا الحقل مطلوب». ويفحص المختبِر هنا التخطيط والصياغة والتعامل مع المدخلات والرسائل.
- الواجهة الخلفية (Back end) أو منطق التطبيق: برامج على الخوادم تطبّق قواعد العمل، مثل الأسعار والضريبة والمخزون والصلاحيات. وتستدعيها الواجهة الأمامية بطلبات HTTP إلى واجهة برمجية (API). ويفحص المختبِر هنا القواعد والحسابات عبر الشاشة أو عبر الواجهة البرمجية.
- قاعدة البيانات (Database) أو طبقة البيانات: تحفظ السجلات، مثل العملاء والمنتجات والطلبات، بعد مغادرة المستخدم. ويفحص المختبِر هنا أن السجلات الصحيحة حُفظت أو عُدّلت أو حُذفت، ولا شيء غيرها.
- البنية التحتية (Infrastructure): الخوادم أو الخدمات السحابية، وأنظمة التشغيل، والشبكات، وأسماء النطاقات، والشهادات، وإعدادات كل بيئة. ويسجّل المختبِر هنا البيئة والنسخة التي اختبرها.
تنزل الطلبات من الواجهة الأمامية إلى الواجهة الخلفية فقاعدة البيانات، وتعود الاستجابات صاعدة
عند طبقة «الواجهة الأمامية»: يراها المستخدمعند طبقة «البنية التحتية»: بعيدة عن نظر المستخدم
- 1الواجهة الأماميةصفحات في المتصفح أو شاشات تطبيق: تعرض المعلومات وتجمع المدخلات وتُجري فحوصاً أولية
يفحص المختبِر التخطيط والصياغة والتعامل مع المدخلات والرسائل
- 2الواجهة الخلفيةبرامج على الخوادم تطبّق قواعد العمل: الأسعار والضريبة والمخزون والصلاحيات؛ وتُستدعى بطلبات HTTP إلى واجهة برمجية (API)
يفحص المختبِر القواعد والحسابات عبر الشاشة أو الواجهة البرمجية
- 3قاعدة البياناتتحفظ السجلات، مثل العملاء والمنتجات والطلبات، بعد مغادرة المستخدم
يفحص المختبِر أن السجلات الصحيحة حُفظت أو عُدّلت أو حُذفت، ولا شيء غيرها
- 4البنية التحتيةالخوادم أو الخدمات السحابية، وأنظمة التشغيل، والشبكات، وأسماء النطاقات، والشهادات، وإعدادات كل بيئة
يسجّل المختبِر البيئة والنسخة التي اختبرها
تختلف أسماء الطبقات من فريق إلى آخر: فبعضهم يقول طبقات العرض والتطبيق والبيانات، وآخرون يقولون العميل والخادم.
مثال تطبيقي: طلب واحد عبر كل الطبقات
يشتري عميل عبوتين من القهوة سعر الواحدة 38.00 ريالاً، ثم يضغط زر «إتمام الطلب». وتتبادل الواجهة الأمامية والواجهة الخلفية طلبات HTTP واستجاباته، التي يحدد معناها المعيار RFC 9110.
لا يرى العميل إلا الخطوتين 1 و6. وكل ما بينهما يجري بعيداً عن نظره، ولذلك فإن رسالة التأكيد على الشاشة لا تثبت أن الطلب حُفظ بشكل صحيح.
1 Front end checks that the address is filled in, then sends the order
2 Request POST https://shop.example.com/api/orders
{"items": [{"sku": "1042", "qty": 2}]}
3 Back end checks stock; 2 x 38.00 = 76.00; VAT 15% = 11.40; total = 87.40
4 Database saves order 55031 with its line; reduces the stock of 1042 by 2
5 Response 201 Created {"orderId": 55031, "total": "87.40"}
6 Front end shows the confirmation: order 55031, total 87.40 SAR
Underneath infrastructure: servers, network, certificate of shop.example.comجرّبها: محلّل عناوين URL جرّبها: مرجع رموز حالة HTTP جرّبها: منسّق JSON
البشر يبنون البرمجيات، والبشر يخطئون
كل جزء من ذلك الطلب كتبه أو هيّأه شخص ما. والناس يسيئون فهم المتطلبات، وينسون حالة ما، ويكتبون 0.51 بدلاً من 0.15، أو يبنون جزأين يعمل كل منهما وحده لكنهما لا يتفقان. فالعيوب نتيجة طبيعية لبناء أشياء معقدة، وليست دليلاً على إهمال الفريق.
وبمصطلحات ISTQB: يرتكب شخص خطأً (Error) قد ينتج عنه عيب (Defect)، ويسمى أيضاً Fault أو Bug، في الشيفرة أو في منتج عمل آخر مثل متطلب أو ملف إعدادات؛ وتنفيذ الجزء المعيب قد يسبب إخفاقاً (Failure). وسيتناول درس لاحق هذه المصطلحات. وفي طلب القهوة، قد تخفي كل طبقة عيبها الخاص بينما لا يرى العميل إلا الشاشة:
- الواجهة الأمامية: ضغطتان متتاليتان ترسلان الطلب مرتين.
- الواجهة الخلفية: تُحسب الضريبة على مبلغ خاطئ.
- قاعدة البيانات: يُحفظ الطلب دون بنده.
- البنية التحتية والإعدادات: تشير بيئة الاختبار إلى خدمة الدفع الحقيقية.
أخطاء شائعة
- التعامل مع البرمجيات على أنها شيفرة فقط وإهمال البيانات والإعدادات، مع أنها قد تعطّل النظام دون أي تغيير في الشيفرة.
- الحكم على النظام من الشاشة: فعبارة «تم تأكيد الطلب» لا تثبت أن الطلب حُفظ بشكل صحيح.
- الإبلاغ عن مشكلة دون ذكر البيئة والنسخة والجهاز وبيانات الاختبار المستخدمة.
- اختبار كل أنواع البرمجيات بالطريقة نفسها، مع أن تطبيق الجوال والواجهة البرمجية والجهاز المدمج تختلف مخاطرها.
- اعتبار العيب دليلاً على إهمال شخص ما، بدلاً من كونه نتيجة طبيعية لبناء أنظمة معقدة.
من منظور ضمان الجودة
في المشروع الجديد، ارسم النظام مبكراً: الواجهات الأمامية (الويب وAndroid وiOS)، وخدمات الواجهة الخلفية والواجهات البرمجية التي تستدعيها، وقواعد البيانات والخدمات الخارجية، والبيئات. واطلب من أحد المطورين أن يصحّح الرسم، فيصبح خريطتك الأولى لمواضع الاختبار المطلوبة ولمن يملك كل جزء.
وفي كل تقرير خطأ، اذكر الطبقة التي رأيت فيها المشكلة، والسياق الذي يحدد البرنامج والبيانات والإعدادات: البيئة، ونسخة البناء أو التطبيق، والمتصفح أو الجهاز، وحساب الاختبار وبياناته، والوقت. عندها يستطيع المطور أن يذهب مباشرةً إلى السجلات الصحيحة.
تمرين عملي
صنّف أجزاء نظام حجز في عيادة
تتيح عيادة للمرضى حجز المواعيد عبر موقعها، وترسل إليهم تذكيرات برسائل SMS. صنّف كل عنصر في القائمة (أ) إلى برنامج أو بيانات أو إعدادات، ودوّن العناصر التي تختلف بين بيئة الاختبار وبيئة الإنتاج. ثم حدّد لكل مشكلة في القائمة (ب) الطبقة التي ستفحصها أولاً، وسؤالاً واحداً ستطرحه على الفريق.
أ. أجزاء النظام
1. الشيفرة التي تمنع المريض نفسه من حجز موعد قادم ثالث
2. قائمة الأطباء وتخصصاتهم وساعات عملهم
3. cancellation_hours: 24
4. كل المواعيد التي حجزها المرضى
5. sms_service: https://sms.test.example.com
6. الشيفرة التي ترسل رسالة تذكير SMS قبل الموعد بيوم واحد
ب. المشكلات المبلَّغ عنها
1. على الهاتف، يختفي زر «احجز» خلف لوحة المفاتيح الظاهرة على الشاشة.
2. تمكّن مريض من حجز موعد قادم ثالث.
3. تصل التذكيرات في بيئة الاختبار، لكنها لا تصل أبداً في بيئة الإنتاج.
4. أظهر الموقع «تم الحجز»، لكن الموعد مفقود في اليوم التالي.- لكل عنصر في القائمة (أ) اسأل: هل هو تعليمات (برنامج)، أم معلومات يعمل عليها البرنامج (بيانات)، أم قيمة تغيّر السلوك دون شيفرة جديدة (إعدادات)؟
- علّم العناصر التي يختلف محتواها بين بيئة الاختبار وبيئة الإنتاج.
- لكل مشكلة في القائمة (ب) حدّد أين يظهر العَرَض، ثم الطبقة التي قد تُنتجه.
- اكتب لكل مشكلة سؤالاً واحداً توجّهه إلى من يملك تلك الطبقة.
إظهار الإجابة النموذجية
القائمة (أ): 1 برنامج، 2 بيانات، 3 إعدادات، 4 بيانات، 5 إعدادات، 6 برنامج. والعنصر 5 يختلف بالتأكيد بين الاختبار والإنتاج، والعنصر 3 ربما، وكذلك بيانات العنصرين 2 و4: فبيئة الإنتاج تضم أطباء حقيقيين ومواعيد حقيقية.
القائمة (ب): 1 الواجهة الأمامية، أي التخطيط ولوحة المفاتيح مفتوحة؛ واسأل: ما أحجام الشاشات التي يجب أن تدعمها الصفحة؟ 2 الواجهة الخلفية، أي القاعدة في العنصر 1 من القائمة (أ)؛ واسأل: هل يُفحص الحد على الخادم أم على الشاشة فقط؟
3 الإعدادات والبنية التحتية: البرنامج هو نفسه في البيئتين، فافحص ما يختلف بينهما، مثل sms_service؛ واسأل: ماذا تحتوي إعدادات الإنتاج؟ 4 قاعدة البيانات والواجهة الخلفية: تحقّق مما إذا كان السجل قد حُفظ ثم عُدّل أو حُذف لاحقاً؛ واطلب السجل نفسه وسجلات الخادم (Logs) في وقت الحجز. وإن لم يُحفظ أصلاً، فتحقّق أيضاً مما إذا كانت الواجهة الأمامية قد أظهرت «تم الحجز» مع أن الواجهة الخلفية ردّت برسالة خطأ.
أسئلة شائعة
هل الإعدادات جزء من البرمجيات فعلاً؟
نعم. فالإعدادات تُسلَّم مع البرنامج أو تُضبط في كل بيئة على حدة، ويقرؤها البرنامج أثناء تشغيله، وتغيّر سلوكه، لذا قد تحتوي على عيوب هي أيضاً. والإعداد الخاطئ قد يعطّل برنامجاً سليماً، ولهذا يحتاج تغيير الإعدادات إلى الاختبار تماماً كتغيير الشيفرة.
هل أحتاج إلى معرفة البرمجة لأفهم هذه الطبقات؟
لا. تحتاج إلى معرفة ما تفعله كل طبقة وكيف تلاحظها: الشاشة للواجهة الأمامية، والطلبات والاستجابات للواجهة الخلفية، والسجلات المحفوظة لقاعدة البيانات، وتفاصيل البيئة للبنية التحتية. وستعلّمك الوحدات اللاحقة كلاً منها بالأدوات.
ما الفرق بين الواجهة البرمجية (API) والواجهة الخلفية؟
الواجهة الخلفية هي البرنامج الذي يعمل على الخادم ويطبّق القواعد. أما الواجهة البرمجية فهي ما يقدّمه هذا البرنامج للبرامج الأخرى: الطلبات التي يقبلها والاستجابات التي يعيدها. وتستخدم الواجهة الأمامية الواجهة الخلفية عبر واجهتها البرمجية، ويمكن لتطبيق جوال أو نظام شريك أن يستخدم الواجهة البرمجية نفسها.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- RFC 9110: HTTP Semanticsمعاني أساليب HTTP وحقول الترويسات ورموز الحالة والتفاوض على المحتوى، بغضّ النظر عن إصدار البروتوكول.
- Overview of HTTP — MDNكيف يعمل HTTP: بروتوكول عميل–خادم عديم الحالة، يرسل فيه العميل طلباً ويردّ الخادم برسالة استجابة.
تدرّب بأدوات متقن
تفكيك عنوان URL إلى البروتوكول والمضيف والمنفذ والمسار ومعاملات الاستعلام والجزء (fragment) وبيانات الاعتماد.
ابحث عن أي رمز حالة HTTP لمعرفة معناه ومرجعه في RFC ومتى يُستخدم.
تنسيق JSON وتجميله والتحقق من صحته فوراً في متصفحك مع مسافة بادئة قابلة للتخصيص.
استكشاف JSON كشجرة قابلة للطي مع المسارات والأنواع وعدد القيم.
تنسيق YAML والتحقق من صحته بمسافات بادئة وعلامات اقتباس متسقة.
تحليل سلاسل User-Agent إلى المتصفح والإصدار والمحرك ونظام التشغيل ونوع الجهاز مع كشف الروبوتات.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.
جزء من مسار تعلم ضمان الجودة
قبل هذا الموضوع
لا متطلبات سابقة: هذه نقطة بداية.