ব্ল্যাক বক্স ইউনিট টেস্টিং কি?


11

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

Unit Testing is considered:
a. White-box Testing
b. Black-box Testing
c. Either

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

তবে পরীক্ষার সঠিক উত্তর (অধ্যাপকের মতে) হ'ল ইউনিট টেস্টিং সাদা বা ব্ল্যাক বক্স টেস্টিং হতে পারে।

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

কেউ দয়া করে আমাকে কীভাবে ব্ল্যাক বক্স ইউনিট পরীক্ষার কাজ করে তা ব্যাখ্যা করতে পারেন (যদি এটি সত্যিই কোনও জিনিস হয়) এবং এটি সাদা বক্স ইউনিট পরীক্ষার থেকে কীভাবে আলাদা?


4
আপনি যখন তাদের সম্পর্কে জিজ্ঞাসা করলেন তখন অধ্যাপক কীভাবে এটি স্পষ্ট করলেন? (এছাড়াও দেখুন কেন ইন্টারভিউ প্রশ্ন দরিদ্র সফটওয়্যার Engineering.SE প্রশ্ন করতে পারি? )
মশা

"যে কেউ পরীক্ষা নিরীক্ষা করছে সে সম্পর্কে সাধারণত পরীক্ষাটি কীভাবে বাস্তবায়িত হতে চলেছে সে সম্পর্কে একটি ভাল ধারণা রয়েছে" - আপনি কীভাবে পরীক্ষাটি বাস্তবায়িত হয় তা জানেন না, তবে আপনি কী জানেন (সাদা) জানেন না (কালো) কীভাবে জিনিসটি হবে আপনি পরীক্ষা করছেন বাস্তবায়ন করা হয়।
জেস্পার

@ জেস্প দুঃখিত। আমি বলতে চাইছিলাম "কীভাবে উত্স কোডটি প্রয়োগ করা হবে"। আমি প্রশ্নে এটি স্থির করেছি।
ব্যাকক্যাব

2
While the implementation does not yet exist, whoever is writing the test generally has a pretty good idea about how the source code is going to be implemented.- হ্যাঁ, কিন্তু পরীক্ষা নিজেই দেয় না। হোয়াইট-বাক্স পরীক্ষার অর্থ কোনও ভেরিয়েবলের মানের মতো পদ্ধতি বা শ্রেণীর অভ্যন্তরীণ কিছু পরীক্ষা করা। এর অর্থ এই নয় যে পরীক্ষার লেখক জানেন যে পরীক্ষার অধীনে কোডটি কেমন দেখাচ্ছে।
রবার্ট হার্ভে

উত্তর:


20

আপনার অধ্যাপক ঠিক বলেছেন: ইউনিট পরীক্ষাটি ব্ল্যাক-বাক্স বা হোয়াইট-বক্স হতে পারে। পরীক্ষক কী জানে সে সম্পর্কে পার্থক্য কম, তবে আপনি কীভাবে পরীক্ষার কেস উত্পন্ন করেন সে সম্পর্কে আরও বেশি।

ব্ল্যাক বক্স টেস্টিংয়ের সাহায্যে আপনি কেবল ইন্টারফেস এবং কোনও উপাদানটির স্পেসিফিকেশন (যদি এটি বিদ্যমান থাকে) দেখুন। যখন কোনও ফাংশনে স্বাক্ষর থাকে int foo(int a, int b), তখন আমি কেবল আকর্ষণীয় পূর্ণসংখ্যার পরীক্ষা করেই তাত্ক্ষণিকভাবে কয়েকটি পরীক্ষার কেস তৈরি করতে পারি: শূন্য, এক, বিয়োগ এক, বহু-অঙ্ক সংখ্যা, INT_MAX, INT_MAX - 1 এবং আরও on ব্ল্যাক বক্স পরীক্ষা দুর্দান্ত কারণ তারা বাস্তবায়ন থেকে স্বতন্ত্র। তবে তারা গুরুত্বপূর্ণ মামলাগুলিও মিস করতে পারে।

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

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


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

4

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

সর্বোপরি, আপনি যখন কোনও পরীক্ষা লেখেন, আপনি কী পরীক্ষা করছেন? পাবলিক পদ্ধতি / কার্যাবলী

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

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

বিবেচনা করুন 'টয়লেটে টেস্টিং - টেস্ট আচরণ না বাস্তবায়ন' , যেখানে একটি বর্গ বাস্তবায়ন রদবদল করা হয় কিন্তু পরীক্ষার এখনও বৈধ হতে হবে।

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


2
If you were to write the interface for a class, and then write the tests, and then you get hit by a bus, the guy who writes the class while you're in hospital should be able to do so from your interface, right?-- বেপারটা এমন না. বেশিরভাগ এপিআই চুক্তিগুলি কেবল সত্যিকারের পদ্ধতি স্বাক্ষরগুলি নির্দিষ্ট করে, শব্দার্থকতা বা আচরণ নয়।
রবার্ট হার্ভে

তুমি ঠিক বলছো; আমি এটি একটি প্রদত্ত হিসাবে গ্রহণ করেছি যে আপনার ইন্টারফেসে সেই লিখিত লেখাটি অন্তর্ভুক্ত থাকবে, আক্ষরিক অর্থে কেবল মাইক্লাসইন্টারফেসের পাঠ্য নয়।
আদমজেএস

@ রবার্তহার্ভে এটি সত্য যে বেশিরভাগ ইন্টারফেস স্পষ্টভাবে শব্দার্থকতা বা আচরণ বর্ণনা করে না, তবে আমি মনে করি এটি সাধারণত সেখানে অন্তর্নিহিতভাবে রয়েছে। এটি যদি না থাকে তবে নির্দিষ্ট শব্দার্থবিজ্ঞানের প্রয়োজন এমন কোডটি বিমূর্তনের উপর নির্ভর করতে সক্ষম হবে না। মন্তব্য এবং ডকব্লক হিসাবে শব্দার্থক এবং আচরণের বিবরণ সহ ইন্টারফেস বন্ধ করার কিছুই নেই। উদাহরণস্বরূপ github.com/php-fig/http-message/blob/master/src/…
বিডিএসএল

3

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

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

উপসংহার: আপনি ইউনিট পরীক্ষার সাথে যদি সাদা বাক্স পরীক্ষা করেন তবে আপনার পরীক্ষা খারাপ হয়। কেবলমাত্র সেই ইউনিট পরীক্ষার সাথে ব্যাক বক্স পরীক্ষা। আপনি অধ্যাপক সঠিক: এটি হতে পারে। তবে খারাপভাবে করলেই হয়।


1

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

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

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

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