ইউনিট 8 / 12

রিফ্যাক্টরিং এবং প্রযুক্তিগত ঋণ ব্যবস্থাপনা

লাভ:

  • রিফ্যাক্টরিংয়ের আগে বর্তমান আচরণ ক্যাপচার করে এমন একটি পরীক্ষার নিরাপত্তা জাল সেট আপ করার ক্ষমতা
  • ছোট, এক-পদক্ষেপ, আচরণ-সংরক্ষণকারী রূপান্তরের জন্য AI জিজ্ঞাসা করার ক্ষমতা এবং প্রতিটি ধাপকে যাচাই করার ক্ষমতা
  • ব্যবসায়িক প্রেক্ষাপটের মধ্যে প্রযুক্তিগত ঋণ সনাক্ত এবং অগ্রাধিকার দেওয়ার ক্ষমতা

রিফ্যাক্টরিং হল একটি কোডের বাহ্যিক আচরণ পরিবর্তন না করে তার অভ্যন্তরীণ কাঠামোর উন্নতি করা: এটিকে আরও পঠনযোগ্য, সহজ, আরও রক্ষণাবেক্ষণযোগ্য করে তোলা। অন্যদিকে, প্রযুক্তিগত ঋণ হল একটি দ্রুত সমাধানের জন্য ডিজাইনের সমঝোতা এবং সময়ের সাথে সাথে "সুদ সহ" ফেরত দেওয়া হয় — আপনি আজ কাটা প্রতিটি কোণ আগামীকাল একটি মন্থরতা বা বাগ হিসাবে ফিরে আসবে। কৃত্রিম বুদ্ধিমত্তা একটি শক্তিশালী সহকারী যা পুনরাবৃত্তিমূলক এবং যান্ত্রিক রিফ্যাক্টরিং কাজগুলিকে গতি দেয়; কিন্তু রিফ্যাক্টরিংয়ের একটি সুবর্ণ নিয়ম আছে, এবং একা এআই এর গ্যারান্টি দিতে পারে না: আচরণ পরিবর্তন করা উচিত নয়।

এই ইউনিটে, আমরা শিখি কিভাবে AI এর সাথে নিরাপদ রিফ্যাক্টরিং করতে হয়: ছোট এবং বিপরীত পদক্ষেপ, পরীক্ষার মাধ্যমে সুরক্ষা, কোডের গন্ধ সনাক্ত করা এবং প্রযুক্তিগত ঋণকে অগ্রাধিকার দেওয়া। গুরুত্বপূর্ণ বিষয় হল: এটি পরীক্ষায় উত্তীর্ণ হওয়া, AI এর শব্দ নয়, যা প্রমাণ করে যে আচরণটি সংরক্ষিত।

রিফ্যাক্টরিংয়ের সুবর্ণ নিয়ম: আচরণ স্থির থাকে

যেটি রিফ্যাক্টরিংকে বিপজ্জনক করে তোলে তা হল "আমি উন্নতি করছি" বলার সময় অজান্তে আচরণ পরিবর্তন করা। একটি শর্ত সরল করার সময় একটি প্রান্তের কেস ড্রপ করা, একটি লুপ রূপান্তর করার সময় ক্রম ভঙ্গ করা, একটি ফাংশন বিভক্ত করার সময় একটি পার্শ্ব প্রতিক্রিয়া অনুপস্থিত—সবই "পরিষ্কার-সুদর্শন" কিন্তু ভাঙা কোড তৈরি করে।

এই কারণেই রিফ্যাক্টরিংয়ের জন্য পরীক্ষা একটি পূর্বশর্ত: পরিবর্তন করার আগে, আপনার অবশ্যই এমন পরীক্ষা থাকতে হবে যা বিদ্যমান আচরণ ক্যাপচার করে। এই পরীক্ষাগুলি হল একটি "নিরাপত্তা জাল"; রিফ্যাক্টরিংয়ের সময় আপনি দুর্ঘটনাক্রমে কিছু ভেঙে ফেললে, তারা ভেঙে দেবে এবং আপনাকে সতর্ক করবে। আপনার পরীক্ষা না থাকলে, এমন পরীক্ষা লিখুন যা আগে বিদ্যমান আচরণ ঠিক করে (যেমন আমরা ইউনিট 5 এ শিখেছি) — এখানেই AI একটি জাম্প স্টার্ট পায়।

সতর্কতা: টেস্টনেট ছাড়াই এআই-সহায়তা রিফ্যাক্টরিং হল বাগগুলির অন্যতম ছলনাময় উত্স৷ এটা বলা সহজ যে "আমি আচরণ সংরক্ষণ করেছি"; প্রমাণ হল যে একই পরীক্ষাগুলি পরিবর্তনের আগে এবং পরে পাস করে।

ধাপে ধাপে: নিরাপদ রিফ্যাক্টরিং ফ্লো

  1. নিরাপত্তা বেষ্টনী স্থাপন করুন। আপনি রিফ্যাক্টর কোডের বর্তমান আচরণ ক্যাপচার যে পরীক্ষা হতে দিন; যদি তা না হয়, প্রথমে সেগুলি লিখুন (এবং তাদের যেতে দেখুন)।
  2. গন্ধের নাম বলুন। আপনি কি উন্নতি করছেন এবং কেন? "এই ফাংশনটি 3টি জিনিস করে", "একই যুক্তি 4টি জায়গায় পুনরাবৃত্তি হয়", "নামগুলি বিভ্রান্তিকর"।
  3. ছোট, এক-পদক্ষেপের জন্য জিজ্ঞাসা করুন। AI-কে একটি একক রূপান্তরের জন্য জিজ্ঞাসা করুন (যেমন "এই ফাংশনটিকে অর্ধেক ভাগ করুন"), সম্পূর্ণ ফাইলটি পুনরায় লেখার জন্য নয়।
  4. পরীক্ষা চালান। প্রতিটি পদক্ষেপের পর। যদি এটি সবুজ হয়, চালিয়ে যান, যদি এটি লাল হয়, তবে এটি ফিরিয়ে নিন।
  5. পার্থক্য পড়ুন। লাইন দ্বারা লাইন নিশ্চিত করুন যে পরিবর্তন প্রকৃতপক্ষে আচরণ-সংরক্ষণ; এআইকে "শুধু কাঠামো" বলার সময় একটি যুক্তি স্লিপেজ হতে পারে।
  6. ছোট ছোট টুকরো করে একত্রিত করুন। বড় এক-সময়ের রিফ্যাক্টরিং পিআর উভয়ই ঝুঁকিপূর্ণ এবং পর্যালোচনাযোগ্য।

তিনটি মিনি কেস

কেস 1 — 220-লাইন ফাংশন নিরাপদে বিভক্ত। একটি দলের একটি 220-লাইন অর্ডার প্রক্রিয়াকরণ ফাংশন ছিল। প্রথম 14টি পরীক্ষা লিখিত হয়েছিল (AI এর সাহায্যে) যা বর্তমান আচরণকে ক্যাপচার করেছিল, তারা সবাই পাস করেছে। তারপর ফাংশনটি এআই দ্বারা ধাপে ধাপে 5টি ছোট ফাংশনে ভাগ করা হয়েছিল; প্রতিটি ধাপের পর পরীক্ষা চালানো হয়। দুটি পরীক্ষা এক ধাপে ভেঙ্গে গিয়েছিল - এআই একটি প্রান্তের ক্ষেত্রে রিটার্ন মিস করেছিল। পরীক্ষা অবিলম্বে এটি ধরা এবং এটি ঠিক করা হয়েছে. নেটওয়ার্ক ছাড়া, ত্রুটি উত্পাদন সব পথ যেতে পারে.

কেস 2 - টেস্টনেট ছাড়াই বিপর্যয়। অন্য একজন বিকাশকারী একটি তারিখ গণনা মডিউল "পরিষ্কার" করেছেন যার AI এর সাথে কোন পরীক্ষা ছিল না। কোডটি আরও ভাল লাগছিল, কিন্তু এটি ভুলভাবে লিপ ইয়ার গণনা করছিল; বাগটি দুই সপ্তাহ পরে গ্রাহকের অভিযোগের সাথে বেরিয়ে আসে। ক্ষতি রিফ্যাক্টরিং থেকে সংরক্ষিত সময়ের চেয়ে অনেক বেশি। পাঠ: পরীক্ষা ছাড়া রিফ্যাক্টরিং একটি জুয়া।

কেস 3 — প্রযুক্তিগত ঋণ অগ্রাধিকার। একটি দল AI-কে 30 বা তার বেশি "উন্নতযোগ্য" পয়েন্টের ব্যাকলগ দিয়েছে এবং প্রত্যেককে একটি "পরিবর্তন ফ্রিকোয়েন্সি × ঝুঁকি × প্রচেষ্টা" অক্ষে স্কোর করেছে। ফলস্বরূপ টেবিলে, একটি কুৎসিত মডিউল যা খুব কমই স্পর্শ করা হয়েছিল তা আসলে একটি নিম্ন অগ্রাধিকার ছিল, যখন একটি মাঝারি-জটিল মডিউল যা ঘন ঘন পরিবর্তিত হয় একটি উচ্চ অগ্রাধিকার ছিল। দলটি তার শক্তিকে সঠিক জায়গায় নিয়ে গেছে।

চারটি অনুলিপিযোগ্য টেমপ্লেট

কোড গন্ধ সনাক্তকরণ এবং অগ্রাধিকার:

এই কোডে রিফ্যাক্টরিং প্রার্থীর "গন্ধ" তালিকা: দীর্ঘ ফাংশন, পুনরাবৃত্তি (DRYViolation), বিভ্রান্তিকর নাম, গভীর নেস্টেড অবস্থা, লুকানো পার্শ্ব প্রতিক্রিয়া, জাদু নম্বর। প্রতিটির জন্য: অবস্থান, কেন সমস্যা, প্রস্তাবিত ছোট পদক্ষেপ, আনুমানিক ঝুঁকি (নিম্ন/মাঝারি/উচ্চ)। এখনও কোড পরিবর্তন করবেন না, শুধু পরিকল্পনা করুন।{{code}}

এক-পদক্ষেপ, আচরণ-সংরক্ষণকারী রূপান্তর:

শুধু এটি করুন: {{একক রূপান্তর, যেমন এই ফাংশনটিকে 3টি ছোট নামের ফাংশনে ভাগ করুন}}। দৃশ্যমান আচরণ, স্বাক্ষর এবং রিটার্ন মান পরিবর্তন করুন। 1 বাক্যে লিখুন কেন আপনার পরিবর্তন করা সবকিছুই আচরণ সংরক্ষণ করে।{{code}}

রিফ্যাক্টরের আগে সেফটি নেট (ক্যারেক্টারাইজেশন টেস্টিং):

এই ফাংশনের বর্তমান আচরণ ক্যাপচার করে এমন পরীক্ষাগুলি লিখুন (সঠিক বা না); লক্ষ্য হল রিফ্যাক্টরিংয়ের সময় আচরণ পরিবর্তন হলে ধরা। সাধারণ + প্রান্ত এন্ট্রি অন্তর্ভুক্ত করুন। ফাংশনের বর্তমান আউটপুটের উপর ভিত্তি করে প্রত্যাশা লিখুন।{{function}}

প্রযুক্তিগত ঋণ রেকর্ড (ব্যাকলগ) প্রজন্ম:

একটি অগ্রাধিকার সারণীতে গন্ধের নিম্নলিখিত তালিকাটি ঢেলে দিন: পদার্থ, প্রভাবিত এলাকা, পরিবর্তনের ফ্রিকোয়েন্সি (আমার জ্ঞান: {{...}}), ঝুঁকি, আনুমানিক প্রচেষ্টা, প্রস্তাবিত অগ্রাধিকার। উচ্চ প্রভাব + কম প্রচেষ্টা শীর্ষে রাখুন। {{smell_list}}

দুর্বল প্রম্পট / শক্তিশালী প্রম্পট

দুর্বল: "এই কোডটি পরিষ্কার করুন এবং এটি আরও ভাল করুন।"
শক্তিশালী: "এই 90-লাইন ফাংশনটিকে একক দায়িত্ব সহ 3টি ছোট ফাংশনে বিভক্ত করুন, এটির বাহ্যিক আচরণ এবং স্বাক্ষর পরিবর্তন না করে। পার্শ্ব প্রতিক্রিয়াগুলি (ডিবি লিখেছেন) বর্তমান ক্রমে রাখুন। আমার পরীক্ষা আছে, আচরণটি একই থাকা উচিত। পার্থক্য দিন এবং এক বাক্যে ব্যাখ্যা করুন কেন প্রতিটি বিভাজন আচরণ-সংরক্ষণকারী। [কোড]"

শক্তিশালী সংস্করণ; এটি একটি একক নির্দিষ্ট রূপান্তর প্রয়োজন, স্পষ্টভাবে একটি আচরণ এবং স্বাক্ষর সীমাবদ্ধতা আরোপ করে, এবং ন্যায্যতা দাবি করে। অস্পষ্ট অনুরোধ যেমন "ভালো করুন" অনিয়ন্ত্রিত এবং ঝুঁকিপূর্ণ পরিবর্তনের দিকে নিয়ে যায়।

রিফ্যাক্টরিং টাইপ

এআই নির্ভরযোগ্যতা

পূর্বশর্ত

নাম পরিবর্তন করুন

উচ্চ

সুযোগ কি সঠিক?

ফাংশন বিভাগ

মাঝারি উচ্চ

Testnet একটি আবশ্যক

শেয়ারিং পুনরাবৃত্তি

মাঝারি

আচরণের পার্থক্য লুকিয়ে থাকতে পারে

অ্যালগরিদম/কাঠামো পরিবর্তন

কম

ব্যাপক পরীক্ষা + মানুষের বৈধতা

স্থাপত্য পুনর্বিন্যাস

কম

মানুষের নেতৃত্বে, এআই-সমর্থিত

প্রযুক্তিগত ঋণ পরিচালনা, এটি পুনরায় সেট না

প্রযুক্তিগত ঋণ সব খারাপ নয়; কখনও কখনও সচেতনভাবে ধার নেওয়া (একটি ডেলিভারি পূরণ করতে) সঠিক সিদ্ধান্ত। লক্ষ্য ঋণ নির্মূল করা নয়, কিন্তু এটি দৃশ্যমান এবং পরিচালনাযোগ্য করা। AI ঋণ সনাক্তকরণ এবং অগ্রাধিকার দিতে দ্রুত, কিন্তু "কোন ঋণ পরিশোধ করা উচিত এবং কোনটি পরিত্যাগ করা উচিত" সিদ্ধান্ত নেওয়ার জন্য ব্যবসায়িক প্রেক্ষাপট প্রয়োজন: এই মডিউলটি কত ঘন ঘন পরিবর্তন করে, কতজনকে প্রভাবিত করে, ঝুঁকি কী? কোড বেস এবং পণ্য জানেন যে দলের দ্বারা এই সিদ্ধান্ত নেওয়া হয়; এআই কেবল বিকল্পগুলি স্পষ্ট করে।

টিপ: আপনার রিফ্যাক্টরিং পিআরকে আচরণ পরিবর্তনের সাথে জড়িত PR থেকে আলাদা রাখুন। "এই পিআরটি কেবল একটি রিফ্যাক্টরিং, আচরণ একই" বলতে সক্ষম হওয়া এটি তদন্ত করা সহজ করে তোলে এবং কোনও সমস্যা দেখা দিলে আপনাকে দ্রুত কারণটি সংকুচিত করতে দেয়৷

সাধারণ ভুল

  • টেস্টনেট ছাড়া রিফ্যাক্টরিং। আচরণটি সংরক্ষিত রয়েছে তা প্রমাণ করার জন্য আপনার কাছে কিছুই অবশিষ্ট নেই।
  • এর অর্থ "সম্পূর্ণ ফাইল পরিষ্কার করুন"। বড়, অনিয়ন্ত্রিত পরিবর্তনগুলি ত্রুটিটি লুকিয়ে রাখে এবং পরীক্ষা করা যায় না।
  • এটি না পড়ে ডিফ গ্রহণ করা। AI কিছু যুক্তি স্খলিত হতে পারে যখন এটি "শুধু কাঠামো" বলেছিল।
  • আচরণগত পরিবর্তনের সাথে বিভ্রান্তিকর রিফ্যাক্টরিং। একই PR তে উভয়টি করা মূল কারণ ট্র্যাকিংকে অসম্ভব করে তোলে।
  • প্রতিটি গন্ধ ঠিক করার চেষ্টা করছে। কুৎসিত কোড যা খুব কমই পরিবর্তিত হয় প্রায়ই কম অগ্রাধিকার; ঘন ঘন পরিবর্তন হয় এমন জায়গায় শক্তি বরাদ্দ করুন।

সংক্ষেপে

রিফ্যাক্টরিংয়ের একমাত্র নিয়ম হল আচরণটি ধ্রুবক থাকে এবং এর প্রমাণ হল পরীক্ষা। AI কোডের গন্ধ সনাক্তকরণ, এক-ধাপে রূপান্তর এবং প্রযুক্তিগত ঋণকে অগ্রাধিকার দিতে শক্তিশালী; কিন্তু আপনাকে নিরাপত্তা নেট সেট আপ করতে হবে, পরীক্ষা চালাতে হবে এবং প্রতিটি ধাপের পর পার্থক্য পড়তে হবে। ছোট, বিপরীত পদক্ষেপ নিন; আচরণ পরিবর্তন থেকে refactoring পার্থক্য; এবং যে দলটি ব্যবসার প্রেক্ষাপট জানে তাকে সিদ্ধান্ত নিতে দিন কোন ঋণ পরিশোধ করতে হবে।

আবেদন টাস্ক

আপনার কোড বেস থেকে একটি ফাংশন চয়ন করুন যা আপনার কাছে দীর্ঘ বা জটিল মনে হয়। প্রথম মুদ্রণ পরীক্ষা যা "নিরাপত্তা নেট" টেমপ্লেটের সাথে তার বর্তমান আচরণ ক্যাপচার করে এবং দেখুন তারা সব পাস করে কিনা। তারপরে ফাংশনটিকে "এক-পদক্ষেপ, আচরণ-সংরক্ষণকারী রূপান্তর" প্যাটার্নের সাথে একক উপায়ে (যেমন অর্ধেক ভাগ করা) রিফ্যাক্টর করুন এবং আবার পরীক্ষা চালান। যদি একটি পরীক্ষা বিরতি, কেন খুঁজে বের করুন; যদি এটি একেবারেই ভেঙ্গে না যায়, তবে আচরণটি প্রকৃতপক্ষে সংরক্ষিত হয়েছে তা নিশ্চিত করতে লাইন দ্বারা ডিফ লাইনটি পড়ুন।

চেকলিস্ট

  • [ ] আমি জানি যে রিফ্যাক্টরিং আচরণ পরিবর্তন করা উচিত নয় এবং এটি প্রমাণ করার জন্য পরীক্ষা আছে।
  • [ ] আমি একটি নিরাপত্তা জাল স্থাপন করছি যা রিফ্যাক্টরের আগে বর্তমান আচরণকে ধরে রাখে।
  • [ ] আমি AI থেকে ছোট, এক-ধাপে রূপান্তর চাই, বড় এক-অফ নয়।
  • [ ] প্রতিটি ধাপের পরে আমি পরীক্ষা চালাই এবং পার্থক্য পড়ি।
  • [ ] আমি আচরণ পরিবর্তন পিআর থেকে পৃথক রিফ্যাক্টরিং পিআর রাখি।
  • আমি ব্যবসায়িক প্রেক্ষাপটে প্রযুক্তিগত ঋণকে অগ্রাধিকার দিই, অন্ধভাবে শূন্য করার চেষ্টা করি না।