در بخش اول این مقاله، تاریخچه ای از مفهوم اعتبارسنجی (Validation) در مدل های تحقیق در عملیات ارائه گردید. در این مقاله کمی بیشتر در خصوص اعتبارسنجی صحبت خواهیم کرد و این مفهوم را در کنار واژگانی نظیر تصدیق (Verification) و آزمایش و تست (Test) مورد بررسی قرار خواهیم داد. در یک تعریف کلی، تصدیق و اعتبارسنجی (V&V) یک مدل، سیستم و یا یک نرم افزار را می توان کلیه تکنیک ها مورد استفاده در تعیین میزان صحت هر یک از آن دانست. در این مقاله با توجه به نبود یک منبع معتبر در این حوزه به بررسی لزوم شناخت و استفاده از تکنیک های تست و تصدیق و اعتبارسنجی می پردازیم و به بیان اجمالی برخی از این روش ها خواهیم پرداخت.
فهرست مطالب
مقدمه
در دنیای واقعی بشر همواره سعی در مدلسازی جهان پیرامون خویش داشته است. در فضای مهندسی نیز مهندسان در تلاش بوده اند تا بتوانند با استفاده از ابزارهای مختلف به مدلسازی مسائل پیرامون خویش بپردازند. اما همیشه پس از مدلسازی مسائل، مهندسان با این سوال روبرو بودند که آیا مدل آن ها معتبر است؟ و آیا جواب های صحیحی ارائه می دهد؟ گسترش دامنه چنین سوالاتی موجب به وجود آمدن حوزه ای به نام تصدیق (Verification) و اعتبارسنجی (Validation) شد که از این پس آن را به اختصار تصدیق و اعتبارسنجی و یا V&V می نامیم.
تصدیق و اعتبارسنجی امروزه بخشی مهم از هر سیستمی می باشد که در اکثر موارد قبل از پیاده سازی سیستم و در اوایل سیکل عمر سیستم انجام می شود. تصدیق و اعتبارسنجی هنگامی اهمیت بیشتری می یابد که تست سیستم گران باشد [۱]. در گذشته در اکثر موارد کاربران این وظیفه را انجام می دادند و در واقع آنها خود به این سئوالات که آیا سیستم هدف آن ها را تامین می کند؟ و آیا این کار را به درستی انجام می دهد؟ پاسخ می دادند. اما این روش به دو دلیل عمده مناسب نیست:
- هیچ تضمینی وجود ندارد که مشکلات کشف شده توسط مشتریان رفع شود و
- انجام چنین تست هایی نیازمند هزینه، زمان و منابع می باشد که ممکن است کاربران (مشتریان) فاقد آن باشند[۲].
همچنین در طی ۲۰ الی ۳۰ سال اخیر با گسترش سیستم ها به خصوص سیستم های نرم افزاری و افزایش پیچیدگی آن ها تصدیق و اعتبارسنجی نقش مهمتری یافته است و لزوم استفاده گسترده تر از آن ضروری به نظر می رسد. در سال های گذشته تصدیق و اعتبارسنجی در اکثر موارد توسط مهندسان نرم افزار انجام می شده است اما به نظر می رسد با افزایش پیچیدگی و گستردگی مسائل، ادامه این روند به همین صورت موجب ایجاد سیستم هایی با قابلیت اطمینان کم می شود. بنابراین لازم است این موضوع به عنوان یک مرحله جداگانه از طراحی و پیاده سازی سیستم ها، مد نظر قرار گیرد. توجه روزافزون به این حوزه وکاربرد آن در دیگر حوزه ها، نشان دهنده این الزام می باشد [۱۰]. امروزه بهتر است به جای انجام این کار توسط کاربر و یا مهندس نرم افزار از یک شیوه قانونمند مبتنی بر قواعد از پیش تعیین شده استفاده شود.
در این مقاله سعی داریم تا در ابتدا به بیانی روشن و واضح از مفهوم تصدیق و اعتبارسنجی دست یابیم و سپس به بررسی قوانین و قواعدی که در تصدیق و اعتبارسنجی استفاده می شود بپردازیم. در ادامه در بخش ۲ به بررسی مفاهیم و تعاریف موجود در این حوزه خواهیم پرداخت. عدم وجود یک منبع جامع در این حوزه از ادبیات لزوم پرداختن به این مفاهیم و تعاریف را دوچندان می کند. پس از آشنایی کامل با این مفاهیم و تعاریف در بخش ۳ به بیان تکنیک های مورد استفاده در تست، تصدیق و اعتبارسنجی پرداخته و تفکیک تمام این روش ها و تکنیک های ارائه شده در ادبیات این حوزه را مد نظر قرار خواهیم داد. در انتها و در بخش ۴ نتایج به دست آمده از این مطالعه آورده شده و مطالعات آتی در این حوزه از ادبیات ارائه می شود.
تعاریف و مفاهیم
پیش از ورود به بحث لازم است، مفاهیم اساسی این حوزه را تعریف نماییم. این مفاهیم عبارتند از:
- تصدیق و اعتبارسنجی
- تست
در ادامه به تعریف هر یک از آن ها از دیدگاه محققان مختلف خواهیم پرداخت.
تصدیق و اعتبارسنجی
در ادامه به بیان مفاهیم و سیر تاریخی تصدیق و اعتبارسنجی می پردازیم و سپس روش ها و تکنیک های آن ها را بیان می کنیم. کارناپ [۱۳] و پاپر [۱۵،۱۴] دو دانشمند مشهور رشته فلسفه علم در قرن بیستم برای اولین بار مفاهیم امروزه تصدیق و اعتبارسنجی را گسترش دادند و پس از آن افراد بسیاری درباره این موضوع تحقیق کردند (برای مطالعه بیشتر درباره سیر تاریخی تصدیق و اعتبارسنجی به مراجع [۱۶ الی ۲۰] مراجعه کنید). از بدو پیدایش تصدیق و اعتبارسنجی تعاریف بسیاری از آن ارائه شده است که سعی در تشریح مفهوم تصدیق و اعتبارسنجی داشته است که در ادامه به برخی از آن ها می پردازیم.
اولین حوزه ای که تصدیق و اعتبارسنجی را در حدود ۴۰ الی ۴۵ سال پیش به صورت ساختار یافته مورد استفاده قرار داد انجمن تحقیق در عملیات (OR) بود. از آنجا که حوزه تحقیق در عملیات شامل مباحث زیادی از جمله مدل تولید ، مدل برنامه ریزی ، مدل بازاریابی و … است که هرکدام از آن ها دارای پیچیدگی زیادی است نیاز به وجود تصدیق و اعتبارسنجی در این حوزه مشهود بود ؛ این مسئله سبب شد که تعداد زیادی از مقالات و کتاب ها در این حوزه انتشار یابد. اما باید نقطه عطف این تحقیقات را تعریفی از تصدیق و اعتبارسنجی دانست که توسط انجمن شبیه سازی کامپیوتری (SCS) ارائه شده است [۲۴]. آن تعریف به شرح زیر است:
- اعتبارسنجی مدل: تحقیق می کند که آیا مدل (کامپیوتری) یک تصویر درست از مدل و محدودیت های تعیین شده ی آن را نمایش می دهد.
- تصدیق مدل: تحقیق می کند که آیا مدل (کامپیوتری) و فرآیندهای آن از منظر کاربردی مدل دارای دامنه ای از درستی و سازگار می باشد.
در این ارتباط دو نوع مدل قابل تشخیص از یکدیگر در این زمینه وجود دارند:
- مدل مفهومی
- مدل کامپیوتری
به دلیل اینکه در مبحث تصدیق و اعتبارسنجی آشنایی با دو مفهوم فوق از اهمیت بسزایی برخوردار است در زیر تعریفی از این دو مفهوم ارائه می دهیم.
- مدل مفهومی : از تمام اطلاعات ، مدل های ریاضی داده ها و معادلات ریاضیِ تشریح کننده فرآیند تشکیل شده است. مدل مفهومی از بررسی ، آنالیز و مشاهده سیستم واقعی به دست می آید.
- مدل کامپیوتری : یک برنامه کامپیوتری است که مدل مفهومی را پیاده سازی می کند. در واقع مدل کامپیوتری می تواند یک نرم افزار و یا یک کد نوشته شده توسط یکی از زبان های برنامه نویسی باشد.
لازم به توضیح است تصدیق به بررسی رابطه مدل مفهومی و مدل کامپیوتری می پردازد و اعتبارسنجی به بررسی رابطه جهان واقعی و مدل کامپیوتری می پردازد. اینگونه تعریف واضحی از تصدیق و اعتبارسنجی در کمتر منبعی به چشم می خورد [۲].
در طی دهه ی ۱۹۷۰ علاقه به مدلسازی و شبیه سازی مدل های دنیای واقعی افزایش یافت. پر اهمیت شدن این سیستم ها و گسترش استفاده از سیستم های کامپیوتری و همچنین استفاده از این سیستم ها در صنایع هواپیمایی و صنایع هسته ای موجب نیاز بیشتر به تصدیق و اعتبارسنجی شد. در پاسخ به این نیاز IEEE واژه های فوق را به صورت زیر تعریف کرد [۲۱،۲۲].
- تصدیق : فرایند ارزیابی محصولِ فاز توسعه یک نرم افزار برای فراهم آوردن اطمینان از اینکه آیا نیازهای تعریف شده (در فاز قبل) را تامین می کند یا خیر.
- اعتبارسنجی : عبارت است از فرآیند تست برنامه کامپیوتری و ارزیابی نتایج آن برای حصول اطمینان از برآورده شدن نیازهای از پیش تعریف شده.
همچنین موسسه American Institute of Aeronautics and Astronautics برای تصدیق و اعتبارسنجی تعاریف زیر را ارائه داده است [۲۳]:
- تصدیق : فرآیند تشخیص اینکه آیا پیاده سازی مدل، توصیف های توسعه دهندگان مدل و راه حل های مدل را به صورت دقیق نمایش می دهد.
- اعتبارسنجی: فرآیند تشخیص اینکه آیا از دید کاربردهای برنامه ریزی شده، مدل چه درجه ای از جهان واقعی را با موفقیت شبیه سازی می کند.
تست
نویسندگان و محققان مختلف، تعاریف متفاوتی را از واژۀ تست ارائه نموده اند که در این جا به ۳ تعریف از مراجع معتبر این حوزه بسنده می کنیم. از نظر Myers در سال ۱۹۷۶، تست عبارت است از پروسه اجرای برنامه به منظور پیدا کردن خطاها [۳]. این در حالی است که از نظر Dijkstra در سال ۱۹۷۰، تست می تواند وجود اِشکالات در سیستم را نشان دهد اما هیچگاه نمی تواند عدم وجود آن ها را اثبات نماید [۴]. اما موسسه IEEE در سال ۱۹۹۰، تست را به عنوان فرآیند اجرای یک سیستم یا یک مولفه از سیستم تحت شرایط خاص و مشاهده و یا ثبت نتایج به منظور ارزیابی بعضی جنبه های سیستم و یا مولفه ای از سیستم تعریف می نماید [۱۲].
درک دشواری و مشکلات تست یک سیستم عموما برای غالب افراد آسان نیست [۵]. مثال زیر در شفاف تر کردن این ادعا حائز اهمیت است: برنامه ای را در نظر بگیرید که به عنوان ورودی سه عدد را دریافت می کند ؛ این سه عدد نشان دهنده طول اضلاع یک مثلث خواهند بود. بر اساس این سه عدد برنامه تشخیص می دهد که آیا مثلث متساوی الاضلاع ، متساوی الساقین و یا دارای اضلاع نابرابر است [۳]. این مثال ساده نشان می دهد که ایجاد مجموعه ای از تست ها حتی برای برنامه ای تا این حد پیش پا افتاده چقدر مشکل است [۵].
حال مسائل اصلی در تست برنامه فوق این است که: چه اعدادی را جهت تست این برنامه به کار بریم؟ چند بار این تست را انجام دهیم؟ تا چه میزان می توان به نتایج تست اطمینان داشت؟ و سوالات بسیاری که می توان در این باره مطرح نمود و جملگی دلایلی آشکار در اثبات ادعای فوق است. تا آنجا که حتی برخی از سازندگان مدل، موارد فوق را در تصدیق و اعتبارسنجی مدل خود مد نظر قرار نمی دهند.
حال می توان دشواری تست برای یک سیستم پیچیده را درک نمود. نمونه ی دیگری از این گونه برنامه ها توسط Humphrey ارائه شده است که یک رشته ۱۰ کاراکتری از حروف الفبا را دریافت کرده و مورد آنالیز قرار می دهد [۶]. این مثال نیز مانند مثال فوق الذکر نشان می دهد که ایجاد یک مجموعه از تست ها برای تست کامل یک مسئله تا چه اندازه دشوار می باشد.
اما یک تست خوب به عقیده Myers باید دارای خصوصیات زیر باشد: [۳]
- یک تست خوب تستی است که احتمال زیادی برای کشف خطاهای کشف نشده داشته باشد ؛ نه تستی که نشان دهد سیستم به خوبی کار می کند.
- این که شما خود برنامه خود را به طور کامل تست کنید تقریبا غیر ممکن است.
- یک قسمت الزامی برای هر تستی تشریح نتایج مورد انتظار است.
- تست را هم برای موقعیت های معتبر و هم موقعیت های نامعتبر طراحی کنید.
- نتایج تمام تست ها را به طور کامل بررسی کنید.
- هنگامی که تعداد خطاها (مشکلات) در یک قسمت از نرم افزار (مدل) افزایش می یابد احتمال وجود خطاها کشف نشده هم در آن قسمت افزایش می یابد.
- تست سیستم را به بهترین افراد خود واگذار کنید.
- مطمئن باشید که تست پذیری یکی از اهداف اصلی در طراحی نرم افزار شما می باشد.
- هیچگاه به برنامه اجازه ندهید تست کردن را آسان تر کند.
- تست کردن مانند بسیاری از کارهای دیگر باید هدفمند باشد.
بازدیدها: 3298