وقتی پای تست نرمافزار به منظور یافتن مسائل و مشکلات امنیتی به میان میآید، از یک دید کلی میتوان پروسهٔ تست را به دو بخش White Box Testing و Black Box Testing تقسیمبندی نمود که در این مقاله قصد داریم به بررسی تعارف، تفاوتها و همچنین ویژگیهای هر کدام از آنها بپردازیم.
White Box Testing (تست جعبهٔ سفید) نوعی فرایند تست است که در آن ما دسترسی کاملی به کدهای نرمافزار داریم و برای افزایش امنیت و سنجیدن جریان ورودی و خروجی (I/O) و بهبود طراحی و کاربرد، میتوانیم تمامی این موارد را مورد بررسی قرار دهیم و علت استفاده از گزارهٔ White Box این است که ما در این روش هیچگونه محدودیتی در دسترسی به سورسکد نرمافزار یا اپلیکیشن نداشته و به اصطلاح درون آن پوستهٔ طراحی شده برای کاربر را میبینیم و کنکاش میکنیم (دیدی که در تست به اصطلاح Black Box نداریم به طوری که صرفاً از بیرون به نرمافزار نگاه میکنیم؛ دقیقاً همچون یک کاربر معمولی.)
در پاسخ به این سؤال که در پروسه تست جعبهٔ سفید به دنبال چه چیزهایی هستیم، بایستی گفت که معمولاً هدف از انجام این نوع تست، پیدا کردن حفرههای امنیتی، یافتاری معماریهای ضعیف و آسیبپذیر نرمافزاری، آزمودن جریان ورودی (و البته مشاهدهٔ خروجی مورد انتظار)، ارزیابی عملکرد شرطهای قرار گرفته در منطق نرمافزار و در نهایت آزمودن هر خط از کد، آبجکت، تابع و کلاً هر موجودیت در نرمافزار است.
برای انجام تست جعبهٔ سفید، ابتدا باید سورس نرمافزار را به صورت کامل متوجه شوید، قابلیتها و ویژگیهای زبانی که در توسعهٔ نرمافزار استفاده شده را بشناسید و علاوه بر اینها، با حفرههای امنیتی و انواع حملات آشنا بوده تا بتوانید آسیبپذیریهای امنیتی را نیز کشف کنید و در ادامه هم باید بتوانید تست کِیسهایی را برای هر پروسه و یا مجموعهای از پروسههای موجود در نرمافزار بنویسید.
Black Box Testing (تست جعبهٔ سیاه) نوعی از تست است که ما دیگر دسترسی به سورسکد نرمافزار نداشته و بر روی نیازمندیهای نرمافزار/اپلیکیشن و خصوصیات آن تمرکز میکنیم و از همین روی میتوانید نرمافزارهایی که روزانه مورد استفاده قرار میدهید مثل سیستمعامل، مرورگر، ویرایشگر و حتی نرمافزارهای نوشتهشده توسط خودتان را به سادگی مورد آزمون جعبهٔ سیاه قرار دهید.
در تست جعبهٔ سیاه، ابتدا نیازمندیها و ویژگیهای راهاندازی و اجرای نرمافزار را مورد بررسی قرار داده سپس ورودیهای مجاز را برای اینکه ببینیم نرمافزار آنها را به درستی پردازش میکند یا خیر، مورد تست قرار میدهیم که این بخش از کار اصطلاحاً Positive Test Scenario نامیده میشود. از سوی دیگر، ورودیهای غیرمجاز و نامعتبر را به همین روش که اصطلاحاً Negative Test Scenario نام دارد، تست میکنیم و پس از مقایسهٔ خروجیها با مقادیری که انتظارش را داشتیم، تست کِیسهایی را با ورودیهای مد نظر خود نوشته و اجرا میکنیم و در نهایت به مقایسهٔ آنها خواهیم پرداخت و این در حالی است که این پروسه را باید پس از پیدا کردن و حل کردن هر مشکل یا باگی، دوباره اجرا کنیم.
هر کدام از این رویکردها در چه موقعیتی کاربرد دارند؟
به طور کلی، برای اینکه بدانیم دقیقاً در چه زمان و تحت چه شرایطی به کدامیک از این دو روش نیاز داریم، باید به موارد زیر دقت کنیم:
- تست جعبهٔ سفید ساختار داخلی را ارزیابی میکند در حالی که تست جعبهٔ سیاه بر روی عملکرد نرمافزار متمرکز است.
- برای انجام تست جعبهٔ سفید، دانش پایهای دربارهٔ زبانهای برنامهنویسی و تکنولوژیهای مورد استفاده در نرمافزار ضروری است (حتی دانشی فراتر از توسعهٔ نرمافزار با آن زبان) اما در تست جعبهٔ سیاه، شما با خروجی سورسکد مواجه هستید و تأثیر آزمایشهای خود را بر روی سیستم مد نظر کاملاً مشاهده میکنید.
- برای تست عملکرد کلی یک نرمافزار یا اپلیکیشن، تست جعبهٔ سیاه بخشی لاینفک از فرایند عرضهٔ محصول به بازار است چرا که تمامی کِیسهای مورد نظرتان را نمیتوانید فقط با تست جعبهٔ سفید اجرا کنید.
در پایان نیز باید گفت که برای انجام درست و اصولی تست جعبهٔ سفید نیازمند منابع مهمی همچون زمان خواهید بود چرا که یک تست جامع و وسواسی بر روی نرمافزاری بزرگ و پیچیده ممکن است هفتهها و ماهها به طول انجامد! از همین روی، برنامهریزی برای تست جعبهٔ سفید را از همان روزهای آغازین توسعه شروع کنید (البته اگر بر روی پروژهای بزرگ کار میکنید.)