কিভাবে একটি গেম ইঞ্জিনে ইউনিট পরীক্ষা করে?


23

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

আমার ইঞ্জিনে প্রতিটি সাবসিস্টেমের জন্য আমার একটি পৃথক প্রকল্প থাকা উচিত এবং এর সাথে সম্পর্কিত পরীক্ষা হওয়া উচিত এবং তারপরে প্রকৃত ইঞ্জিন তৈরির কোনও বড় প্রকল্প / সমাধান করা উচিত? উদাহরণস্বরূপ বলুন eventআমার ইঞ্জিনে আমার মডিউল রয়েছে; আমি কিভাবে এটি পরিচালনা করব?


মজার প্রশ্ন, আপনি যখন ইঞ্জিন বিকাশ করবেন তখন কার্যকারিতা পরীক্ষা করা বেশ সহজ তবে গেম টেস্টে বড় প্রকল্প সম্পর্কে কী বলা যায়?
ইয়েভেন

2
লজ্জা নয়: ইউনিট-টেস্টগুলি স্বয়ংক্রিয়ভাবে কোনও ভাল জিনিস নয়।
o0 '

1
আপনি যদি কখনও ইউনিট পরীক্ষাগুলি ব্যবহার করার চেষ্টা না করে থাকেন তবে তা অবশ্যই লজ্জাজনক।
ক্রিস্টোফার জনসন

উত্তর:


18

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

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

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

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

আপনি সম্ভবত দেখতে পাবেন এটি বেশিরভাগই আপনার নিম্ন-স্তরের ইউটিলিটি কোড যা গেমগুলিতে ইউনিট পরীক্ষার জন্য উপযুক্ত men এটি দুর্দান্ত - এটি ফাউন্ডেশন কোড যা ভেঙে গেলে অনেকগুলি উচ্চ স্তরকে বিঘ্নিত করতে পারে।

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


3
If you have to [...] spend significantly more time writing the tests [...] than it took you to author the module... তাহলে আপনার মডিউলটি খুব জটিল। এটি এখন সরল করুন, আপনি নিজেকে ভবিষ্যতে ধন্যবাদ জানাতে পারবেন!
জেস টেলফোর্ড

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

@rodarmor - একমত কোনটি উপযুক্ত এবং কোনটি নয় তার একটি স্লাইডিং স্কেল রয়েছে। এই ধরণের উত্তরগুলির মতোই, একটি আকার সব মাপসই করে না :)
জেস টেলফোর্ড

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


4

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

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

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

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