ইউনিট 6 / 12

পরীক্ষা অটোমেশন এবং গুণমান নিশ্চিত

লাভ:

  • AI এর সাথে অর্থপূর্ণ দাবি সহ ইউনিট, ইন্টিগ্রেশন এবং এজ কেস টেস্ট তৈরি করার ক্ষমতা
  • এআই সমর্থন সহ পদ্ধতিগতভাবে পরীক্ষার কভারেজ, সীমা মান এবং নেতিবাচক পরিস্থিতি বের করার ক্ষমতা
  • যাচাই করার ক্ষমতা যে AI দ্বারা উত্পাদিত পরীক্ষাগুলি আসলে আচরণ যাচাই করে এবং শুধুমাত্র বিদ্যমান কোডের পুনরাবৃত্তি করে না

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

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

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

অর্থপূর্ণ পরীক্ষা উত্পাদন

একটি ভাল পরীক্ষা তিনটি জিনিস স্পষ্টভাবে করে: এটি একটি রাষ্ট্র প্রতিষ্ঠা করে, এটি একটি কর্ম সঞ্চালন করে, এটি ফলাফলের উপর জোর দেয়। AI-তে পরীক্ষাগুলি প্রিন্ট করার সময়, আপনি কোন আচরণটি যাচাই করতে চান এবং কোন পরিস্থিতিতে এটি কভার করা উচিত তা নির্দিষ্ট করুন; অন্যথায়, এটি সুপারফিশিয়াল পরীক্ষা তৈরি করে যা সর্বদা পাস করে।

  1. পরীক্ষা করার জন্য আচরণ সংজ্ঞায়িত করুন। "কি সঠিক হিসাবে গণ্য হয়?" স্পষ্টভাবে প্রশ্নের উত্তর দিন।
  2. পরিস্থিতির ধরন জিজ্ঞাসা করুন। স্বাভাবিক, সীমা, নেতিবাচক, ত্রুটি অবস্থা।
  3. অর্থপূর্ণ দাবী আমদানি করুন। এটি কেবল "একটি ত্রুটি নিক্ষেপ করেনি", এটি "সঠিক মান ফিরিয়ে দিয়েছে"।
  4. পরীক্ষার নির্ভুলতা পরীক্ষা করুন। আপনি সচেতনভাবে কোড ভাঙলে পরীক্ষা কি লাল হয়ে যায়?

বিস্তৃত পরীক্ষা জেনারেশন প্রম্পট: "নিম্নলিখিত 'অ্যাপলাইডিসকাউন্ট(অ্যামাউন্ট, কুপন)' ফাংশনের জন্য ইউনিট পরীক্ষা লিখুন। নিম্নলিখিত বিভাগগুলিতে অন্তত একটি দৃশ্যকল্প আছে: (1) স্বাভাবিক বৈধ কুপন, (2) ব্রেকপয়েন্ট (0 পরিমাণ, 100% ছাড়), (3) নেতিবাচক (অবৈধ অঙ্কের পরিমাণ) (অবৈধ সহকারী হিসাবে)। প্রতিটি পরীক্ষায় কংক্রিট প্রত্যাশিত মান (শুধু 'কাজ করা' নয়) কোডের নাম দিন: [কোড]"।

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

সতর্কতা: উচ্চ পরীক্ষার কভারেজ (যেমন 90%) প্রমাণ করে না যে কোডটি সঠিক। কভারেজ পরিমাপ কতগুলি সারি কার্যকর করা হয়েছিল; এমন নয় যে এই লাইনগুলি সঠিক ফলাফল দেয়। অর্থপূর্ণ দাবী ছাড়া একটি পরীক্ষা কভারেজ বাড়ায় কিন্তু কিছুর নিশ্চয়তা দেয় না। দাবির বিষয়বস্তু গুণমান নির্ধারণ করে, দাবির সংখ্যা নয়।

পরীক্ষা নিজেই পরীক্ষা করা: মিউটেশনের যুক্তি

AI-উত্পন্ন পরীক্ষা আসলে কাজ করে কিনা তা বোঝার সবচেয়ে ব্যবহারিক উপায় হল ইচ্ছাকৃতভাবে কোড (মিউটেশন টেস্টিং লজিক) ভাঙা। একটি শর্ত বিপরীত করুন, একটি + চিহ্ন করুন -; যদি কোনো পরীক্ষা লাল না হয়, আপনার পরীক্ষা আসলে সেই আচরণ বজায় রাখে না।

পরীক্ষার দুর্বলতা হান্টিং প্রম্পট: "আমাকে বলুন যে এই কোডে কোন সম্ভাব্য বাগগুলি নিম্নলিখিত পরীক্ষাগুলি ধরতে পারে না৷ কোডে তৈরি করা যেতে পারে এমন 5টি ছোট মিউটেশনের পরামর্শ দিন (যেমন >= এর পরিবর্তে >, - + এর পরিবর্তে) এবং প্রতিটির জন্য নির্দেশ করুন যে বিদ্যমান পরীক্ষাগুলি এটি ধরবে কিনা৷ যারা ধরা পড়েনি, তাদের জন্য পরীক্ষার পরামর্শ দিন যা [কোড: টেস্ট] যোগ করা উচিত।

দুর্বল প্রম্পট / শক্তিশালী প্রম্পট

দুর্বল: "এই ফাংশনের জন্য একটি পরীক্ষা লিখুন।" (ফলাফল: সাধারণত একটি সুখী দৃশ্য, দুর্বল দাবি; ত্রুটিগুলি মিস করে।) স্ট্রং: "এই 'পাসওয়ার্ডস্ট্রং' ফাংশনের জন্য একটি পরীক্ষা লিখুন। নিয়ম: কমপক্ষে 8টি অক্ষর, 1টি বড় হাতের অক্ষর, 1টি সংখ্যা প্রয়োজন। নিম্নলিখিত পরিস্থিতিগুলিকে পৃথক পরীক্ষা হিসাবে কভার করুন: ঠিক 8টি অক্ষর (সীমা), 7টি অক্ষর নেই, 7টি অক্ষর নেই খালি স্ট্রিং, শুধুমাত্র স্পেস, খুব দীর্ঘ (1000 অক্ষর) প্রতিটি পরীক্ষায় প্রত্যাশিত সত্য/মিথ্যা মান স্পষ্টভাবে জাহির করুন এবং এটি যা পরীক্ষা করে সেই অনুসারে পরীক্ষার নাম দিন।"

শক্তিশালী প্রম্পট নিয়ম এবং সম্পূর্ণ সীমানা পরিস্থিতি দেয়। সীমানা জোড়া যেমন "ঠিক 8/7 অক্ষর" ভুল করার জন্য সবচেয়ে সাধারণ জায়গা (বিভ্রান্তিকর > সঙ্গে >=)। দুর্বল প্রম্পট এই সীমানা বাইপাস করে এবং উৎপাদনে ত্রুটি বহন করে।

পরীক্ষার ধরন এবং কোথায় ব্যবহার করতে হবে

পরীক্ষার ধরন

এটা কি নিশ্চিত করে?

এআই অবদান

মনোযোগ

ইউনিট

একক ফাংশন/ক্লাস

দ্রুত মাল্টি-সিনেরিও তৈরি করে

অর্থপূর্ণ দাবী প্রয়োজন

ইন্টিগ্রেশন

অংশ একসঙ্গে কাজ

দৃশ্যকল্প এবং উপহাস তথ্য খসড়া

সত্যিকারের আসক্তিমূলক আচরণ

শেষ/গ্রহণ

সম্পূর্ণ ব্যবহারকারী প্রবাহ

ধাপ তালিকা এবং প্রত্যাশা

ভঙ্গুরতা প্রবণ

রিগ্রেশন

পুরানো ত্রুটি ফিরে আসছে না

ফল্ট নির্দিষ্ট পরীক্ষা

প্রতিটি ফিক্স যোগ করা উচিত

মিনি কেস

কেস 1 - পরীক্ষা যা সর্বদা পাস করে। AI একটি ফাংশনে 12টি পরীক্ষা লেখে এবং তারা সবই পাস করে। প্রকৌশলী সন্দেহজনক হয়ে ওঠে এবং ইচ্ছাকৃতভাবে ফাংশনের রিটার্ন মান বিকৃত করে; মাত্র ৩টি পরীক্ষাই লাল হয়ে যায়। অন্য 9টি পরীক্ষায় অর্থপূর্ণ দাবী নেই। মিউটেশন হান্টিং দ্বারা পরীক্ষাকে শক্তিশালী করা হয়; প্রকৃত সুরক্ষা 9টি পরিস্থিতিতে অর্জিত হয়।

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

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

সাধারণ ভুল

  • অর্থহীন দাবী। "একটি ত্রুটি নিক্ষেপ করা হয়নি" যথেষ্ট নয়; সঠিক মান যাচাই করা আবশ্যক.
  • মানের সাথে বিভ্রান্তিকর সুযোগ। উচ্চ কভারেজ সঠিক ফলাফলের কোন গ্যারান্টি নয়।
  • কোড দ্বারা পরীক্ষা মুদ্রণ. বর্তমান ত্রুটিটিকে "সত্য" এ সংশোধন করে; পরীক্ষা প্রত্যাশা থেকে প্রাপ্ত করা উচিত.
  • সীমা মান এড়িয়ে যাওয়া। বিভ্রান্তিকর > সঙ্গে >= সবচেয়ে সাধারণ ভুল; সীমানা জোড়া পরীক্ষা করা আবশ্যক.
  • পরীক্ষা নিজেই অডিট না. আপনি কোড ভাঙ্গলে লাল হয়ে যায় না এমন একটি পরীক্ষা সুরক্ষা প্রদান করে না।

সংক্ষেপে

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

আবেদন টাস্ক

একটি ফাংশন নির্বাচন করুন এবং এটি একটি ব্যাপক পরীক্ষা প্রজন্মের প্রম্পট সহ চারটি বিভাগে (স্বাভাবিক, সীমা, নেতিবাচক, ত্রুটি) পরীক্ষা তৈরি করুন; প্রতিটি পরীক্ষায় কংক্রিট প্রত্যাশিত মান নিশ্চিত করুন। তারপরে পরীক্ষার দুর্বলতা হান্টিং প্রম্পট চালান, কোডে 5টি ছোট মিউটেশনের পরামর্শ দিন এবং তারা কোনটি ধরছে তা পরীক্ষা করতে পরীক্ষা চালান। অন্তত একটি মিউটেশনের জন্য একটি নতুন পরীক্ষা যোগ করুন যা ধরা পড়েনি এবং দেখান যে এটি এখন লাল রঙে রয়েছে।

চেকলিস্ট

  • [ ] আমি প্রত্যাশিত/সঠিক আচরণের উপর ভিত্তি করে পরীক্ষাগুলি প্রিন্ট করেছি, কোড নয়।
  • আমি স্বাভাবিক, সীমা, নেতিবাচক এবং ত্রুটি পরিস্থিতি কভার করেছি।
  • [ ] আমি প্রতিটি পরীক্ষায় কংক্রিট প্রত্যাশিত মান জোর দিয়েছি।
  • [ ] আমি সীমানা জোড়া পরীক্ষা করেছি (শুধু উপরে-নীচে / ঠিক উপরে-নীচে)।
  • ইচ্ছাকৃতভাবে কোডটি ভঙ্গ করে, আমি নিশ্চিত করেছি যে পরীক্ষাগুলি লাল হয়ে গেছে।
  • [ ] আমি অনাক্ষিত মিউটেশনের জন্য একটি নতুন পরীক্ষা যোগ করেছি।