কম্পিউটার

একটি দীর্ঘ, অগোছালো, খারাপভাবে পরীক্ষিত কন্ট্রোলারকে কীভাবে রিফ্যাক্টর করবেন

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

test "index" do
  get :index
  assert_response :success
end

অসাধারণ. 100% পরীক্ষার কভারেজ, তাই না?

আপনার চোখ বন্ধ করা এবং এটির অস্তিত্ব নেই এমন ভান করা যতটা দুর্দান্ত হবে, কোনও দিন আপনাকে এই কন্ট্রোলারগুলির মধ্যে একটিতে একটি বাগ ঠিক করতে হবে। এবং, একজন ভালো সফ্টওয়্যার ডেভেলপার হওয়ার কারণে, আপনি কোডটি খুঁজে পাওয়ার চেয়ে ভালোভাবে ছেড়ে দিতে চান৷

কিন্তু আপনি কীভাবে রিফ্যাক্টর করতে পারেন, বিশেষ করে ভালো পরীক্ষা ছাড়াই?

এটি পরীক্ষা করুন (কোনওভাবে)

রিফ্যাক্টর করার সময় নিরাপদ বোধ করার জন্য আপনার ভাল পরীক্ষা দরকার, কিন্তু আপনি লিখতে পারবেন না এই কোডের বিরুদ্ধে ভাল পরীক্ষা অবধি আপনি রিফ্যাক্টর তাহলে আপনি কি করতে পারেন?

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

এই পরীক্ষাগুলি ইউনিট পরীক্ষার মতো ফোকাস করা হবে না। কিন্তু এই উচ্চ-স্তরের পরীক্ষাগুলি আপনাকে স্বাচ্ছন্দ্য বোধ করতে পারে যে আপনি যে রিফ্যাক্টরিং করতে চলেছেন তা সবকিছু ভেঙে দেবে না। এবং সেগুলি লেখার প্রক্রিয়া আপনাকে আপনার কোডটি আরও ভালভাবে বুঝতে সাহায্য করবে, যা আপনাকে কীভাবে এটিকে রিফ্যাক্টর করতে হবে তা নির্ধারণ করতে সহায়তা করবে৷

আপনার নির্ভরতা ভাঙুন

কি খারাপ নিয়ামক কোড খারাপ করে তোলে? বেশিরভাগ সময়, এটি অন্তর্নিহিত নির্ভরতা before_filters এর মধ্যে , সহায়ক পদ্ধতি, বা 200-লাইন ফাংশনের বিভিন্ন অংশ। এটি খুব তাড়াতাড়ি রিফ্যাক্টরিংয়ের ক্ষেত্রেও হতে পারে। কোডটি আরও ভাল করতে, আপনাকে এই নির্ভরতাগুলি ভাঙতে হবে৷

রেল কন্ট্রোলারদের জন্য, নির্ভরতা ভাঙ্গার একটি সহজ উপায় আছে। শুধু আপনার before_filters থেকে কোডটি কপি করুন , সহায়ক পদ্ধতি, সুপারক্লাস, এবং অন্য কোথাও কন্ট্রোলার-ইশ কোড লুকিয়ে থাকতে পারে। তারপর, আপনার কপি করা কোড দিয়ে সেই পদ্ধতিতে কলগুলি প্রতিস্থাপন করুন৷

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

(এই প্রক্রিয়া চলাকালীন, আপনার ইনলাইনিং কিছু ভঙ্গ করছে না তা নিশ্চিত করতে প্রতিটি পরিবর্তনের পরে আপনার পরীক্ষা চালানো উচিত।)

পরীক্ষাযোগ্য কোডের দিকে রিফ্যাক্টর

এখন, আপনি আপনার কোড রি-ফ্যাক্টর করতে প্রস্তুত। আপনি সম্ভবত মৌলিক এক্সট্র্যাক্ট পদ্ধতি এ লেগে থাকবেন , অবজেক্ট নিষ্কাশন করুন , টান আপ পদ্ধতি - টাইপ রিফ্যাক্টরিং। আপনার কোডকে কয়েকটি ভিন্ন উপায়ে রিফ্যাক্টর করার চেষ্টা করুন এবং দেখুন কি সবচেয়ে ভালো লাগে।

প্রথম কয়েকটি পাসের সময়, আপনি নিরাপত্তা জাল হিসাবে আপনার উচ্চ-স্তরের ইন্টিগ্রেশন পরীক্ষার উপর নির্ভর করতে পারেন। কিন্তু শীঘ্রই, আপনি আরও ভালো কিছু চাইবেন।

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

আমি কি এটি একটি সংখ্যাযুক্ত তালিকার আকারে পেতে পারি?

আবারও, একটি বড় কন্ট্রোলারকে ভেঙে ফেলার জন্য এই পদক্ষেপগুলি নিতে হবে:

  1. নিয়ন্ত্রকের বিরুদ্ধে চলমান উচ্চ-স্তরের ইন্টিগ্রেশন পরীক্ষাগুলি পান৷
  2. পরীক্ষা চালান, নিশ্চিত করুন যে তারা পাস করেছে।
  3. ইনলাইন before_filters , সুপারক্লাস পদ্ধতি, এবং অন্যান্য বিমূর্ততা যা কোড লুকিয়ে রাখে।
  4. পরীক্ষা চালান, নিশ্চিত করুন যে তারা এখনও পাস করেছে।
  5. একটি রিফ্যাক্টরিং সম্পাদন করুন (এক্সট্রাক্ট পদ্ধতি , এক্সট্রাক্ট সার্ভিস অবজেক্ট , স্থানীয় দিয়ে ইনস্ট্যান্স ভেরিয়েবল প্রতিস্থাপন করুন , ইত্যাদি)। দেখুন কোডটি ভালো লাগছে কিনা।
  6. পরীক্ষা চালান, নিশ্চিত করুন যে তারা এখনও পাস করেছে।
  7. আপনি যদি এইমাত্র কোড বের করেন, তাহলে আপনার এক্সট্রাক্ট করা বস্তু বা পদ্ধতির বিরুদ্ধে কিছু ইউনিট পরীক্ষা লিখুন।
  8. পরীক্ষা চালান, নিশ্চিত করুন যে তারা এখনও পাস করেছে।
  9. যদি কন্ট্রোলারের এখনও কাজের প্রয়োজন হয়, ধাপ 5 এ ফিরে যান।

এরপর কি?

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

তাহলে এখন, আসুন আপনার ভয়ঙ্কর গল্প শুনি! আপনি এখন পর্যন্ত কাজ করেছেন এমন সবচেয়ে খারাপ কন্ট্রোলার কোডটি কেমন দেখাচ্ছে?


  1. ম্যাকের সি# এ কীভাবে কোড করবেন

  2. কীভাবে একটি আইফোনে একটি QR কোড স্ক্যান করবেন

  3. কিভাবে Minitest কাজ করে একটি দ্রুত বিশ্লেষণ

  4. কীবোর্ডে কন্ট্রোলারকে কীভাবে ম্যাপ করবেন