در این مقاله می خواهیم تا به بررسی مجدد کد یا Refactoringدر برنامه نویسی به عنوان راهی برای کاهش مشکلات فنی بپردازیم. اگر به طور جدی به عنوان یک برنامه نویس در فرآیند توسعه برنامه مشارکت داشته باشید، احتمالا می دانید که سازماندهی کد و ایجاد ساختار خوب و همسو با بقیه موارد چقدر مهم است. اما متاسفانه در اغلب مواقع این که برنامه به خوبی عمل کند برایتان در اولویت است و زمان کافی برای درست فکرکردن یا کدنویسی اصولی را ندارید: چرا که باید مشغول کار بعدی شوید. چنین راه حلی در کوتاه مدت جواب می دهد، اما در دراز مدت و برای آینده نرم افزار بهترین نیست. چه اتفاقی برای کدهایی می افتد که پاک ترین، واضح ترین یا بهترین کد ممکن نیستند؟ رفته رفته حجم این دسته از کدها زیاد شده، به یک معضل منجر می شود و در نهایت باید به آن رسیدگی شود.
ریفکتورینگ یا Refactoring در برنامه نویسی به فرآیند بازسازی یا بازساخت کد گفته می شود به طوری که عملکرد اصلی آن تغییر نکند. هدف از Refactoring بهبود ساختار داخلی کد با ایجاد تغییرات کوچک بسیار (بدون تغییر رفتار خارجی کد) است. برنامه نویسان کامپیوتر کد را برای بهبود طراحی، ساختار و پیاده سازی نرم افزار بازسازی می کنند. بازسازی کد خوانایی کد را بهبود می بخشد و پیچیدگی ها را کاهش می دهد و همچنین می تواند به توسعه دهندگان نرم افزار کمک کند تا خطاها یا آسیب پذیری های پنهان در نرم افزار خود را پیدا کنند. بسیاری از محیط های ویرایش اولیه از بازسازی های ساده مانند تغییر نام یک تابع یا متغیر در کل سورس کد پشتیبانی می کنند. مارتین فاولر، که پدر Refactoring به حساب می آید، بسیاری از بهترین شیوه ها را از سراسر صنعت توسعه نرم افزار در فهرست خاصی از بازسازی ها ادغام کرد و روش هایی را برای پیاده سازی آنها در کتاب خود Refactoring: Improving the Design of Existing شرح داده است.
کارشناسان می گویند که هدف بازسازی کد ؛ تبدیل کد کثیف به کد تمیز است تا هزینه های کلی پروژه را کاهش دهد. خواندن، درک و نگهداری یک کد تمیز بسیار آسان تر است، در نتیجه توسعه نرم افزار را تسهیل می کند و احتمال انتشار یک محصول با کیفیت در زمان کوتاه تر را افزایش می دهد. اما به راستی کد کثیف چیست؟ کد کثیف یک اصطلاح غیررسمی است و به کدی گفته می شود که نگهداری و به روز رسانی آن سخت است و حتی درک و ترجمه آن دشوارتر است. کد کثیف معمولا نتیجه ضرب الاجل هایی است که در طول فرآیند توسعه رخ می دهد: نیاز به افزودن یا به روزرسانی امکانات در صورت لزوم. اغلب می توانید کدهای کثیف را با کمی بررسی در منطق کلی کد پیدا کنید. کدهای کثیف پاک نمی شوند، رفته رفته روی هم انباشته می شوند و امکان پیشرفت در آینده را کاهش می دهند زیرا توسعه دهندگان باید زمان بیشتری را صرف درک و ردیابی کد قبل از تغییر آن کنند. برخی از انواع کدهای کثیف عبارتند از:

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

برای استفاده از Refactoring باید به قوانین کلی زبان برنامه نویسی مسلط باشید که با آن در حال توسعه محصول خود هستید. اگر هنوز در انتخاب حوزه و زبان برنامه نویسی مردد هستید میتوانید از دوره الفبای برنامه نویسی کمک بگیرید. اما اگر زبان برنامه نویسی خود را انتخاب کردید، بهتر است تا با توجه به قوانین کلی و استثنائات آن زبان پیش بروید. همچنین Refactoring به تنهایی دارای قوانینی است که باید با آنها آشنا باشید. برای مثال گروه بندی اطلاعات و نوشتن توابع ریزتر از جمله اصول Refactoring است. فرض کنید یک کلاس به صورت زیر دارید:
def student():
getgrades()
# details
name = input()
class = input() این کلاس را با استفاده از فرآیند Refactoring به صورت زیر نوشت:
def student():
getgrades()
getdetails()
def getdetails():
name = input()
class = input() در اینجا Refactoring در عملکرد کلی برنامه تاثیری نمی گذارد، اما باعث تمیزی و درک بهتر کد می شود. جزییات مربوط به هر دانشجو در یک تابع مقداردهی می شود و یکدست بودن کد را حفظ می کند.
نقطه توقف مناسب برای دستیابی کد تمیز چیست؟ چک لیست زیر می تواند به شما کمک کند تا تعیین کنید چه زمانی کدتان تمیز است:
در این مقاله درمورد Refactoring در برنامه نویسی صحبت کردیم. برای Refactoring باید برنامه ریزی درستی داشته باشید؛ در غیر این صورت ممکن است وقت گذاشتن برای Refactoring وقت گیر و دشوار باشد. توسعه دهندگان باید محدوده و اهداف پروژه را در فرآیند ریفکتورینگ بدانند. این امر به جلوگیری از تأخیر و کار اضافی کمک می کند. Refactor کد در مراحل اولیه باعث می شود تا توسعه دهندگان بتوانند اشکالات احتمالی را پیدا کنند و همچنین مراحل نیازسنجی را بهتر طی کنند. اما به خاطر داشته باشید که ایرادات نرم افزار را به طور جداگانه رفع کنید. Refactoring برای رفع نقص های نرم افزاری نیست؛ عیب یابی و رفع اشکال باید جداگانه انجام شود. آیا تاکنون تجربه ای در Refactoring داشته اید؟ می توانید آن را با ما و سایر دوستان سون لرنی مطرح کنید. برخی منابع :
اصفهان، خیابان حمزه اصفهانی، بن بست تخت جمشید(18) ، پلاک ۴
دفتر تهران: تهران، خیابان سهروردی شمالی، خیابان هویزه شرقی، پلاک 20، طبقه دوم، واحد 6