مقدمه ای بر بازسازی کد (Refactoring)

بازسازی کد یا Refactoring یکی از روال های بسیار مهم در حفظ کیفیت نرم افزار است. انجام به موقع و مداوم این روال در یک پروژه نرم افزاری اثرات بلند مدت بسیار مثبتی برای ان خواهد داشت. این نوشتار مقدمه کوتاهی در جهت مفاهیم و سوالات مهم در این زمینه است.

تعریف بازسازی کد

از نظر لغوی Refactoring به “بازسازی” ترجمه شده و در منابع مهندسی نرم افزار، بازسازی کد به صورت زیر تعریف شده است.

بازسازی ساختار درونی یک نرم افزار که باعث سهولت در درک آن و سادگی نگهداری آن می شود، بدون تغییر رفتار بیرونی آن نرم افزار.

چند نکته در تعریف بالا قابل توجه است:

  • Refactoring بازسازی است، نه دوباره نویسی
  • بازسازی مربوط به ساختار درونی یک نرم افزار است نه رفتاری که مشتریان از یک نرم افزار یا کامپوننت انتظار دارند
  • حاصل بازسازی کردن باید سهولت در درک کد و سادگی نگهداری آن باشد

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

ریفکتورینگ راه حل تمامی مشکلات موجود در توسعه نرم افزار نیست ولی می تواند ابزار قوی ای برای حل بخشی از مشکلات ناشی از طراحی و کد نویسی بد باشد. بارزترین کمکهایی که بازسازی کد به توسعه نرم افزار می کند به صورت زیر هستند:

۱طراحی نرم افزار را بهبود می بخشد

زمانی که کد به طور منظم بازسازی نشود طراحی کلی آن رو به زوال خواهد رفت. هنگام ایجاد تغییر در بخشی از کد ممکن است تنها هدف کوتاه مدت درست کار کردن آن بخش، مد نظر برنامه نویس باشد. و به دلایل مختلف مانند کمبود زمان به نتایج بلند مدت آن تغییر توجه نشود. یکی از مزایای بازسازی کد ایجاد تعادل بین تاثیرات کوتاه مدت و تاثیرات بلند مدت اعمال تغییرات روی کد است به طوری که طراحی و تفکر کلی کد نویسی یک سیستم نرم افزاری رو به بهبود برود. بهبود طراحی نرم افزار به درک کدهای آن، ایجاد آسانتر تغییرات و افزودن امکانات جدید، کمک بسیاری خواهد کرد.

۲درک کد را آسان تر می کند

یکی از مزیت های کد خوب درک آسان آن توسط افراد است. هنگام بازسازی کد، با کدی مواجه هستیم که کار می کند ولی نظم و طراحی درستی ندارد. درک آسان کد یکی از کلیدی ترین نکات جهت سهولت نگهداری یک نرم افزار است.

۳به یافتن خطاها کمک می کند

یافتن تمامی باگ ها در زمان نوشتن یک کد به نظر می رسد غیر ممکن باشد. اما اقدام به بازسازی کد می تواند قدمی باشد برای بازنگری و بهبود ساختار آن، زمانی که ساختار کد خواناتر و منظم تر شد یافتن برخی باگ ها نیز آسان تر خواهند شد.

۴سرعت توسعه را بالا می برد

زمانی که طراحی کد درست نباشد ممکن است برای مدت کوتاهی قادر به افزودن امکانات محدودی باشیم. ولی هر چه بیشتر پیش برویم و طراحی کد را بازسازی نکنیم سرعت عمل در اعمال تغییرات، رفع خطاها و افزودن امکانات کاهش خواهد یافت و قطعا به زمانی خواهیم رسید که با کدی غیر قابل نگهداری مواجه خواهیم بود.

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

روش های مختلفی برای زمان بندی انجام بازسازی کد مطرح است. یکی از پرکاربردترین زمان بندی ها برای انجام بازسازی کد به صورت زیر می باشد:

  • زمانی که امکان جدیدی اضافه می شود 
  • زمانی که باگ یا اشکالی رفع می شود 
  • زمان بازبینی کد یا Code review

نگاهی به ارزشهای اسکرام

این پست بازنشری از یک پست قدیمی به همین عنوان است.

یکی از آخرین تغییراتی که در راهنمای اسکرام اضافه شده است بخشی است به نام ارزش های اسکرام. مطالعه این ارزش ها برای من خیلی جالب بود.

این ارزش ها به صورت زیر هستند:

  • تعهد (commitment)
  • تمرکز (focus)
  • بازبودن (openness)
  • احترام (respect)
  • جرات (courage)

ارزش چیست؟

در بررسی ارزش های اسکرام بهتر است ابتدا به واژه ارزش بپردازیم. به راستی ارزش چیست؟ به چه چیز می گوییم ارزش؟

به طور کلی به اموری که برای اعضاء گروه اهمیت دارند و آرمان مشترک اعضاء گروه تلقی می‌شوند، ارزش می گویند. (ویکی پدیا)

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

به طور کلی به اموری که برای تیم اسکرام اهمیت دارند و آرمان مشترک تیم اسکرام تلقی می‌شوند، ارزش می گویند.

نکته خیلی مهم در تعریف بالا کلمه آرمان است. کلمه آرمان در لغت به معنای آرزو، حسرت و امید است. (واژه یاب)

با در نظر گرفتن تعریف کلمه آرمان در واقع می توان گفت: ارزش به اموری می گویند که تیم اسکرام آرزوی دست یافتن به آن ها را دارد. و سعی می کند هر چه بیشتر به آن نزدیک شود.

تعریف سختی بود؟

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

تعهد

در چارچوب اسکرام هر عضو تیم متعهد به موفقیت تیم و اهداف آن می شود. در تمامی مراحل تلاش خود را می کند که اهدافی واقع گرایانه در نظر بگیرد و به رسیدن به آن اهداف متعهد باشد. در اسکرام افراد متعهد می شوند در کنار یکدیگر و با یکدیگر کار کنند تا اهداف را به انجام برسانند.

تمرکز

یکی از بخش های مهم اسکرام تمرکز است. هر عضو تیم در هر بازه زمانی روی تعداد محدودی از مسائل و اهداف واضح تمرکز می کند و سعی دارد با توجه به نقش خود، همکاری لازم جهت رسیدن به اهداف یا حل مسائل را با تیم داشته باشد. (تاکید می کنم با همکاری)

باز بودن

این ارزش یکی از ساده ترین ارزش ها برای درک و در عین حال سخت ترین آنها برای اجراست. در بیشتر سازمان های سنتی بسته بودن اطلاعات و قدرت رابطه مستقیمی با یکدیگر دارند و اکثر پست های مدیریتی با بسته نگه داشتن گردش اطلاعات حفاظت می شوند! باز بودن به این معناست که تمامی اهداف، چالش ها، روش ها، نتایج و تمامی محصولات میانی آنها و فرایندهای تیم قابل رویت برای تمامی اعضای آن تیم باشد. یکی از دلایل این موضوع بیشتر شدن قابلیت بازرسی و تطبیق پذیری (inspect & adapt) در این چارچوب است. زمانی که سیستمی به صورت باز ندارید، از کنشگرهای آن سیستم نمی توان انتظار داشت قادر باشند با شرایط چالش برانگیز به خوبی تطبیق یابند. پیشنهاد می کنم برای مطالعه بیشتر در این زمینه به کتاب “گوگل چگونه کار می کند” مراجعه نمایید. این کتاب فصل فوق العاده مفیدی در این زمینه دارد.

احترام (یک ارزش طلایی)

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

شجاعت

تمامی فلسفه اسکرام روی پذیرش تغییرات استوار است. تغییرات در نیازمندی ها، تغییرات در متدهای تولید، تغییرات در فرآیندها. تیم اسکرام شجاعت پذیرش تغییرات را دارد و یک مسیر یا روش را تنها به دلیل این که از ابتدا اینگونه بوده یا فرد خاصی آن را ارائه کرده است، اجرا نمی کند. بلکه زمانی که تیم به این نتیجه رسید که تغییری برای تیم و محصول مفید خواهد بود با آغوش باز و شجاعت تمام آن تغییر را خواهد پذیرفت. (به استفاده از کلمه تیم توجه داشته باشید)

سخن پایانی

یکی از دلایل اضافه شدن ارزش های ذکر شده در اسکرام اهمیت بسزای احترام به این ارزش ها در تولید محصولی فوق العاده و لذت بردن از فعالیت های طی آن است. وقتی به عنوان یک تیم نرم افزاری سعی می کنیم با چارچوب اسکرام کار کنیم. احترام و تلاش برای زنده نگه داشتن این ارزش ها نه تنها در زندگی کاری و محصول تولیدی تاثیر فوق العاده مثبتی خواهد داشت، بلکه در زندگی شخصی هر یک از اعضای تیم نیز تاثیرات مثبت فراوانی خواهد داشت. این ارزش ها شاید در ظاهر در قالب ارزش های اسکرام بیان شده باشند. ولی بالاتر از آن می توان آنها را به عنوان ارزش های زندگی نیز در نظر گرفت.

برای مطالعه بیشتر در این زمینه می توانید به اینجا مراجعه کنید.

بررسی Bad code smell ها

مدتی پیش نگارش سری مطالبی در موضوع بررسی Bad code smell ها را شروع کردم. این تلاش احتمالا اولین تلاش برای آموزش تشخیص، بررسی و رفع Bad code smell ها با استفاده از مثال های روزمره، به زبان فارسی و با این حجم از جزییات بوده است.

در این سری مطالب Bad code smell هایی که بیشترین تکرار را داشته اند مورد بررسی قرار گرفته اند. تشخیص Bad code smell ها سنگ بنای بیشتر فعالیت های مربوط به اشکال زدایی طراحی یک نرم افزار است. به طوری که با آموختن این کدهای بد بو به طوری چشم توسعه دهنده نسبت به کد خود بازتر شده و با اگاهی بیشتری کد نگریسته خواهد شد.

امیدوارم این سری مطالب برای دوستانی که با مطالعه مطالب فارسی راحتی بیشتری دارند مفید واقع شود.

پیشنهاد می کنم حتما طبقه بندی Bad code smell ها را مطالعه کنید. زیرا دسته بندی ذهنی مناسبی برای یادگیری آنها ایجاد خواهد کرد.

برای در جریان بودن از تغییرات در این سری مطالب لینک نقشه راه مربوط به این سری مطالب در سایت dotnettips.info مفید خواهد بود.


ویرایش شده در تاریخ ۱۳۹۶/۵/۲۹: افزودن مطلبی جدید به لیست مطالب