تست جعبه سفید
تست جعبهٔ سفید (به انگلیسی: White-box testing) عنوان مجموعه تستهایی در تست نرمافزار است که در آن، بر خلاف تست جعبهٔ سیاه به ریز عملکرد سامانهٔ نرمافزاری و ساختار کد مبدأ آن توجه میشود. در تست جعبهٔ سفید، بدون در نظر گرفتن خروجی مورد انتظار یا مشخصات از پیش تعیینشده، پیادهسازیهای درون نرمافزار مورد توجه قرار میگیرند. هدف این نوع تست یافتن خطاهای ناخواسته نظیر حلقههای بینهایت، مسیرهایی از کد که به سبب خطاهای منطقی کد هرگز اجرا نمیشوند و نظایر آن است.
تکنیک های طراحی تست جعبه سفید، شامل معیار های کد محور زیر میباشد:
- تست جریان کنترل
- تست جریان داده
- تست شاخه ای
- تست مسیر اولیه و تست مسیر
- تست های انتخاب محور
رویه اساسی
رویه های اساسی تست های جعبه سفید نیاز به آزمایش کننده ای دارد که دانش عمیق از کد منبع مورد آزمایش داشته باشد. برنامه نویس باید درک عمیق از برنامه داشته باشد تا بداند چه مورد های آزمایشی ایجاد کند تا هر مسیر قابل مشاهده در برنامه به درستی تست شود. وقتی کد برنامه به خوبی فهمیده شود، موارد آزمون مناسب با آنالیز کد منبع انتخاب می شوند. در ادامه به سه مرحله پایه ای که تست جعبه سفید برای انتخاب موارد آزمون به ترتیب طی میکند اشاره شده است:
- ورودی شامل انواع مختلفی از الزامات، مشخصات عملکرد، طراحی دقیق اسناد، کد منبع مناسب و مشخصات امنیتی است. این مرحله آماده سازی آزمایشها سفید جعبه است تا همه اطلاعات اصلی را بیابد.
- پردازش شامل انجام تجزیه و تحلیل ریسک برای هدایت کل فرایند تست، طرح تست مناسب، اجرای آزمونها و برقراری ارتباط نتایج می باشد. این فاز ساخت موارد آزمون است تا اطمینان حاصل شود که آنها به طور کامل برنامه را آزمایش می کنند و نتایج داده شده بر اساس آن ثبت می شود.
- خروجی شامل تهیه گزارش نهایی است که شامل تمام آماده سازی ها و نتایج فوق می باشد.
نقاط قوت
امروزه تست جعبه سفید یکی از دو روش تست بزرگ و پر استفاده می باشد. این تست چندین نقطه قوت بزرگ و قابل ذکر دارد:
- داشتن اطلاعات کامل از کد منبع در حین تست بسیار مفید واقع می شود.
- بهینه سازی کد به راحتی صورت می گیرد چون تنگناهای ناخوشایند در معرض دید قرار می گیرند.
- دید درونی مناسبی به برنامه نویس می دهد به این دلیل که توسعه دهنده هر پیاده سازی جدیدی را به خوبی توصیف می کند.
- قابلیت ردیابی برای هر تست از منبع فراهم می کند، در نتیجه اجازه می دهد تغییرات آینده به منبع را به راحتی در آزمایش های تازه و یا اصلاح شده به دست آورد.
- برای متوقف کردن تست، قوانین روشن و مبتنی بر مهندسی را فراهم می کند.
نقاط ضعف
اگرچه تست جعبه سفید مزایای زیادی دارد اما کامل نیست و معایبی نیز دارد از جمله:
- تست جعبه سفید فرایند آزمایش را پیچیده میکند، به این دلیل که آزمایش کننده باید اطلاعات کاملی از برنامه داشته باشد، یا تیم تست باید حداقل یک برنامه نویس ماهر داشته باشد که برنامه را در سطح کد به خوبی درک کند. آزمایش جعبه سفید نیاز به یک برنامه نویس با سطح بالایی از دانش به دلیل پیچیدگی سطح تست که باید انجام شود دارد.
- در بعضی موارد، این امکان واقع گرایانه نیست که بتوان همه شرایط و وضعیت های موجود در برنامه را آزمایش کرد و بعضی آزمایش نشده باقی میمانند.
- تمرکز تست بر روی خود نرم افزار موجود است و بدین ترتیب برخی از عملکرد های پنهان آن ممکن است کشف و تست نشوند.
- تست نتیجه می تواند شکننده باشد، زیرا به شدت به اجرای خاصی از چیزی که مورد آزمایش قرار می گیرد، مرتبط است. کد مورد آزمایش می تواند برای اجرای همان عملکرد در روش های مختلف بازنویسی شود که با پیش فرض هایی که در آزمون تعریف شده، غیرقابل قبول تلقی می شود. این می تواند منجر به تست هایی شود که بهطور غیر ضروری نرم افزار را رد میکند، یا در بدترین حالت قبول و پذیرش برنامه هایی با خطاهای ماسک در کد برنامه ایجاد می کنند، منجر شود.
دیدگاه مدرن
دیدگاه جدید تر این است که دوگانگی و چالش بین تست جعبه سفید و تست جعبه سیاه کمرنگ تر می شود. در حالی که "جعبه سفید" در اصل به معنای استفاده از کد منبع بود و جعبه سیاه به معنای استفاده از نیازمندی ها و الزامات، اکنون تست ها از بسیاری از اسناد در سطوح مختلف انتزاع حاصل می شود. نکته ی اصلی این است که تست ها معمولا از یک ساختار انتزاعی مانند فضای ورودی، یک گراف یا پیش فرض های منطقی طراحی شده اند و سؤال این است که چه مقدار از انتزاع ما از ساختار انتزاعی حاصل می شود. این می تواند کد منبع، الزامات، توصیف فضای ورودی یا یکی از ده ها نوع از مدل های طراحی باشد. بنابراین، تمایز "جعبه سفید / جعبه سیاه" اهمیت کمتری دارد و اصطلاحات کمتر مرتبط هستند.
آزمایشهای جعبه سفید
آزمایشهای مسیر پایه
آزمایش مسیر مستقل
ابتدا تعداد مسیرهای مستقل برنامه استخراج میشود و سپس همه مسیرها را مورد آزمایش قرار میدهد.
آزمایشهای ساختار کنترل
آزمایش شرط
همه شرطهای کد نرمافزار را آزمایش میکند.
آزمایش حلقه
همه حلقههای کد نرمافزار را آزمایش میکند.
جستارهای وابسته
پانویس
منابع
- Ericson, C.A. (2011). Concise Encyclopedia of System Safety: Definition of Terms and Concepts (به انگلیسی). Wiley. Retrieved 2015-05-02.
- Mustafa, K.; Khan, R.A. (2007). Software Testing Concepts and Practices (به انگلیسی). Alpha Science International. Retrieved 2015-05-02.