স্টোকাস্টিক আচরণের সাথে প্রোগ্রামগুলি পরীক্ষা করার জন্য সেরা অনুশীলনগুলি কী কী?


14

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

এই জাতীয় কোড পরীক্ষা করার ক্ষেত্রে একটি সমস্যা হ'ল বাগগুলি প্রায়শই মাঝে মাঝে হয় এবং পুনরুত্পাদন করা খুব কঠিন হতে পারে। এটি কেবল একই মানটিতে একটি এলোমেলো বীজ সেট করা এবং সম্পাদন শুরু করা অতিক্রম করে।

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

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

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


5
আপনিও কর্নেল রিং বাফারকে উপহাস করতে পারবেন না? এবং আপনার কোডের অন্যান্য এলোমেলো দিক?
জোনাথন মেরলেট

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

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

@ আকাশম, হ্যাঁ, এটি উচ্চারণের আরও ভাল উপায়। আরও সুনির্দিষ্ট হওয়ার জন্য, একটি বাহ্যিক রাষ্ট্র সহ একটি প্রোগ্রাম, যা দৃoc়ভাবে বাহ্যিক অবস্থাকে অ্যাক্সেস করে বা পরিবর্তন করে।
জন ডুয়েস্ট

উত্তর:


7

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

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

কার্নেলে আপনার অ্যাক্সেসের বিশেষ ক্ষেত্রে, আমি যে কোনও ক্ষেত্রে একটি উপহাস করার পরামর্শ দেব। অনুশীলন হিসাবে প্রদর্শিত হবে এমন সমতুল্য ক্লাসকে জোর দেওয়ার জন্য মোক ব্যবহার করুন, ধারকগুলির জন্য "খালি" এবং "পূর্ণ", অথবা "0, 1, 2 ^ n, 2 ^ n + 1, অনেক" গণনাযোগ্য জিনিস। তারপরে আপনি মোক এবং সত্যিকারের জিনিস দিয়ে পরীক্ষা করতে পারেন, জেনেও যে আপনি এতক্ষণ যে বিষয়গুলি ভাবেন সেগুলি পরিচালনা করেছেন এবং পরীক্ষা করেছেন।

মূলত, আমি যা প্রস্তাব করছি তা হ'ল ডিস্ট্রিমেন্টিক এবং ননডেটারিস্ট্যানিক ইনপুটগুলির মিশ্রণের সাথে সাথে, যেগুলি ডিটারিস্টিনিস্টিকগুলি সেগুলি মিশ্রণ হিসাবে আপনি ভাবতে পারেন এবং আপনি যেগুলি দ্বারা অবাক হয়েছিলেন।


6

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


1
এই; বা পুরোভাবে prng আউট
jk।

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

2
তবে এর মানে হল যে এলোমেলোভাবে সঠিকভাবে কাজ করে কিনা তা আপনি পরীক্ষা করতে পারবেন না ..
লুই রাইস

2

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

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


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

2

আমি এই ডোমেনের বিশেষজ্ঞ নই, তবে স্টোকাস্টিক প্রোগ্রাম পরীক্ষার সাথে সম্পর্কিত বৈজ্ঞানিক সাহিত্যিক আছেন।

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


ধন্যবাদ! খুব সহায়ক মনে হচ্ছে। বাইরের শিক্ষাপ্রতিষ্ঠানের জন্য, লেখকের গুগল কোড সংগ্রহস্থল থেকে কাগজের একটি প্রিন্ট সংস্করণটি এখানে টানতে পারবেন: Team4model.googlecode.com/svn/trunk/resources/paper/…
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.