আমি এলোমেলোভাবে কীভাবে পরীক্ষা করব?


127

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

আমি দুটি ধারণা নিয়ে এসেছি, যার উভয়েরই লক্ষণীয় ত্রুটি রয়েছে:

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

দ্বিতীয় ফাংশনটি বিবেচনা করুন যা ডাইস রোলগুলি অনুকরণ করে এবং এলোমেলো নম্বর দেয়। আপনি এই ফাংশনটি কীভাবে পরীক্ষা করবেন? আপনি কীভাবে পরীক্ষা করবেন যে ফাংশন ...

  • প্রদত্ত সীমানার বাইরে কোনও সংখ্যা কখনই ফেরায় না?
  • বৈধ বিতরণে নম্বরগুলি ফেরত দেয়? (এক ডাইর জন্য অভিন্ন, বড় সংখ্যক ডাইসের জন্য সাধারণ))

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


সবার মনকে সহজ করার জন্য আমি নিজের র্যান্ডম নম্বর জেনারেটরটি লিখছি না


35
আঁটসাঁট মিলন এর মাথা দেখায়। অবজেক্টে পাস করুন যা এলোমেলো সংখ্যা উত্পন্ন করে। তারপরে পরীক্ষার সময় আপনি এমন একটি বস্তু পাস করতে পারেন যা একটি নির্দিষ্ট সংখ্যার উত্পন্ন করে যার জন্য আপনি জানতেন যে ডাবের মতন সাফল্যের পরে দেখতে কেমন। আপনি নিজের এলোমেলো নম্বর জেনারেটরের পৃথকভাবে পরীক্ষা করতে পারেন।
মার্টিন ইয়র্ক

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

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

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

4
@ কেরলেসা আমি সেই উক্তিটির গুরুত্বপূর্ণ অর্ধেকটি মিস করেছি: "ফলস্বরূপ, আপনার অ্যাপ্লিকেশন কোডটি ধরে নেওয়া উচিত নয় যে একই বীজটি। নেট ফ্রেমওয়ার্কের বিভিন্ন সংস্করণে একই সিউডো-এলোমেলো ক্রমের ফলাফল করবে" "
dlras2

উত্তর:


102

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

সৌভাগ্যক্রমে, প্রচুর পরিসংখ্যানমূলক পরীক্ষা আপনি চালাতে পারেন, যেমন টেস্ট অফ র্যান্ডমনেসের ডিহার্ড ব্যাটারি । আরো দেখুন:

  1. কিভাবে একটি সিডো এলোমেলো নম্বর জেনারেটর পরীক্ষা করতে?

    • স্টিভ জেসোপ সুপারিশ করেন যে আপনি একই আরএনজি অ্যালগরিদমের যে পরীক্ষামূলক প্রয়োগ করছেন তা খুঁজে বের করুন এবং এর ফলাফলকে আপনার নিজের প্রয়োগের বিরুদ্ধে নির্বাচিত বীজের সাথে তুলনা করুন।
    • গ্রেগ হিউগিল পরিসংখ্যানগত পরীক্ষার ENT স্যুট প্রস্তাব করেন ।
    • জন ডি কুক পাঠকদের তাঁর কোডপ্রজেক্ট নিবন্ধটি সিম্পল র‌্যান্ডম নম্বর জেনারেশনের প্রতি উল্লেখ করেছেন , যার মধ্যে ডোনাল্ড নথের খণ্ড ২, সেমিনিমোরিকাল অ্যালগরিদমগুলিতে উল্লিখিত কলমোগোরভ-স্মারনভ পরীক্ষার একটি বাস্তবায়ন রয়েছে।
    • বেশিরভাগ লোক পরীক্ষা করার পরামর্শ দেয় যে উত্পন্ন সংখ্যার বিতরণটি অভিন্ন, চি-স্কোয়ার্ড পরীক্ষা এবং পরীক্ষা করা যে গড় এবং মান বিচ্যুতি প্রত্যাশিত সীমার মধ্যে রয়েছে। (দ্রষ্টব্য যে একমাত্র বিতরণ পরীক্ষা করা যথেষ্ট নয়। [1,2,3,4,5,6,7,8] একটি অভিন্ন বিতরণ, তবে এটি অবশ্যই এলোমেলো নয়))
  2. ক্রিয়াকলাপের ফলাফলগুলি ফাংশনগুলির সাথে ইউনিট টেস্টিং

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

    আমি উইনজিপ দেখেছি একটি সরঞ্জাম হিসাবে একটি মানের ফাইলের এলোমেলোতা পরিমাপের জন্য আগে ব্যবহৃত (স্পষ্টতই, এটি যত কম সংখ্যক ফাইল কমপ্রেস করতে পারে)।


পরিসংখ্যানগত এলোমেলোতার জন্য আরেকটি ভাল পরীক্ষার স্যুট হ'ল 'এনটি' চারমিলাব.চ / র্যান্ডম এ

1
উত্তরের সম্পূর্ণতার জন্য আপনি পোস্ট করেছেন এমন কয়েকটি লিঙ্কের সংক্ষিপ্তসার জানাতে পারেন?
dlras2

@ ড্যানআড়সমুসেন অবশ্যই, সপ্তাহান্তে আমার এটি করার সময় হবে।
বিল করুন

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

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

21

1. ইউনিট আপনার অ্যালগরিদম পরীক্ষা

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

Random r = new RandomStub([1,3,5,3,1,2]);
r.random(); //returns 1
r.random(); //returns 3
...

২ দেখুন আপনার এলোমেলো ফাংশনটি বোধগম্য হয় কিনা

ইউনিট পরীক্ষায় আপনাকে এমন একটি পরীক্ষা যুক্ত করা উচিত যা একাধিকবার চালিত হয় এবং দৃser়ভাবে জানায় যে ফলাফল

  • আপনি যে সীমানা নির্ধারণ করেছেন তার মধ্যে রয়েছে (সুতরাং, একটি ডাইস রোল 1 থেকে 6 এর মধ্যে) এবং
  • একটি বুদ্ধিমান বিতরণ দেখান (একাধিক পরীক্ষার রান করুন এবং দেখুন যে বিতরণ আপনি প্রত্যাশা করেছেন তার x% এর মধ্যে রয়েছে কিনা, যেমন ডাইস রোলের জন্য আপনি দেখতে পাবেন 210% থেকে 20% (1/6 = 16.67%) এর মধ্যে সময় যে আপনি এটি 1000 বার ঘূর্ণিত)।

৩. অ্যালগরিদম এবং র্যান্ডম ফাংশনের জন্য সংহতকরণ পরীক্ষা test

আসল বাছাইয়ে আপনার অ্যারে বাছাই করা কত বার আশা করবেন? কয়েক শতাধিক বার বাছাই করুন এবং দৃsert়তা দিন যে কেবলমাত্র x% সময় বাছাই করা পরিবর্তন হয় না।

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

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


14

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

পিআরএনজির জন্য উপযুক্ত পরীক্ষায় এটি কমপক্ষে 100 বার চালানো এবং তারপরে আউটপুট বিতরণ (যা প্রশ্নের দ্বিতীয় অংশের প্রত্যক্ষ উত্তর) যাচাই করে involve

প্রথম প্রশ্নের উত্তর প্রায় একই রকম: {1, 2, ..., n with দিয়ে প্রায় 100 বার পরীক্ষা চালান এবং প্রতিটি উপাদান প্রতিটি অবস্থানে কতবার ছিলেন তা গণনা করুন। এলোমেলো পদ্ধতি যদি ভাল হয় তবে এগুলি মোটামুটি সমান হওয়া উচিত।

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

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


1
আমি মনে করি আপনি বোঝাতে চেয়েছেন যে প্রতিটি উপাদান প্রতিটি অবস্থানে রয়েছে তার সংখ্যা মোটামুটি সমান হওয়া উচিত । যদি তারা ধারাবাহিকভাবে ঠিক সমান হয় তবে কিছু খুব ভুল।
octern

@ প্রথম ধন্যবাদ, আমি জানি না যে আমি কীভাবে এটি লিখতে পারি ... এটি এখন পর্যন্ত সম্পূর্ণ ভুল ছিল ...
কে.স্টেফ

6

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

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

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


6

এটি বেশ কয়েকবার চালাতে দিন এবং আপনার ডেটা ভিজ্যুয়ালাইজ করুন

কোডিং হরর থেকে রদবদলের উদাহরণ এখানে আপনি দেখতে পারেন যে অ্যালগরিদম ঠিক আছে কি না:

এখানে চিত্র বর্ণনা লিখুন

সহজেই দেখা যায় যে প্রতিটি সম্ভাব্য আইটেম কমপক্ষে একবারে ফিরে আসে (সীমানা ঠিক আছে) এবং বিতরণ ঠিক আছে।


1
+1 ভিজ্যুয়ালাইজিং মূল বিষয়। আমি সর্বদা ব্লক সাইফার নিবন্ধের ইসিবি বিভাগে একটি পেঙ্গুইনের ছবি সহ উদাহরণটি পছন্দ করেছি )। একটি স্বয়ংক্রিয় সফ্টওয়্যার খুব কমই এই জাতীয়
নিয়মগুলি

অঁ্যা? যে কল্পনা বিন্দু দেখাতে হবে যে বন্টন হয় না ঠিক আছে। নির্লজ্জ শিফেল অ্যালগরিদম নির্দিষ্ট আদেশগুলি অন্যদের তুলনায় অনেক বেশি সম্ভাবনা দেয়। 2341, 2314, 2143 এবং 1342 বার প্রসারিত করতে ডানদিকে আরও কতটা লক্ষ্য করুন?
এইচডিভি

4

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

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

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

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


4

আপনি নিরাপদ র্যান্ডম সংখ্যা জেনারেটরের উপর নির্ভর করতে পারেন

আমি কেবল একটি ভয়ঙ্কর চিন্তাভাবনা করেছি: আপনি নিজের র্যান্ডম নম্বর জেনারেটরটি লিখছেন না?

ধরে নিচ্ছেন যে আপনি নন, তারপরে আপনার যে কোডটির জন্য দায়বদ্ধ সেই কোডটি পরীক্ষা করা উচিত , অন্য ব্যক্তির কোড নয় (যেমন SecureRandomআপনার কাঠামোর বাস্তবায়ন হিসাবে )।

আপনার কোড পরীক্ষা করা হচ্ছে

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

স্পষ্টতই আপনি প্রান্তের শর্তগুলি পরীক্ষা করবেন এবং নিশ্চিত করবেন যে আপনার অ্যালগরিদম যথাযথ ইনপুট প্রদত্ত হ'ল ঠিক সেইভাবে বদলানো হবে।

সুরক্ষিত এলোমেলো নম্বর জেনারেটরের পরীক্ষা করা

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


1

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


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

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

3
@ কে.স্টেফ, বাহ! ডিজকস্ট্রা অ্যালগরিদমটি সঠিক ছিল তা যাচাই করতে আপনি ইউনিট পরীক্ষা করেছিলেন?
উইনস্টন ইওয়ার্ট

ভাল বিষয়, সত্য হিসাবে - হ্যাঁ, তবে এবার 'তুচ্ছ' পরীক্ষা দিয়ে। যদিও তারা মূল প্রোগ্রামের (এ *) ইউনিটের পরীক্ষা ছিল। আমি মনে করি এটি সত্যিই একটি ভাল অনুশীলন - দ্রুত অ্যালগরিদমসকে আবার খোঁড়া (তবে সঠিক) বাস্তবায়ন পরীক্ষা করা।
কে.স্টেফ 3'12

1

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

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

দ্রষ্টব্য: আপনি কোনও পরীক্ষা লিখতে পারবেন না যা দেখায় যে পিআরএনজি একটি "এলোমেলো" ক্রম তৈরি করে। আপনি কেবলমাত্র একটি পরীক্ষা লিখতে পারেন যা এটি পাস হয়ে গেলে কিছুটা সম্ভাবনা নির্দেশ করে যে পিআরএনজি দ্বারা উত্পাদিত ক্রমটি "এলোমেলো"। এলোমেলো আনন্দে স্বাগতম!


1

কেস 1: একটি রদবদল পরীক্ষা:

একটি অ্যারে বিবেচনা করুন [0, 1, 2, 3, 4, 5], এলোমেলো, কী ভুল হতে পারে? সাধারণ স্টাফ: ক) কোনওভাবেই এলোমেলো করা উচিত নয়, খ) ১-৫ কিন্তু শটফালিং 0 নয়, 0-4 শিফ্লিং কিন্তু 5 নয়, এলোমেলো এবং সর্বদা একই প্যাটার্ন তৈরি করা, ...

তাদের সকলকে ধরার জন্য একটি পরীক্ষা:

100 বার সাফ করুন, প্রতিটি স্লটে মান যুক্ত করুন। প্রতিটি স্লটের যোগফল একে অপরের স্লটের সমান হওয়া উচিত। গড় / স্ট্ডদেব গণনা করা যায়। (5 + 0) / 2=2.5, 100 * 2.5 = 25. প্রত্যাশিত মান 25 এর কাছাকাছি, উদাহরণস্বরূপ।

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

এটি একটানা 3 বার ব্যর্থ হতে পারে? লটারিতে আপনার ভাগ্য চেষ্টা করা উচিত।

কেস 2: একটি পাশা রোল

পাশা-রোল প্রশ্ন একই প্রশ্ন। পাশা 6000 বার নিক্ষেপ করুন।

for (i in 0 to 6000) 
    ++slot [Random.nextInt (6)];
return (slot.max - slot.min) < threshold;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.