জটিল নিয়মিত প্রকাশের জন্য ইউনিট পরীক্ষা করা উচিত?


34

আমার আবেদনে জটিল নিয়মিত প্রকাশের জন্য ইউনিট পরীক্ষা লিখতে হবে?

  • একদিকে: এগুলি পরীক্ষা করা সহজ কারণ ইনপুট এবং আউটপুট ফর্ম্যাটটি প্রায়শই সহজ এবং সু-সংজ্ঞায়িত হয় এবং এগুলি প্রায়শই জটিল হয়ে উঠতে পারে তাই তাদের পরীক্ষাগুলি বিশেষভাবে মূল্যবান specifically
  • অন্যদিকে: তারা নিজেরাই কিছু ইউনিটের ইন্টারফেসের খুব কমই অংশ। কেবলমাত্র ইন্টারফেসটি পরীক্ষা করা এবং এমনভাবে এমনভাবে করা ভাল যেগুলি রেজিক্সগুলি স্পষ্টভাবে পরীক্ষা করে।

সম্পাদনা করুন:

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

তবে অভ্যন্তরীণ উপাদানগুলির হিসাবে রেজিক্সগুলির কয়েকটি বিশেষ বৈশিষ্ট্য রয়েছে:

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

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

3
আরও সাধারণ পদ্ধতিতে একই প্রশ্ন: কোন অভ্যন্তরীণ উপাদানগুলির ইউনিট পরীক্ষা করা উচিত? প্রোগ্রামার.সটাকেক্সচেঞ্জ
ডক ব্রাউন

সম্পর্কিত বাছাই, দেখুন Regex101। আপনার রেজেক্সের জন্য ইউনিট পরীক্ষা লেখার জন্য তাদের একটি বিভাগ রয়েছে For উদাহরণস্বরূপ: regex101.com/r/tR3mJ2/2
ডেভিড বলেছেন

3
দাবি অস্বীকার - এই মন্তব্যটি আমার নম্র মতামত: 1 প্রথমে আমি বিশ্বাস করি যে জটিল পুনর্নির্মাণগুলি খাঁটি মন্দ - ব্লগও কোডিংহরর.কম দেখুন 2 আপনি যখন সত্যিকারের একটি বৃহত ডাটাবেসের মাধ্যমে পরীক্ষা করেন তখন এই জাতীয় অভিব্যক্তিগুলির পরীক্ষার আসল মূল্য আসে ডেটা ব্লগকোডিংহরআর.এটিস্টিং -সহ- বলিউড 3 আমার এক আশ্চর্য অনুভূতি আছে যে এই পরীক্ষাগুলি ঠিক ইউনিট পরীক্ষা নয়
বরিস ট্রুখভ 21

উত্তর:


101

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


25
+1 টি, যদিও যদি একটি রেগুলার এক্সপ্রেশন জটিল যথেষ্ট যে এই একটি বিষয় হয়, তাহলে সম্ভবত এটি ইন্দ্রিয় তোলে এটিকে উপযুক্ত পদ্ধতি সঙ্গে একটি "মোড়কের" ইউনিট সরাতে ( isValid, parse, tryParseতাই হয়, বা যে কোন বস্তু, ঠিক নির্ভর করে কিভাবে এটা ব্যবহার করা হচ্ছে), যে ক্লায়েন্ট কোডটি এটি বর্তমানে একটি রেজেক্স ব্যবহার করে প্রয়োগ করা হয়েছে তা জানতে হবে না। এর পরে মোড়কের ইউনিটটিতে বিবিধ পরীক্ষা করা হবে, যা - আবার - বর্তমান বাস্তবায়নটি জানার প্রয়োজন হবে না। এই পরীক্ষাগুলো, অবশ্যই, হয় কার্যত Regex পরীক্ষা, কিন্তু একটি বাস্তবায়ন অ্যাগনোস্টিক উপায়।
রুখ

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

6
@রুখ ভাল বলেছেন। একটি রেজেক্সের জন্য একটি মোড়কের ক্লাসের সুবিধা হ'ল যদি প্রয়োজন হয় তবে আপনি খুব সুন্দরভাবে এটি সাধারণ কোড দিয়ে প্রতিস্থাপন করতে পারেন। জটিল ইনপুট / আউটপুট সহ কোডটিতে সর্বদা ইউনিট টেস্টিং থাকা উচিত, কারণ এটি ছাড়া ডিবাগ করা অসম্ভব কঠিন। কোডের প্রভাবগুলি বোঝার জন্য যদি আপনাকে ডকুমেন্টেশন উল্লেখ করতে হয় তবে এটির ইউনিট পরীক্ষা করা উচিত। যদি এটি কেবল রূপান্তরকরণের মতো ধরণের 1: 1 ম্যাপিং হয় তবে সমস্যা নেই। রেজেক্সস খুব দ্রুত ডক্সের প্রয়োজনীয়তার সেই বিন্দুটি পেরিয়ে যায়।
হারুন 3468

4
@ লি: রিজেক্সেস কোনও বিশেষ চিকিত্সার প্রাপ্য নয়। রেজেক্স এই ক্ষেত্রে ইউনিট, তাই আমরা এটির ইউনিট-পরীক্ষা করি।
জ্যাকবিবি

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

21

রেজেক্স একটি শক্তিশালী হাতিয়ার হতে পারে, তবে এটি এমন কোনও সরঞ্জাম নয় যা আপনি বিশ্বাস করতে পারেন ঠিক এখনও কাজ করার জন্য যদি আপনি জটিল রেজেক্সে এমনকি ছোটখাটো পরিবর্তন করেন।

সুতরাং প্রচুর পরীক্ষাগুলি তৈরি করুন যা কেসগুলি আবশ্যক তা নথিভুক্ত করে। এবং প্রচুর পরীক্ষাগুলি তৈরি করুন যা নথিগুলির ক্ষেত্রে এটি ব্যর্থ হওয়া উচিত, যদি এটি বৈধতার জন্য ব্যবহৃত হয়।

যখনই আপনাকে আপনার রেজিক্সগুলি পরিবর্তন করতে হবে আপনি পরীক্ষাগুলি হিসাবে নতুন কেসগুলি যুক্ত করবেন, আপনার রেজেক্সটি সংশোধন করুন এবং সেরাটির জন্য আশা রাখবেন।

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


3

আপনার বাকী অ্যাপ্লিকেশনটির সাথে নিয়মিত প্রকাশগুলি কোড হয় are আপনার পরীক্ষা করা উচিত যে কোডটি সামগ্রিকভাবে আপনি এটি করার আশা করছেন তা করে। এর বিভিন্ন উদ্দেশ্য রয়েছে:

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

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


1

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

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


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

-1

অন্যদিকে: তারা নিজেরাই কিছু ইউনিটের ইন্টারফেসের খুব কমই অংশ। কেবলমাত্র ইন্টারফেসটি পরীক্ষা করা এবং এমনভাবে এমনভাবে করা ভাল যেগুলি রেজিক্সগুলি স্পষ্টভাবে পরীক্ষা করে।

আমি মনে করি এটি দিয়ে আপনি এটি উত্তর দিয়েছেন। কোনও ইউনিটে রেজিক্সগুলি সম্ভবত একটি বাস্তবায়ন বিশদ।

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

আমি যা দরকারী মনে করি তা হ'ল পাঠ্যের নমুনার সাথে রেজেসের নিকটে একটি মন্তব্য যা এটির সাথে মিলবে।


" আপনি যখন এসকিউএল-এর একটি অংশ পরিবর্তন করেন আপনি সম্ভবত এটি কোনও প্রত্যাশা ফলন করেন কিনা তা দেখার জন্য এটি কোনও এসকিউএল ক্লায়েন্টকে হাতে নিয়ে চালান " "তবে এই ধরণের প্রশ্নের অন্যভাবে উত্তর দেয় ... যদি আমার প্রয়োজন হয় বা মনে হয় এটির জন্য দরকারী পুনরায় হাতে হাতে পরীক্ষা করুন তারপরে তার পরিবর্তে আমার একটি ইউনিট পরীক্ষা করা উচিত। ঠিক এটিই এটি সিদ্ধান্তের জন্য একটি কৌতুকপূর্ণ জিনিস তোলে!
লি 11

এটা সত্যিই নির্ভর করে। আপনি যেটির জন্য আপনার ইউনিট পরীক্ষা করতে চান তা হ'ল পরিবর্তন করার ক্ষমতা। আপনি কতক্ষণ একটি নির্দিষ্ট রেজেক্স পরিবর্তন করেন? উত্তরটি যদি প্রায়শই হয় তবে সর্বদা এর জন্য একটি পরীক্ষা তৈরি করুন test
ক্রিশ্চিয়ান

8
অন্যান্য সমস্ত জিনিস সমান হচ্ছে, "হাতের পরীক্ষার" চেয়ে একটি স্বয়ংক্রিয় পরীক্ষা নেওয়া ভাল।
রবার্ট হার্ভে

1
আপনি কেন অটোমেশন ব্যবহার করে একটি রেজেক্স পরীক্ষা করবেন না?
টনি এনিস

1
এটি একটি পদ্ধতির অংশ এবং আমি যা বলার চেষ্টা করছিলাম তা হ'ল আপনি যদি ইতিমধ্যে সেই পদ্ধতিটি পরীক্ষা করেন তবে রেজেক্সকে বিশেষভাবে পরীক্ষা করার দরকার নেই। তবে আপনি যদি করেন তবে আপনি সম্ভবত বিচ্ছিন্নতার সাথে পরীক্ষা করে আলাদা আলাদা ফাংশনে রেইজেক্সটি বের করে নেওয়া ভাল।
ক্রিশ্চিয়ান

-5

যদি আপনাকে জিজ্ঞাসা করতে হয় তবে উত্তরটি হ্যাঁ।

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

আপনি যদি না জানেন তবে পিএইচবি আপনাকে লাথি মারতে এবং চিৎকার করে এই প্রকল্পটিতে ফিরে আসতে চলেছে যখন সবকিছু খারাপ হয়ে যায় তখন "সম্ভবত লোকটিকে আপনি কীভাবে এই গোলমালটি তৈরি করেছেন সে সম্পর্কে কিছু নির্দেশনা দিতে"। সুতরাং আপনি আপনার সমস্ত অভিব্যক্তি প্রকাশের সুন্দর মাস্টার্ক তৈরির সময় সাবধানতার সাথে বিবেচনা করেছেন এমন সমস্ত মামলা লিখে রাখুন।

এবং যেহেতু আপনি এগুলি সমস্ত লিখে রেখেছেন, আপনি পরীক্ষার কেসগুলির সেট করার দ্বি-তৃতীয়াংশ, যেহেতু - আসুন এটির মুখোমুখি হন - ফ্রেমওয়ার্কটি তৈরি হয়ে গেলে রেজেক্স টেস্টের কেসগুলি চালানো সহজ হয়ে যায়।

সুতরাং এখন, আপনার কাছে প্রান্ত শর্ত, বিকল্প এবং প্রত্যাশিত ফলাফলের একটি সেট রয়েছে। এবং হঠাৎ পরীক্ষাগুলি হ'ল ডকুমেন্টেশন হ'ল ঠিক সেই সমস্ত আমার খুব বুদ্ধিমান ব্লগ পোস্টগুলিতে প্রতিশ্রুতি হিসাবে। আপনি কেবল এফএনজির দিকে লক্ষ্য রেখেছেন যে যদি তার "উন্নতি" বিদ্যমান পরীক্ষার কেসগুলি পাস না করে তবে এটি কোনও উন্নতি হয় না, তাই না? এবং যেখানে তার প্রস্তাবিত নতুন পরীক্ষার কেসগুলি মূল কোডটি নিয়ে কিছু সমস্যা দেখায়, যেহেতু এটি কাজ করে তাকে কখনও সংশোধন করার দরকার নেই !!!


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

1
আমি সন্দেহ করি যে গুগল আপনাকে ঠিক জায়গায় নিয়ে গেছে। ;-) ( en.wikedia.org/wiki/FNG_syndrome )
অস্টিন হেস্টিংস

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