نماذج تطوير البرمجيات

نموذج تطوير البرمجيات، ويسميه ISTQB نموذج دورة حياة تطوير البرمجيات (SDLC model)، يصف طريقة تنظيم عملية التطوير: أي الأنشطة تجري، وبأي ترتيب، وكيف تتداخل؛ فهو يرتّب زمنياً الأنشطة التي عرضها دليل SDLC وSTLC. ويذكر منهج ISTQB للمستوى التأسيسي (CTFL الإصدار ⁦4.0⁩) ثلاث عائلات: النماذج التتابعية (Sequential) مثل نموذج الشلال (Waterfall) ونموذج V (V-model)، والنماذج التكرارية (Iterative) مثل النموذج الحلزوني (Spiral model) والنمذجة الأولية (Prototyping)، والنماذج التزايدية (Incremental) مثل العملية الموحدة (Unified Process).

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

لماذا يهم

النموذج يحدد ما يستطيع المختبِر فعله ومتى. ويعدّد CTFL الإصدار ⁦4.0⁩ ما يتأثر باختيار دورة الحياة: نطاق أنشطة الاختبار وتوقيتها، ودرجة تفصيل توثيق الاختبار، واختيار تقنيات الاختبار ونهجه، ومدى أتمتة الاختبار، ودور المختبِر ومسؤولياته.

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

التتابعي والتكراري والتزايدي

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

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

كيف يختلف الاختبار في كل نموذج

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

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

التتابعيمثل الشلال ونموذج V

  1. 1كتابة مواصفات كل شيء
  2. 2تصميم كل شيء وبناؤه
  3. 3اختبار كل شيء
  4. 4إصدار واحد في النهاية
أول كود للاختبار الديناميكي:
متأخر، بعد التنفيذ
ما يُعاد اختباره في كل دورة:
لا دورات: يتركّز الاختبار قرب النهاية
توثيق الاختبار:
مفصّل ورسمي
خطر الاختبار الرئيسي:
عيوب المتطلبات تُكتشف متأخرة، ومرحلة الاختبار تُضغط

التكراريمثل الحلزوني والنمذجة الأولية

  1. 1بناء نسخة من المنتج كله
  2. 2اختبارها وتقييمها مع المستخدمين
  3. 3إعادة العمل على الخصائص نفسها

يتكرر: عودة إلى الخطوة 1

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

التزايديمثل العملية الموحدة

  1. 1الزيادة الأولى: بناء واختبار وتسليم
  2. 2الزيادة الثانية: إضافة واختبار وإعادة فحص الأولى
  3. 3الزيادة الثالثة: إضافة واختبار وإعادة فحص الأولى والثانية
أول كود للاختبار الديناميكي:
مبكر، الزيادة الأولى
ما يُعاد اختباره في كل دورة:
الزيادات السابقة، وتكبر حزمة الانحدار
توثيق الاختبار:
لكل زيادة، مع حزمة انحدار متنامية
خطر الاختبار الرئيسي:
تفاعلات غير مختبَرة بين الزيادات

تجمع معظم الفرق الرشيقة، كما في Scrum مثلاً، بين التطوير التكراري والتزايدي.

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

مثال تطبيقي: تطبيق العيادة بثلاث طرق

لتطبيق العيادة ثلاث خصائص: الحجز (B)، والتذكير برسائل SMS (R)، والدفع الإلكتروني (P). ويوضح المخطط الزمني متى تُكتب مواصفات كل منها وتُبنى وتُختبر.

  • التتابعي: في الأسابيع الأولى يراجع المختبِر المواصفات الكاملة، ويسأل قبل كم من الوقت يُرسَل التذكير، وماذا يحدث حين يُلغى حجز مدفوع، ويصمم حالات اختبار النظام مع تتبع كل منها إلى متطلبها. ويبقى الاختبار الديناميكي منتظراً حتى يكتمل البناء.
  • التزايدي: تختبر الزيادة الثانية التذكير وتعيد فحص الحجز حيث يقرأ التذكير بياناته: الموعد الذي تُعاد جدولته أو يُلغى يجب أن يُحدَّث تذكيره أو يُلغى. وتضيف الزيادة الثالثة الدفع وتعيد فحص الاثنين. وتكبر حزمة الانحدار في كل مرة، لذا أتمت فحوص الحجز منذ الزيادة الأولى.
  • التكراري: في الدورة الأولى يستكشف المختبِر النسخة الأولية مع موظف استقبال، ويسجّل مشكلات قابلية الاستخدام والأسئلة المفتوحة بدلاً من حالات اختبار مفصّلة لشاشات ستتغير. وحين تستقر الشاشات تتحول المسارات الأساسية إلى فحوص انحدار، وتخضع النسخة النهائية لاختبار نظام وقبول كاملين.
Clinic booking app: Booking (B), Reminders (R), Payment (P)

Sequential:
  [specify B R P] [design] [build] [test B R P] -> release B R P

Incremental:
  [B: specify, build, test] -> release B
  [R: specify, build, test + regression of B] -> release B R
  [P: specify, build, test + regression of B R] -> release B R P

Iterative:
  [rough B R P] -> feedback -> [better B R P] -> feedback -> [final B R P] -> release

جرّبها: المتطلبات ← حالات اختبار جرّبها: مولّد سيناريوهات الانحدار

اختيار النموذج حسب السياق

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

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

جرّبها: مولّد الاختبار المبني على المخاطر جرّبها: مولّد معايير القبول

أخطاء شائعة

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

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

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

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

تمرين عملي

اختر نموذجاً لمشروعين وخطّط لاختبارهما

المطلوب

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

لكل مشروع، اقترح عائلة نموذج أو مزيجاً منها، وصِف كيف سيُنظَّم الاختبار.

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

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

خطر المشروع A: التنفيذ يأتي متأخراً، والتأخر يقلّص نافذة الاختبار. الإجراءات: الاتفاق في خطة الاختبار على معايير الخروج ونافذة اختبار محمية، وطلب تسليم منطق الحساب واختباره أولاً.

المشروع B: المتطلبات غير المؤكدة والحاجة إلى تغذية راجعة مبكرة تشير إلى تطوير تكراري تزايدي، باستخدام Scrum مثلاً: الطلب المسبق أولاً، ثم الولاء، ثم تحديد المواقع. وفي كل زيادة تُراجَع معايير القبول قبل التطوير، وتُختبر الخصائص الجديدة بالاختبار الاستكشافي، ويبقى التوثيق خفيفاً.

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

أسئلة شائعة

ما الفرق بين التطوير التكراري والتطوير التزايدي؟

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

هل Agile نموذج تطوير؟

ليس نموذجاً واحداً. Agile مجموعة من القيم والمبادئ يصفها بيان تطوير البرمجيات الرشيق (Manifesto for Agile Software Development). والطرق التي تتبعه، مثل Scrum، تنظّم العمل عادةً تطويراً تكرارياً تزايدياً. ويذكر CTFL الإصدار ⁦4.0⁩ كلاً من Scrum وKanban والبرمجة القصوى (XP) وأساليب مشابهة بوصفها طرقاً وممارسات تصف أنشطة التطوير بتفصيل أكبر.

هل نموذج V تتابعي أم تكراري؟

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

هل يستطيع المختبِر اختيار نموذج التطوير؟

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

المراجع

  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
  • ISTQB GlossaryISTQBالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
  • Manifesto for Agile Software DevelopmentThe Agile Manifesto authors · 2001القيم الأربع لتطوير البرمجيات الرشيق (Agile)، مثل تقديم البرمجيات العاملة على التوثيق الشامل، والاستجابة للتغيير على اتباع الخطة.
  • The 2020 Scrum GuideKen Schwaber and Jeff Sutherland · 2020تعريف Scrum: مسؤولياته وأحداثه ومخرجاته، بما فيها تعريف الإنجاز (Definition of Done) الذي يساعد الاختبار على تحقيقه.

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

حوّل قائمة متطلبات مرقّمة إلى حالات اختبار قابلة للتتبّع مع مصفوفة تربط المتطلبات بالاختبارات.

تصميم الاختبارات

ولّد معايير قبول بصيغة Given/When/Then وقائمة تحقق لتعريف الإنجاز (Definition of Done) من قصة مستخدم.

تصميم الاختبارات

للتعمّق أكثر

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

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