مهارت‌های کار تیمی نرم‌افزار قسمت پنجم: استانداردسازی کدنویسی

چرا به کد استاندارد نیاز داریم؟

مهمترین اعضای یک تیم نرم‌افزاری چیست؟ جواب بدیهی است: کدنویسی. اما کدنویسی از آن نوع مهارت‌هاست که هر شخص می‌تواند سلیقه خودش را در آن دخیل کند. به عبارت بهتر اگر شما تیمی متشکل از 5 برنامه‌نویس دارید، اگر به پروژه‌ای که توسط این 5 برنامه‌نویس ایجاد شده نگاه کنید، کدهایی متفاوت خواهید دید: از نام‌گذاری object ها و class ها گرفته تا استفاده از الگوهای برنامه‌نویسی.

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

جدای از مساله توسعه که بسیار مهم است، مساله دیگری که نبود استاندارد کدنویسی ایجاد می‌کند در برندینگ محصول نرم‌افزاری است: اختلافات در انتخاب نام محصول، آیکن آن یا نحوه نگارش توضیحات آن!

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

چطور استاندارد کدنویسی درست کنیم؟

استاندارد کدنویسی در تیم‌های نرم‌افزاری مختلف ممکن است متفاوت باشد، اما بعضی از آن‌ها مثل استاندارد نام‌گذاری را می‌توان برای هر نوع تیم‌ نرم‌افزاری توصیه کرد.
به عنوان مثال مایکروسافت راهنماهایی را برای استاندارد نام‌گذاری در زبان سی شارپ برای بخش‌های مختلف تدوین کرده است که از این آدرس می‌توانید آن را مشاهده کنید. این استانداردها شامل راهنمای نام‌گذاری اسمبلی‌ها، namespace ها، کلاس‌ها و struct ها و interface ها، پارامترها و resource‌هاست. خود مایکروسافت هم از همین نام‌گذاری استفاده می‌کند برای همین است که کد هر dll یا API را چه در دات نت فریمورک و چه در هر محصول دیگر مایکروسافت نگاه کنید، به راحتی می‌توانید با آن کار کنید و همه نام‌گذاری‌های استاندارد را در آن می‌توان مشاهده کنید.
در این حوزه البته استفاده از نرم‌افزارهای چون Resharper هم بسیار مفید است.

نکته دیگر در بحث استانداردسازی کدنویسی، مساله استفاده از کتابخانه‌های پایه که پروژه به آن‌ها وابستگی دارد می‌باشد. این کتابخانه‌ها خود می‌توانند تولید تیم نرم‌افزاری ما باشند یا مثلاً از یک پکیج nuget استفاده کرده باشیم. در هر حال شما باید رویه مشخصی در استفاده از این کتابخانه‌های زیرساختی داشته باشید. این رویه شامل نسخه بندی و نگهداری همه نسخه‌ها و همچنین مشخص کردن این مساله است که در هر پروژه از کدامیک از این کتابخانه‌ها باید استفاده بشود. به عنوان مثال در هر پروژه باید کتابخانه‌ای که مسئول log کردن اتفاقات است استفاده شود، یا مثلاً در پروژه‌هایی که با database سر و کار دارند، فلان کتابخانه که مسئول ارتباط با database است اضافه شود یا اگر نیاز به ارسال notification در برنامه دارید فلان کتابخانه را اضافه کنید تا بتوانید به کمک آن sms یا ایمیل ارسال کنید.

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

در کنار همه مسائل مربوط به کدنویسی، می‌بایست روال‌های مربوط به مستندسازی و کامنت نویسی در کدها نیز استاندارد شوند. باید اعضای تیم دقیقاً بدانند که در چه مواردی باید در کد کامنت بنویسند و مستندات کدشان را چطوری و با چه فرمتی تهیه و در کجا ذخیره کنند و چطور آن را با هم تیمی‌هایشان به اشتراک بگذارند.

چطور استاندارد تدوین شده را در تیم مستقر کنیم؟

برای استقرار مناسب استانداردهای کدنویسی تدوین شده ابتدا باید راهکاری برای ذخیره و اطلاع رسانی آن‌ها در نظر بگیرید. یک پورتال داخلی می‌تواند مناسب باشد یا از یک نرم‌افزار ویکی مثل این استفاده کنید. اگر از TFS استفاده می‌کنید خودش امکان یکپارچه شدن با شیرپوینت برای تولید سایت به منظور نگهداری مستندات پروژه‌ها را دارد.

گام مهم بعدی آموزش مداوم تیم و به خصوص افراد تازه وارد به تیم و همین‌طور نظارت بر رعایت استانداردهای کدنویسی از طریق مکانیزم‌هایی مثل Code Review است. باز اگر از TFS استفاده کنید امکان درخواست Code Review از داخل Visual Studio به راحتی برای برنامه‌نویسان فراهم است.
در نهایت به یاد داشته باشید میزان موفقیت شما در نهادینه کردن فرهنگ کدنویسی و تولید نرم‌افزار بر اساس استانداردهایی که تدوین می‌کنید، عاملی در تعیین میزان کیفیت محصول نرم‌افزاری تولید شده در تیم شماست.