ইউনিট টেস্টিং: "আপনি যদি রিফ্যাক্টর করছেন এবং কোনও সহযোগী নেই তবে এটি একটি কোড গন্ধ?"


9

আমি রায় ওশেরভের আর্ট অফ ইউনিট টেস্টিং পড়ছি। আমি বিভাগ 7.2 এ রক্ষণাবেক্ষণযোগ্য পরীক্ষাগুলি লিখছি যেখানে লেখকের কোড গন্ধ সম্পর্কে এই নোট রয়েছে:

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

সম্পাদনা : লেখক "সহযোগী" বলতে যা বোঝায় তা নির্ভরতা। নির্ভরতার জন্য তাঁর কয়েকটি উদাহরণ ক্লাস যা একটি ডাটাবেস অ্যাক্সেস করে বা ওএসের ফাইল সিস্টেমে অ্যাক্সেস করে। এখানে তিনি স্টাব সংজ্ঞায়িত করেন এবং সহযোগী শব্দটি ব্যবহার শুরু করেন:

একটি শহরের উপর অসম্পূর্ণ নিবন্ধ একটি বিদ্যমান একটি নিয়ন্ত্রণযোগ্য প্রতিস্থাপন নির্ভরতা (অথবা সহযোগী সিস্টেমের মধ্যে)।

লেখকের কাছে এই কোড গন্ধের উদাহরণ নেই এবং এটিকে দেখতে কেমন তা বোঝার / বোঝাতে আমার সমস্যা হচ্ছে। কেউ এটিকে আরও কিছুটা ব্যাখ্যা করতে পারেন এবং সম্ভবত একটি দৃ concrete় উদাহরণ প্রদান করতে পারেন?


আমি মনে করি এখানে বিভ্রান্তি "সহযোগী" শব্দটি থেকে উদ্ভূত হয়েছে। আমাকে অবশ্যই স্বীকার করতে হবে যে আমি নিশ্চিত নই যে তিনি এই প্রসঙ্গে কী বোঝাতে চেয়েছেন।
রসপিডিয়া

@ ব্রায়ান রস, লেখক কীভাবে "সহযোগী" শব্দটি ব্যবহার করেছেন তা দিয়ে আমি পোস্টটি আপডেট করেছি। ধন্যবাদ!
প্রোগ্রামার

উত্তর:


3

আমি মনে করি লেখক এটাই পাচ্ছেন।

আমার কোডের নমুনায়, আমার একটি টাইমিং উইন্ডো রয়েছে যা আউটপুট পরিমাণের পাশাপাশি একটি শুরু এবং থামার সময় নেয়। উদ্দেশ্যটি হল 24 ঘন্টা টাইমস্প্যানের উপর একটি আউটপুট উইন্ডো আঁকুন। শুরুর সময় স্টপ সময়ের চেয়ে বেশি হলে রিঙ্কেল যুক্ত হয় কারণ এটি একটি সময় উইন্ডো যা মধ্যরাত পর্যন্ত ছড়িয়ে পড়ে।

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

দ্বিগুণ এক্সপোজ করা outputকোড গন্ধযুক্ত কারণ এটি কোনও সহযোগী নয় - এটি কোনও উপাদানটি স্পষ্টরূপে শ্রেণীর দ্বারা গোপন করা হয়েছিল যা GetOutputকী ফিরিয়ে আনতে হবে তা নির্ধারণের জন্য শর্তাধীন লজিক রয়েছে ।

বুল / টাইমস্প্যানগুলির মধ্যে খনন ইউনিট পরীক্ষাগুলি আরও বিস্তৃত করে তুলবে। তিনি বলেছেন এটি ভাল।
ডবল মধ্যে খনক outputআপনার ইউনিট পরীক্ষা অতিরিক্ত যুক্তিবিজ্ঞান যে মিরর কি করতে হবে GetOutputকরছিলাম। এই কোড গন্ধটি তিনি উল্লেখ করছেন।

পাবলিক ক্লাস টাইম উইন্ডো
{
  প্রাইভেট বুল isConst;
  প্রাইভেট বোল স্প্যানস মিনিটাইট;
  ব্যক্তিগত টাইমস্প্যান স্টার্ট 1;
  ব্যক্তিগত টাইমস্প্যান স্টপ 1;
  ব্যক্তিগত টাইমস্প্যান স্টার্ট 2;
  ব্যক্তিগত টাইমস্প্যান স্টপ 2;
  বেসরকারী ডাবল আউটপুট;

  পাবলিক টাইম উইন্ডো (ডাবল আউট, টাইমস্প্যান শুরু, টাইমস্প্যান স্টপ)
  {
    আউটপুট = আউট;

    যদি (শুরু == থামান)
      isConst = সত্য;
    অন্যথায় যদি (শুরু> বন্ধ)
    {
      spansMidnight = সত্য;
      সূচনা 1 = মধ্যরাত;
      স্টপ 1 = স্টপ;
      start2 = start;
      স্টপ 2 = মধ্যরাত;
    }
    আর 
    {
      start1 = start;
      স্টপ 1 = স্টপ;
    }
  }

  পাবলিক ডাবল গেটআউটপুট (টাইমস্প্যান সময়)
  {
    // কীভাবে / কীভাবে ফিরে আসবেন সে সম্পর্কে এখানে কিছু যুক্তি
    ...
    রিটার্ন আউটপুট;
  }

}

0

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.