সফ্টওয়্যার লেখার সময়, আপনি নিশ্চিত করতে পারেন যে এটি পরীক্ষার মাধ্যমে সঠিকভাবে কাজ করে। টেস্টিংকে বিস্তৃতভাবে নির্দিষ্ট উপায়ে সফ্টওয়্যার চালানোর প্রক্রিয়া হিসাবে সংজ্ঞায়িত করা যেতে পারে যাতে এটি উদ্দেশ্য মতো আচরণ করে।
সফল পরীক্ষা আপনাকে আত্মবিশ্বাস দিতে পারে যে আপনি যখন নতুন কোড, বৈশিষ্ট্য যোগ করেন বা এমনকি আপনার নির্ভরতা আপগ্রেড করেন, আপনি ইতিমধ্যেই লিখেছেন সফ্টওয়্যারটি আপনার প্রত্যাশা অনুযায়ী কাজ করতে থাকবে। পরীক্ষা আপনার সফ্টওয়্যারকে অসম্ভাব্য পরিস্থিতি বা অপ্রত্যাশিত ইনপুটগুলির বিরুদ্ধে সুরক্ষিত করতে সহায়তা করতে পারে।
ওয়েবে আচরণের কিছু উদাহরণ যা আপনি পরীক্ষা করতে চাইতে পারেন:
- একটি বোতাম ক্লিক করা হলে একটি ওয়েবসাইটের বৈশিষ্ট্য সঠিকভাবে কাজ করে তা নিশ্চিত করা।
- একটি জটিল ফাংশন সঠিক ফলাফল তৈরি করে তা নিশ্চিত করা।
- ব্যবহারকারী লগইন প্রয়োজন এমন একটি ক্রিয়া সম্পন্ন করা।
- বিকৃত তথ্য প্রবেশ করানো হলে একটি ফর্ম সঠিকভাবে একটি ত্রুটি রিপোর্ট করে তা পরীক্ষা করা হচ্ছে।
- ব্যবহারকারীর খুব কম ব্যান্ডউইথ থাকলে বা অফলাইনে গেলে একটি জটিল ওয়েব অ্যাপ কাজ করতে থাকে তা নিশ্চিত করা।
স্বয়ংক্রিয় বনাম ম্যানুয়াল টেস্টিং
আপনি দুটি সাধারণ উপায়ে আপনার সফ্টওয়্যার পরীক্ষা করতে পারেন: স্বয়ংক্রিয় পরীক্ষা এবং ম্যানুয়াল পরীক্ষা।
ম্যানুয়াল টেস্টিং এর মধ্যে রয়েছে মানুষ সরাসরি সফ্টওয়্যার চালাচ্ছে, যেমন তাদের ব্রাউজারে একটি ওয়েবসাইট লোড করা এবং এটি প্রত্যাশিতভাবে আচরণ করছে তা নিশ্চিত করা। ম্যানুয়াল পরীক্ষাগুলি তৈরি করা বা সংজ্ঞায়িত করা সহজ—উদাহরণস্বরূপ, আপনার সাইট কি লোড হতে পারে? আপনি কি এই ক্রিয়াগুলি সম্পাদন করতে পারেন?—কিন্তু প্রতিটি রান-থ্রুতে একজন মানুষের প্রচুর সময় ব্যয় হয়। যদিও মানুষ খুব সৃজনশীল, যা অনুসন্ধানমূলক পরীক্ষা নামে পরিচিত এক ধরণের পরীক্ষা সক্ষম করতে পারে, আমরা এখনও ব্যর্থতা বা অসঙ্গতিগুলি লক্ষ্য করতে দরিদ্র হতে পারি, বিশেষ করে যখন একই কাজটি অনেকবার করে।
অটোমেটেড টেস্টিং হল এমন কোনও প্রক্রিয়া যা পরীক্ষাগুলিকে একটি কম্পিউটার দ্বারা কোডিফাই করা এবং বারবার চালানোর অনুমতি দেয় যাতে আপনার সফ্টওয়্যারটির উদ্দেশ্যমূলক আচরণ নিশ্চিত করা যায় যাতে কোনও মানুষ বারবার কোনও পদক্ষেপ না করে, যেমন সেটআপ বা ফলাফল পরীক্ষা করে। গুরুত্বপূর্ণভাবে, একবার স্বয়ংক্রিয় পরীক্ষা কনফিগার করা হলে, এটি ঘন ঘন চালানো যেতে পারে। এটি এখনও একটি খুব বিস্তৃত সংজ্ঞা, এবং এটি লক্ষণীয় যে স্বয়ংক্রিয় পরীক্ষাগুলি সমস্ত ধরণের আকার এবং ফর্ম গ্রহণ করে৷ এই কোর্সের বেশিরভাগই একটি অনুশীলন হিসাবে স্বয়ংক্রিয় পরীক্ষার সাথে নিজেকে উদ্বিগ্ন করে।
ম্যানুয়াল টেস্টিং এর জায়গা আছে, প্রায়শই স্বয়ংক্রিয় পরীক্ষা লেখার পূর্বসূরি হিসাবে, কিন্তু যখন স্বয়ংক্রিয় পরীক্ষা খুব অবিশ্বস্ত, পরিধিতে বিস্তৃত, বা লেখার জন্য অদম্য হয়ে ওঠে।
একটি উদাহরণ মাধ্যমে মৌলিক
আমাদের জন্য, ওয়েব ডেভেলপাররা যারা জাভাস্ক্রিপ্ট বা সম্পর্কিত ভাষা লেখেন, একটি সংক্ষিপ্ত স্বয়ংক্রিয় পরীক্ষা এমন একটি স্ক্রিপ্ট হতে পারে যা আপনি প্রতিদিন চালান, সম্ভবত নোডের মাধ্যমে বা ব্রাউজারে লোড করে:
import { fibonacci } from "../src/math.js";
if (fibonacci(0) !== 0) {
throw new Error("Invalid 0th fibonacci result");
}
const fib13 = fibonacci(13);
if (fib13 !== 233) {
throw new Error("Invalid 13th fibonacci result, was=${fib13} wanted=233");
}
এটি একটি সরলীকৃত উদাহরণ যা নিম্নলিখিত অন্তর্দৃষ্টি প্রদান করে:
এটি একটি পরীক্ষা কারণ এটি কিছু সফ্টওয়্যার ( ফিবোনাচি ফাংশন ) চালায় এবং প্রত্যাশিত মানের বিপরীতে ফলাফলগুলি পরীক্ষা করে এটির আচরণ যেভাবে কাজ করে তা নিশ্চিত করে৷ আচরণটি সঠিক না হলে, এটি একটি ত্রুটি সৃষ্টি করে, যা জাভাস্ক্রিপ্ট একটি
Error
নিক্ষেপ করে প্রকাশ করে।যদিও আপনি আপনার টার্মিনাল বা ব্রাউজারে ম্যানুয়ালি এই স্ক্রিপ্টটি চালাচ্ছেন, তবুও এটি একটি স্বয়ংক্রিয় পরীক্ষা কারণ এটি আপনাকে কোনো পৃথক পদক্ষেপ না করেই বারবার চালানো যেতে পারে। পরবর্তী পৃষ্ঠা, যেখানে পরীক্ষা চালানো হয় , আরও ব্যাখ্যা করে।
যদিও এই পরীক্ষাটি কোনো লাইব্রেরি ব্যবহার করে না-এটি জাভাস্ক্রিপ্ট যা যেকোনো জায়গায় চলতে পারে-এটি এখনও একটি পরীক্ষা। এমন অনেক টুল রয়েছে যা আপনাকে পরীক্ষা লিখতে সাহায্য করতে পারে, যার মধ্যে রয়েছে যেগুলি এই কোর্সে পরে কভার করা হবে, তবে সেগুলি এখনও কিছু ভুল হলে একটি ত্রুটি সৃষ্টি করার মৌলিক নীতিতে কাজ করে।
অনুশীলনে লাইব্রেরি পরীক্ষা করা
বেশিরভাগ লাইব্রেরি বা বিল্ট-ইন টেস্টিং ফ্রেমওয়ার্ক দুটি প্রধান আদিম প্রদান করে যা পরীক্ষাগুলিকে লিখতে সহজ করে তোলে: দাবি এবং স্বাধীন পরীক্ষার সংজ্ঞায়িত করার একটি উপায়। এগুলি পরবর্তী বিভাগ, দাবী এবং অন্যান্য আদিম অংশ হিসাবে বিশদভাবে কভার করা হবে। যাইহোক, একটি উচ্চ স্তরে, এটি মনে রাখা গুরুত্বপূর্ণ যে আপনি যে সমস্ত পরীক্ষাগুলি দেখছেন বা লিখছেন তা এই ধরণের আদিম ব্যবহার করে শেষ হবে।
দাবী হল ফলাফল পরীক্ষা করা এবং কিছু ভুল হলে ত্রুটি ঘটানো একত্রিত করার একটি উপায়। উদাহরণস্বরূপ, আপনি পূর্ববর্তী পরীক্ষাটিকে আরও সংক্ষিপ্ত করতে পারেন assert
প্রবর্তন করে:
import { fibonacci } from "../src/math.js";
import { assert } from "a-made-up-testing-library";
assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");
আপনি স্বতন্ত্র পরীক্ষা সংজ্ঞায়িত করে এই পরীক্ষাটিকে আরও উন্নত করতে পারেন, ঐচ্ছিকভাবে স্যুটগুলিতে গোষ্ঠীবদ্ধ। নিম্নলিখিত স্যুটটি স্বাধীনভাবে ফিবোনাচি ফাংশন এবং কাতালান ফাংশন পরীক্ষা করে:
import { fibonacci, catalan } from "../src/math.js";
import { assert, test, suite } from "a-made-up-testing-library";
suite("math tests", () => {
test("fibonacci function", () => {
assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");
});
test("relationship between sequences", () => {
const numberToCheck = 4;
const fib = fibonacci(numberToCheck);
const cat = catalan(numberToCheck);
assert.isAbove(fib, cat);
});
});
সফ্টওয়্যার পরীক্ষার এই প্রেক্ষাপটে, একটি বিশেষ্য হিসাবে পরীক্ষা একটি পরীক্ষার ক্ষেত্রে বোঝায়: একটি একক, স্বাধীন, ঠিকানাযোগ্য দৃশ্যকল্প, যেমন "ক্রমগুলির মধ্যে সম্পর্ক" পূর্ববর্তী উদাহরণে পরীক্ষার ক্ষেত্রে।
স্বতন্ত্রভাবে নামযুক্ত পরীক্ষাগুলি অন্যদের মধ্যে নিম্নলিখিত কাজের জন্য দরকারী:
- সময়ের সাথে পরীক্ষা কিভাবে সফল বা ব্যর্থ হয় তা নির্ধারণ করা।
- নাম দ্বারা একটি বাগ বা দৃশ্যকল্প হাইলাইট করা যাতে আপনি আরও সহজে পরীক্ষা করতে পারেন যে দৃশ্যটি সমাধান করা হয়েছে।
- অন্যদের থেকে স্বাধীনভাবে কিছু পরীক্ষা চালানো, যেমন একটি গ্লোব ফিল্টারের মাধ্যমে।
পরীক্ষার ক্ষেত্রে চিন্তা করার একটি উপায় হল ইউনিট পরীক্ষার "তিনটি এ" ব্যবহার করা: ব্যবস্থা করা, কাজ করা এবং জোর দেওয়া। প্রতিটি পরীক্ষার ক্ষেত্রে, তার মূলে, হবে:
- কিছু মান বা অবস্থা সাজান (এটি কেবল হার্ড-কোডেড ইনপুট ডেটা হতে পারে)।
- একটি ক্রিয়া সম্পাদন করুন, যেমন একটি পদ্ধতি কল করা।
- আউটপুট মান বা আপডেট করা অবস্থা (
assert
ব্যবহার করে) জাহির করুন।
পরীক্ষার স্কেল
পূর্ববর্তী বিভাগে কোড নমুনাগুলি একটি ইউনিট পরীক্ষা বর্ণনা করে, কারণ তারা আপনার সফ্টওয়্যারের ছোট অংশ পরীক্ষা করে, প্রায়শই একটি একক ফাইলের উপর ফোকাস করে এবং এই ক্ষেত্রে, শুধুমাত্র একটি একক ফাংশন থেকে আউটপুট। আপনি একাধিক ফাইল, উপাদান বা এমনকি বিভিন্ন আন্তঃসংযুক্ত সিস্টেম থেকে কোড বিবেচনা করার সাথে সাথে পরীক্ষার জটিলতা বৃদ্ধি পায় (কখনও কখনও আপনার নিয়ন্ত্রণের বাইরে, যেমন একটি নেটওয়ার্ক পরিষেবা বা বাহ্যিক নির্ভরতার আচরণ)। এই কারণে, পরীক্ষার ধরনগুলি প্রায়শই তাদের সুযোগ বা স্কেলের উপর ভিত্তি করে নামকরণ করা হয়।
ইউনিট পরীক্ষার পাশাপাশি, অন্যান্য পরীক্ষার ধরনের কিছু উদাহরণের মধ্যে রয়েছে কম্পোনেন্ট টেস্টিং , ভিজ্যুয়াল টেস্টিং এবং ইন্টিগ্রেশন টেস্টিং । এই নামগুলির কোনওটিরই কঠোর সংজ্ঞা নেই, এবং আপনার কোডবেসের উপর নির্ভর করে সেগুলির বিভিন্ন অর্থ থাকতে পারে, তাই সেগুলিকে গাইড হিসাবে ব্যবহার করতে মনে রাখবেন এবং আপনার জন্য কাজ করে এমন সংজ্ঞাগুলি নিয়ে আসুন। উদাহরণস্বরূপ, আপনার সিস্টেমে পরীক্ষার অধীনে একটি উপাদান কি? প্রতিক্রিয়া বিকাশকারীদের জন্য, এটি আক্ষরিক অর্থে একটি "প্রতিক্রিয়া উপাদান" এর মানচিত্র হতে পারে, তবে অন্যান্য প্রসঙ্গে বিকাশকারীদের কাছে এটির আলাদা অর্থ থাকতে পারে।
একটি পৃথক পরীক্ষার স্কেল এটিকে একটি ধারণার মধ্যে স্থাপন করতে পারে যা প্রায়শই "পরীক্ষা পিরামিড" হিসাবে উল্লেখ করা হয়, যা একটি পরীক্ষা কী পরীক্ষা করে এবং কীভাবে এটি চলে তার জন্য একটি ভাল নিয়ম হতে পারে।
এই ধারণাটি পুনরাবৃত্তি করা হয়েছে, এবং অন্যান্য বিভিন্ন আকার এখন জনপ্রিয় হয়েছে , যেমন টেস্টিং ডায়মন্ড বা টেস্টিং আইস কোন। আপনার পরীক্ষার-লেখার অগ্রাধিকারগুলি সম্ভবত আপনার কোডবেসের জন্য অনন্য হবে। যাইহোক, একটি সাধারণ বৈশিষ্ট্য হল যে ইউনিট পরীক্ষাগুলির মতো সহজ পরীক্ষাগুলি চালানোর জন্য দ্রুততর, লিখতে সহজ (তাই আপনার কাছে সেগুলি আরও বেশি থাকবে) এবং একটি সীমিত সুযোগ পরীক্ষা করার প্রবণতা রয়েছে, যেখানে শেষ থেকে শেষের মতো জটিল পরীক্ষাগুলি পরীক্ষা লিখতে কঠিন কিন্তু একটি বিস্তৃত সুযোগ পরীক্ষা করতে পারেন. প্রকৃতপক্ষে, অনেক পরীক্ষার 'শেপ'-এর উপরের স্তরটি ম্যানুয়াল টেস্টিং হতে থাকে, কারণ কিছু ব্যবহারকারীর মিথস্ক্রিয়া একটি স্বয়ংক্রিয় পরীক্ষায় কোডিফাই করার জন্য খুব জটিল।
এই ধরনের স্বয়ংক্রিয় পরীক্ষার প্রকারে প্রসারিত করা হবে।
আপনার উপলব্ধি পরীক্ষা করুন
বেশিরভাগ পরীক্ষার লাইব্রেরি এবং ফ্রেমওয়ার্কগুলি কোন আদিম প্রদান করে?
assert()
এবং এর বৈচিত্রগুলি অন্তর্ভুক্ত করার প্রবণতা রয়েছে কারণ তারা চেকগুলিকে লেখা সহজ করে তোলে।test()
পদ্ধতি প্রায় সব পরীক্ষা রানারের অন্তর্ভুক্ত। এটি গুরুত্বপূর্ণ কারণ পরীক্ষার কোড একটি ফাইলের শীর্ষ স্তরে চলে না, যা পরীক্ষার রানারকে প্রতিটি পরীক্ষার ক্ষেত্রে একটি স্বাধীন ইউনিট হিসাবে বিবেচনা করতে দেয়।