আমি কীভাবে রোবটগুলির (এবং অন্যান্য যান্ত্রিক ডিভাইস) ইউনিট পরীক্ষা লিখব?


22

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

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

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

অথবা আমি কীভাবে ইউনিট পরীক্ষাগুলি কাজ করা উচিত তা ভুল বুঝাব?

( যদি এটি গুরুত্বপূর্ণ হয় তবে কোডটি এখানে দেওয়া হয়েছে , এটি সি ++ তে লেখা আছে, এবং আমি এফআরসিতে অংশ নিচ্ছি )

উত্তর:


21

আপনাকে বিদ্রূপ করতে হবে এই পরীক্ষা করার হার্ডওয়্যার স্তর। ধারণাটি হ'ল আপনার কোডটি আসল হার্ডওয়্যারের সাথে কথা বলার পরিবর্তে আপনি যে হার্ডওয়্যারটি নিয়ন্ত্রণ করতে পারবেন তার একটি নকল সংস্করণে কথা বলুন এবং তারপরে আপনার কোডটি সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে ব্যবহার করুন।

দুর্ভাগ্যক্রমে কিছু সমস্যা রয়েছে যা আপনাকে পরাস্ত করতে হবে:

  • তুলনামূলকভাবে নিম্ন-স্তরের ভাষাগুলিতে ঠাট্টা করা আরও কঠিন (এবং এইভাবে আরও অনেক কাজ)
  • হার্ডওয়্যার-স্তরের স্টাফগুলি উপহাস করা আরও কঠিন (এবং এইভাবে, আরও অনেক বেশি কাজ)

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


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

হার্ডওয়্যারকে মোটেও মক করার দরকার নেই। যদি রোবোটটির লগিং থাকে, পরীক্ষা প্রোগ্রামটি চালান এবং লগগুলি পর্যবেক্ষণ করুন। চূড়ান্ত পরীক্ষার জন্য লগের "বাঁদিকে বাঁক" পর্যবেক্ষণ দরকার রোবোটটি বাম দিকে বাঁকানো উচিত correspond ইনপুট ডিভাইসগুলিকে বিদ্রূপ করার জন্য আপনাকে একটি পরীক্ষার জোতা লিখতে হবে - ইনপুট ডিভাইস কোডটি যতটা সম্ভব হার্ডওয়ার স্তরটির নিকটে হুক করুন
mattnz

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

4
@ ম্যাটনেজ খারাপ ধারণা, এবং আমি অভিজ্ঞতা থেকে জানি। যদি পরীক্ষার অধীনে কোডটি খুব শক্তভাবে ব্যর্থ হয় এবং রোবটর্মটি প্রাচীরের বিরুদ্ধে ক্র্যাশ হয়ে একটি xxxx x হার্ডওয়্যারের একটি অংশ নষ্ট করে দেয় ???
stijn

2
@ ম্যাটনজ: আমাদের রোবটগুলি প্রায় 2 ফুট বাই 3 ফুট বাই 4 ফিট এবং ওজন প্রায় 150 পাউন্ড। কিট / নিবন্ধকরণের জন্য প্রতি বছর 5 হাজার ডলার খরচ হয় এবং আমরা অতিরিক্ত অংশ কিনতে সাধারণত 5 থেকে 10 কে অর্থ সংগ্রহ করি। সবচেয়ে খারাপ পরিস্থিতি সম্ভবত 10 ডলারের বেশি হবে)
মাইকেল0x2a

10

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

উদাহরণস্বরূপ, আপনার যদি আই 2 সি-ভিত্তিক সিগন্যালিং প্রোটোকল ডিজাইন করার প্রয়োজন হয় তবে আপনি পরীক্ষা করতে পারেন যে আপনার কোডগুলি পরীক্ষাগুলিতে হার্ডওয়্যারটি আবদ্ধ করার প্রয়োজন ছাড়াই সঠিক আই 2 সি সিগন্যাল তৈরি করছে।

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

এটি মূলত ওলেকসি তার উত্তরে যা বলেছিল তার সাথে এটি খাপ খায় , এটি সাধারণত হার্ডওয়্যার-স্তরের স্টাফগুলিকে বিদ্রূপ করা আরও বেশি কাজ, তবে আপনি যদি সর্বনিম্নতম ন্যূনতম কোড / কল স্তরটি ধরে রাখতে পারেন তবে এটি এতটা কঠিন নয় the হার্ডওয়্যার।

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

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


2

আমি আপনাকে বলতে পারি তারা কীভাবে ফ্লাইট সিমুলেটরগুলিতে এটি করে

প্রথমত, আপনি কেবলমাত্র অর্ধ উত্তর পেতে চলেছেন আপনি যদি এই প্রশ্নটি কেবল প্রোগ্রামারদের কাছে জিজ্ঞাসা করেন তবে আপনার সম্ভবত এই পোস্টটি http://elect इलेक्ट्रॉनिक्स . stackex بدل . com এ থাকা উচিত cross

আমি রোবট দিয়ে কোনও কাজ করি নি তবে ফ্লাইট সিমুলেটরগুলিতে হার্ডওয়্যার করতে আমি 5 বছর ব্যয় করেছি যাতে তাদের আর্কিটেকচারটি কীভাবে কাজ করে তা আমি আপনাকে বলতে পারি।

হার্ডওয়্যার স্তর বোবা হয়

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

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

সফ্টওয়্যার স্তরটি বিপরীত

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

একটি ফ্লাইট সিমুলেটারে এটিকে QTG (যোগ্যতা পরীক্ষা গাইড) হিসাবে উল্লেখ করা হয়। এটির মূল অংশে এটি 2D গ্রিডে ডেটা প্লট করে যেখানে একটি মাত্রা সময় এবং অন্যটি আউটপুট।

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

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

যতক্ষণ ফলাফল প্রত্যাশাযোগ্য, পরিমাপযোগ্য এবং পুনরুত্পাদনযোগ্য হয় ততক্ষণ এগুলি পরীক্ষাগুলি অগত্যা জটিল হওয়া দরকার।


1

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

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