টিডিডি ব্যবহার করার সময় কীভাবে কোনও ফাংশন বা বৈশিষ্ট্য সরিয়ে ফেলা যায়


20

টিডিডি সম্পর্কে পাঠ্যগুলিতে আমি প্রায়শই রিফ্যাক্টরিং পদক্ষেপের সময় "সদৃশ অপসারণ" বা "পাঠযোগ্যতার উন্নতি" সম্পর্কে পড়ি। তবে কী আমাকে একটি অব্যবহৃত ফাংশন সরিয়ে দেয়?

উদাহরণস্বরূপ বলা যাক যে Cপদ্ধতিগুলির সাথে একটি শ্রেণি রয়েছে a()এবং b()। এখন আমি মনে করি যে এটি একটি পদ্ধতি f()যা চালিত হয় তা ভাল লাগবে C। প্রকৃতপক্ষে সংজ্ঞায়িত / বর্ণিত ইউনিট পরীক্ষাগুলি ব্যতীত f()সমস্ত কলকে প্রতিস্থাপন করে । পরীক্ষাগুলি বাদে আর দরকার নেই।b()b()

এটি কি কেবল অপসারণ b()এবং এটি ব্যবহার করা সমস্ত পরীক্ষার জন্য সংরক্ষণ করা উচিত? "পাঠযোগ্যতার উন্নতি" এর সেই অংশটি কি?


3
ফাংশনটির অস্তিত্ব নেই কিনা তা পরীক্ষা করার জন্য কেবলমাত্র আরও একটি পরীক্ষা যুক্ত করুন এবং তারপরে ব্যর্থ টেস্টকেসগুলি ঠিক করুন;)
ফিলিপ হাগলুন্ড

@ ফিলিপ হাগলুন্ড ভাষার উপর নির্ভর করে এটি সম্ভবত সম্ভব হতে পারে। কোড ডকুমেন্টেশন হিসাবে এটি অদ্ভুত লাগবে।
টবিএমসিএনমোবি

1
কেবল কারও পক্ষে যারা আরও ভাল জানেন না: @ ফিলিপহাগলুন্ডের মন্তব্য অবশ্যই একটি রসিকতা। এটা করবেন না।
jyot

উত্তর:


16

হ্যা অবশ্যই. সবচেয়ে সহজ কোডটি যা তা নেই isn't

এটি বলেছিল, রিফ্যাক্টরিংয়ের অর্থ সাধারণত কোডটির আচরণ পরিবর্তন না করে উন্নত করা। আপনি যদি কোডটির উন্নতি করে এমন কিছু মনে করেন তবে এটি করুন। আপনাকে এটি করার অনুমতি দেওয়ার আগে এটি কোনও কবুতরের গর্তে ফিট করার দরকার নেই।


@ jpmc26 চটপটে মানুষ, চটপটে! :-)
টবিএমসিএনমোবি 25'16

1
"সবচেয়ে সহজ কোডটি হ'ল এটি যা নেই" " - আমি সেই উক্তিটি দেয়ালে ঝুলিয়ে দিচ্ছি: ডি
উইঙ্কব্র্যাস

27

একটি সার্বজনীন পদ্ধতি অপসারণ করা "রিফ্যাক্টরিং" নয় - বিদ্যমান পরীক্ষাগুলি অব্যাহত রেখে রিফ্যাক্টরিং বাস্তবায়ন পরিবর্তন করছে changing

যাইহোক, একটি অপ্রয়োজনীয় পদ্ধতি অপসারণ একটি নিখুঁত যুক্তিসঙ্গত নকশা পরিবর্তন।

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

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

কোনও পদ্ধতি অপসারণের দুটি উপায় রয়েছে; উভয়ই বিভিন্ন পরিস্থিতিতে কাজ করে:

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

  2. আপনার মনে হয় যে পরীক্ষাগুলি অপ্রচলিত মনে হয় তা মুছুন। কোড কভারেজ সহ আপনার পুরো টেস্ট স্যুটটি চালান। পরীক্ষা স্যুট দ্বারা অনুশীলন না করা পদ্ধতিগুলি মুছুন।

(এটি অনুমান করে যে আপনার পরীক্ষার স্যুটটি শুরু করার জন্য ভাল কভারেজ রয়েছে)।


10

প্রকৃতপক্ষে চ () ইউনিট পরীক্ষাগুলি বাদ দিয়ে বর্ণিত (বর্ণিত বি /) ব্যতীত সমস্ত কলকে বি () প্রতিস্থাপন করে (

আইএমএইচও সাধারণত টিডিডি চক্রটি দেখতে পাবেন:

  • f () এর জন্য ব্যর্থ পরীক্ষা লিখুন (সম্ভবত খ () এর পরীক্ষার উপর ভিত্তি করে) পরীক্ষাগুলি লাল হয়ে যায়

  • এফ () প্রয়োগ করুন -> পরীক্ষা সবুজ হয়ে যায়

  • রিফ্যাক্টর : -> বি () এবং বি () এর জন্য সমস্ত পরীক্ষা মুছে ফেলুন

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


4

হ্যাঁ, তাই

সেরা, সবচেয়ে বাগ-মুক্ত, সর্বাধিক পঠনযোগ্য কোড হ'ল এমন কোড যা অস্তিত্বহীন। আপনার প্রয়োজনীয়তা পূরণের সময় যতটা সম্ভব নন-কোড লেখার চেষ্টা করুন।


9
আপনি "কীভাবে" অংশটি মিস করেছেন।
জেফো

2

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

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

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

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

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

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

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


2

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

অবশ্যই, এটি অসুবিধাগুলির সতর্কতা এবং অ-পিছনে-সামঞ্জস্যপূর্ণ রিলিজের বিপদের পাশাপাশি ... বাহ্যিক অ্যাপ্লিকেশনগুলি যা আপনার ইন্টারফেস বাস্তবায়নের উপর নির্ভর করে, যা এখন আপনার (হঠাৎ) অবহিত কোড দ্বারা অনাথ হয়েছে।


কোড মোছা সাধারণভাবে সমস্যা নয়। আমি লাইন, ফাংশন, বা ... ভাল, পুরো মডিউল মুছতে মুছতে পছন্দ করি ! যদি সম্ভব হয়. এবং আমি টিডিডি সহ বা ছাড়াই এটি করি do তবে: টিডিডি ওয়ার্কফ্লোতে এমন কোনও পয়েন্ট রয়েছে যেখানে (নন-ডুপ্লি) কোড মুছে ফেলা হয়? যদি তা না হয় তবে তা মুছে ফেলা হবে। তবে কি আছে? এটা আমার প্রশ্ন ছিল।
টবিএমসিএনমোবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.