آموزش ریفکتورینگ در روند برنامه نویسی به طور جامع و حرفهای گاهی برای کدهای نرمافزار یا یک برنامه و حتی وب سایت به شیوهای نوشته میشود که طی آن لازم است کدها پاکسازی یا بازنویسی شوند تا به این ترتیب عملکرد برنامه بهبود پیدا کند. به این فرایند یعنی پاکسازی و بازنویسی کدهای برنامه که با هدف بهینه سازی در ساختار کدها انجام میشود، ریفکتورینگ میگویند که موضوع بسیار مهمی در فرایند برنامه نویسی میباشد. در این مقاله نیز Refactoring در برنامه نویسی را بررسی می کنیم.
آشنایی با ریفکتورینگ در برنامه نویسی
گفتیم که آموزش ریفکتورینگ در فرایند برنامه نویسی به صورت کاملاً حرفهای و جامع جهت ساخت و بازنویسی کد استفاده میشود، به گونهای که هیچگونه تغییری در عملکرد اصلی آن ایجاد نشود. هدف از ریفکتورینگ در واقع بهبود یافتن ساختار داخلی کدها به وسیله ایجاد کردن تغییرات کوچک در آنها میباشد، بدون آنکه هیچگونه تغییری در رفتار خارجی کد در آنها رخ دهد.
در واقع برنامه نویسان رایانه جهت بهبود یافتن ساختار، طراحی و پیادهسازی، نرمافزارهای مختلف را بازسازی میکنند. روند بازسازی کردن موجب خوانایی بهبود آن شده و پیچیدگیهای موجود در آن را کاهش میدهد، علاوه بر آنکه میتواند به مهندسان و توسعه دهندگان کمک کند تا آسیبها و خطاهای پنهان در داخل نرمافزارها را پیدا کنند. برخی از محیطهای اولیه ویرایش از فرایندهای بازسازی ساده و ابتدایی مانند تغییر دادن نام یک تابع و یا یک متغیر اصلی در کل سورس کد ساپورت میکنند.
کد کثیف و ریفکتورینگ
هدف از بازسازی کدها در واقع تبدیل کردن کدهای کثیف به کدهای تمیز میباشد، تا به این ترتیب هزینههای پروژه نیز کاهش پیدا کنند. درک، خواندن و نگهداری کردن یک کد تمیز کار بسیار آسانی میباشد، در نتیجه میتواند موجب تسهیل در توسعه نرمافزار شده و احتمال انتشار یافتن یک محصول و کالا با کیفیت در مدت زمان کوتاهتری افزایش پیدا کند.
اما این سوال در ذهن کاربران خطور میکند که کد کثیف چیست؟ کد کثیف در واقع نوعی اصطلاح غیررسمی میباشد و به آن دسته از کدهایی اطلاق میشود که به روز رسانی و نگهداری کردن آنها دشوار است و حتی ترجمه و درک کردن آن نیز کار دشواری میباشد. کد کثیف به طور معمول نتیجه آن دسته از ضرب العجلهایی میباشد که در طول فرایندهای توسعه ایجاد شدهاند، نیاز به بروزرسانی کردن و یا افزودن امکانات در مواقع ضروری دارند. در بیشتر مواقع میتواند کلیه این کدهای کثیف را پیدا کرد، البته توجه کنید که این کدها پاک نخواهند شد و رفته رفته بر روی یکدیگر انباشته شده و در آینده امکان پیشرفت را کاهش میدهند، چون مهندسان و توسعه دهندگان حتماً باید زمان بیشتری را جهت ردیابی و درک کدها صرف کنند.
برخی از این کدهای کثیف رایج عبارتند از:
کلاسها یا موئفهای که بیش از حد بزرگ شدهاند به طوری که دستکاری کردن آنها دشوار میباشد.
تعریف کردن متغیرهای اضافه
کاربرد نادرست یا ناقص اصولی در برنامه نویسی شی گرا
هر نوع کدی که به نظر غیر ضروری میرسد و حذف کردن آن جهت عملکرد کلی هیچ گونه ضرری نخواهد داشت.
کدهای تکراری که به تغییرات مکرر در قسمتهای مختلف نیاز دارند تا توابع مورد نظر نیز بتوانند به درستی عمل کنند.
هدف از ریفکتورینگ
انجام دادن ریفکتورینگ و بازساخت کدها مزیتهایی دارد که برخی از آنها عبارتند از:
ریفکتورینگ ساختار کدها را با روند بازنویسی کردن مجدد بهبود میبخشد.
با پرداختن به برخی پیچیدگیها و وابستگیها کدها را کارآمدتر خواهد کرد.
کد به وجود آمده خواناتر، تمیزتر و درک آن نیز راحتتر است، به همین دلیل کارایی آن نیز بالا خواهد بود.
کد قابل استفاده و نگهداری مجدد میباشد.
پیدا کردن و همچنین رفع آسیبها و اشکالات کد برای توسعه دهندگان و مهندسان نرمافزارها راحتتر خواهد بود.
ریفکتورینگ باعث درک بهتر و عمیقتر از کدها میشود، چون توسعه دهندگان همواره به این فکر خواهند بود که چگونه کدهای به وجود آمده جدید را با کدهای سابق ترکیب کنند.
عدم تغییر یافتن در عملکرد کلی کدها تضمین میشود که تمرکز آنها تنها بر روی پاکسازی و تمیز کردن سورس میباشد.
کارایی فعلی کلیه برنامهها به همان صورت باقی خواهد ماند.
زمان استفاده کردن از ریفکتورینگ
اینکه چه زمانی میتوان از ریفکتورینگ استفاده کرد، جای بحث دارد. شما میتوانید پس از انتشار یافتن یک محصول و پیش از افزودن برخی از ویژگیها و به روز رسانیهای جدید به کدهای موجود و حتی به صورت قسمتی از برنامه نویسی روزانه این کار را انجام دهید. یعنی در حالت کلی بهتر است پس از انتشار یافتن برنامه توسعه دهندگان و مهندسان پیش از ورود به پروژه بعدی این کار را انجام دهند.
با این حال از افزودن ویژگیهای جدید و به روز رسانیها به کدهای موجود بهترین زمان جهت انجام دادن ریفکتورینگ میباشد، چون انجام دادن ریفکتورینگ طی این مرحله کد نویسی کردن، کدهای سابق را برای مهندسان و توسعه دهندگان راحتتر میکند. این افراد اغلب جهت ساده کردن کدها به عقب برمیگردند و همین موضوع موجب خواهد شد تا درک و خواندن کدها نیز آسانتر باشد، اما موضوع جالب این است که اگر یک تیم برنامه نویسی یا سازمانی درکی قوی از فرایندهای توسعه محصولات داشته باشند، ریفکتورینگ نیز تبدیل به یک فرایند منظم خواهد شد. یعنی هر زمانی که مهندسان و توسعه دهندگان نیاز به اضافه کردن مورد جدیدی به سورس کد داشته باشند، میتوانند نگاهی به کد موجود کرده و بررسی کنند که آیا ساختار آن به شکلی است که بتوانند کد جدید را به آن اضافه کنند یا خیر.
حتی طی این روند توسعه دهندگان این امکان را دارند که کدهای موجود را تغییر دهند یا پس از اضافه کردن کدهای جدید دوباره همان کدها را تغییر دهند تا واضحتر باشند.
روشهای مختلف ریفکتورینگ
از تکنیک ریفکتورینگ سازمانها میتوانند برای موارد مختلفی استفاده کنند. این موارد و روشها عبارتند از:
روش قرمز، سبز:
در این روش بازسازی کردن کد شامل سه مرحله میباشد، یعنی ابتدا برنامه نویس تعیین خواهد کرد که چه چیزی توسعه پیدا کند، سپس تست کردن پروژه خود را انجام داده و در نهایت نیز کد را به صورت مجدد اصلاح کند تا بهبود یابد.
روش درون خطی
این شیوه بر پایه ساده سازی کدها با حذف کردن عناصر اضافه و غیر ضروری تمرکز دارد.
جابجایی
در این شیوه توسعه دهنده کلاسهای جدیدی ایجاد میکند و در نهایت نیز اشیا ساخته شده جابجا خواهند شد، یعنی همچنان که عملکرد برنامه ثابت میباشد، صرفاً متغیرهایی که از پیش تعریف شدهاند بین کلاسهای قدیمی و جدید جابجا میشوند.
استخراج کردن
طی این روش کدها به قطعات بسیار کوچکتر تقسیم شده و سپس قطعات کوچک به روشهای دیگری بازنویسی میشوند. کدهای تکه تکه شده به شیوه فراخوانی با کدهای جدید جایگزین خواهند شد.
بازسازی انتزاعی
این شیوه میتواند کدهای تکراری را بسیار کاهش دهد و معمولاً زمانی انجام میشود که قسمت زیادی از کدها نوشته شده باشند.
نکات مهم استفاده از ریفکتورینگ
برای استفاده کردن از فرایند ریفکتورینگ باید به قوانین و زبان برنامه نویسی کلی مسلط باشید که با آنها در حال توسعه دادن محصولات خودتان هستید. اگر در این خصوص هنوز جهت انتخاب کردن زبان و حوزه برنامه نویسی خودتان مردد هستید، پس میتوانید در دورههای الفبای برنامه نویسی نیز استفاده کنید. اما اگر توانستید زبان برنامه نویسی مورد نظرتان را انتخاب کنید، پس در این حالت باید با توجه به برخی از قوانین کلی و حتی استثنائات در زبان مورد نظر پیش بروید. علاوه بر آن ریفکتورینگ به تنهایی قوانین و مقرراتی دارد که حتماً باید با آنها آشنایی داشته باشید. به طور مثال گروه بندی کردن اطلاعات و یا نوشتن توابع کوچکتر و ریزتر از اصول و قوانین ریفکتورینگ هستند.
زمان متوقف کردن ریفکتورینگ
اگر نیاز به استفاده از ریفکتورینگ داشته باشید احتمالاً این سوال را نیز خواهید داشت که چه زمانی برای متوقف کردن آن مناسب است. معمولا نقطه پایانی در ریفکتورینگ برای برنامه نویسان واضح خواهد بود، یعنی ریفکتورینگ میتواند به آسانی ساختارهای واضحتری را برای کلاسها نامگذاری و توابع و یا بهبود یافتن الگوریتمهای بسیار پیچیده باشد.
کد هیچگونه تکراری ندارد، پس اگر تکرار در کدها زیاد باشد، هر بار که نیاز داشته باشید تغییرات در آن را دو برابر کنید، در این حالت شانس خطا نیز افزایش پیدا میکند.
کد شامل حداقل بخشهای دینامیک از جمله تعداد کلاسها میباشد، به این ترتیب کد کمتر یعنی حجم کمتر جهت تمیز کردن و نگهداری.
کد کلیه تستها برای تمیزی کردن را با موفقیت طی خواهد کرد. نگهداری کردن کد آسانتر از زمانهای دیگر است. به این ترتیب زمان کمتری را نیز جهت بهبودهای احتمالی در آینده صرف خواهد کرد.
آشنایی با این نکات و رعایت کردن آنها قطعاً موجب میشود که در روند برنامه نویسی به درستی از ریفکتورینگ استفاده کنید. البته فراموش نکنید که این فرایند تخصصی حتماً باید توسط توسعه دهندگان و مهندسان در این حوزه انجام شود، چون یک فرایند تخصصی و دشوار محسوب میشود که نیاز به دقت و آگاهی بالا در این زمینه دارد.
نتیجه گیری
در این مقاله ریفکتورینگ در برنامه نویسی را بررسی کردیم. ریفکتورینگ حتماً باید دارای یک برنامهریزی درست باشد، چون در غیر این صورت صرف زمان برای آن دشوار و وقت گیر خواهد بود. در سایت ما میتوانید با فرایند ریفکترینگ و نحوه صحیح انجام دادن آن طی برنامه نویسی آشنا شوید.