مرز بین ریفکتور و تغییر کد کجاست؟ آیا می توانیم هر تغییر کدی را ریفکتور در نظر بگیریم؟ برای اینکه تفاوت ها را متوجه بشیم بیاید با یک مثال شروع کنیم:
کد زیر را در نظر بگیرید:
فرض کنید که به شکل زیر تغییرش دادیم:
زیبا، کوتاه، و احتمالا همه تست ها را با موفقیت پاس میکند.
به نظر شما کد را تغییر دادیم یا ریفکتور کردیم؟ بیاید یک نگاه دوباره به تعریف ریفکتور بندازیم:
"بازسازی نرم افزار بدون اینکه تغییری در رفتار بیرونی آن مشاهده شود."
اما در مثال بالا کدهای اصلی و تغییر یافته، در همه شرایط رفتار یکسانی ندارند. زمانی که متغیر search در ابتدای subject وجود داشته باشد (پوزیشن 0)، در کد اصلی مقدار کل subject برمیگردد و در کد تغییر یافته مقدار خالی برمیگردد. بنابراین رفتار بیرونی تابع تغییر کرده است و ریفکتور به حساب نمی آید.
موضوع دیگری که در بحث ریفکتور مطرح است، تست کردن کد است. بعضی موقع ها ممکن است تست های یک بخش از کد به قدر کافی پوشش داده نشده باشد و همه حالت ها را در بر نگیرند. بنابراین هنگامی که تست ها را اجرا میکنیم، همه تست ها پاس می شوند و ما از تغییری که در رفتار کد پیش آمده غافل می شویم. بنابر این صرف تغییر کد و پاس شدن تست ها، نام این تغییر ریفکتور نیست. بلکه صرفا تغییر کد است.
موضوعات دیگری در بحث ریفکتور مطرح است که در مقاله های بعدی به آنها اشاره خواهم کرد. هدف این مقاله، توجه به تغییر رفتار بیرونی کد و جدا کردن ریفکتور از تغییر کد است.