গেমের সফ্টওয়্যারটি কীভাবে ডিজাইন করবেন যাতে ইউনিট পরীক্ষা করা সহজ হয়?


25

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

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


6
আপনার জন্য প্লেস্টেস্টিং করার জন্য যখন দাস শ্রমের কার্যত সীমাহীন সেনাবাহিনী থাকে তখন কেন মানব-ঘন্টা রাইটিং ইউনিট পরীক্ষাগুলি নষ্ট করবেন? আমি বাচ্চা, আমি ছাগলছানা ...;)
মাইক স্ট্রোবেল

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

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

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

উত্তর:


25

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

আমার জন্য, ইউনিট পরীক্ষার অংশ হিসাবে আমি কেবল দুটি জিনিস পরীক্ষা করি না:

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

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


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

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

4
আমি দেখতে পেয়েছি যে ঘটনাগুলি অন্যান্য ক্ষেত্রে না হয়ে প্রাক-বিদ্যমান শ্রেণীর জন্য পরীক্ষাগুলি লেখা হয় more
জেফ

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

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

19

নোয়েল লোলোপিস ইউনিট পরীক্ষার সাথে এমন একটি ডিগ্রি কভার করেছেন যা আমি বিশ্বাস করি যে আপনি খুঁজছেন:

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

এই কৌশলটির সুবিধাগুলি সুস্পষ্ট হওয়ার সাথে সাথে কয়েকটি বিষয় সম্পর্কে আপনার সতর্কতা অবলম্বন করা দরকার:

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

+1 এটি লক্ষণীয় যে এই পদ্ধতির মানটি "সোনার চিত্র" এর দৈর্ঘ্যের সাথে সরাসরি সম্পর্কিত: যদি এটি দীর্ঘ না হয় তবে আপনি সহজেই বাগগুলি মিস করতে পারেন; যদি এটি খুব দীর্ঘ হয় তবে আপনার অনেক অপেক্ষা করতে হবে। আপনার নিয়মিত সময় কাটাতে স্বাভাবিক রানটাইম পরিস্থিতিতে আপনার চেয়ে এই মোডে গতি বাড়ানোর ক্রমটি সম্ভবত বাড়ানোর চেষ্টা করা গুরুত্বপূর্ণ। স্কিপ রেন্ডারিং সাহায্য করতে পারে!
ইঞ্জিনিয়ার

9

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

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

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

এটি বলেছে, প্রতিটি ছোট জিনিস স্বাধীনভাবে পরীক্ষা করার চেষ্টা করে ওভারবোর্ডে যাবেন না। বেশিরভাগ জিনিসের মতো টেস্টিং এবং ডিজাইন সঠিক ভারসাম্য রক্ষার বিষয়ে।


দয়া করে নোট করুন, যদিও আপনি এসএক্সের কাছে নতুন বলে মনে করছেন না, উত্তরগুলি অর্ডার করা হয়নি এবং "উপরের উভয় মতামত" এর মতো কিছু বলা দ্রুত হ্রাস করতে বাধ্য, কারণ বর্তমানে এটি আপনার পক্ষে একের আগে এক ভোট এগিয়ে রয়েছে এই সময়ে অন্য দুটি উত্তর। :)
রিকিট

ধন্যবাদ মন্তব্য করার সময় আমি সে সম্পর্কে ভেবে দেখিনি। আমি পৃথক মন্তব্যগুলি বেছে নিতে মন্তব্যটি আপডেট করেছি।
অ্যালেক্স শিকায়ার

3

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

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

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


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

2
অবশ্যই তবে স্নানের জল দিয়ে বাচ্চাকে বাইরে ফেলে দেওয়ার কোনও কারণ নেই। দায়বদ্ধতার সাথে সরঞ্জামগুলি ব্যবহার করুন তবে প্রথমে সরঞ্জামগুলি ব্যবহার করুন।
অ্যালেক্স শিকায়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.