বৈজ্ঞানিক কম্পিউটিং লাইব্রেরির জন্য ইউনিট পরীক্ষা করা


15

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

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

Finally there is also the problem of performance. I know its a whole different set of tests, but performance is one of the important features of a scientific tools, rather than user satisfaction, or other software engineering metrics.

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

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

উত্তর:


19

আমি বলব যে বৈজ্ঞানিক কম্পিউটিং ইউনিট পরীক্ষার জন্য আসলে বেশ উপযুক্ত suited আপনার অবশ্যই নির্দিষ্ট ইনপুট এবং আউটপুট, পরিষ্কার-সংজ্ঞায়িত প্রাক- এবং পোস্টকন্ডিশনগুলি রয়েছে যা সম্ভবত অন্য ডিজাইনারের কৌতুক অনুসারে প্রতি অন্য সপ্তাহে পরিবর্তিত হবে না, এবং কোনও হার্ড-টু-টেস্ট UI প্রয়োজনীয়তা নেই।

আপনি এমন কিছু উপাদানগুলির নাম দিয়েছেন যা সমস্যার কারণ হতে পারে; তাদের সম্পর্কে কী করা যায় তা এখানে:

  • এলোমেলোনাযুক্ত অ্যালগরিদম: দুটি সম্ভাবনা রয়েছে। আপনি যদি এলোমেলোভাবে নিজেই পরীক্ষা করতে চান তবে কেবলমাত্র একটি বৃহত সংখ্যক পুনরাবৃত্তি নির্ধারণ করুন এবং জোর দিয়ে নিন যে কেসগুলির প্রত্যাশিত অনুপাতটি পছন্দসই মানদণ্ডের সাথে মিলিত হয়, যথেষ্ট পরিমাণে ত্রুটি মার্জিনের সাথে যে উত্সাহী পরীক্ষার ব্যর্থতা বেশ বিরল হবে। (একটি পরীক্ষা স্যুট যে unreliably সংকেত বাগ ফ্যান্টম হয় অনেক এক যে প্রতি অনুমেয় খুঁত ধরতে না চেয়ে খারাপ।) অথবা, একটি কনফিগারযোগ্য র্যান্ডম উৎস ব্যবহার এবং সিস্টেম ঘড়ি নির্ভরতা এর মাধ্যমে একটি নির্ণায়ক উৎস প্রতিস্থাপন (অথবা যাহা এটা আপনি ব্যবহার হয়) ইঞ্জেকশন যাতে আপনার পরীক্ষাগুলি সম্পূর্ণ অনুমানযোগ্য হয়।
  • অ্যালগরিদম কেবল নির্ভুলতা / পুনর্বিবেচনার ক্ষেত্রে সংজ্ঞায়িত করা হয়: কিছুই আপনাকে ইনপুট কেসগুলির পুরো সেট স্থাপন করা এবং যথার্থতা পরিমাপ করতে বাধা দেয় না এবং এগুলি সমস্ত সংযোজন করে পুনরায় স্মরণ করে; এটি কেবলমাত্র আধা-স্বয়ংক্রিয়ভাবে এই জাতীয় পরীক্ষার কেসগুলি দক্ষতার সাথে উত্পন্ন করার প্রশ্ন যাতে পরীক্ষার ডেটা সরবরাহ করা আপনার উত্পাদনশীলতার ক্ষেত্রে বাধা হয়ে দাঁড়ায় না। অন্যথা, কিছু judiciously মনোনীত ইনপুট / আউটপুট জোড়া উল্লেখ এবং দাবী যে অ্যালগরিদম নির্ণয় ঠিক আকাঙ্ক্ষিত ইনপুট এছাড়াও কাজ যদি রুটিন আন্দাজের যথেষ্ট পারেন।
  • অ ক্রিয়ামূলক প্রয়োজনীয়তা: স্পেসিফিকেশন সত্যিই স্পষ্ট স্থান / সময় প্রয়োজনীয়তা দেয়, তাহলে আপনি মূলত আছে ইনপুট / আউটপুট যুগলের সমগ্র সংকলনের চালান এবং তা যাচাই করতে সম্পদ ব্যবহার কনর্ফাম প্রায় প্রয়োজনীয় ব্যবহার প্যাটার্ন। এখানে কৌশলটি হ'ল প্রথমে আপনার নিজের পরীক্ষা ক্লাসটি ক্যালিব্রেট করা, যাতে আপনি বিভিন্ন আকারের দশটি সমস্যা পরিমাপ না করেন যা পরিমাপ করার জন্য খুব দ্রুত হয়, বা পরীক্ষা স্যুটটি চালানো অবৈধ হয়ে যায় becomes আপনি এমনকি একটি ছোট ব্যবহারের ক্ষেত্রে জেনারেটর লিখতে পারেন যা বিভিন্ন আকারের পরীক্ষার কেস তৈরি করে, এটি নির্ভর করে যে পিই কতটা দ্রুত চলছে।
  • দ্রুত এবং ধীরগতিতে চলমান পরীক্ষা: এটি ইউনিট বা ইন্টিগ্রেশন পরীক্ষাগুলিই হোক না কেন আপনি প্রায়শই খুব দ্রুত পরীক্ষা এবং কয়েকটি খুব ধীর পরীক্ষা করে শেষ করেন। যেহেতু আপনার পরীক্ষা নিয়মিত চালানো খুব মূল্যবান, তাই আমি সাধারণত বাস্তববাদী পথে চলে যাই এবং আমার যা কিছু আছে সব দ্রুত এবং একটি স্লো স্যুটটিতে পৃথক করে রাখি, যাতে দ্রুত যতটা সম্ভব সম্ভব চালানো যায় (অবশ্যই প্রতিটি প্রতিশ্রুতি দেওয়ার আগে), এবং কোনও আপত্তি নেই whether দুটি শব্দ 'শব্দার্থত' এক সাথে সম্পর্কিত বা না।

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

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

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