خب بچهها، اگه تاحالا با سیستمهای بزرگ سازمانی سر و کار داشتین که از پروتوباف (Protocol Buffers یا به اختصار Protobuf که یه جور استاندارد و ابزار واسه ذخیره و انتقال دادهها به شکل جمع و جور و سریع هست) استفاده میکنن، میدونین که تست گرفتن توشون یه داستان عجیب غریب داره. مخصوصاً وقتی دادههاشون مثل یه درخت یا گراف بزرگ لایهلایه و مرتب پیچیده شدن؛ یعنی هر پیام خودش کلی پیام و ساختار تو دل خودش داره!
حالا فرض کنین میخواین برای این جور سیستمها دادهی تست تولید کنین که بتونین هم فشار بیارین بهشون و هم واقعاً متوجه بشین آیا جایی خراب میشه یا نه. راههای معمولی برای ساخت دادهی تست اصلاً جواب نمیده چون این ساختارها خیلی عمیق و لایهلایهان.
توی یه مقالهی جدید که روی arXiv اومده، بچهها اومدن یه روش هوشمندانه و خفن رو پیشنهاد دادن که کار تست گرفتن از این سیستمها رو خیلی ساده و سریع میکنه. قضیه اینجوریه که اونها از متاکلاسها تو پایتون استفاده کردن (متاکلاس تو پایتون یعنی یه جور ابزار واسه کنترل و تغییر رفتار کلاسها بهصورت داینامیک یا پویا، مثل یه آدم پشت پرده که دستور میده کلاسها چطور ساخته بشن). این باعث میشه راحت بتونن نوع دادهها رو شناسایی کنن و حتی ویژگیهاشون رو موقع اجرا تقویت کنن.
یه بخش مهم دیگه این راه حل، تحلیل آماری دادههای واقعی تو لاگهای تولیده. یعنی میان سراغ همون دادههایی که تو شرکت واقعاً تولید شدن و نگا میکنن که مقدارهای معمول هر فیلد چیهاس، و بر اساس توزیع واقعی اونا، دادهی تست میسازن. اینطوری دادههایی که تولید میشه، خیلی طبیعیتر و شبیه به دنیای واقعیان نه صرفاً یه سری مقدار تصادفی.
جالب اینجاست که این روش چند تا تکنیک رو با هم ترکیب میکنه:
- شناسایی خودکار ساختار پیام یا همون schema introspection یعنی خودش میفهمه ساختار پروتوباف دقیقاً چیه و لازم نیست دستی براش تعریف کنی.
- تحلیل توزیع مقادیر آماری، که بالاتر گفتم با آنالیز لاگ واقعی بررس میکنه چه مقدارهایی رایجه.
- الگوریتمهای بازگشتی برای رفتن توی دل ساختارهای خیلی تو در تو (recursive descent – یعنی یه الگوریتم که میره تو دل هر شاخه و زیر شاخه تا ته عمق، تا بتونه هر چی داده لایهلایه هست رو کامل هم بفهمه هم دادهی تست براش درست کنه).
طبق آزمایشهایی که انجام دادن روی سه تا سیستم واقعی سازمانی، این روش واقعاً جواب داده و فوقالعاده سریع عمل میکنه. یعنی حتی دادههای پیچیده با ۱۵ لایه تو در تو (یعنی ساختمون دادهای که ۱۵ بار میره داخل هم!) رو هم درست تولید کرده. با این کار تونستن تا ۹۵٪ توی زمان آمادهسازی دادههای تست صرفهجویی کنن! (یعنی بجای یه روز، شاید نیم ساعت یا کمتر).
از لحاظ پوشش تست (Test Coverage یعنی چقدر از بخشهای مختلف سیستم با این دادهها واقعاً تست میشه)، تا ۸۰٪ بهتر از روشهای قدیمی بوده. حتی تونستن توی کمتر از چند ثانیه بیش از صد هزار تست موردی (test case یعنی یه سناریوی خاص برای امتحان یه قسمت از سیستم) بسازن و بفرستن پای تست سیستم.
در کل، این روش رو به هر کی با سیستمهای پروتوباف سازمانی سر و کار داره پیشنهاد میکنم! ترکیبیه از تکنیکهای برنامهنویسی پیشرفته (متاکلاس) و تحلیل دادههای واقعی که باعث میشه تست گرفتن، سریعتر و طبیعیتر بشه؛ اونم بدون اینکه آدم بخواد خودش رو درگیر ریزهکاری ساخت دادهی تست کنه.
پس اگه واقعاً میخواین تستهاتون هم واقعی باشه، هم وقتتون هدر نره، این راهکار رو حتماً یه نگاه بندازین. خیلی از سر و صدای الکی و دردسرهای تست رو حذف میکنه!
منبع: +