خطانامه ۶ - مدیریت پیکربندی

یکی از فعالیت‌های مهم در مهندسی نرم‌افزار، مدیریت پیکربندی (Configuration Management) است. تجربه شخصی من پیش از ورود به فعالیت‌های بازی‌سازی این بود که این فعالیت معمولا در شرکت‌های نرم‌افزاری کمتر مورد توجه قرار می‌گیرد. مدیریت پیکربندی برای پروژه‌های بازی‌سازی نیز بسیار مهم است و عدم برنامه‌ریزی و اجرای مناسب آن در پروژه ما نیز مشکلات متعددی را به‌وجود آورد.تعریف ویکی‌پدیا از مدیریت پیکربندی اینگونه است:مدیریت پیکربندی عبارت است از هماهنگ‌سازی توسعه نرم‌افزار برای کاهش سردرگمی. مشخص نمودن، سازمان‌دهی و کنترل اصلاحات نرم‌افزاری که توسط تیم برنامه‌ساز با هدف بیشینه‌سازی قابلیت تولید ضمن کمینه‌سازی اشتباهات انجام می‌پذیرد پیکربندی نرم‌افزار نامیده می‌شود. به این ترتیب یکپارچگی محصول طی دورهای مختلف چرخهٔ عمر نرم‌افزار حفظ می‌شود.همانطور که از تعریف مشخص می‌شود، کارهای مختلفی زیر چتر مدیریت پیکربندی قرار می‌گیرند. مهمترین این موارد که در تجربه ساخت فرزندان مورتا برای ما مهم شدند، و چالش برانگیز بودند، به قرار زیر است:۱ - مدیریت شاخه‌های منابع کد (Source Code Branches)در فرآیند تولید پروژه، برای مدیریت نسخه‌های منابع برنامه، از نرم‌افزار Git استفاده می‌کنیم. این نرم‌افزار به شما اجازه می‌دهد که برای کار کردن روی امکانات خاص و یا ساخت نمونه‌های آزمایشی از برنامه، برای خود شاخه‌ای جدا (Branch) درست کنید تا کارهای نیمه تمام شما مشکلی در نسخه اصلی برنامه ایجاد نکند. تا این جای کار همه چیز بسیار مرتب است و اعضای مختلف تیم هر کدام می‌توانند در شاخه‌های خود به سعی و خطا و آزمایش بپردازند. مشکل از جایی آغاز می‌شود که شما تصمیم می‌گیرید نتایج این کارهای موازی را با هم ادغام (Merge) کنید. بسیاری از فایل‌های Unity به راحتی و به ‌صورت خودکار ادغام نمی‌شوند و این موضوع ممکن است باعث از بین رفتن بخشی از کارهای شما شود.معمولا در زمان‌هایی که نسخه‌های دمو از بازی لازم باشد، مثلا برای ارایه در نمایشگاه‌ها، یک شاخه در نرم‌افزار Git برای آن در نظر گرفته می‌شود. شاخه‌ای دیگر مربوط به نسخه‌ای خواهد بود که آخرین تغییرات تولید در آن قرار دارد و انواع شاخه دیگر مرتبط با کارهای جدید طراحان بازی و یا برنامه نویسان. پیدا کردن یک مشکل (Bug) در شاخه نسخه دمو، و برطرف کردن آن، نیازمند آن است که مشکل در سایر شاخه‌ها نیز برطرف شود و این موضوع همواره به راحتی صورت نمی‌گیرد، معمولا به دلیل وجود تضاد‌هایی (Conflict) که به راحتی قابل اصلاح نیستند.۲ - مدیریت نسخه‌های قابل بازی (Builds)وجود نسخه قابل بازی به‌صورت پیوسته یکی از اهداف مهم پروژه‌های بازی‌سازی است. فرزندان مورتا نیز از اوایل پروژه همواره یک نسخه قابل بازی داشت. با افزایش پلتفرم‌های هدف، مدیریت این نسخه‌ها نیز چالش‌ برانگیز شد. در یک سوم پایانی فرآیند ساخت بازی، نسخه‌هایی برای ۵ پلتفرم لازم بود که عبارت بودند از: ویندوز، مک، PS4، Xbox و Nintendo Switch. در اواخر پروژه حتی، نسخه‌های قابل اجرای بازی برای این پلتفرم‌ها به‌صورت روزانه لازم بود و علاوه بر نسخه‌های معمولی، خروجی با امکان Cheat و بدون آن (برای تست راحت‌تر توسط تیم کنترل کیفیت) و همینطور نسخه‌هایی با امکانات Debug و بدون آن لازم بود که این موضوع باعث می‌شد تعداد نسخه قابل بازی لازم قابل توجه شود. اتوماسیون این موضوع و استفاده از Continuous Integration Systems تا حدی به فرآیند کمک می‌کند ولی مدیریت دقیق این مساله نیازمند تمرکز ویژه و برنامه‌ریزی‌های جدی بود.با توجه به این‌که تیم کنترل کیفیت خارج از ایران حضور داشت، ارسال نسخه‌های قابل بازی نیازمند آپلود آن‌ها در سرورهای اینترنتی بود و سرعت اینترنت نامناسب ایران هم کمکی به این موضوع نمی‌کرد. یکی از راه‌حل‌های این مشکل، استفاده از Build Server در خارج از ایران بود. ۳ - مدیریت نسخه‌های مختلف کتابخانه‌ها و ابزاردر بسیار از موارد، تغییر در نسخه استفاده شده یکی از نرم‌افزارهای شما مستلزم تغییر در بسیاری دیگر از کتابخانه‌ها و نرم‌افزارهای شما می‌باشد. به عنوان مثال، با تغییر نسخه یونیتی، کتابخانه‌های Fmod که برای استفاده در کنسول‌ها لازم است نیز باید عوض شوند. استفاده بیشتر از نرم‌افزارها و کتابخانه‌های جنبی، چالش این موضوع را بیشتر می‌کند. گاهی ممکن است نسخه‌های لازم یک کتابخانه هنوز آماده نشده باشد و شما مجبور می‌شوید مجددا به نسخه‌های قبلی سایر نرم‌افزارها بازگردید. ۴ - مدیریت نسخه‌های فایل‌های ترجمه شده (Localization Files)بازی فرزندان مورتا به ۹ زبان ترجمه شده است (زبان دهم، فارسی عزیز،‌ هم در راه است، لطفا سوال نفرمایید). فرآیند ترجمه نسبتا طولانی است و این موضوع مستلزم این است که چند ماه قبل از عرضه بازی، فایل‌های بازی برای ترجمه به شرکت بومی‌سازی ارسال شوند. در صورتی‌که حتی یک کلمه پس از آن تغییر کند، لازم است که آن کلمه مجددا برای ترجمه به شرکت بومی سازی ارسال شود. این موضوع بارها برای پروژه ما اتفاق افتاد و بارها فایل‌های جدیدی (که گاهی متن‌های جدید بودند و گاهی تغییر در متن‌های قبلی) برای ترجمه مجدد ارسال شدند و نتایج ترجمه نیز در زمان‌های مختلف به ما باز می‌گشت. تلاش برای منظم کردن و استفاده صحیح از تمام این متون و نسخه‌های آن‌ها، زمان و دقت زیادی می‌طلبید. راهکار چیست؟با توجه به اهمیت مدیریت پیکر‌بندی که در بالا به چند نمونه از نیازهای آن در بازی‌سازی اشاره شد، به نظر می‌رسد که حتما لازم است این نقش در تیم بازی‌سازی جدی گرفته شود و در صورتی‌که اندازه پروژه‌ کمی بزرگ شود، حتی بهتر است یک شخص به‌صورت تمام وقت به انواع موضوعات و چالش‌های پیکربندی فکر کند، برای آن برنامه‌ریزی کند و آن‌ها را اجرا کند. این نیاز از جمله نیازهای پنهان تیم‌های بازی‌سازی است و معمولا بازی‌سازان تمایلی برای انجام این‌ کارها ندارند. شخص خاصی با روحیه‌ خاصی برای این مسوولیت لازم است. مسوولیتی اما بسیار با اهمیت.