গ্রাফ স্ট্রাকচার ব্যবহার করে আপনি ইউনিট-টেস্ট কোডটি কীভাবে করবেন?


18

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

যদিও কিছু কোড কাজ করে এমন আত্মবিশ্বাসের জন্য সাধারণত 100% লাইন বা শাখা কভারেজ যথেষ্ট, তবে এটি এখনও 100% পাথ কভারেজের সাথে আপনার সন্দেহ রয়েছে বলে মনে হয়।

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


পিএস- যদি এটি গুরুত্বপূর্ণ হয় তবে আমার গ্রাফের সমস্ত প্রান্তগুলিকে "অবশ্যই" xor "থাকতে পারে না" লেবেলযুক্ত এবং কোনও তুচ্ছ চক্র নেই এবং কোনও দুটি নোডের মধ্যে কেবল একটি কিনারা রয়েছে।


পিপিএস- এই অতিরিক্ত সমস্যার বিবৃতিটি মূলত নীচের মন্তব্যে প্রশ্নের লেখক পোস্ট করেছেন:

For all vertices N in forest F, for all vertices M, in F, such that if there are any walks between N and M they all must either use only edges labelled 'conflict' or 'requires'.


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

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

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

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

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

উত্তর:


5

আমরা ভাবতে থাকি যে আমাদের সমস্ত ছদ্মবেশী বিষয়গুলি আচ্ছাদিত রয়েছে এবং তারপরে আমরা বুঝতে পারি যে একটি নির্দিষ্ট কাঠামো সমস্যার কারণ যা আমরা আগে বিবেচনা করি নি। আমরা যে কৌশলগুলি ভাবতে পারি তার পরীক্ষা করা আমরা যা করছি

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

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

অবশেষে, এটি গ্রহণ করতে শিখুন যে প্রতিটি পরীক্ষা কেবল বাগের অস্তিত্বের প্রমাণ দিতে পারে তবে বাগের অভাবে নয়।


5

1. র্যান্ডমাইজড পরীক্ষা প্রজন্ম

গ্রাফ তৈরি করে এমন একটি অ্যালগরিদম লিখুন, এটি কয়েকশ (বা আরও) র্যান্ডম গ্রাফ তৈরি করে এবং প্রতিটি আপনার অ্যালগরিদমে ফেলে দেয় throw

গ্রাফের এলোমেলো বীজ রাখুন যা আকর্ষণীয় ব্যর্থতার কারণ এবং এগুলিকে ইউনিট পরীক্ষা হিসাবে যুক্ত করে।

2. হার্ড-কোড কৌশলযুক্ত অংশ

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

৩. সম্পূর্ণ তালিকা তৈরি করুন

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


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

@ এসডেনহ্যাম আপনি কীভাবে এমন কিছু গণনা করতে যাচ্ছেন যে লিটারোলালিভাবে অসীম সংখ্যক সম্ভাব্য বৈধ সংমিশ্রণ রয়েছে? আমি "এগুলি কৌশলগত গ্রাফ কাঠামো যা প্রায়শই আপনার বাস্তবায়নে বাগগুলি ধরবে" এর ধারায় কিছু খুঁজে পাওয়ার আশা করছিলাম। আমি ডোমেনটি যথেষ্ট সহজ হিসাবে বুঝতে পারি: For all vertices N in forest F, for all vertices M, in F, such that if there are any walks between N and M they all must either use only edges labelled 'conflict' or 'requires'.ডোমেনটি বিষয়টি নয় is
স্লাইড

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

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

4

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

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

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

foreach nodes as node
    foreach nodes as tmp
        tmp.status = unmarked

    tovisit = []
    tovisit.push(node)
    node.status = required

    while |tovisit| > 0 do
        next = tovisit.pop()
        foreach next.requires as requirement
            if requirement.status = unmarked
                tovisit.push(requirement)
                requirement.status = required
            else if requirement.status = blacklisted
                return false
        foreach next.collides as collision
            if collision.status = unmarked
                requirement.status = blacklisted
            else if requirement.status = required
                return false
return true

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

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

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

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

যেমন আপনি দেখতে পাচ্ছেন, চাকাটি পুনরায় উদ্ভাবনের দরকার নেই।


3

আপনি "সমস্ত আকর্ষণীয় গ্রাফ কাঠামো" এবং "যথাযথভাবে পরিচালনা করা" এর মতো বাক্যাংশ ব্যবহার করছেন। আপনার সমস্ত কোডগুলির বিরুদ্ধে আপনার কোডটি পরীক্ষা করার উপায় না থাকলে এবং কোডটি গ্রাফটি যথাযথভাবে পরিচালনা করে কিনা তা নির্ধারণ না করে আপনি কেবল টেস্ট কভারেজ বিশ্লেষণের মতো সরঞ্জামগুলি ব্যবহার করতে পারেন।

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


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


2

যখন এই ধরণের অ্যালগোরিদম পরীক্ষা করা শক্ত হয়ে আসে আমি টিডিডি যাব যেখানে আপনি পরীক্ষার উপর ভিত্তি করে অ্যালগরিদম তৈরি করেন,

সংক্ষেপে টিডিডি,

  • পরীক্ষা লিখুন
  • এটি ব্যর্থ দেখুন
  • কোডটি পরিবর্তন করুন
  • সমস্ত পরীক্ষা পাস হচ্ছে তা নিশ্চিত করুন
  • refactor

এবং চক্র পুনরাবৃত্তি,

এই বিশেষ পরিস্থিতিতে,

  1. প্রথম পরীক্ষাটি হবে, একক নোড গ্রাফ যেখানে অ্যালগরিদম কোনও চক্র ফিরে না আসা উচিত
  2. দ্বিতীয়টি হ'ল তিন নোড গ্রাফ যেখানে কোনও চক্র থাকবে না যেখানে অ্যালগরিদম কোনও চক্রটি ফেরত না
  3. পরবর্তী একটি এমন একটি চক্রের সাথে তিনটি নোড গ্রাফ ব্যবহার করা হবে যেখানে অ্যালগরিদম কোনও চক্র ফেরত না আসে
  4. এখন আপনি সম্ভাবনার উপর নির্ভর করে আরও জটিল জটিল চক্রের বিরুদ্ধে এটি পরীক্ষা করতে পারেন

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

অবশেষে কোনও অপ্রত্যাশিত সমস্যা আছে কিনা তা দেখতে অবশেষে আপনাকে এক বা একাধিক জটিল ইন্টিগ্রেশন টেস্ট যুক্ত করতে হবে (যেমন আপনার গ্রাফটি খুব বড় এবং যখন আপনি পুনরাবৃত্তি ব্যবহার করেন তখন স্ট্যাক-ওভারফ্লো ত্রুটি / পারফরম্যান্স ত্রুটি)


2

সমস্যা সম্পর্কে আমার বোঝার বিষয়টি যেমন মুলত বলা হয়েছে এবং তারপরে ম্যাকের জবাব অনুসারে মন্তব্য দ্বারা আপডেট করা হয়েছে সেগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে: 1) উভয় প্রান্তের (নির্ভরতা এবং দ্বন্দ্ব) নির্দেশিত; ২) দুটি নোড যদি এক প্রান্ত দিয়ে সংযুক্ত থাকে তবে সেগুলি অন্য দ্বারা সংযুক্ত করা উচিত নয়, এমনকি এটি অন্য ধরণের বা বিপরীতে রয়েছে; 3) যদি দুটি নোডের মধ্যে একটি পাথ বিভিন্ন ধরণের প্রান্তকে মিশ্রিত করে তৈরি করা যায়, তবে এটি একটি ত্রুটি, এমন একটি পরিস্থিতিতে নয় যা উপেক্ষা করা হয়; ৪) যদি এক প্রান্তের প্রান্ত ব্যবহার করে দুটি নোডের মধ্যে কোনও পথ থাকে, তবে অন্য ধরণের প্রান্ত ব্যবহার করে তাদের মধ্যে আর কোনও পথ নাও থাকতে পারে; ৫) একটি একক প্রান্ত টাইপ বা মিশ্র প্রান্ত প্রকারের চক্রের অনুমতি নেই (অ্যাপ্লিকেশনটির অনুমান থেকে, আমি নিশ্চিত নই যে কেবল দ্বন্দ্ব-চক্র একটি ত্রুটি, তবে এই শর্তটি সরানো যেতে পারে, না হলে))

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

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

যদি আপনার ডেটা স্ট্রাকচার শর্ত ২ এর লঙ্ঘন প্রকাশ করতে না পারে, তবে নির্ভরতা গ্রাফের ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকে ফাঁকা ফাঁকা জায়গাগুলির মধ্যে থাকা সম্ভাব্য সমস্ত দ্বন্দ্ব গ্রাফগুলি তৈরি করে বা তদ্বিপরীতভাবে আপনি বিবেচনার জন্য কেসগুলি উল্লেখযোগ্যভাবে হ্রাস করতে পারেন। অন্যথায়, ইউনিয়ন গঠনের সময় আপনি শর্ত 2 লঙ্ঘন সনাক্ত করতে পারেন।

প্রথম নোড থেকে সম্মিলিত গ্রাফের প্রস্থের প্রথম প্রান্তে, আপনি প্রতিটি পৌঁছনযোগ্য নোডের সমস্ত পাথের সেট তৈরি করতে পারেন এবং এটি করার সাথে সাথে আপনি সমস্ত শর্ত লঙ্ঘনের জন্য পরীক্ষা করতে পারেন (চক্র সনাক্তকরণের জন্য, আপনি টার্জনের অ্যালগোরিদম ব্যবহার করুন ))

গ্রাফটি সংযোগ বিচ্ছিন্ন থাকলেও আপনাকে কেবল প্রথম নোড থেকে পাথগুলি বিবেচনা করতে হবে, কারণ অন্য কোনও নোড থেকে পাথ অন্য কোনও ক্ষেত্রে প্রথম নোড থেকে পাথ হিসাবে উপস্থিত হবে।

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

যদি আপনি এন -1 নোডের গ্রাফ পরীক্ষা করে খুঁজে পাওয়া পাথগুলি মনে করেন তবে আপনি এগুলি এন নোডের গ্রাফ উত্পাদন এবং মূল্যায়নের জন্য প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করতে পারেন।

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

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

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

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