সি ++ ভিত্তিক গেমগুলির জন্য কোন ইউনিট পরীক্ষার কাঠামো? [বন্ধ]


13

আপনি কোন পরীক্ষার সরঞ্জামগুলির সংমিশ্রণটি সবচেয়ে ভাল বলে মনে করেন? আপনার পছন্দের কাঠামো / গ্রন্থাগার দেওয়া আপনি বিবেচনা করতে পারেন:


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


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

আমি এটি সিডাব্লু। যাইহোক, আমি মনে করি কখন সি ডাব্লু একটি প্রশ্ন করবেন তার গাইডলাইনগুলি আমার কাছে একজন নতুন আগত হিসাবে কিছুটা অস্পষ্ট বলে মনে হচ্ছে, বিশেষত যেহেতু এটি সাধারণভাবে বিতর্কিত হয়েছে ( meta.stackexchange.com/questions/55888 )। সম্ভবত আমরা এফএকিউতে এই সম্পর্কিত গেমদেব নীতিটি স্পষ্টভাবে বলতে পারি?
jmp97

উত্তর:


7

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

ইউনিটটেষ্ট ++ আপনার অবিচ্ছিন্ন একীকরণ পদ্ধতির সাথে সেট করা যেতে পারে, যেমন হডসনের সাথে

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


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

ইউনিটটেষ্ট ++ এর জন্য github.com/unittest-cpp/unittest-cpp এ যান। বাকি সমস্ত কিছুই পুরানো।
মার্কাস

4

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

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


2

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

এখানে আমি তৈরি করেছি একটি খুব সাধারণ পরিবর্তন, যা পরীক্ষাগুলি লিখতে এমনকি এটি ইজার / ক্লিনারও করে:

static int BogusFunction() { return __COUNTER__; } // Increment the __COUNTER__ to the correct position for the begining of the tests
#define TEST template<> template<> void object::test<__COUNTER__>()
#define ENSURE(msg, cond) ensure(msg, cond, __FILE__, __LINE__)
#define ENSURE_EQUALS(msg, actual, expected) ensure_equals(msg, actual, expected, __FILE__, __LINE__)
#define ENSURE_DISTANCE(msg, actual, expected, distance) ensure_distance(msg, actual, expected, distance, __FILE__, __LINE__)
#define FAIL(msg) fail(msg, __FILE__, __LINE__)

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

(এই ধরণের জিনিস করার দক্ষতার অর্থ হ'ল এটি আপনাকে আপনার টিডিডি / সিআই প্রক্রিয়াতে ফিট করার জন্য তৈরি করা যেতে পারে, বরং এটির সাথে আপনাকে ফিট করতে বাধ্য করা))

এখানে একটি উদাহরণ পরীক্ষা (আমার সম্পাদক থেকে কমান্ড-স্ট্যাক থেকে):

TEST // Undoing a command
{
    cs.AddCommand(new TestCommand);
    cs.AddCommand(new TestCommand(od));

    ENSURE("Undo success", cs.Undo());
    ENSURE_EQUALS("Stack size", cs.size(), 2);
    ENSURE_EQUALS("Command's Undo() was called", od.undo, 1);
    ENSURE_EQUALS("Command's Redo() not called", od.redo, 0);

    ACommandStack::const_iterator it = cs.end();
    ENSURE("Command is redoable", cs.GetUndoPos() == --it);
}

(উপরের কোডে csএবং odপ্রতি মডিউল ফিক্সচারগুলি হয় এবং TestCommandএটি একটি মক অবজেক্ট is)



2

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

আমি সত্যিই গুগল পরীক্ষা পছন্দ করি । এটি সর্বনিম্ন, স্ট্রিম রেখাযুক্ত ইন্টারফেসে রাখার সময় সাম্প্রতিক ইউনিট পরীক্ষামূলক ফ্রেমওয়ার্কগুলির সর্বোত্তম বৈশিষ্ট্যগুলি রয়েছে।

আমার তালিকার পাশের বুস্ট টেস্ট । গুগল টেস্টের এপিআই বুস্ট.স্টেস্টের চেয়ে কিছুটা আধুনিক, তবে বুস্ট টেস্ট নতুন বৈশিষ্ট্য যুক্ত করার এবং ক্রুফাই সিপিউউনিতের দৃষ্টান্তটি আকর্ষণ করার জন্য দুর্দান্ত কাজ করেছে।

আমি সিএক্সএক্স টেস্টও ব্যবহার করেছি । এটি বেশ ভালভাবে সম্পন্ন হয়েছে তবে আপনি বলতে পারেন যে এটি বুস্ট. টেস্ট বা গুগল টেস্টের মতো আধুনিক নয়। বিশেষত, পরীক্ষার স্যুট এবং ফিক্সচারগুলির জন্য এর সমর্থনটি কিছুটা বিশ্রী।

আমি উন্নত বৈশিষ্ট্যগুলি ব্যবহার করতে চাই তবে আপনি যদি সংখ্যালঘু হন তবে আপনি কখনই এই তিনটির মধ্যে পার্থক্য দেখতে পাবেন না। আমার বেশিরভাগ সহকর্মী একটি ইউনিট পরীক্ষার কাঠামোতে খুশি হবে যা স্বতঃ নিবন্ধকরণ পরীক্ষাকে সমর্থন করে (একটি ঘোষণামূলক পদ্ধতিতে) এবং কিছুটা CHECK_EQUALS (a, b) ম্যাক্রো রাখে।


1

আমার প্রিয় পরীক্ষার লাইব্রেরিটি হ'ল কুইকচেক http://en.wikedia.org/wiki/QuickCheck । একটি পরীক্ষামূলক সি ++ সংস্করণ রয়েছে তবে এটি খুব ভারী ওজন দেখায়, তবে কোনও নিবেদিত গ্রন্থাগার ছাড়াও নীতিগুলি ব্যবহার করা সহজ।

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

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

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


0

জাভা সহ, অনেকগুলি ভাল গ্রন্থাগার রয়েছে ... সি ++ এর ক্ষেত্রে নয়।

সি ++ ব্যবহারকারীদের জন্য, কিটওয়ার থেকে একটি চেইন সরঞ্জাম রয়েছে যা অত্যন্ত আকর্ষণীয়:

  • সিএমকে: টুল তৈরি করুন
  • সিডিআশ: একটানা সংহতকরণ সরঞ্জাম

কিটওয়্যার কম্পিউটার বিজ্ঞানের জন্য সি ++ কোড লেখেন।

ব্যক্তিগত প্রকল্পগুলির জন্য, আমি বুস্ট ইউনিট পরীক্ষা গ্রন্থাগার (ডেস্কটপ প্ল্যাটফর্মে) ব্যবহার করি। অবিচ্ছিন্ন একীকরণের জন্য, আমি হডসন ব্যবহার করি:

  • টমকেট এ ইনস্টল করুন
  • স্ক্রিপ্টেবল

0

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

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