আপনি কীভাবে আলগোরিদিমগুলিতে "এজ" কেস সনাক্ত করতে পারেন?


25

মূলত আপনি কীভাবে খুঁজে পাবেন যেগুলি আপনার সবচেয়ে খারাপ বা সেরা কেস হতে পারে এবং অন্য কোনও "প্রান্ত" কেসগুলি হওয়ার আগে আপনার থাকতে পারে এবং তাই, আপনি কীভাবে তাদের কোড প্রস্তুত করবেন?


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

উত্তর:


28

অ্যালগরিদমের সামগ্রীর উপর ভিত্তি করে আপনি সনাক্ত করতে পারবেন কোন ডেটা স্ট্রাকচার / প্রকার / কনস্ট্রাক্ট ব্যবহার করা হয়। তারপরে, আপনি সেগুলির (সম্ভাব্য) দুর্বল পয়েন্টগুলি বোঝার চেষ্টা করেন এবং একটি কার্যকর কার্যকর পরিকল্পনা নিয়ে আসার চেষ্টা করেন যা এই ক্ষেত্রে এটি চালিত করে।

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

আমাদের এখানে আছে:

কিছু পরিচিত বিশেষ কেস নিয়ে স্ট্রিং :

  • খালি স্ট্রিং
  • দীর্ঘ স্ট্রিং
  • ইউনিকোড স্ট্রিং (বিশেষ অক্ষর)
  • যদি অক্ষরগুলির নির্দিষ্ট গোষ্ঠীতে সীমাবদ্ধ থাকে, যখন কিছু পরিসরে না থাকে তখন কী ঘটে
  • বিজোড় / এমনকি দৈর্ঘ্যের স্ট্রিং
  • নাল (যুক্তি হিসাবে)
  • নন-নাল টার্মিনেটেড

পরিচিত বিশেষ ক্ষেত্রে সহ পূর্ণসংখ্যা :

  • 0
  • ন্যূনতম / MaxInt
  • নেতিবাচক ইতিবাচক

অ্যালগরিদম বাছাই করুন যা নিম্নলিখিত সীমানা ক্ষেত্রে ব্যর্থ হতে পারে:

  • খালি ইনপুট
  • 1 উপাদান ইনপুট
  • খুব দীর্ঘ ইনপুট (দৈর্ঘ্যের সর্বাধিকের (সূচকের জন্য ব্যবহৃত ডেটা ধরণের))
  • সংগ্রহের ভিতরে আবর্জনা যা বাছাই করা হবে
  • নাল ইনপুট
  • সদৃশ উপাদানসমূহ
  • সমস্ত উপাদান সমান সহ সংগ্রহ
  • বিজোড় / এমনকি দৈর্ঘ্যের ইনপুট

তারপরে, এই সমস্ত কেস নিন এবং সেগুলি কীভাবে ওভারল্যাপ হয় তা বোঝার চেষ্টা করে একটি দীর্ঘ তালিকা তৈরি করুন। উদা:

  • খালি স্ট্রিং কেস খালি সংগ্রহের কেস জুড়ে
  • নাল স্ট্রিং == নাল সংগ্রহ
  • প্রভৃতি

এখন তাদের জন্য পরীক্ষার কেস তৈরি করুন :)

সংক্ষিপ্ত সংক্ষিপ্তসার : আপনি যে সীমাবদ্ধ কেসগুলি জানেন সেই মৌলিক ব্লকগুলিতে অ্যালগরিদম ভাঙ্গুন এবং তারপরে পুনরায় সংযুক্ত করুন, বৈশ্বিক সীমানা কেস তৈরি করুন


5
আরও একটি জিনিস যোগ করা। । । কোডটি বিশ্লেষণ করুন এবং কোডে বিশেষ ক্ষেত্রে সন্ধান করুন। যদি বিকাশকারী 14 এবং তার চেয়ে বেশি আলাদাভাবে 0 থেকে 13 পরিচালনা করে - সম্ভবত দেব কর্মক্ষমতা কারণে ছোট এবং বড় মানগুলির জন্য বিভিন্ন অ্যালগরিদম ব্যবহার করছেন - দুর্দান্ত তালিকার জন্য আপনার প্রান্তের কেস রয়েছে 13 এবং 14 +
এথেল ইভানস

2

আমি মনে করি না প্রান্ত শর্ত নির্ধারণ করার জন্য কোনও অ্যালগরিদম আছে .... কেবল অভিজ্ঞতা।

উদাহরণ: বাইট প্যারামিটারের জন্য আপনি 0, 127, 128, 255, 256, -1 এর মতো সংখ্যার পরীক্ষা করতে চান, যে কোনও সমস্যার কারণ হতে পারে।


2

একটি "প্রান্ত" এর দুটি অর্থ রয়েছে এবং এটি যখন প্রান্তের ক্ষেত্রে আসে তখন উভয়ই প্রাসঙ্গিক। একটি প্রান্ত হয় এমন একটি ক্ষেত্র যেখানে ইনপুটটির একটি ছোট পরিবর্তন আউটপুটে একটি বড় পরিবর্তন বা সীমার শেষের দিকে নিয়ে যায়।

সুতরাং, একটি অ্যালগরিদমের প্রান্তের কেসগুলি সনাক্ত করতে, আমি প্রথমে ইনপুট ডোমেনটি দেখি। এর প্রান্ত মানগুলি অ্যালগরিদমের প্রান্তের ক্ষেত্রে ডেকে আনতে পারে।

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

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


0

এটি খুব সাধারণ প্রশ্ন তাই আমি যা করতে পারি তা হ'ল কিছু সাধারণ, অস্পষ্ট ধারণা ফেলে দেওয়া :)

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


0

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

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