# التحقق والتثبت من البرمجيات

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

## تعاريف

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

### التحقق من البرمجيات

يُطبق التحقق مما إذا كانت المواصفات قد استوفيت من خلال تشغيل البرنامج، لكن هذا غير ممكن (مثلًا، كيف يمكن لأي شخص معرفة ما إذا كانت البنية أو التصميم أو غيرهما. يُنفذان بشكل صحيح من خلال تشغيل البرنامج؟). يمكن استنتاج ما إذا كانت المواصفات قد استوفيت، فقط من خلال مراجعة المنتجات الثانوية المرتبطة بها.

### التحقق من المنتجات أو المواصفات

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

### التثبت من البرمجيات

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

### التثبت من المنتجات أو المواصفات

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

### التحقق مقابل التثبت

وفقًا لنموذج نضج القدرة (سي إم إم آي-إس دبليو النسخة 1.1)،
* التحقق من البرمجية: عملية تقييم البرمجيات أثناء عملية التطوير أو عند نهايتها لتحديد ما إذا كانت تفي بالمتطلبات المحددة. [آي إي إي إي-إس تي دي-610]
* التثبت البرمجي (التحقق من صحة البرمجيات): عملية تقييم البرنامج لتحديد ما إذا كانت منتجات مرحلة تطوير معينة تفي بالشروط المفروضة في بداية تلك المرحلة. [آي إي إي إي-إس تي دي-610]
يمكن اعتبار التثبت أثناء تطوير البرمجيات شكلًا من أشكال تثبت مواصفات متطلبات المستخدم؛ وهذا يُعادل في نهاية عملية التطوير تثبت البرامج الداخلي و/ أو الخارجي. أما التحقق، من وجهة نظر سي إم إم آي، هو من نوع المنتجات الثانوية.
بمعنى آخر، يضمن التحقق أن مخرجات كل مرحلة من مراحل عملية تطوير البرنامج تنفذ بفعالية ما تحدده منتجات الدخل المقابلة (المتطلبات -> التصميم -> المنتج البرمجي)، في حين يضمن التثبت أن المنتج البرمجي يلبي احتياجات جميع أصحاب المصلحة (لهذا، يُعبر عن مواصفات المتطلبات بشكل صحيح ودقيق في المقام الأول). يضمن التحقق أنك «بنيته بشكل صحيح» ويؤكد أن المنتج، كما هو مقدم، يفي بخطط المطورين. يضمن التثبت البرنامج أنك «بنيت الشيء الصحيح» ويؤكد أن المنتج، كما هو مقدم، يفي بالاستخدام المقصود وأهداف أصحاب المصلحة.
استخدمت هذه المقالة التعريف المحكم أو الضيق للتثبت.
من منظور الاختبار:
* خطأ: وظيفة خاطئة أو مفقودة في التعليمات البرمجية.
* فشل: مظهر من مظاهر الخطأ أثناء التنفيذ. مثل أن يكون البرنامج غير فعال، أو أنه لا يقوم بما يفترض أن يقوم به.
* عطل: لا يلبي النظام وظائفه المحددة وفقًا لمواصفاته. البرنامج غير فعال (يستهلك الكثير من الموارد مثل دورات وحدة المعالجة المركزية، ويستخدم الكثير من الذاكرة، ويجري الكثير من عمليات الإدخال/الإخراج، وغيرها)، أو لا يمكن استخدامه، أو أنه غير موثوق. أو لا يُنفذ شيء ما «بالطريقة» المفترض أن يُنفذه بها.