FuzzFeed: چطور با کمک چت‌بات‌ها و فازینگ، راحت‌ترین شرط‌های ابتدایی برنامه رو پیدا کنیم!

Fall Back

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

اولش اینکه توی مباحث برنامه‌نویسی، یه چیزی داریم به اسم “Weakest Precondition” یا همون WP. این یعنی: “کمترین شرطی که اگه ابتدای برنامه برقرار باشه، هر بار برنامه رو اجرا کنی، انتهای کار اون چیزی که دلت می‌خواد (postcondition) گرفته میشه.” یعنی مثلاً اگه می‌خوای برنامه‌ت هیچ‌وقت خطا نده یا همیشه جواب خاصی بده، دقیقا باید قبلش چه شرایطی برقرار باشه؟

چرا این قضیه مهمه؟ خب! چون تو کارهای جدی مثل بررسی صحت برنامه‌ها یا چک کردن خطاهای زمان اجرا، حتما باید بدونیم برنامه از کجاها شروع بشه که به مشکل نخوریم. اما محاسبه کردن همین WP همیشه آسون نیست، مخصوصاً برای برنامه‌های پیچیده.

حالا یه تیم باهوش اومده یه تکنیک باحال ساخته که اسمش رو گذاشتن “FuzzFeed”. این تکنیک ترکیبیه از مدل‌های زبانی بزرگ—همین چت‌بات‌هایی که هوش مصنوعی دارن و خودشون متن یا توضیح می‌سازن—و تست فازی. تست فازی یا فازینگ یعنی واسه پیدا کردن باگ، میلیون‌تا ورودی تصادفی به برنامه می‌دیم تا ببینیم چی میشه!

اما FuzzFeed یه ایده جدید داره: “Fuzzing Guidance” یا FG! اجازه بدین FG رو توضیح بدم: این راهنما به مدل هوش مصنوعی کمک می‌کنه تا پیش‌شرط های درست (همون WP) رو حدس بزنه و بعد این جواب‌ها رو با تست فازینگ بررسی می‌کنیم؛ یعنی کلی ورودی عجیب می‌ریزیم تو برنامه و می‌بینیم آیا این جوابایی که مدل داده راستکی درست هستن یا نه. اگه نباشن، دوباره به مدل برمی‌گردونیم و توضیح می‌دیم کجا ایراد بوده تا بهتر یاد بگیره.

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

برای اینکه نشون بدن این روش واقعا جواب می‌ده، این تیم، آزمایش‌هاشون رو روی یه سری برنامه آرایه‌ای (دترمینستیک یعنی هر بار اجرا، خروجی یکیه) توی زبان Java اجرا کردن. یعنی یه سری برنامه که با آرایه‌ها سروکار دارن و هر بار اجرا، یه نتیجه ثابت تحویل میدن.

نتیجه چی شد؟ بررسی‌ها نشون داد که مدل‌های زبانی بزرگ واقعاً می‌تونن پیش‌شرط‌های خوب پیشنهاد بدن و وقتی FG (همون راهنمای مبتنی بر فازینگ) وارد ماجرا میشه، این جواب‌ها حتی بهتر هم می‌شن!

خلاصه اگر دنبال راه راحت‌تر و هوشمندانه‌‌تری واسه پیدا کردن WP (یعنی اون کمترین شرط اولیه‌ای که برنامه شما رو بی‌خطا نگه‌می‌داره) هستین، FuzzFeed ترکیبی خلاقانه از هوش مصنوعی و تست فازی به حساب میاد که دیگه لازم نیست همه چیز رو دستی بسنجین، مدل خودش یاد می‌گیره و راه رو نشون میده!

(توضیح کوتاه: Large Language Models یعنی مدل‌های خیلی بزرگ یادگیری زبان مثل ChatGPT که می‌تونن متن، سؤال و حتی کد بسازن. Fuzz Testing یعنی روشی‌ برای تست برنامه با ورودی‌های تصادفی برای شکار باگ‌ها. Weakest Precondition هم که گفتیم همون کمترین شرط اولیه‌ست که باعث میشه برنامه همیشه سالم تموم شه.)
منبع: +