অনেক বেশি ইউনিট পরীক্ষা করানোর মতো জিনিস আছে কি?


139

আমি একটি বিদ্যমান অ্যাপ্লিকেশন জন্য ইউনিট পরীক্ষা লেখার দায়িত্ব দেওয়া হয়েছে। আমার প্রথম ফাইলটি শেষ করার পরে, আমার কাছে 419 লাইনের মূল কোডের জন্য পরীক্ষার কোডের 717 লাইন রয়েছে।

আমরা আমাদের কোডের আওতায় বাড়ার সাথে সাথে এই অনুপাতটি কি নিয়ন্ত্রণহীন হয়ে উঠবে?

ইউনিট টেস্টিং সম্পর্কে আমার বোধটি ক্লাসে প্রতিটি পদ্ধতি পরীক্ষা করা ছিল তা নিশ্চিত করার জন্য যে প্রতিটি পদ্ধতি প্রত্যাশা অনুযায়ী কাজ করেছে। তবে, টান অনুরোধে আমার প্রযুক্তি নেতৃত্বটি উল্লেখ করেছে যে আমার উচ্চ স্তরের পরীক্ষার উপর ফোকাস করা উচিত। তিনি প্রতিটি ফাংশনকে সম্পূর্ণরূপে পরীক্ষার চেয়ে প্রশ্নে ক্লাসে সবচেয়ে বেশি ব্যবহৃত 4-5 টি ব্যবহারের ক্ষেত্রে পরীক্ষার পরামর্শ দিয়েছিলেন।

আমি আমার প্রযুক্তি নেতৃত্বের মন্তব্য বিশ্বাস। আমার তুলনায় তার আরও অভিজ্ঞতা রয়েছে এবং সফ্টওয়্যার ডিজাইনিং করার ক্ষেত্রে তাঁর আরও ভাল প্রবণতা রয়েছে। তবে এই জাতীয় অস্পষ্ট মানদণ্ডের জন্য কোনও বহু-ব্যক্তি দল কীভাবে পরীক্ষা লিখবে; তা হল, আমি কীভাবে আমার সমবয়সীদের জানি এবং আমি "সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রে" একই ধারণা ভাগ করি?

আমার কাছে, 100% ইউনিট পরীক্ষার কভারেজ একটি উচ্চ লক্ষ্য, তবে আমরা কেবল 50% পর্যন্ত পৌঁছে গেলেও আমরা জানতে পারি যে 50% এর 100% আচ্ছাদিত ছিল। অন্যথায়, প্রতিটি ফাইলের অংশের জন্য পরীক্ষা লেখার ফলে প্রতারণার প্রচুর জায়গা ছেড়ে যায় leaves


145
এটা নির্ভর করে. আপনি কি টিকি-ট্যাক-টো-এর একটি গেম লিখছেন, বা পারমাণবিক চুল্লি পরিচালনার জন্য আপনি কোড লিখছেন?
ব্রায়ান ওকলে

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

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

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

12
স্ক্লাইট টেস্টিং ডকুমেন্টটি মজাদার: sqlite.org/testing.html । উদ্ধৃতি: "এসকিউএল লাইব্রেরিতে সি কোডের প্রায় 122.9 কেএসএলপি রয়েছে comparison তুলনা করে, প্রকল্পটি পরীক্ষার কোড এবং পরীক্ষার স্ক্রিপ্টগুলির তুলনায় 745 গুণ বেশি রয়েছে - 91596.1 কেএসএলকি।"
ব্যবহারকারী 60561

উত্তর:


180

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

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

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


11
আপনার উত্তরের জন্য ধন্যবাদ. এটি আমার প্রশ্নকে দৃষ্টিকোণে রাখতে সহায়তা করেছিল এবং আসল সমস্যাটির সমাধান করেছে - আমার মনোভাব! +1
ব্যবহারকারী 2954463

43
@ এস্ট্র্রা আপনার মনোভাবটা তেমন খারাপ নয়। কেন এটা প্রশ্ন করা ভাল। আপনার অন্য প্রশ্নের উত্তম প্রশ্নের উত্তরের জন্য: "আমি কীভাবে আমার সমবয়সীদের জানি এবং আমি" সর্বাধিক প্রচলিত ব্যবহারের ক্ষেত্রে "একই ধারণাটি ভাগ করি? আপনি সেগুলি আপনার পরীক্ষাগুলি দেখতে পান the তাদের দিকে তাকান them তাদের সম্পর্কে কথা বলুন You আপনি শিখবেন কোড রিভিউ পরীক্ষাগুলি খুব কম সময়ের অপচয় হ'ল যদিও আমি কনফারেন্স রুমের চেয়ে টার্মিনালে আমার কাজ করার ঝোঁক করি
candied_orange

18
একটি পরীক্ষা 10 বছরে কখনই ব্যর্থ হয় তা এমনকি এটি অপ্রয়োজনীয় হওয়ার গ্যারান্টি দেয় না, এটি 11 সালে ব্যর্থ হতে পারে
ফরাপ

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

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

66

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

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


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

এটি একটি দুর্দান্ত উত্তর এবং আমার অভিজ্ঞতার সাথে পুরোপুরি সারিবদ্ধ করে।
টনি এনিস

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

3
এটি গৃহীত উত্তরটির চেয়ে অনেক ভাল উত্তর! "কিছু ক্ষেত্রে, বেশিরভাগ বিকাশের প্রচেষ্টা কম মানের পরীক্ষা আপডেট করে" - আমি এটি অভিজ্ঞতা অর্জন করেছি এবং এটি সফল হয়। কিছুটা হলেও পরীক্ষা-নিরীক্ষার চেয়ে বেশি।
বেনিয়ামিন হজসন

36

আপনার প্রশ্নের উত্তর

অনেক বেশি ইউনিট পরীক্ষা করানোর মতো জিনিস আছে কি?

অবশ্যই ... আপনি উদাহরণস্বরূপ, একাধিক পরীক্ষা করতে পারেন যা প্রথম নজরে আলাদা বলে মনে হয় তবে সত্যই একই জিনিসটি পরীক্ষা করতে পারে (পরীক্ষার অধীনে "আকর্ষণীয়" অ্যাপ্লিকেশন কোডের একই লাইনের উপর যৌক্তিকভাবে নির্ভর করে)।

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

আমি একটি বিদ্যমান অ্যাপ্লিকেশন জন্য ইউনিট পরীক্ষা লেখার দায়িত্ব দেওয়া হয়েছে। আমার প্রথম ফাইলটি শেষ করার পরে, আমার কাছে 419 লাইনের মূল কোডের জন্য পরীক্ষার কোডের 717 লাইন রয়েছে।

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

আমরা আমাদের কোডের আওতায় বাড়ার সাথে সাথে এই অনুপাতটি কি নিয়ন্ত্রণহীন হয়ে উঠবে?

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

ইউনিট টেস্টিং সম্পর্কে আমার বোধটি ক্লাসে প্রতিটি পদ্ধতি পরীক্ষা করা ছিল তা নিশ্চিত করার জন্য যে প্রতিটি পদ্ধতি প্রত্যাশা অনুযায়ী কাজ করেছে।

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

তবে, টান অনুরোধে আমার প্রযুক্তি নেতৃত্বটি উল্লেখ করেছে যে আমার উচ্চ স্তরের পরীক্ষার উপর ফোকাস করা উচিত।

তারপর আপনি মানুষ আসলে অভিমানী ফাঁদ মধ্যে পড়ে গিয়েছিলেন বোঝানো ইউনিট পরীক্ষা যখন তারা বলেন ইউনিট পরীক্ষা। আমি অনেক প্রোগ্রামারদের সাথে দেখা করেছি যারা "ইউনিট পরীক্ষা" বলে তবে একেবারে আলাদা কিছু বোঝায়।

তিনি প্রতিটি ফাংশনকে সম্পূর্ণরূপে পরীক্ষার চেয়ে প্রশ্নে ক্লাসে সবচেয়ে বেশি ব্যবহৃত 4-5 টি ব্যবহারের ক্ষেত্রে পরীক্ষার পরামর্শ দিয়েছিলেন।

অবশ্যই, গুরুত্বপূর্ণ কোডের শীর্ষস্থানীয় ৮০% উপর মনোনিবেশ করাও লোড হ্রাস করে ... আমি আপনার প্রশংসা করি যে আপনি আপনার বসকে খুব বেশি ভাবেন, তবে এটি আমাকে সর্বোত্তম পছন্দ হিসাবে আঘাত করে না।

আমার কাছে, 100% ইউনিট পরীক্ষার কভারেজ একটি উচ্চ লক্ষ্য, তবে আমরা কেবল 50% পর্যন্ত পৌঁছে গেলেও আমরা জানতে পারি যে 50% এর 100% আচ্ছাদিত ছিল।

"ইউনিট টেস্ট কভারেজ" কী তা আমি জানি না। আমি ধরে নিয়েছি আপনার অর্থ "কোড কভারেজ", অর্থাত্ পরীক্ষার স্যুট চালানোর পরে, কোডের প্রতিটি লাইন (= 100%) কমপক্ষে একবার কার্যকর করা হয়েছে।

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

ইন্টিগ্রেশন টেস্টিং

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

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

যারা আচরণের চালিত বিকাশ বা বৈশিষ্ট্যযুক্ত চালিত বিকাশের সাথে একসাথে চলেছেন; যারা সংজ্ঞা অনুসারে (কঠোর) ইউনিট পরীক্ষার সাথে কাজ করে না।

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

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

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

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


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

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

1
@ ভু, আপনি যা লিখেছেন সেগুলি সবই সত্য এবং যতদূর আমি বলতে পারি আমি ইতিমধ্যে উত্তরে উল্লিখিত সমস্ত সমস্যার কথা উল্লেখ করেছি ...
এএনওই

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

24

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

কিছু পরিস্থিতি:

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

    ইউনিট পরীক্ষা এবং ইন্টিগ্রেশন পরীক্ষার মধ্যে একটি ভাল ভারসাম্য উল্লেখযোগ্য কভারেজ না হারিয়ে এই সমস্যা হ্রাস করে।

  2. আপনার কাছে থাকা 20% পরীক্ষার সাথে প্রতিটা কমিটের জন্য যুক্তিসঙ্গত কভারেজ থাকতে পারে, বাকি 80% ইন্টিগ্রেশন বা কমপক্ষে পৃথক পরীক্ষার পাসের জন্য রেখে; এই দৃশ্যে আপনি যে বড় নেতিবাচক প্রভাবগুলি দেখছেন তা হ'ল ধীরে ধীরে পরিবর্তনগুলি হওয়ায় পরীক্ষাগুলি কার্যকর করার জন্য আপনাকে বড় সময় অপেক্ষা করতে হবে।

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

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


2
যা ইউনিট পরীক্ষাগুলিতে সমস্যা নয়, তবে সংস্থার সাথে অন্যান্য স্তরে যথাযথ পরীক্ষা তৈরি ও সম্পাদন করার জন্য সংস্থানগুলি ব্যয় না করে ইউনিট পরীক্ষা কভারেজের জন্য একটি নির্দিষ্ট সংখ্যার দাবি করে ভুল হওয়ার জন্য তার অগ্রাধিকারগুলি ভুল করার জন্য with
11

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

আমি আপনার বিবরণটি @ জোহানসিপকে ভালবাসি, অবশ্যই এটি একটি ঘন উদাহরণ যা নির্মাত্রে অপ্রয়োজনীয় প্রয়োজনীয় পরামিতিগুলির একগুচ্ছ যোগ করে একটি দুর্দান্ত শ্রেণি কীভাবে ভয়ঙ্কর হয় ...
ব্রুনো গার্ডিয়া

19

মনে রাখবেন যে প্রতিটি পরীক্ষার একটি ব্যয়ের পাশাপাশি একটি সুবিধাও রয়েছে। ত্রুটিগুলি অন্তর্ভুক্ত:

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

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

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


12

হ্যাঁ, অনেকগুলি ইউনিট পরীক্ষার মতো জিনিস রয়েছে।

টেস্টিং ভাল প্রতিটি ইউনিট পরীক্ষা হয়:

  • একটি সম্ভাব্য রক্ষণাবেক্ষণ বোঝা যা শক্তভাবে API এ জুড়েছে

  • সময় যে অন্য কিছুতে ব্যয় করা যেতে পারে

  • ইউনিট টেস্ট স্যুটে একটি সময়
  • কোনও আসল মান যুক্ত হতে পারে না কারণ এটি কার্যকরভাবে অন্য কোনও পরীক্ষার নূন্যতম সম্ভাবনা রয়েছে এমন কোনও পরীক্ষার সদৃশ যা অন্য কোনও পরীক্ষা পাস করবে এবং এই পরীক্ষাটি ব্যর্থ হবে।

এটি 100% কোড কভারেজের জন্য লক্ষ্য করা বুদ্ধিমানের তবে এর অর্থ পরীক্ষাগুলির স্যুট যা প্রত্যেকে স্বতন্ত্রভাবে নির্দিষ্ট নির্দিষ্ট এন্ট্রি পয়েন্টে 100% কোড কভারেজ সরবরাহ করে (ফাংশন / পদ্ধতি / কল ইত্যাদি)।

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

বেশিরভাগ কোডের প্র্যাকমেটিকস ইঙ্গিত করে:

  1. আপনার এন্ট্রি-পয়েন্টগুলির 100% কভারেজ রয়েছে কিনা তা নিশ্চিত করুন (সমস্ত কিছু কোনওরকমভাবে পরীক্ষা করে নেওয়া হয়) এবং 'অ-ত্রুটি' পাথের 100% কোডের কভারেজের কাছাকাছি হওয়ার লক্ষ্য।

  2. কোনও প্রাসঙ্গিক ন্যূনতম / সর্বোচ্চ মান বা মাপ পরীক্ষা করুন

  3. আপনার মনে হয় এমন কোনও কিছুর পরীক্ষা করুন যা একটি মজার বিশেষ বিশেষত বিশেষত 'বিজোড়' মান।

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

আরও জটিল অ্যালগরিদমের জন্য এগুলিও বিবেচনা করুন:

  1. আরও কিছু ক্ষেত্রে বাল্ক পরীক্ষা করা।
  2. 'ব্রুট-ফোর্স' বাস্তবায়নের সাথে ফলাফলের তুলনা করা এবং আক্রমণকারীদের পরীক্ষা করা।
  3. এলোমেলো পরীক্ষার কেস উত্পাদন এবং ব্রুট-ফোর্স এবং আক্রমণকারীদের সহ পোস্ট-কন্ডিশনের বিরুদ্ধে পরীক্ষা করার কিছু পদ্ধতি ব্যবহার করে।

উদাহরণস্বরূপ কিছু র্যান্ডমাইজড ইনপুট সহ বাছাই করা অ্যালগরিদম পরীক্ষা করুন এবং ডেটা যাচাইকরণ শেষে স্ক্যান করে এটি বাছাই করা হয়।

আমি বলব যে আপনার প্রযুক্তির সীসা 'ন্যূনতম নগ্ন গাধা' পরীক্ষার প্রস্তাব দিচ্ছে। আমি 'সর্বোচ্চ মানের মানের পরীক্ষা' দিচ্ছি এবং এর মধ্যে একটি বর্ণালী রয়েছে।

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

মূল পাঠটি হ'ল বাগগুলি পাওয়া গেলে পরীক্ষাগুলি যুক্ত করা। যা ইউনিট পরীক্ষার বিকাশ সম্পর্কে আমার সেরা পাঠকে নেতৃত্ব দেয়:

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

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

এটি বাক্সের জন্য সেরা ঠাঁই পায় (পুরো এক পরীক্ষায় একাধিক উপাদান পরীক্ষা করা হয়) এবং পুনরায় নকশা এবং পরিমার্জনের জন্য আরও বেশি ক্ষমতা ফেলে কারণ কেবলমাত্র 'বাহ্যিক' ইন্টারফেস পরীক্ষায় ব্যবহৃত হয় যা আরও স্থিতিশীল থাকে।

সর্বনিম্ন পরীক্ষার বাস্তবায়ন থেকে সর্বাধিক পরীক্ষার কভারেজ পাবেন সমস্ত স্তরে আক্রমণকারীদের সহ পোস্ট-কন্ডিশনের পূর্ব শর্তাবলীর ডিবাগ কোডের সাথে মিলিত।


4
আমি এটি বলব না যে 100% কভারেজটি ব্যবহারিক is 100% কভারেজ একটি অত্যন্ত উচ্চ মানের।
ব্রায়ান ওকলে

দুর্ভাগ্যক্রমে এমনকি এলোমেলো পদ্ধতিও ত্রুটি মিস করতে পারে। অনানুষ্ঠানিক হলেও প্রমাণের বিকল্প নেই।
ফ্র্যাঙ্ক হিলেমান

@ ব্রায়ানওকলে পয়েন্ট নেওয়া হয়েছে। এটি একটি বাড়াবাড়ি। লোকেরা creditণ দেওয়ার চেয়ে তার কাছে যাওয়া আরও গুরুত্বপূর্ণ is "আমি সহজ পথটি পরীক্ষা করেছি এটি সব ভাল" পরে সর্বদা সমস্যা দেখা দিতে চলেছে।
পার্সিস্টেটি

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

3

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

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

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

পরবর্তী সর্বাধিক মূল্যবান পরীক্ষাগুলি হ'ল চূড়ান্ত সীমা বা সীমানা পয়েন্টগুলি অনুশীলন করে। উদাহরণস্বরূপ, কোনও ফাংশন যা বছরের (1-ভিত্তিক) মাস গ্রহণ করে 0, 1, 12 এবং 13 দিয়ে পরীক্ষা করা উচিত, তাই আপনি জানেন যে বৈধ-অবৈধ স্থানান্তরগুলি সঠিক জায়গায় রয়েছে। এই পরীক্ষাগুলির জন্য ২.১১ ব্যবহার করাও ওভার টেস্টিং।

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


3

ইউনিট টেস্টিং সম্পর্কে আমার বোধটি ক্লাসে প্রতিটি পদ্ধতি পরীক্ষা করা ছিল তা নিশ্চিত করার জন্য যে প্রতিটি পদ্ধতি প্রত্যাশা অনুযায়ী কাজ করেছে।

এই বোঝাপড়াটি ভুল।

ইউনিট পরীক্ষা যাচাই আচরণ এর পরীক্ষা অধীনে ইউনিট

সেই অর্থে একটি ইউনিট অগত্যা "ক্লাসের একটি পদ্ধতি" নয়। আর্ট অফ ইউনিট টেস্টিংয়ে রায় ওশেরোভের একটি ইউনিটের সংজ্ঞাটি আমি পছন্দ করি :

একটি ইউনিট এমন সমস্ত উত্পাদন কোড যা পরিবর্তনের একই কারণ রয়েছে।

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


তবে, টান অনুরোধে আমার প্রযুক্তি নেতৃত্বটি উল্লেখ করেছে যে আমার উচ্চ স্তরের পরীক্ষার উপর ফোকাস করা উচিত।

তিনি ঠিকই বলেছেন, তবে তার চেয়ে ভিন্নভাবে।

আপনার প্রশ্ন থেকে আমি বুঝতে পারি যে আপনি সেই প্রকল্পের "উত্সর্গীকৃত পরীক্ষক"।

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

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

ডাম্প অটোমোবাইল সাদৃশ্যটিকে আরও একবার চাপ দেওয়ার জন্য: অ্যাসেম্বলি লাইনের শেষে গাড়ি নিয়ে কয়টি পরীক্ষা করা হয়? হুবহু এক: এটিকে নিজেই পার্কিং এ চালনা করতে হবে ...

এখানে কথাটি হ'ল:

"ইউনিট টেস্টিং" এবং "ইউনিট টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে স্বয়ংক্রিয় পরীক্ষার" মধ্যে পার্থক্য সম্পর্কে আমাদের সচেতন হওয়া দরকার।


আমার কাছে, 100% ইউনিট পরীক্ষার কভারেজ একটি উচ্চ লক্ষ্য, তবে আমরা কেবল 50% পর্যন্ত পৌঁছে গেলেও আমরা জানতে পারি যে 50% এর 100% আচ্ছাদিত ছিল।

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

আপনার 100% কোড কভারেজ দরকার নেই।

তবে আপনার 100% আচরণের কভারেজ দরকার। (হ্যাঁ, কোড কভারেজ এবং আচরণের কভারেজটি কোনওভাবে পারস্পরিক সম্পর্কযুক্ত তবে তারা এটির জন্য একরকম নয়))

আপনার যদি 100% এরও কম আচরণের কভারেজ থাকে তবে আপনার টেস্ট স্যুটটির একটি সফল রান হওয়ার অর্থ কিছু না, যেহেতু আপনি অনির্ধারিত আচরণের কিছু পরিবর্তন করতে পারতেন। এবং আপনার মুক্তি অনলাইনে যাওয়ার পরের দিন আপনি আপনার ক্লায়েন্টের নজরে আসবেন ...


উপসংহার

কোনও পরীক্ষা না করেই কয়েকটি পরীক্ষা ভাল। কোনো সন্দেহ নেই!

তবে খুব বেশি ইউনিট পরীক্ষা করানোর মতো কোনও জিনিস নেই।

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


2

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

এটিকে নিছক পরিচালন সমস্যা হিসাবে বরখাস্ত করার আগে, বিবেচনা করুন যে বাস্তব বিশ্বের অনেকগুলি প্রকল্প উত্তরাধিকারের স্থিতির কাছে যাওয়ার সাথে সাথে কর্মী হ্রাস দ্বারা ভুগছে। কখনও কখনও এটি প্রথম প্রকাশের ঠিক পরে ঘটতে শুরু করে।


4
"সর্বোপরি, আমাদের পণ্যটির কিছু নির্ভরতা ছিল যা নিয়মিতভাবে ব্রেকিং পরিবর্তনগুলি চালু করছিল, যার অর্থ আমাদের জন্য নিয়মিত পরীক্ষার রক্ষণাবেক্ষণ করা।" - আপনি যে পরীক্ষাগুলি বলছেন সেগুলি রক্ষণাবেক্ষণের মতো প্রয়োজনীয় মূল্যবানগুলির মতো লাগে যদি আপনার নির্ভরতা নিয়মিতভাবে ভেঙে যায়।
কোডমনেকি

2
পরীক্ষাগুলি নিয়ে এটি সমস্যা নয়, বরং সংস্থার ক্ষেত্রে।
11:52

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

2
@ জওয়েন্টিং হ্যাঁ, এটি একটি সাংগঠনিক সমস্যা, কোনও কোড সমস্যা নয়। কিন্তু এটি সত্য যে অনেক পরীক্ষা ছিল সত্য পরিবর্তন করে না। একটি ব্যর্থ পরীক্ষা যা তদন্ত করা যায় না তা নির্বিশেষে কারণ নির্বিশেষে।
মোগল

"এসডিইটি" কী?
পিটার মর্টেনসেন

1

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

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

"কেন বেশিরভাগ ইউনিট টেস্টিং নষ্ট হয়" কাগজের একটি দুর্দান্ত উক্তিটি ইউনিট পরীক্ষাগুলিতে "বিস্তৃত, আনুষ্ঠানিক, স্বতন্ত্রতার স্বতন্ত্র প্রবন্ধ, এবং ... বর্ণনীয় ব্যবসায়ের মূল্য" হওয়া উচিত


0

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

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

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

সুতরাং, এতগুলি পরীক্ষা চালানো যে সমস্ত চালাতে কয়েক মিনিট সময় নেয়, বা কয়েকটি অতিরিক্ত জটিল পরীক্ষা করা কোনও সমস্যা হতে পারে।

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