chapter 6 : Software Quality and Behavioral Specifications



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


  • ما المقصود بجودة البرمجيات
  • كيف ترتبط الجودة بدورة حياة تطوير النظام (SDLC)
  • الفرق بين Quality Assurance و Quality Control
  • كيف يؤثر التصميم (خصوصًا التصميم الوظيفي) على جودة النظام
  • كيف نصف سلوك النظام بطريقة تقلل الأخطاء وتسهّل التطوير

  1.  Software Requirements وعلاقتها بالجودة

ما هي Software Requirements؟

متطلبات البرمجيات هي الوصف الرسمي لما يجب أن يقدمه النظام من خدمات ووظائف، إضافة إلى القيود التي يعمل ضمنها.

بمعنى آخر:

المتطلبات تجيب عن سؤال: ماذا يجب أن يفعل النظام؟

المتطلبات عبر مراحل SDLC

أولًا: مرحلة التحليل (Analysis)

في هذه المرحلة:

  • يتم جمع متطلبات المستخدم والعميل
  • التركيز يكون على الوظائف، وليس على الكيفية
  • تُكتب المتطلبات بلغة مفهومة وغير تقنية غالبًا

مثال:

النظام يجب أن يسمح للمستخدم بتسجيل الدخول باستخدام اسم المستخدم وكلمة المرور. 

-----------------------------------------------------------------------------------------------------------------------------

ثانيًا: مرحلة التصميم (Design)

هنا ننتقل من “ماذا نريد” إلى:

كيف سنحقق ما نريد؟

  • يتم تحويل المتطلبات إلى مخططات وتصاميم
  • تحديد المكونات، العلاقات، وتدفق العمل

مثال:
تصميم شاشة Login
تصميم Class للتحقق من المستخدم
تصميم آلية التحقق من كلمة المرور

-----------------------------------------------------------------------------------------------------------------------------

ثالثًا: مرحلة الاختبار (Testing)

في هذه المرحلة نسأل:

  • هل النظام حقق المتطلبات فعلًا؟
  • هل كل Requirement له اختبار؟

مثال:
اختبار:

  • إدخال كلمة مرور خاطئة
  • إدخال اسم مستخدم غير موجود
  • إدخال بيانات صحيحة
-----------------------------------------------------------------------------------------------------------------------------

مفهوم التتبع (Traceability)


كل Requirement يجب أن:

  • يظهر في التصميم
  • يتم اختباره

إذا وُجد Requirement غير مختبَر → خطر
إذا وُجد Test بدون Requirement → هدر

-----------------------------------------------------------------------------------------------------------------------------

ما هي Software Quality؟

جودة البرمجيات تعني:

  • النظام يعمل بشكل صحيح
  • يحقق متطلبات العمل (Business)
  • يحقق متطلبات المستخدم (Customer)
  • تم تطويره بطريقة تقلل الأخطاء والمخاطر والتكلفة

الجودة لا تعني فقط “عدم وجود Bugs”، بل تشمل:

  • سهولة الصيانة
  • سهولة التعديل
  • الأداء
  • الاستقرار
  • وضوح السلوك
-----------------------------------------------------------------------------------------------------------------------------

مكونات Software Quality

جودة البرمجيات تقوم على ثلاثة عناصر رئيسية:

  • Quality Assurance (QA)
  • Quality Control (QC)
  • Testing

كل عنصر له دور مختلف لكنه مكمل للآخرين.


-----------------------------------------------------------------------------------------------------------------------------

Quality Control (QC)

ما هو QC؟

Quality Control يركز على المنتج نفسه.

الهدف:

  • اكتشاف الأخطاء
  • تصحيحها
  • التأكد أن النظام مطابق للمواصفات
-----------------------------------------------------------------------------------------------------------------------------

مثال عملي على QC

لديك نظام تسجيل دخول.

أثناء الاختبار:

  • تكتشف أن المستخدم يستطيع الدخول بدون كلمة مرور

هذا:

  • خطأ (Bug)
  • يتم تسجيله
  • يتم إصلاحه

هذا العمل يُسمّى Quality Control.

QC = اكتشاف العيوب بعد حدوثها.


-----------------------------------------------------------------------------------------------------------------------------

Quality Assurance (QA)

ما هو QA؟

Quality Assurance يركز على عملية التطوير نفسها.

الهدف:

  • منع حدوث الأخطاء من الأساس
  • تحسين طريقة العمل
  • وضع معايير واضحة

مثال عملي على QA

  • وضع Coding Standards
  • فرض Code Review قبل الدمج
  • استخدام Checklist للمتطلبات
  • توحيد طريقة كتابة الاختبارات

هذه الخطوات لا تبحث عن Bug معين،
بل تمنع ظهوره مستقبلًا.

QA = منع العيوب قبل حدوثها.

-----------------------------------------------------------------------------------------------------------------------------

Software Quality Approaches

هي مجموعة طرق وتقنيات تُستخدم خلال كل مراحل التطوير لتحسين الجودة، مثل:

  • المراجعة (Review)
  • التواصل الجيد
  • الاختبار المبكر
  • التحسين المستمر
Communication

ضعف التواصل يؤدي إلى:

  • فهم خاطئ للمتطلبات
  • تصميم خاطئ
  • أخطاء مكلفة لاحقًا

التواصل الجيد يقلل:

  • التعديلات
  • إعادة العمل
  • النزاعات
Review

المراجعة يمكن أن تكون:

  • مراجعة متطلبات
  • مراجعة تصميم
  • مراجعة كود

كلما كانت المراجعة أبكر:

  • كان إصلاح الخطأ أسهل وأرخص
Revise and Remember

أي خطأ يتم اكتشافه:

  • يتم إصلاحه
  • يتم توثيق سببه
  • يتم تجنب تكراره

هذه الخطوة تبني خبرة الفريق.


Unit Testing

اختبار كل جزء صغير على حدة:

  • Function
  • Method
  • Module

قبل دمج الأجزاء معًا.


-----------------------------------------------------------------------------------------------------------------------------

 Functional Design Paradigm

هو أسلوب تصميم يركز على:

  • تقسيم النظام إلى وظائف واضحة
  • تقليل الترابط بين الأجزاء
  • جعل كل جزء مستقل قدر الإمكان

Low Coupling (ترابط ضعيف)

يعني:

  • تغيير جزء لا يؤثر على باقي النظام
  • سهولة التعديل
  • سهولة الاختبار

Pure Functions

الدالة:

  • تأخذ مدخلات
  • تعطي مخرجات
  • لا تغيّر أي شيء خارجي

مثال:
دالة تحسب الضريبة من السعر
لا تغيّر قاعدة بيانات
ولا تعدل متغيرات عامة


Immutability

البيانات لا يتم تعديلها مباشرة، بل:

  • يتم إنشاء نسخة جديدة عند الحاجة

هذا يقلل:

  • الأخطاء
  • التعارض
  • السلوك غير المتوقع


لماذا هذا يحسن الجودة؟

  • أسهل في الاختبار
  • سلوك متوقع
  • أقل Bugs
  • عمر أطول للنظام

-----------------------------------------------------------------------------------------------------------------------------


Software Behavioral Specifications

هي طريقة لوصف كيف يتصرف النظام خطوة بخطوة.

بدل أن نقول:

النظام يعالج الطلب

نقول:

  1. يستقبل الطلب
  2. يتحقق من صحته
  3. يعالج البيانات
  4. يعيد النتيجة
  5. يتعامل مع الأخطاء إن وُجدت

فوائد Behavioral Specifications

  • وضوح الفهم
  • تقليل الأخطاء
  • تقليل وقت التطوير
  • تقليل التكلفة
  • سهولة الصيانة
Behavioral Models

هي نماذج تصف السلوك الديناميكي للنظام أثناء التشغيل.

السلوك يبدأ عندما:

  • تصل بيانات جديدة
    أو
  • يحدث حدث (Event)

    --------------------------------------------------------------------------------------------------------------------

أمثلة محفزات (Stimulus)

  • المستخدم ضغط زر “Pay”
  • وصل ملف جديد
  • انتهت مهلة زمنية
  • فشل اتصال

طرق تمثيل السلوك

1. Flowchart

يستخدم لتوضيح:

  • تسلسل الخطوات
  • القرارات
  • التفرعات

مثال:
تدفق تسجيل الدخول


2. Pseudocode

كتابة الخوارزمية بلغة شبه برمجية قبل الكود.


3. Finite State Machine (FSM)

مفيد عندما يكون النظام مبني على حالات.

مثال حالات Login:

  • Logged Out
  • Logged In
  • Locked


4. Extended FSM

مثل FSM لكن مع:

  • بيانات
  • شروط
  • أفعال إضافية

Comments