یکی از مسائل حیاتی که برنامهنویسان حرفهای باید روی آن تسلط داشته باشند ریفاکتور و بازسازی مجدد کدهایی است که تا به حال توسط خود یا اعضای یک تیم نوشته شده است. مطمئنا با فکر کردن به بازسازی مجدد کدها فکر میکنید که عملیات بسیار سادهای را در پیش دارید اما اگر بخواهیم دقیقتر صحبت کنیم باید بگوییم که این عملیات حاوی جزئیات بسیار زیادی است و تنها با رعایت کردن این جزئیات است که شما میتوانید به خوبی فرایند ریفاکتورینگ را انجام دهید.
منظور از کد تمیز چیست؟
هدف نهایی که ریفاکتورینگ دنبال میکند این است کدهای تمیزی (Clean Code) را ارائه دهد. هدف این کدها نیز این است که اگر شخصی بغیر از برنامه نویس اصلی با سورس کد مواجه شد بتواند به خوبی درک کند که این کدها حاوی چه اطلاعاتی هستند و قصد انجام چه کاری را دارند. در نهایت با رعایت گزینههای مربوط به کد تمیز شما میزان مشاجرات تیمی و مهندسی را کمتر کرده و همگان میتوانند از پروژه شما به خوبی سر در بیاورند.
کد تمیز شامل چه مواردی میشود؟
- کد تمیز کدی است که برای برنامهنویسان دیگر واضح باشد. نیازی نیست به این فکر کنید که باید الگوریتمهای پیچیده را برای این موضوع بنویسید. نامگذاری صحیح و معنادار روی متغیرها، یکی از سادهترین کارهایی است که میتواند به تمیز و واضحتر بودن کدها کمک بکند.
- کد تمیز شامل موارد تکراری نمیشود. به یاد داشته باشید که هیچوقت کدهایی که قرار است یک کار را انجام دهند در برنامهتان تکرار نکنید. این موضوع سرعت نرم افزار را پایینتر آورده و ساختار کدهایتان را کم ارزش میکند. در این صورت اگر بخواهید تغییری را در قسمت تکرار شده ایجاد بکنید باید آن را دوبار انجام دهید.
- کد تمیز شامل کمترین میزان از کدهاییست که میتوانند به درستی کار بکنند. در واقع شما باید میزان کلاسها و توابعی که ایجاد میکنید همواره در کمترین میزان خود قرار گرفته و برای دستهبندی کدهایتان حتما به صورت ماژولار کارهایتان را انجام دهید. کد کمتر به این معناست که مدیریت سادهتری دارد.
- کد تمیز تمام تستها را با موفقیت پشت سر میگذارد. حتی اگر یک درصد تستهایتان نتواند با موفقیت کدهایتان را ارزیابی کند به کد تمیز نرسیدهاید و نتوانستهاید کد تمیزی را ایجاد کنید.
بدهی فنی یا Technical Debt
مطمئنا هر برنامهنویسی در ابتدای شروع یک پروژه تمام تلاش خود را خواهد کرد تا بهترین کدها را تحویل بدهد و به احتمال زیاد هم برنامهنویس بسیار کمی وجود دارد که بخواهد به صورت عمدی کدهای ناقص و اصطلاحا غیر تمیزی را بنویسد. اما دقیقا از چه زمانی کدنویسی غیر تمیز شروع به کار کرده و کدها دیگر نمیتوانند واضح و تمیز بمانند؟
اصطلاح بدهی فنی یا Technical Debt یکی از اصطلاحات رایج در مواجه با کدهای غیر تمیز است که برای اولین بار توسط Ward Cunningham ایجاد شد. برای درک این مسئله بیایید با یک مثال ساده شروع کنیم:
زمانی که شما قصد خریدن سریع چیزی را دارید مطمئنا باید این موضوع را در نظر بگیرید که نیاز به حجمی از پول را دارید. اگر این مقدار پول را در اختیار نداشته باشید ناچارا باید وام دریافت کنید. زمانی که شما وام دریافت میکنید باید آن را به صورت مرحله به مرحله پرداخت کنید. اما این تمام موارد نیست چرا که شما باید هزینههای اضافی شامل سود وام، مالیات و موارد جانبی دیگری را نیز پرداخت کنید که در نهایت تمام اینها برایتان هزینه بردار خواهد بود.
دقیقا چنین وضعیتی در دنیای برنامهنویسی نیز وجود دارد. شما در ابتدا میگویید تنها چیزی که مهم است این است که به صورت سریع کدها را آماده کنم و پروژه نهایی را به مشتریان نشان دهم. اما بعدا وقتی که سراغ تست نویسی میروید و یا اینکه کدها را به یک برنامه نویس دیگر نشان میدهید متوجه خواهید شد که اطلاعات بسیار زیادی وجود دارد که نیازمند بازبینی بوده و در نتیجه باید زمان بیشتری را صرف مدیریت آنها بکنید. به این موضوع بدهی فنی میگویند که در زمینههای بسیار زیاد دیگری نیز قابل ارجاع است.
دلایلی که باعث بدهی فنی میشوند
فشارهای بازار و مشتری
بسیاری از اوقات بدلیل اینکه مدت زمان ارائه پروژه محدود بوده و شما باید در سریعترین زمان ممکن محصول را به کاربر نهایی ارائه دهید به موضوعاتی مانند تستینگ، کد تمیز و... توجهی نخواهید کرد و در نهایت بعدا به مشکلات بزرگی برخورد خواهید کرد.
نبود فهم درست از عواقب بدهی فنی
بعضی از اوقات کارمند یا توسعهدهندهای که برای شما کار میکند از عواقب اصلی و عمیق بدهی فنی آگاهی ندارد و نمیداند که با در نظر نگرفتن این موضوع چه مشکلاتی را برای شرکت یا پروژه ایجاد میکند. آموزش این موضوع در هر مجموعهای یک امر ضروری و بسیار حیاتی است.
اجتناب از تستنویسی
یکی از موضوعات اصلی در امر تمیز نوشتن کدها و نگران نشدن از این موضوع که بعدا مشکلات مختلفی بوجود نیاید تستنویسی است. با نوشتن تست از حداکثر توان اجرایی نرمافزارتان آگاهی پیدا میکنید و دقیقا میدانید که برنامهتان بدون مشکل کار میکند یا خیر.
نداشتن مستندات واضح
ننوشتن مستندات برای کدها (شامل کامنت هم میشود) در نهایت منجر به این میشود که اعضای تیم نتوانند بخشهایی از کدها را متوجه شوند و واضح بودن که یکی از اصلیترین ویژگیهای کدهای تمیز است در این مسیر دیگر به وجود نخواهد آمد.
چه زمان فرایند ریفاکتورینگ را شروع کنیم؟
ریفاکتورینگ به شما کمک میکند تا کدهای دیگران را مطالعه کنید. اگر زمانی مجبور بودید که کدهای غیر تمیزی را مطالعه کنید در قدم اول به ریفاکتور کردن آن فکر کنید و بعد ویژگی جدیدی را به آن اضافه نمایید.
همواره به یاد داشته باشید که بعد از هر روز کاری و بعد از اضافه کردن مقداری از کد به پروژهتان، یک محدوده زمانی خاص را به امر ریفاکتورینگ اختصاص بدهید.
برای آنکه بهترین ریفاکتورینگ را انجام دهید مطمئن شوید که روی المانهای مربوط به ریفاکتورینگ تسلط داشته و دقیقا میدانید که چه کارهایی را باید انجام دهید. تغییر دادن استایل کدها تنها مبتنی بر علاقه شخصی به ریفاکتورینگ مربوط نمیشود.
چگونه ریفاکتورینگ را انجام دهیم؟
ریفاکتورینگ با استفاده از یکسری قدمهای کوچک و مرحله به مرحله انجام میشود. هر کدام از این موارد در نهایت باعث میشود کدهای شما به یک کد استاندارد و تمیز نزدیکتر شود. در نهایت شما باید چند هدف اصلی را دنبال کنید که برای این موضوع به این موارد میتوانیم اشاره کنیم:
ریفاکتورینگ باید منجر به تمیزتر شدن کدها شود: هدف اصلی ریفاکتور کردن کدها این است که میزان تمیز بودنشان بیشتر و بیشتر شود. به همین دلیل شما نباید به این فکر کنید که ریفاکتور کردن یک امر بی استفاده است و تنها برای سرگرمی باید انجام شود بلکه باید هدف نهایی آن را در نظر بگیرید.
در خلال ریفاکتورینگ ویژگیهای جدید را اضافه نکنید: هیچوقت ریفاکتور کردن را با افزودن ویژگیهای جدید ادغام نکنید. هدف نهایی شما این نیست که در خلال ریفاکتورینگ ویژگی جدیدی را به کدهایتان اضافه کنید بلکه باید کدهای موجود را سازماندهی کرده و همه آنها را بهتر کنید.
تمام تستهای موجود بعد از ریفاکتورینگ باید با موفقیت پاس شوند: یکی دیگر از اهداف ریفاکتورینگ این است که تستهایی که به مشکل برخورد کردهاند را شناسایی کرده و علت آن را پیدا کنید. در نهایت هم باید کدها را براساس مشکلات تستها حل نمایید.
در پایان
ریفاکتورینگ کدها یکی از مهمترین مسائلی است که باید به آن توجه داشته باشید در صورتی که قصد تبدیل شدن به یک برنامه نویس حرفهای را دارید باید حتما روی تکنیکهای مختلف آن تمرکز پیدا کرده و هر روز روی کدهایتان آنها را اعمال بکنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید