আমি কীভাবে ব্যক্তিগত কোডে ইউনিট পরীক্ষার পক্ষে পরামর্শ করতে পারি?


15

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

যদিও আমি মনে করি যে ইউনিট পরীক্ষাটি সমস্ত কোডে প্রয়োগ করা যেতে পারে এবং করা উচিত, আমি কীভাবে আমার সহকর্মীদের রাজী করব?


3
যদি আপনার ব্যক্তিগত পদ্ধতি থাকে যা আপনি পরীক্ষা করার প্রয়োজন বোধ করেন তবে এটি প্রায়শই একটি চিহ্ন যা আপনার কোডটি এসআরপি লঙ্ঘন করছে এবং সেখানে অন্য শ্রেণি আছে যার জন্য চিৎকার করে তার নিজের অধিকারে বের করে নেওয়া হবে।
প্যাডিস্ল্যাকার

@ প্যাডিস্ল্যাকার: আমি মনে করি যে সমস্ত কোড পরীক্ষা করা দরকার। আমি দেখতে পাচ্ছি না যে একক দায়িত্বের নীতি অনুসরণ করে এমন একটি কোড ইউনিট কেন ইউনিট টেস্টিংয়ের শিকার হওয়া উচিত নয় ...
উইজার্ড 79৯

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

@ প্যাডিস্ল্যাকার: আমি ব্যক্তিগত পদ্ধতিগুলিও সরাসরি পরীক্ষা করার প্রয়োজনীয়তা অনুভব করছি। কেন আপনি ভাবেন যে তাদের ব্যক্তিগত করা উচিত নয়?
উইজার্ড 79

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

উত্তর:


9

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

আপনি নিম্নলিখিত সহ আপনার সহকর্মীদের বোঝানোর চেষ্টা করতে পারেন (আমি নিশ্চিত যে আপনি এই জিনিসটি ইতিমধ্যে জেনে গেছেন, আমি যা বলছি তা হ'ল এটি আপনার সহকর্মীদের দিকে ইঙ্গিত করা সহায়তা করতে পারে):

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

12

অভ্যন্তরীণ / প্রাইভেট কোডে ইউনিট পরীক্ষাগুলি ব্যবহারের কারণগুলি বাহ্যিকভাবে সমর্থিত API গুলিগুলির জন্য ঠিক একই রকম:

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

8

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

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

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

এখানে কিছুটা নির্বোধ উদাহরণ দেওয়া আছে, অবশ্যই বাস্তব জীবনে আপনার এইগুলির চেয়ে আরও বেশি পরীক্ষা হবে:

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

  1. আমার ফলাফল বাছাই করা হয়?

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

  1. আমার ফলাফল বাছাই করা হয়?
  2. একটি দৃশ্যে দেওয়া হয়েছে (আসুন শুরু করা যাক প্রাথমিক তালিকাটি প্রায় শুরু অনুসারে সাজানো হয়েছে) ক্লাসে করা একটি কল যা অ্যালগরিদম এক্স ব্যবহার করে স্ট্রিং সাজায়?
  3. একটি দৃশ্যে দেওয়া হয়েছে (প্রাথমিক তালিকাটি এলোমেলোভাবে রয়েছে) শ্রেণিতে একটি কল যা অ্যালগরিদম ওয়াই ব্যবহার করে স্ট্রিং সাজায়?

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

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


1
সম্ভবত "ব্যক্তিগত" এর অর্থ নিয়ে কোনও ভুল বোঝাবুঝি রয়েছে। আমাদের সিস্টেমে 99% কোডটি "ব্যক্তিগত" হয়, তারপরে আমাদের কাছে সিস্টেমের উপাদানগুলির একটিতে স্বয়ংক্রিয় / রিমোট নিয়ন্ত্রণের জন্য একটি ছোট্ট API রয়েছে। আমি বলতে চাইছি ইউনিট অন্য সমস্ত মডিউলগুলির কোড পরীক্ষা করে।
উইজার্ড 79

4

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

যদি প্রতিটি ব্যক্তিগত অংশ একটি পরীক্ষার দ্বারা আচ্ছাদিত হয়, তবে এই ব্যক্তিগত অংশগুলির সমন্বিত এপিআই প্রায় 100% পর্যন্ত আচ্ছাদিত করা উচিত, কেবল উপরের স্তরটির জন্য ব্যতীত। তবে এটি পাতলা স্তর হওয়ার সম্ভাবনা রয়েছে।

অন্যদিকে কেবলমাত্র এপিআই পরীক্ষা করার সময় সমস্ত সম্ভাব্য কোড পাথ সম্পূর্ণরূপে কভার করা সত্যিই কঠিন হতে পারে।


+1 "অন্যদিকে ..." তবে অন্য কিছু না হলে পরীক্ষাগুলি যুক্ত করুন যেখানে ব্যর্থতা সবচেয়ে বেশি ক্ষতি করে would
টনি এনিস

2

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

আপনি যখন প্রথম কোনও বাগ খুঁজে পান, তখন আপনাকে সেই সত্যের মুখোমুখি হতে হয় যে আপনি নিখুঁত নন (আমরা প্রোগ্রামাররা কত দ্রুত ভুলে যাই!) এবং আপনি যান, "হুঁ মম"।


ইউনিট পরীক্ষার আরেকটি দিক হ'ল কোডটি টেস্টযোগ্য হতে হবে। কিছু কোড সহজেই পরীক্ষামূলক এবং কিছু কোড কোনও ভাল প্রোগ্রামারকে "এইচএমএম" করে না এমনটি বুঝতে পেরে।


আপনি কি আপনার সহকর্মীকে জিজ্ঞাসা করেছিলেন কেন ইউনিট পরীক্ষা কেবল বহিরাগত মুখোমুখি এপিআইয়ের জন্য কার্যকর?


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

আরেকটি উপায় হ'ল একই ত্রুটিটি দু'বার না হওয়া পর্যন্ত অপেক্ষা করা । "উহহহ, ভাল বস, আমরা গত সপ্তাহের সমস্যার পরে নাল পরীক্ষা করার জন্য কোড যুক্ত করেছি, তবে ব্যবহারকারী এবার একটি খালি জিনিস enteredুকাল!"


উদাহরণ দ্বারা নেতৃত্ব. আপনার কোডের জন্য ইউনিট পরীক্ষা লিখুন, তারপরে আপনার বসকে মানটি দেখান। তারপরে দেখুন বস একদিন মধ্যাহ্নভোজের জন্য পিৎজাতে ডাকবেন এবং উপস্থাপনা দেবেন কিনা।


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


2

প্রাইভেট কোড দুটি ধরণের রয়েছে: প্রাইভেট কোড যা পাবলিক কোড (বা প্রাইভেট কোড যা প্রাইভেট কোড বলে যে পাবলিক কোড (বা ...) দ্বারা কল হয় এবং প্রাইভেট কোড যা শেষ পর্যন্ত জনগণের কাছে কল হয় না ) কোড।

প্রাক্তন ইতিমধ্যে পাবলিক কোডের জন্য পরীক্ষার মাধ্যমে পরীক্ষিত হয়। পরবর্তীগুলিকে মোটেও বলা যায় না এবং এটি মুছে ফেলা উচিত, পরীক্ষা করা হয়নি।

নোট করুন যে আপনি যখন টিডিডি করেন তখন অনির্ধারিত প্রাইভেট কোডের পক্ষে উপস্থিত থাকা অসম্ভব।


আমাদের সিস্টেমে 99% কোডটি তৃতীয় ধরণের হয় : ব্যক্তিগত, পাবলিক কোড দ্বারা ডাকা হয় না এবং সিস্টেমের জন্য প্রয়োজনীয় (আমাদের সিস্টেমের কেবলমাত্র একটি সংক্ষিপ্ত অংশে একটি বাহ্যিক, পাবলিক এপিআই থাকে)।
উইজার্ড 79

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

2

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

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

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

আমাদের সিস্টেমে এপিআই হ'ল একটি ন্যূনতম অংশ, যা তৃতীয় পক্ষের অ্যাপ্লিকেশনটির জন্য অটোমেশন / রিমোট কন্ট্রোলকে অনুমতি দেয়। 1% কোড কভারেজের জন্য কেবলমাত্র API অ্যাকাউন্টগুলির পরীক্ষা করা ...
উইজার্ড Oct৯
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.