আমি কোনও ভাল অনলাইন সংস্থার দিকে ইঙ্গিত করতে পারি না (এই বিষয়গুলিতে ইংরেজি উইকিপিডিয়া নিবন্ধগুলি অসম্পূর্ণ হতে পারে), তবে আমি শুনেছি এমন একটি বক্তৃতার সংক্ষিপ্ত বিবরণ দিতে পারি যা বুনিয়াদি পরীক্ষার তত্ত্বকেও আবৃত করে।
পরীক্ষার পদ্ধতিগুলি
বিভিন্ন ক্লাসের পরীক্ষা রয়েছে যেমন ইউনিট টেস্ট বা ইন্টিগ্রেশন টেস্ট । একটি ইউনিট পরীক্ষা দৃ as়ভাবে প্রমাণ করে যে কোডের একটি সুসংগত টুকরা (ফাংশন, শ্রেণি, মডিউল) প্রত্যাশার মতো তার নিজের কাজগুলি গ্রহণ করেছে, যেখানে একটি সংহতকরণ পরীক্ষা দৃ as়ভাবে জানিয়েছে যে এই জাতীয় একাধিক টুকরা সঠিকভাবে একসাথে কাজ করে।
একটি পরীক্ষার কেস একটি পরিচিত পরিবেশ যেখানে কোডের একটি অংশ কার্যকর করা হয়, উদাহরণস্বরূপ নির্দিষ্ট পরীক্ষার ইনপুট ব্যবহার করে বা অন্য শ্রেণীর উপহাস করে। কোডটির আচরণটি তখন প্রত্যাশিত আচরণের সাথে তুলনা করা হয়, যেমন একটি নির্দিষ্ট রিটার্ন মান।
একটি পরীক্ষা কেবল একটি বাগের উপস্থিতি প্রমাণ করতে পারে, কখনই সমস্ত বাগের অনুপস্থিতি। পরীক্ষাগুলি প্রোগ্রামের নির্ভুলতার উপর একটি উপরের সীমাবদ্ধ রাখে।
কোড কভারেজ
কোড কভারেজ মেট্রিকগুলি সংজ্ঞায়িত করতে, উত্স কোডটি একটি নিয়ন্ত্রণ ফ্লো গ্রাফে অনুবাদ করা যেতে পারে যেখানে প্রতিটি নোডে কোডের লিনিয়ার অংশ থাকে। এই প্রতিটি নোডের মধ্যে নিয়ন্ত্রণ কেবল প্রতিটি ব্লকের শেষে থাকে এবং সর্বদা শর্তসাপেক্ষ (যদি শর্ত থাকে তবে গোটো নোড এ, অন্য কোনও গোটো নোড বি)। গ্রাফটির একটি প্রারম্ভ নোড এবং একটি প্রান্ত নোড রয়েছে।
- এই গ্রাফের সাহায্যে বিবৃতি কভারেজটি সমস্ত নোডের সাথে দেখা সমস্ত নোডের অনুপাত। সম্পূর্ণ বিবরণের কভারেজ পুরোপুরি পরীক্ষার জন্য যথেষ্ট নয়।
- শাখার কভারেজ হ'ল সিএফজিতে নোডের মধ্যে সমস্ত প্রান্তে সমস্ত পরিদর্শন করা প্রান্তের অনুপাত। এটি অপর্যাপ্তভাবে লুপগুলি পরীক্ষা করে।
- পাথ কভারেজ হ'ল সমস্ত পাথের সমস্ত দেখা পাথের অনুপাত, যেখানে কোনও পথটি শুরু থেকে শেষ নোডের প্রান্তগুলির কোনও অনুক্রম। সমস্যাটি হ'ল লুপগুলির সাহায্যে অসংখ্য পথের পথ হতে পারে, তাই পুরো পাথ কভারেজটি কার্যত পরীক্ষামূলকভাবে পরীক্ষা করা যায় না।
এটি প্রায়শই শর্ত কভারেজ চেক করার জন্য দরকারী ।
- ইন সহজ শর্ত কভারেজ , প্রতিটি পারমাণবিক শর্ত একবার সত্য এবং একবার মিথ্যা - কিন্তু এই পুরো বিবৃতি কভারেজ নিশ্চয়তা দেয় না।
- ইন একাধিক শর্ত কভারেজ , পারমাণবিক অবস্থার সব সমন্বয় নেভিগেশন নিয়েছে
true
এবং false
। এটি পুরো শাখার কভারেজ বোঝায়, তবে এটি ব্যয়বহুল। প্রোগ্রামটিতে অতিরিক্ত বাধা থাকতে পারে যা নির্দিষ্ট সংমিশ্রণগুলি বাদ দেয়। এই কৌশলটি শাখার কভারেজ পাওয়ার জন্য ভাল, মৃত কোডটি খুঁজে পেতে পারে তবে ভুল অবস্থা থেকে উদ্ভূত বাগগুলি খুঁজে পেতে পারে না ।
- ইন সংক্ষিপ্ত একাধিক শর্ত কভারেজ , প্রতিটি পারমাণবিক এবং যৌগিক শর্ত একবার সত্য এবং মিথ্যা। এটি এখনও পুরো শাখার কভারেজ বোঝায়। এটি একাধিক শর্ত কভারেজের উপসেট, তবে পরীক্ষার ক্ষেত্রে খুব কম ক্ষেত্রে প্রয়োজন।
শর্ত কভারেজ ব্যবহার করে পরীক্ষার ইনপুট তৈরি করার সময়, শর্ট সার্কিটটি বিবেচনায় নেওয়া উচিত। উদাহরণ স্বরূপ,
function foo(A, B) {
if (A && B) x()
else y()
}
চাহিদার সঙ্গে পরীক্ষা করা foo(false, whatever)
, foo(true, false)
এবং foo(true, true)
পূর্ণ ন্যূনতম একাধিক শর্ত কভারেজ।
আপনার যদি এমন একাধিক রাজ্যে থাকতে পারে এমন বস্তুগুলি থাকে, তবে প্রবাহকে নিয়ন্ত্রণ করার জন্য সমস্ত রাষ্ট্রের রূপান্তরগুলি সমানরূপে পরীক্ষা করা বুদ্ধিমান বলে মনে হয়।
আরও কিছু জটিল কভারেজ মেট্রিক রয়েছে তবে এগুলি সাধারণত এখানে উপস্থাপিত মেট্রিকগুলির সাথে সমান।
এগুলি হ'ল সাদা বাক্স পরীক্ষার পদ্ধতি এবং আংশিকভাবে স্বয়ংক্রিয়ভাবে চালিত হতে পারে। নোট করুন যে কোনও ইউনিট টেস্ট স্যুটে কোনও নির্বাচিত মেট্রিকের দ্বারা একটি উচ্চ কোডের কভারেজ থাকা উচিত , তবে 100% সর্বদা সম্ভব হয় না। ব্যতিক্রম হ্যান্ডলিং পরীক্ষা করা বিশেষত কঠিন, যেখানে ত্রুটিগুলি নির্দিষ্ট জায়গায় intoুকিয়ে দিতে হয়।
কার্যকরী পরীক্ষা
তারপরে কার্যকরী পরীক্ষাগুলি রয়েছে যা দৃ as়ভাবে দাবি করে যে কোডটি একটি কালো বাক্স হিসাবে বাস্তবায়ন দেখে কোডটি অনুসারে মেনে চলে। এই জাতীয় পরীক্ষাগুলি ইউনিট পরীক্ষা এবং একীকরণ পরীক্ষার জন্য একইভাবে কার্যকর। যেহেতু সমস্ত সম্ভাব্য ইনপুট ডেটা (যেমন সমস্ত সম্ভাব্য স্ট্রিংগুলির সাথে স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করা) দিয়ে পরীক্ষা করা অসম্ভব, সুতরাং ইনপুট (এবং আউটপুট) সমতুল্য শ্রেণিতে বিভক্ত করা কার্যকর - যদি length("foo")
সঠিক foo("bar")
হয় তবে সম্ভবত এটিও কাজ করবে। ইনপুট এবং আউটপুট সমতুল্য শ্রেণীর মধ্যে প্রতিটি সম্ভাব্য সংমিশ্রণের জন্য, কমপক্ষে একটি প্রতিনিধি ইনপুট বেছে নেওয়া এবং পরীক্ষিত হয়।
এক অতিরিক্ত পরীক্ষা করা উচিত
- প্রান্ত মামলা
length("")
, foo("x")
, length(longer_than_INT_MAX)
,
- ভাষা দ্বারা অনুমোদিত মানগুলি তবে ফাংশনের চুক্তি দ্বারা নয়
length(null)
এবং and
- সম্ভাব্য জাঙ্ক ডেটা
length("null byte in \x00 the middle")
...
0, ±1, ±x, MAX, MIN, ±∞, NaN
সংখ্যার সাথে, এর অর্থ পরীক্ষণ এবং ভাসমান পয়েন্ট তুলনা দুটি প্রতিবেশী ফ্লোট পরীক্ষা করে। অন্য সংযোজন হিসাবে, এলোমেলো ক্লাস থেকে র্যান্ডম পরীক্ষার মানগুলি নেওয়া যেতে পারে picked ডিবাগিং সহজ করতে, এটি ব্যবহৃত বীজ রেকর্ড করার উপযুক্ত ...
অ-কার্যকরী পরীক্ষা: লোড পরীক্ষা, স্ট্রেস টেস্ট
এক টুকরো সফ্টওয়্যারটির অ-কার্যকরী প্রয়োজনীয়তা রয়েছে, যাগুলিও পরীক্ষা করতে হবে। এর মধ্যে সংজ্ঞায়িত সীমানা (লোড টেস্ট) এবং তার বাইরেও (স্ট্রেস টেস্ট) পরীক্ষা করা অন্তর্ভুক্ত। একটি কম্পিউটার গেমের জন্য, এটি লোড পরীক্ষায় প্রতি সেকেন্ডে ন্যূনতম সংখ্যার ফ্রেম জোর দেওয়া যেতে পারে। প্রতিক্রিয়ার সময়গুলি দেখার জন্য কোনও ওয়েবসাইট স্ট্রেস-টেস্ট হতে পারে যখন প্রত্যাশিত হিসাবে দ্বিগুণ ভিজিটর সার্ভারগুলিতে ব্যাটার করছে। এই ধরনের পরীক্ষাগুলি কেবলমাত্র পুরো সিস্টেমের জন্যই নয়, একক সত্তার জন্যও প্রাসঙ্গিক - কীভাবে একটি হ্যাশ টেবিল মিলিয়ন এন্ট্রি সহ হ্রাস পাবে?
অন্যান্য ধরণের পরীক্ষাগুলি পুরো সিস্টেম পরীক্ষা যেখানে দৃশ্যের সিমুলেট করা হয় বা বিকাশের চুক্তিটি সম্পাদিত হয়েছিল তা প্রমাণ করার জন্য গ্রহণযোগ্যতা পরীক্ষা।
অ পরীক্ষার পদ্ধতি
পর্যালোচনা
মানহীন আশ্বাসের জন্য ব্যবহারযোগ্য নন-টেস্টিং কৌশল রয়েছে। উদাহরণগুলি হ'ল ওয়াকথ্রু, আনুষ্ঠানিক কোড পর্যালোচনা বা জোড় প্রোগ্রামিং। কিছু অংশ স্বয়ংক্রিয়ভাবে চালিত হতে পারে (যেমন: ল্যাটারগুলি ব্যবহার করে), এগুলি সাধারণত সময় নিবিড়। তবে, অভিজ্ঞ প্রোগ্রামারদের কোড পর্যালোচনাগুলিতে ত্রুটি আবিষ্কারের উচ্চ হার রয়েছে এবং এটি ডিজাইনের সময় বিশেষত মূল্যবান, যেখানে কোনও স্বয়ংক্রিয় পরীক্ষণ সম্ভব নয়।
কোড পর্যালোচনাগুলি যখন দুর্দান্ত হয়, তখনও আমরা পরীক্ষা কেন লিখি? টেস্ট স্যুটগুলির বড় সুবিধা হ'ল তারা স্বয়ংক্রিয়ভাবে চালাতে পারে (এবং বেশিরভাগই) স্বয়ংক্রিয়ভাবে চালাতে পারে এবং এগুলি রিগ্রেশন পরীক্ষার জন্য খুব কার্যকর ।
আনুষ্ঠানিক যাচাইকরণ
আনুষ্ঠানিক যাচাইকরণ কোডের কয়েকটি বৈশিষ্ট্য প্রমাণ করে । ম্যানুয়াল যাচাই করা বেশিরভাগ সমালোচনামূলক অংশগুলির জন্য কার্যকর, পুরো প্রোগ্রামগুলির জন্য কম। প্রুফগুলি প্রোগ্রামের নির্ভুলতার উপর কম চাপ দেয়। প্রুফগুলি একটি নির্দিষ্ট ডিগ্রীতে স্বয়ংক্রিয়ভাবে নেওয়া যায়, যেমন একটি স্ট্যাটিক ধরণের পরীক্ষকের মাধ্যমে।
নির্দিষ্ট আক্রমণকারীদের assert
বিবৃতি ব্যবহার করে স্পষ্টতই চেক করা যায় ।
এই সমস্ত কৌশলগুলির নিজস্ব স্থান রয়েছে, এবং পরিপূরক। টিডিডি কার্যকরী পরীক্ষাগুলি সামনে লিখে দেয়, তবে কোডটি কার্যকর হয়ে গেলে পরীক্ষাগুলি তাদের কভারেজ মেট্রিকগুলির দ্বারা বিচার করা যেতে পারে।
টেস্টেবল কোড লেখার অর্থ ছোট কোড ইউনিট লেখার যা পৃথকভাবে পরীক্ষা করা যায় (উপযুক্ত গ্রানুলারিটি সহ সহায়ক ফাংশন, একক দায়িত্বের নীতি)। প্রতিটি ফাংশন যত কম আর্গুমেন্ট নেয়, তত ভাল। এই জাতীয় কোডটি মক অবজেক্টগুলি সন্নিবেশ করানোর জন্য নিজেকে ধার দেয়, যেমন নির্ভরতা ইনজেকশনের মাধ্যমে।
double pihole(double value) { return (value - Math.PI) / (value - Math.PI); }
যা আমি আমার গণিত শিক্ষকের কাছ থেকে শিখেছি । এই কোডটির ঠিক একটি গর্ত রয়েছে , যা কেবলমাত্র ব্ল্যাক-বাক্স টেস্টিং থেকে স্বয়ংক্রিয়ভাবে আবিষ্কার করা যায় না। মঠে এমন কোনও ছিদ্র নেই। ক্যালকুলাসে একতরফা সীমা সমান হলে আপনাকে গর্তটি বন্ধ করতে দেওয়া হবে।