تست نرمافزارها یا همان خطایابی نرمافزارها در بیشتر موارد کاری خسته کننده به شمار میرود. اما یکی از مهمترین فازهای طراحی نرمافزارها است. از اینرو، تولیدکنندگان نرمافزارها اغلب دستمزدهای سنگینی را برای خطایابی نرمافزارها به مردم پرداخت میکنند. اما دانشمندان علوم کامپیوتر مؤسسه MIT ابزار جدیدی را موسوم به Space طراحی کردهاند که به سرعت توانایی تحلیل هزاران خط کد قرار گرفته در برنامههای وب را که با استفاده از چارچوب معروف Ruby On Rails نوشته شده است دارد. ابزاری که برای شناسایی آسیبپذیریهای امنیتی موجود در این برنامهها مورد استفاده قرار میگیرد.
در همین ارتباط در کنفرانس بینالمللی نرمافزار که ماه می برگزار شد، 50 برنامه وب معروف نوشته شده با RoR توسط ابزار Space مورد بررسی قرار گرفتند. در این آزمایش Space موفق به شناسایی 23 آسیبپذیری کشف نشده در این برنامهها شد. جالب آنکه طولانیترین زمان خطایابی این برنامهها تنها 64 ثانیه بود. به عنوان فردی که به صورت نیمه وقت به اشکالزادیی نرمافزارها مشغول است، باید بگوییم 64 ثانیه در عمل به صفر ثانیه ترجمه میشود. ( منظور از صفر ثانیه این است که یک کارشناس حرفهای حداقل به چند ساعت زمان برای انجام این فرآیند نیاز دارد.) بهطور معمول، تجزیه و تحلیل ایستای کدها، در شرایطی که امکان اجرای واقعی نرمافزارها امکانپذیر نباشد، یک فرآیند پیچیده، سخت و زمانبر خواهد بود.
کارها زمانی سختتر میشود که ما صحبت خود را در ارتباط با برنامههای وب آغاز کنیم. به دلیل اینکه بخش عمدهای از کدها در پشت کتابخانه و چارچوبهایی قرار دارند که برنامههای کاربری از آنها استفاده میکنند. تیم طراحی کننده این ابزار، مشکل را اینگونه تعریف کردهاند: «حتا وظایف بسیار سادهای در برنامههای Ruby On Rails همچون تخصیص مقدار به متغیرها و تعریف کتابخانههای خارجی زمانی که با یکدیگر ترکیب شده و درون کدهای یک برنامه قرار گیرند به مجموعهای عظیم از کدها تبدیل خواهند شد.» دانیل جکسون استاد علوم کامپیوتر و مهندس کامپیوتر MIT در این ارتباط گفته است: «زمانی که برنامهای تحت فرآیند تجزیه و تحلیل قرار میگیرد به مجموعه عظیمی تبدیل میشود.» حتا اگر یک برنامه کوچک را نوشته باشید، در بالای برنامه شما عمارتی ساخته میشود که اجزاء آنرا کتابخانهها، افزونهها و چارچوبها شکل میدهند. در نتیجه زمانی که به چیزی شبیه به یک برنامه وب که با استفاده از زبانی همچون Ruby On Rails نوشته شده است، نگاه کنید و در نظر داشته باشید یک تجزیه و تحلیل ایستا روی آن انجام دهید، خود را در میان برزخی از کدها مشاهده خواهید کرد.
همین موضوع باعث میشود این چنین فرآیندی در عمل امکانپذیر نباشد. برای حل این مشکل، تیم MIT کتابخانههای RoR که خود آنها را نوشته بودند ضمیمه کردند. در این کتابخانهها انواع مختلفی از عملیات و محاسبات واقعی مورد بازنویسی قرار گرفتند. در کنار این فرآیند تیم طراحی کننده عبارات سمبلیکی را درون تعاریف اجرایی وارد کردند که توضیح میدهند عملیات مختلف دقیقا چه کاری را انجام میدهند. جو نیر، پژوهشگر فوق دکترا دانشگاه برکلی کالیفرنیا و رهبر این تیم در این ارتباط گفته است: «ما هیچ یک از کدهای قدیمی را مورد تجدید نظر قرار ندادیم. بهطوری که مجموعه توابع موجود را کنار گذاشته و کدهای جدیدی که آنها را نوشته بودیم جایگزین کدهای قدیمی کردیم. کدهایی که شما در برنامههای تحت وب از آنها استفاده میکنید. این توابع جدید به شما اجازه تحلیل کدها را میدهند. در این روش کدها به مترجم Ruby On Rails تحویل داده میشود و مترجم اقدام به ارائه توضیحات کاربردی و مفیدی برای خط به خط وظایف برنامه میکند. توضیحاتی که بسیار شفاف هستند. با استفاده از این راهکار، تجزیه و تحلیلهای ایستا به یک فرآیند معقولتر تبدیل میشوند. برای آنکه فرآیند فوق این توانایی را پیدا کند تا این وظایف را بهطور خودکار انجام دهد، Near نگاهی به طبیعت واقعی برنامههای وب داشت و راههای مختلفی که این برنامهها به کاربر اجازه میدهند به دادههای خود دسترسی داشته باشد را مورد بررسی قرار داد.
او هفت روش مختلف را تعریف کرد و برای هر روش توصیفی ارائه کرد. این تعاریف بیان میکنند که یک کاربر قادر به انجام چه عملیاتی روی دادههای خود است. با استفاده از کتابخانههای بازنویسی شده، او موفق به طراحی یک مکانیزم آزمون شد تا مشاهده کند آیا یک برنامه وب این توانایی را دارد تا به این روش واکنش نشان دهد یا خیر. زمانی که یک برنامه بر مبنای این قواعد شکسته شود، به احتمال زیاد نواقص امنیتی موجود در برنامهها خود را نشان خواهند داد. حتا بدون آنکه دسترسی کامل به کدهای مربوطه ضرورتی داشته باشد. Near موفق شد نزدیک به 50 برنامه وب را با استفاده از space مورد تجزیه و تحلیل قرار دهد. برای یک برنامهنویس آشنا به کدهای خودش ( فردی که دسترسی کامل به کدهای برنامههای خود دارد) این ابزار در کمترین زمان ممکن فرآیندهای خطایابی را انجام میدهد.