paint-brush
স্থিতিশীল সফ্টওয়্যার: স্বয়ংক্রিয় পরীক্ষার শক্তি সম্পর্কে জানুনদ্বারা@igorluchenkov
1,020 পড়া
1,020 পড়া

স্থিতিশীল সফ্টওয়্যার: স্বয়ংক্রিয় পরীক্ষার শক্তি সম্পর্কে জানুন

দ্বারা Igor Luchenkov6m2024/03/02
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

স্বয়ংক্রিয় পরীক্ষাগুলি খুব বেশি সময় ব্যয় না করে আপনার সফ্টওয়্যার পরীক্ষা করার একটি উপায়। তিন ধরনের পরীক্ষা আছে: ইউনিট, ইন্টিগ্রেশন এবং এন্ড-টু-এন্ড। আসুন প্রতিটি ধরণের গভীরে ডুব দেওয়া যাক এবং বুঝতে পারি কেন আমাদের প্রতিটির প্রয়োজন। ইউনিট পরীক্ষা দ্রুত হয়. বিচ্ছিন্নতা তাদের যেকোন সময়ে স্থানীয়ভাবে এবং সিআই-তে, নির্ভরশীল পরিষেবাগুলিকে স্পিন না করে / API এবং ডাটাবেস কল না করে তাদের চালানোর অনুমতি দেয়। ইন্টিগ্রেশন পরীক্ষা ধীর, কিন্তু তারা পরীক্ষা করে কিভাবে আপনার অ্যাপের অংশগুলি সংযুক্ত হয়।
featured image - স্থিতিশীল সফ্টওয়্যার: স্বয়ংক্রিয় পরীক্ষার শক্তি সম্পর্কে জানুন
Igor Luchenkov HackerNoon profile picture

আপনি যদি এই নিবন্ধটি আপনার মনোযোগের যোগ্য

  • ভাল মানের সফ্টওয়্যার লেখার বিষয়ে উত্সাহী এবং পরীক্ষার মাধ্যমে আপনার অ্যাপের স্থায়িত্ব বাড়াতে চান৷


  • আপনার উত্পাদন সিস্টেমে পপ আপ অপ্রত্যাশিত বাগ ক্লান্ত.


  • স্বয়ংক্রিয় পরীক্ষাগুলি কী এবং কীভাবে তাদের কাছে যেতে হবে তা বোঝার জন্য সহায়তা প্রয়োজন৷

কেন আমাদের স্বয়ংক্রিয় পরীক্ষা প্রয়োজন?

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


পণ্য বাড়ার সাথে সাথে আপনার পরিবর্তন দ্বারা প্রভাবিত প্রতিটি কার্যকারিতা ম্যানুয়ালি (যেমন, আপনার হাত দিয়ে) পরীক্ষা করা আরও বেশি সময়সাপেক্ষ হয়ে ওঠে।


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


বিপরীতে, কম্পিউটার একই বার বার প্রোগ্রাম করা যেতে পারে . সুতরাং, আসুন কম্পিউটারে পরীক্ষা অর্পণ করা যাক!


টেস্টের প্রকারভেদ

পরীক্ষা পিরামিড


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

ইউনিট পরীক্ষা

একটি ইউনিট হল যুক্তির একটি ছোট অংশ যা আপনি বিচ্ছিন্নভাবে পরীক্ষা করেন (অন্যান্য উপাদানগুলির উপর নির্ভর না করে)।

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


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


 // Function "sum" is the unit const sum = (x, y) => x + y test('sums numbers', () => { // Call the function, record the result const result = sum(1, 2); // Assert the result expect(result).toBe(3) }) test('sums numbers', () => { // Call the function, record the result const result = sum(5, 10); // Assert the result expect(result).toBe(15) })


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


 // "MyComponent" is the unit const MyComponent = () => { const { isLoading } = apiModule.useSomeApiCall(); return isLoading ? <div>Loading...</div> : <div>Hello world</div> } test('renders loading spinner when loading', () => { // Mocking the API module, so that it returns the value we need jest.mock(apiModule).mockReturnValue(() => ({ useSomeApiCall: jest.fn(() => ({ // Return "isLoading: false" for this test case isLoading: false })) })) // Execute the unit (render the component) const result = render(<MyComponent />) // Assert the result result.findByText('Loading...').toBeInTheDocument() }) test('renders text content when not loading', () => { // Mocking the API module jest.mock(apiModule).mockReturnValue(() => ({ useSomeApiCall: jest.fn(() => ({ // Return "isLoading: false" for this test case isLoading: false })) })) // Execute the unit (render the component) const result = render(<MyComponent />) // Assert the result result.findByText('Hello world').toBeInTheDocument() })


ইন্টিগ্রেশন টেস্ট

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


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


 import db from 'db' // We will be testing "createUser" and "getUser" const createUser = name => db.createUser(name) // creates a user const getUser = name => db.getUserOrNull(name) // retrieves a user or null test("creates and retrieves users", () => { // Try to get a user that doesn't exist, assert Null is returned const nonExistingUser = getUser("i don't exist") expect(nonExistingUser).toBe(null); // Create a user const userName = "test-user" createUser(userName); // Get the user that was just created, assert it's not Null const user = getUser(userName); expect(user).to.not.be(null) })


এন্ড-টু-এন্ড টেস্ট

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


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


আপনি শুধুমাত্র আপনার অ্যাপের মিশন-সমালোচনামূলক বৈশিষ্ট্যগুলির জন্য এগুলি পেতে চান৷


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


 test('user can log in', () => { // Visit the login page page.goto('https://example.com/login'); // Fill in the login form page.fill('#username', 'john'); page.fill('#password', 'some-password'); // Click the login button page.click('#login-button'); // Assert the welcome message is visible page.assertTextVisible('Welcome, John!') })

কিভাবে আপনি লিখতে কি ধরনের পরীক্ষা চয়ন করবেন?

মনে রাখবেন যে এন্ড-টু-এন্ড পরীক্ষাগুলি ইন্টিগ্রেশনের চেয়ে ধীর , এবং ইন্টিগ্রেশন পরীক্ষাগুলি ইউনিট পরীক্ষার চেয়ে ধীর


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


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


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


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


এবং অবশেষে, কখন আমাদের ইউনিট পরীক্ষা বেছে নেওয়া উচিত? সমস্ত ছোট ফাংশন যা বিচ্ছিন্নভাবে পরীক্ষা করা যেতে পারে, যেমন sum যা সংখ্যার যোগফল, Button যা রেন্ডার করে <button> ট্যাগ, ইউনিট পরীক্ষার জন্য দুর্দান্ত প্রার্থী। আপনি যদি টেস্ট চালিত উন্নয়ন পদ্ধতি অনুসরণ করেন তবে ইউনিটগুলি নিখুঁত।


এরপর কি?

কিছু পরীক্ষা লিখুন! (তবে ছোট শুরু করুন)

  • আপনার প্রজেক্ট/ভাষার জন্য উপযুক্ত একটি টেস্টিং ফ্রেমওয়ার্ক ইনস্টল করুন । প্রতিটি ভাষায় পরীক্ষার জন্য একটি জনপ্রিয় লাইব্রেরি রয়েছে, যেমন জাভাস্ক্রিপ্টের জন্য জেস্ট / ভিটেস্ট , এন্ড-টু-এন্ডের জন্য সাইপ্রেস / নাট্যকার (এছাড়াও জাভাস্ক্রিপ্ট ব্যবহার করে), জাভার জন্য JUnit ইত্যাদি।


  • আপনার প্রকল্পে একটি ছোট ফাংশন খুঁজুন এবং এটির জন্য একটি ইউনিট পরীক্ষা লিখুন।


  • কিছু উপাদান/পরিষেবা-ডাটাবেস মিথস্ক্রিয়া জন্য একটি ইন্টিগ্রেশন পরীক্ষা লিখুন।


  • একটি জটিল পরিস্থিতি চয়ন করুন যা দ্রুত পরীক্ষা করা যেতে পারে, যেমন একটি সাধারণ লগইন প্রবাহ, এবং এর জন্য একটি শেষ থেকে শেষ পরীক্ষা লিখুন৷


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


দরকারী সম্পদ: