Verification در برابر Validation

در آوریل 1990، تلسکوپ فضایی هابل به مدار زمین فرستاده شد. هدف اصلی این تلسکوپ فضایی، بزرگنمایی اهداف مورد مشاهده با استفاده از یک آینه بزرگ بود. تولید آینه مزبور امری دشوار و نیازمند صحت و دقت بسیار بالایی بود (رجوع کنید به تفاوت صحت و دقت در مطالب گذشته وبلاگ). آزمایش این آینه از این جهت که قرار بود محیط واقعی آن در فضا باشد، در محل ساخت آن در زمین بسیار مشکل می نمود. در نتیجه تنها راه تست، اندازه گیری دقیق مشخصات محصول ساخته شده و مقایسه آن با مشخصات تعیین شده برای محصول مورد نظر بود. این آزمایشات با موفقیت صورت گرفته و هابل آماده پرتاب اعلام شد.

متاسفانه به محض عملیاتی شدن این تلسکوپ مشخص شد که تصاویر ارسال شده توسط آن به هیچ وجه فوکوس نیست. در تحقیقات صورت گرفته مشخص شد که ساخت آینه به درستی صورت نگرفته است. آینه مزبور بر اساس مشخصات تعیین شده (Specifications) تولید شده بود اما این مشخصات نادرست بوده است. این آینه به طور کامل دقیق (Precise) ساخته شده بود اما از صحت لازم (Accuracy) برخوردار نبود.

آزمایشات تایید کرده بود که آینه مزبور مشخصات لازم را تامین کرده است (Verification) اما درستی خود مشخصات اولیه را مورد بررسی قرار نداده بود (Validation).

به عبارت دیگر Verification به فرآیند مطابقت محصول با مشخصات آن گفته می شود اما Validation فرآیند مقایسه مشخصات محصول با نیازمندی های واقعی کاربر است.

هر چند مثال بالا مثالی خارج از حوزه نرم افزار است اما به طور دقیق قابل نگاشت به محصولات نرم افزاری می باشد. در نتیجه هرگز تصور نکنید که در صورت مطابقت نرم افزار تولید شده با مشخصات آن، محصول مزبور بدون عیب است. بلکه بخش مهم دیگر در آزمایش نرم افزار، مطابقت مشخصات محصول با خواسته واقعی کاربر آن است.

اصول اساسی تست نرم افزار

 

 

 

اصل 1: هدف از تست نرم افزار یافتن خطا است، نه اطمینان از درستی کارکرد نرم افزار.

اصل 2: برنامه نویس باید از تست برنامه خود اجتناب کند.

اصل 3: آزمایش موارد قابل انتظار در برنامه نیمی از ماجراست. نیم دیگر آزمایش مواردی است که انتظار میرود برنامه آن را انجام ندهد.

اصل 4: با فرض اینکه هیچ نقصی در برنامه نخواهید یافت تست را آغاز نکنید.

اصل 5: احتمال اینکه اشکالات بیشتری در قسمتی از برنامه کشف شود متناسب با تعداد اشکالات کشف شده  قبلی در آن بخش از برنامه است (به عبارت دیگر هرچه در ماژولی از برنامه خطاهای بیشتری پیدا کنید، احتمال وجود خطاهای دیگر در آن ماژول بیشتر است).

اصل 6: غیر ممکن است که بتوان یک برنامه را به طور کامل تست کرد.

اصل 7: تست نمیتواند نشان دهد که اشکالی وجود ندارد، بلکه تنها قادر است نشان دهد که اشکال وجود دارد!

اصل 8: برنامه پس از مدتی در برابر تستهای تکراری مقاوم خواهد شد (همانگونه که آفت ها پس از مدتی در مقابل یک آفت کش ثابت مصون میگردند).

References:

1.      The Art of Software Testing, Second Edition, Glenford J. Myers, Wiley Pub.

2.      Software Testing, Ron Patton, Sams Pub.