আমি সম্প্রতি রেলসনফ ২০১৪-র "অল দ্য লিটল থিংস" দেখেছি this
def tick
if @name != 'Aged Brie' && @name != 'Backstage passes to a TAFKAL80ETC concert'
if @quality > 0
if @name != 'Sulfuras, Hand of Ragnaros'
@quality -= 1
end
end
else
...
end
...
end
প্রথম পদক্ষেপটি ফাংশনটিকে কয়েকটি ছোট ছোট ভাগে বিভক্ত করা হয়:
def tick
case name
when 'Aged Brie'
return brie_tick
...
end
end
def brie_tick
@days_remaining -= 1
return if quality >= 50
@quality += 1
@quality += 1 if @days_remaining <= 0
end
আমি যা আকর্ষণীয় মনে করেছি তা হল এই ছোট ফাংশনগুলি যেভাবে লেখা হয়েছিল। brie_tick
উদাহরণস্বরূপ, মূল tick
ফাংশনের প্রাসঙ্গিক অংশগুলি বের করে লেখা হয়নি , তবে test_brie_*
ইউনিট পরীক্ষাগুলি উল্লেখ করে স্ক্র্যাচ থেকে । একবারে এই ইউনিট পরীক্ষাগুলির সমস্ত পাস হয়ে গেলে brie_tick
বিবেচিত হয়েছিল। ছোট সমস্ত ফাংশন একবার হয়ে গেলে, মূল একশব্দটি tick
ফাংশনটি মোছা হয়েছিল।
দুর্ভাগ্যক্রমে, উপস্থাপক অজানা বলে মনে হয়েছিল যে এই পদ্ধতির ফলে চারটি *_tick
ফাংশনের মধ্যে তিনটি ভুল হয়েছে (এবং অন্যটি খালি ছিল!)। এমন প্রান্তের কেস রয়েছে যেখানে *_tick
ফাংশনগুলির আচরণ মূল tick
ফাংশনের থেকে পৃথক হয় । উদাহরণস্বরূপ, @days_remaining <= 0
মধ্যে brie_tick
থাকা উচিত < 0
- সুতরাং এবং brie_tick
সাথে ডাকা হলে সঠিকভাবে কাজ করে না ।days_remaining == 1
quality < 50
এখানে কি ভুল হয়েছে? এটি কি পরীক্ষার ব্যর্থতা - কারণ এই নির্দিষ্ট প্রান্তের ক্ষেত্রে কোনও পরীক্ষা ছিল না? বা রিফ্যাক্টরিংয়ের ব্যর্থতা - কারণ কোডটি স্ক্র্যাচ থেকে নতুন করে লেখার চেয়ে ধাপে ধাপে রূপান্তর করা উচিত ছিল?