Random testing
র্যান্ডম টেস্টিং একটি ব্ল্যাক-বক্স সফ্টওয়্যার টেস্টিং কৌশল যেখানে প্রোগ্রামগুলি র্যান্ডম, স্বাধীন ইনপুট তৈরি করে পরীক্ষা করা হয়। পরীক্ষার ফলাফল উত্তীর্ণ বা ব্যর্থ হয়েছে কিনা তা যাচাই করার জন্য আউটপুটের ফলাফলগুলি সফ্টওয়্যার নির্দিষ্টকরণের সাথে তুলনা করা হয়। নির্দিষ্টকরণের অনুপস্থিতির ক্ষেত্রে ভাষার ব্যতিক্রমগুলি ব্যবহার করা হয় যার অর্থ যদি পরীক্ষা সম্পাদনের সময় কোনও ব্যতিক্রম দেখা দেয় তবে এর অর্থ প্রোগ্রামে কোনও ত্রুটি রয়েছে, এটি পক্ষপাতদুষ্ট পরীক্ষা এড়ানোর উপায় হিসাবেও ব্যবহৃত হয়। হার্ডওয়্যারের জন্য এলোমেলো পরীক্ষার ইতিহাস 1971 সালে মেলভিন ব্রুয়ার প্রথম পরীক্ষা করেছিলেন এবং 1975 সালে প্রতিমা ও বিশ্বানী আগরওয়াল এর কার্যকারিতা মূল্যায়নের প্রাথমিক প্রচেষ্টা করেছিলেন। সফ্টওয়্যারে, ডুরান এবং এনটাফোস 1984 সালে র্যান্ডম টেস্টিং পরীক্ষা করেছিলেন। এলোমেলো পরীক্ষার জন্য তাত্ত্বিক ভিত্তি হিসাবে অনুমান পরীক্ষার ব্যবহার হাউডেন দ্বারা কার্যকরী পরীক্ষা এবং বিশ্লেষণে বর্ণনা করা হয়েছিল। বইটিতে পরীক্ষার সংখ্যা অনুমান করার জন্য একটি সহজ সূত্রের বিকাশও রয়েছে যা 1/n এর চেয়ে বেশি ব্যর্থতার হারে কমপক্ষে 1-1/n আস্থা রাখতে হবে। সূত্রটি হল লোয়ার বাউন্ড নলগন, যা নির্দেশ করে যে একটি পরিমিত ব্যর্থতার হারের উপর এমনকি পরিমিত আস্থা রাখার জন্য বিপুল সংখ্যক ব্যর্থতা-মুক্ত পরীক্ষার প্রয়োজন। সংক্ষিপ্ত বিবরণ নিম্নলিখিত সি + + ফাংশনটি বিবেচনা করুনঃ ইন্ট মাইএবস্ (ইন্ট এক্স) {যদি (এক্স> 0) {রিটার্ন এক্স;} অন্যথায় {রিটার্ন এক্স;// বাগঃ '-এক্স' হওয়া উচিত} এখন এই ফাংশনের জন্য এলোমেলো পরীক্ষা হতে পারে {123,36,-35,48,0}। শুধুমাত্র '-35' মানটি বাগটিকে ট্রিগার করে। ফলাফল পরীক্ষা করার জন্য যদি কোনও রেফারেন্স বাস্তবায়ন না থাকে, তবে বাগটি অলক্ষিত থাকতে পারে। যাইহোক, ফলাফলগুলি পরীক্ষা করার জন্য একটি দাবি যোগ করা যেতে পারে, যেমনঃ অকার্যকর testAbs (int n) {for (int i = 0; i <n; i + +) {int x = getRandomInput (); int ফলাফল = myAbs (x); assert (ফলাফল> = 0);} রেফারেন্স বাস্তবায়ন কখনও কখনও উপলব্ধ, যেমন। যখন আরও ভাল পারফরম্যান্সের জন্য একটি সহজ অ্যালগরিদমকে আরও জটিল উপায়ে প্রয়োগ করা হয়। উদাহরণস্বরূপ, Schönhage-Strassen অ্যালগরিদমের একটি বাস্তবায়ন পরীক্ষা করার জন্য, পূর্ণসংখ্যার উপর স্ট্যান্ডার্ড "*" অপারেশন ব্যবহার করা যেতে পারেঃ int গেটরেন্ডম ইনপুট () {//.} অকার্যকর টেস্টফাস্ট মাল্টিপ্লিকেশন (int n) {জন্য (int i = 0; i <n; i + +) {লং x = গেটরেন্ডম ইনপুট (); লং y = গেটরেন্ডম ইনপুট (); দীর্ঘ ফলাফল = দ্রুত গুণন (x, y); দাবি (x * y = = = ফলাফল);} যদিও এই উদাহরণটি সহজ প্রকারের মধ্যে সীমাবদ্ধ (যার জন্য একটি সাধারণ র্যান্ডম জেনারেটর ব্যবহার করা যেতে পারে), বস্তু-ভিত্তিক ভাষাগুলিকে লক্ষ্য করে সরঞ্জামগুলি সাধারণত প্রোগ্রামটি অন্বেষণ করে। এই ধরনের পদ্ধতিগুলি তখন এলোমেলোভাবে উত্পন্ন বস্তুর একটি পুল বজায় রাখে এবং একটি উত্পন্ন বস্তুর পুনঃব্যবহার বা একটি নতুন তৈরি করার জন্য একটি সম্ভাব্যতা ব্যবহার করে। ডি. হ্যামলেটের র্যান্ডম টেস্টিং সম্পর্কিত মৌলিক গবেষণাপত্র অনুসারে "র্যান্ডম টেস্টিং"-এর প্রযুক্তিগত, গাণিতিক অর্থ পরীক্ষার তথ্য নির্বাচনের ক্ষেত্রে "সিস্টেম"-এর স্পষ্ট অভাবকে বোঝায়, যাতে বিভিন্ন পরীক্ষার মধ্যে কোনও সম্পর্ক না থাকে। শক্তি এবং দুর্বলতা র্যান্ডম টেস্টিং নিম্নলিখিত শক্তির জন্য প্রশংসিত হয়ঃ এটি ব্যবহার করা সস্তাঃ এটি পরীক্ষার অধীনে প্রোগ্রাম সম্পর্কে স্মার্ট হতে হবে না। এটির কোনও পক্ষপাত নেইঃ ম্যানুয়াল পরীক্ষার বিপরীতে, এটি বাগগুলিকে উপেক্ষা করে না কারণ কিছু কোডে ভুল বিশ্বাস রয়েছে। বাগ প্রার্থী খুঁজে পাওয়া দ্রুতঃ একটি পরীক্ষার অধিবেশন সম্পাদন করতে সাধারণত কয়েক মিনিট সময় লাগে। যদি সফ্টওয়্যারটি সঠিকভাবে নির্দিষ্ট করা থাকেঃ এটি প্রকৃত বাগ খুঁজে পায়। নিম্নলিখিত দুর্বলতাগুলি বর্ণনা করা হয়েছেঃ এটি শুধুমাত্র মৌলিক বাগগুলি খুঁজে পায় (যেমন। নাল পয়েন্টার রেফারেন্সিং)। এটি কেবল ততটাই সুনির্দিষ্ট যতটা নির্দিষ্টকরণ এবং নির্দিষ্টকরণগুলি সাধারণত অস্পষ্ট। এটি বাগগুলি খুঁজে বের করার অন্যান্য কৌশলগুলির সাথে খারাপভাবে তুলনা করে (যেমন। স্থির প্রোগ্রাম বিশ্লেষণ)। যদি প্রতিটি পরীক্ষায় এলোমেলোভাবে বিভিন্ন ইনপুট নির্বাচন করা হয়, তবে এটি অবিচ্ছিন্ন একীকরণের জন্য সমস্যা তৈরি করতে পারে কারণ একই পরীক্ষাগুলি এলোমেলোভাবে উত্তীর্ণ হবে বা ব্যর্থ হবে। কেউ কেউ যুক্তি দেন যে, এলোমেলোভাবে নির্ভর করার চেয়ে সমস্ত প্রাসঙ্গিক ক্ষেত্রে ম্যানুয়ালি তৈরি পরীক্ষাগুলি সাদা-বাক্সের পদ্ধতিতে চিন্তাভাবনা করা ভাল। সামান্য ব্যর্থতার হারে পরিমিত মাত্রার আত্মবিশ্বাসের জন্য এর জন্য খুব বড় সংখ্যক পরীক্ষার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, ব্যর্থতার সম্ভাবনা 1/100-এর চেয়ে কম বলে কমপক্ষে 99 শতাংশ আস্থা রাখার জন্য 459টি ব্যর্থতা-মুক্ত পরীক্ষার প্রয়োজন হবে। র্যান্ডম পরীক্ষার প্রকার ইনপুট র্যান্ডম ইনপুট সিকোয়েন্স জেনারেশনের ক্ষেত্রে (অর্থাৎ। পদ্ধতি কলগুলির একটি ক্রম) ডেটা ইনপুটগুলির এলোমেলো ক্রম (কখনও কখনও স্টোকাস্টিক টেস্টিং বলা হয়)-যেমন। পদ্ধতির একটি র্যান্ডম সিকোয়েন্স বিদ্যমান ডাটাবেস থেকে র্যান্ডম ডেটা নির্বাচনকে গাইডেড বনাম আনগাইডেড আনডাইরেক্টেড র্যান্ডম টেস্ট জেনারেশন বলে-এর অনুসন্ধান নির্দেশিত র্যান্ডম টেস্ট জেনারেশনকে গাইড করার জন্য কোনও হিউরিস্টিক্স নেই-যেমন। "প্রতিক্রিয়া-নির্দেশিত র্যান্ডম টেস্ট জেনারেশন" এবং "অভিযোজিত র্যান্ডম টেস্টিং" বাস্তবায়ন র্যান্ডম টেস্টিং বাস্তবায়নের কিছু সরঞ্জামঃ কুইকচেক-একটি বিখ্যাত পরীক্ষার সরঞ্জাম, যা মূলত হাস্কেলের জন্য তৈরি করা হয়েছিল কিন্তু অন্যান্য অনেক ভাষায় পোর্ট করা হয়েছিল, যা একটি মডেলের উপর ভিত্তি করে এপিআই কলগুলির র্যান্ডম সিকোয়েন্স তৈরি করে এবং সিস্টেমের বৈশিষ্ট্যগুলি যাচাই করে যা প্রতিটি রানের পরে সত্য হওয়া উচিত। রান্ডুপ-পরীক্ষার অধীনে থাকা ক্লাসগুলির জন্য পদ্ধতি এবং কনস্ট্রাক্টর আহ্বানের ক্রম তৈরি করে এবং এই সিমুল্যান্টগুলি থেকে জেইউনিট পরীক্ষা তৈরি করে-একটি ক্লোজার সরঞ্জাম যা বিভিন্ন এজেন্টের সিমুলেশন চালায় (যেমন। বিভিন্ন আচরণগত প্রোফাইল সহ ব্যবহারকারীরা) তাদের আচরণের পরিসংখ্যানগত মডেলের উপর ভিত্তি করে, সমস্ত ক্রিয়া এবং ফলাফলগুলি রেকর্ড করে একটি ডাটাবেসে পরে অনুসন্ধান এবং যাচাইয়ের জন্য অটোটেস্ট-একটি সরঞ্জাম যা স্বয়ংক্রিয়ভাবে আইফেল স্টুডিও পরীক্ষার সাথে একীভূত হয়ে একই নামের গবেষণা প্রোটোটাইপের উপর ভিত্তি করে চুক্তির সাথে আইফেল কোড। গ্রামটেস্ট-জাভাতে লেখা একটি ব্যাকরণ ভিত্তিক এলোমেলো পরীক্ষার সরঞ্জাম, এটি ইনপুট ব্যাকরণ নির্দিষ্ট করতে বি. এন. এফ নোটেশন ব্যবহার করে। সমালোচনামূলক এলোমেলো পরীক্ষার অনুশীলনে কেবল একটি বিশেষ কুলুঙ্গি রয়েছে, বেশিরভাগ কারণ একটি কার্যকর ওরাকল খুব কমই পাওয়া যায়, তবে কার্যকরী প্রোফাইল এবং সিউডোরান্ডম ইনপুট মানগুলির প্রজন্মের সাথে অসুবিধার কারণেও। একটি পরীক্ষার ওরাকল হল ফলাফলগুলি প্রোগ্রামের নির্দিষ্টকরণের সাথে মেলে কিনা তা যাচাই করার জন্য একটি যন্ত্র। একটি অপারেশন প্রোফাইল হল প্রোগ্রামের ব্যবহারের ধরণ সম্পর্কে জ্ঞান এবং এইভাবে কোন অংশগুলি বেশি গুরুত্বপূর্ণ। প্রোগ্রামিং ভাষা এবং প্ল্যাটফর্মগুলির জন্য যাদের চুক্তি রয়েছে (যেমন। আইফেল। . NET বা জাভার বিভিন্ন এক্সটেনশন যেমন JML, CoFoJa.) চুক্তিগুলি প্রাকৃতিক ওরাকল হিসাবে কাজ করে এবং পদ্ধতিটি সফলভাবে প্রয়োগ করা হয়েছে। বিশেষত, এলোমেলো পরীক্ষা ম্যানুয়াল পরিদর্শন বা ব্যবহারকারীর প্রতিবেদনের (যদিও ভিন্ন) চেয়ে বেশি বাগ খুঁজে পায়। আরও দেখুন ফাজ টেস্টিং-এক ধরনের র্যান্ডম টেস্টিং যা পরীক্ষিত প্রোগ্রাম লেজি সিস্টেমেটিক ইউনিট testing#Systematic টেস্টিং-কে অবৈধ ইনপুট প্রদান করে-"সমস্ত" পদ্ধতি কলগুলি অন্বেষণ করার একটি পদ্ধতিগত উপায়, যেমন প্রয়োগ করা হয়েছে। নাসার জাভা পাথ ফাইন্ডার দ্বারা (যা বিভিন্ন উপায়ে রাজ্যের স্থানকে যুক্তিসঙ্গত আকারে সীমাবদ্ধ করে মডেল চেকিংয়ের সাথে পরীক্ষার মিশ্রণ করে) সিস্টেম ভেরিলগ কর্নার কেস এজ কেস কনকোলিক টেস্টিং রেফারেন্স বাহ্যিক লিঙ্ক আন্দ্রেয়া আর্কুরির র্যান্ডম টেস্টিং। পোর্টল্যান্ড স্টেট ইউনিভার্সিটির ইমেরিটাস অধ্যাপক রিচার্ড হ্যামলেটের র্যান্ডম টেস্টিং; কানিংহাম অ্যান্ড কানিংহাম, ইনকর্পোরেটেড-এ র্যান্ডম টেস্টিং উইকি কাগজের শেষে সম্পদের একটি মূল্যবান তালিকা।