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

تعاريف
------

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

التحقق والتحقيق ليسا نفس الشيء، ولكن يُخلط بينهما في أغلب الأحيان. عبّر بوهم بإيجاز عن الفرق كالتالي:

* التحقق: هل نبني المنتج بشكل صحيح؟
* التحقيق: هل نبني المنتج المناسب؟

يتحقق «بناء المنتج بشكل صحيح» من تنفيذ النظام للمواصفات بشكل صحيح، بينما يشير «بناء المنتج المناسب» إلى احتياجات المستخدم. يُلزم في بعض السياقات وجود متطلبات مكتوبة لكل من الإجراءات والبروتوكولات الرسمية لتحديد التوافق.

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

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

ملاحظة: يبدأ التحقق قبل التحقيق ثم يعملان بالتوازي حتى إصدار المنتج البرمجي.

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

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

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

يمكن أن يخضع مخرج كل مرحلة من مراحل عملية تطوير البرامج للتحقق عند فحصه وفقًا لمواصفات المدخلات.

أمثلة على التحقق من المنتجات الثانوية:

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

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

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

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

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

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

يجب تحقيق المتطلبات قبل أن يصبح المنتج البرمجي جاهزًا ككل (تتطلب عمليات التطوير الشلالية تعريفها بشكل كامل قبل بدء التصميم؛ لكن لا تتطلب عمليات التطوير التكرارية ذلك وتسمح بالتحسين المستمر).

أمثلة على تحقيق المنتجات الثانوية:

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

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

وفقًا لنموذج نضج القدرة (سي إم إم آي-إس دبليو النسخة 1.1)،

* التحقق من البرمجية: عملية تقييم البرمجيات أثناء عملية التطوير أو عند نهايتها لتحديد ما إذا كانت تفي بالمتطلبات المحددة. [آي إي إي إي-إس تي دي-610]
* التحقيق البرمجي (التحقق من صحة البرمجيات): عملية تقييم البرنامج لتحديد ما إذا كانت منتجات مرحلة تطوير معينة تفي بالشروط المفروضة في بداية تلك المرحلة. [آي إي إي إي-إس تي دي-610]

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

بمعنى آخر، يضمن التحقق أن مخرجات كل مرحلة من مراحل عملية تطوير البرنامج تنفذ بفعالية ما تحدده منتجات الدخل المقابلة (المتطلبات -> التصميم -> المنتج البرمجي)، في حين يضمن التحقيق أن المنتج البرمجي يلبي احتياجات جميع أصحاب المصلحة (لهذا، يُعبر عن مواصفات المتطلبات بشكل صحيح ودقيق في المقام الأول). يضمن التحقق أنك «بنيته بشكل صحيح» ويؤكد أن المنتج، كما هو مقدم، يفي بخطط المطورين. يضمن التحقيق البرنامج أنك «بنيت الشيء الصحيح» ويؤكد أن المنتج، كما هو مقدم، يفي بالاستخدام المقصود وأهداف أصحاب المصلحة.

استخدمت هذه المقالة التعريف المحكم أو الضيق للتحقيق.

من منظور الاختبار:

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

انظر أيضًا
----------

* تصديق متقاطع
* مواصفة وظيفية
* محددات المتطلبات البرمجية
* تثبت (صناعة الدواء)
* نظم التأكيد المستقلة
* فحص البرمجيات
* هندسة البرمجيات
* جودة البرمجيات

مراجع
-----

1. ↑  Pham, H. (1999). *Software Reliability*. John Wiley & Sons, Inc. ص. 567. ISBN:9813083840. Software Validation. The process of ensuring that the software is performing the right process. Software Verification. The process of ensuring that the software is performing the process right." Likewise and also there: "In short, Boehm (3) expressed the difference between the software verification and software validation as follows: Verification: *Are we building the product right?* Validation: *Are we building the right product?*.

* أيقونة بوابةبوابة تقانة
* أيقونة بوابةبوابة علم الحاسوب
* أيقونة بوابةبوابة برمجة الحاسوب

|  |  |
| --- | --- |
| التصنيفات الطبية | 
* **نظام فهرسة المواضيع الطبية (MeSH)**: D012986

 |
| المعرفات الخارجية | 
* **نظام اللغة الطبية الموحدة (UMLS CUI)**: C0037590

 |