با شمارهٔ موبایل وارد شوید تا بتوانید اشتراک بخرید و در گفتگو شرکت کنید.

خلاصهٔ صوتی کتاب ۱۴۰۵/۰۸/۰۲

فصل هفدهم: جستجوی کد در ابعاد عظیم

از کتاب مهندسی نرم‌افزار در گوگل · تیتوس وینترز، تام مانشریک و هایروم رایت

جلد مهندسی نرم‌افزار در گوگل
SHABGOFTAR PORTABLE AUDIOهمراهِ شنیدن
صدایی برای همراه بردنPODCAST · PERSONAL STEREO
شب‌گفتار / دفترچهٔ همراهSHABGOFTAR · LINER NOTES

دربارهٔ این فصل

یادداشتِ همراه نوار
جلد مهندسی نرم‌افزار در گوگلمهندسی نرم‌افزار در گوگلتیتوس وینترز، تام مانشریک و هایروم رایتدیدن همهٔ قسمت‌های این کتاب ←

تا حالا برایتان پیش آمده که وسط یک پروژه بزرگ گم شوید و ندانید فلان تابع یا تنظیمات دقیقا کجا تعریف شده است؟ وقتی ابعاد یک پروژه نرم‌افزاری به اندازه کل کدهای گوگل بزرگ می‌شود، ابزارهای معمولی دیگر جواب نمی‌دهند و پیدا کردن یک تکه کد ساده به چالشی بزرگ تبدیل می‌شود.

کتاب «مهندسی نرم‌افزار در گوگل» نوشته «تیتوس وینترز، تام مانشریک و هایروم رایت» در فصل هفدهم به سراغ ابزاری می‌رود که دقیقا برای حل همین مشکل طراحی شده است.

اولین چالش در مقیاس‌های کلان، سرعت پاسخگویی و تاخیر در جستجوی کد (Code Search) است. وقتی هزاران توسعه‌دهنده روزانه میلیون‌ها جستجو انجام می‌دهند، حتی یک ثانیه تاخیر اضافی می‌تواند زمان زیادی از کل تیم تلف کند. گوگل برای حل این مشکل، به جای روش‌های کند قدیمی، از نمایه‌سازی indexing استفاده می‌کند که داده‌ها را از پیش پردازش می‌کند تا نتایج در کسری از ثانیه ظاهر شوند. اگر قرار بود هر بار جستجو به صورت خام و با دستورات ساده انجام شود، به هزاران پردازنده نیاز بود، اما با یک ساختار بهینه، زمان پاسخ به زیر دویست میلی‌ثانیه می‌رسد.

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

چالش سوم این است که یک جستجوی خوب باید فراتر از تطابق ساده کلمات عمل کند و روابط معنایی بین کدها را درک کند. ابزاری به نام Kythe در اینجا وارد میدان می‌شود تا ارجاعات متقاطع cross-references را مدیریت کند. این فناوری به توسعه‌دهنده اجازه می‌دهد با یک کلیک ساده روی نام یک تابع، مستقیماً به محل تعریف آن بپرسته یا تمام جاهایی که از آن استفاده شده را ببیند، بدون اینکه نیاز باشد کل فایل‌ها را دستی زیر و رو کند.

چالش چهارم مربوط به حفظ تاریخچه و دسترسی به نسخه‌های مختلف مخزن repository است. در پروژه‌های بزرگ، گاهی لازم است بدانیم یک کد چرا و چه زمانی تغییر کرده یا حتی فایل‌های حذف‌شده را بررسی کنیم. سیستم جستجوی گوگل تاریخچه تغییرات را به صورت خطی نمایه می‌کند تا مهندسان بتوانند در وضعیت‌های مختلف کدهای گذشته جستجو کنند و بفهمند چه کسی و در چه تاریخی تغییرات را اعمال کرده است.

پیشنهاد من به عنوان میزبان این است که اگر روی پروژه‌های بزرگ کار می‌کنید، به جای اتکا به ابزارهای محلی و کند، روی ایجاد یک زیرساخت متمرکز برای جستجو و مرور کد سرمایه‌گذاری کنید. این کار نه تنها سرعت توسعه را بالا می‌برد، بلکه مانع از دوباره‌کاری و سرگردانی تیم در میان فایل‌های پیچیده می‌شود.

امیدوارم این بخش از شوگفتار برایتان مفید بوده باشد و بتوانید با ابزارهای بهتری در کدهایتان جستجو کنید.