paint-brush
টেস্টিং অ্যালগরিদম উন্নত করা: সফ্টওয়্যার পরীক্ষায় গাণিতিক পদ্ধতিদ্বারা@shad0wpuppet
23,902 পড়া
23,902 পড়া

টেস্টিং অ্যালগরিদম উন্নত করা: সফ্টওয়্যার পরীক্ষায় গাণিতিক পদ্ধতি

দ্বারা Konstantin Sakhchinskiy7m2024/01/24
Read on Terminal Reader
Read this story w/o Javascript

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

নিবন্ধটি পরীক্ষার পদ্ধতিগুলি অন্বেষণ করে, কোড কভারেজ অপ্টিমাইজ করার ক্ষেত্রে গাণিতিক মডেলগুলির ভূমিকার উপর জোর দেয়। এটি লজিক্যাল এক্সপ্রেশন মিনিমাইজ করা, পেয়ারওয়াইজ টেস্টিং অপ্টিমাইজ করা এবং অ্যালগরিদম ব্যবহার করে সিস্টেম স্টেট পরিবর্তন করা নিয়ে আলোচনা করে। মূল উপসংহারগুলি সর্বনিম্ন প্রচেষ্টার সাথে সর্বাধিক পরীক্ষার কভারেজ অর্জনে এই পদ্ধতিগুলির কার্যকারিতা তুলে ধরে। বিভিন্ন সিস্টেমে এই অ্যালগরিদমগুলিকে মানিয়ে নেওয়ার ক্ষেত্রে চ্যালেঞ্জ এবং অন্তর্দৃষ্টি রয়েছে৷ কার্যকর পরীক্ষার জন্য তাত্ত্বিক ভিত্তিগুলি বোঝা গুরুত্বপূর্ণ।
featured image - টেস্টিং অ্যালগরিদম উন্নত করা: সফ্টওয়্যার পরীক্ষায় গাণিতিক পদ্ধতি
Konstantin Sakhchinskiy HackerNoon profile picture
0-item

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

কভারেজ সর্বাধিক করা এবং টেস্ট কেসের সংখ্যা কমানো

একটি সিস্টেমের জন্য কোড কভারেজ অপ্টিমাইজ করতে গাণিতিক যুক্তি প্রয়োগ করা যেতে পারে। দুটি শাখা এবং শর্তে একটি দীর্ঘ লজিক্যাল সূত্র সম্বলিত একটি "if" বিবৃতি সহ একটি সাধারণ উদাহরণ বিবেচনা করা যাক:

 if ( (& a2) & (!(a2 || a4) ) || a3 ) { # action 1 } else { # action 2 }


উভয় শাখা কভার করার জন্য, সূত্রের গঠন বোঝা প্রয়োজন। কেউ ভাবতে পারে, কী করা যায়? আপনি সর্বদা এই কোডের অংশটি (যৌক্তিক সূত্র) সম্পূর্ণভাবে পরীক্ষা করতে পারেন, যার ফলে 16টি পরীক্ষা হয়। যাইহোক, এটি অনেক বেশি, এবং পরীক্ষার সংখ্যা কমানোর চেষ্টা করা উচিত। পরিবর্তিত কন্ডিশন/ডিসিশন কভারেজ (MC/DC) পদ্ধতি ব্যবহার করে পরীক্ষার সংখ্যা কমানো যেতে পারে (11-12টি পরীক্ষা দেয়)। ঝুঁকি পরীক্ষা করার জন্য শাখা কভারেজ যথেষ্ট হলে, শুধুমাত্র দুটি পরীক্ষা প্রয়োজন, কিন্তু কোনটি তা স্পষ্ট নয়।


এই সমস্যা সমাধানের জন্য, বুলিয়ান বীজগণিত যৌক্তিক সূত্রে প্রয়োগ করা যেতে পারে:

 if( (& a2) & (! (a2 || a4) ) || a3 ) = = ( (& a2) & ( (!a2 || !a4) ) || a3 ) = = ( a1 & a2 & !a2 & !a4 || a3 ) = = 0 || a3 = a3


মূল সূত্রটি রূপান্তরিত করার পরে, এটি স্পষ্ট হয়ে ওঠে যে শুধুমাত্র একটি পরিবর্তনশীল a3 প্রকৃতপক্ষে সত্য মানকে প্রভাবিত করে। ফলস্বরূপ, পরীক্ষার ক্ষেত্রে প্রাপ্তি আরও সহজ হয়ে যায় (একটি সহ এবং অন্যটি a3 == false )। অধিকন্তু, এটি স্পষ্ট হয়ে ওঠে যে কোডটি অপ্টিমাইজ করা হয়নি, কারণ এটি শুধুমাত্র একটি পরিবর্তনশীলের উপর নির্ভর করে একটি জটিল যৌক্তিক অভিব্যক্তি থাকা অদ্ভুত। দুর্ভাগ্যবশত, এই ধরনের পরিস্থিতি বাস্তবে বেশ সাধারণ, এবং প্রদত্ত উদাহরণ তুলনামূলকভাবে সহজবোধ্য।


উপসংহারে:

  • 2 পরীক্ষা যদি সম্পূর্ণ পরীক্ষা ব্যবহার করা হয়

  • MC/DC পদ্ধতিতে ২টি পরীক্ষা

  • শাখা কভারেজ প্রয়োগ করা হলে 2 পরীক্ষা


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

পেয়ারওয়াইজ টেস্টিং অপ্টিমাইজ করা

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


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

  • Pairwise finds 65-97% of errors
  • 3-way finds 89-99% of errors
  • 4-way finds 96-100% of errors
  • 5-way finds 96-100% of errors
  • 6-way finds 100% of errors

সমীক্ষা অনুসারে, জুটিবদ্ধ পরীক্ষায় 65-97% ক্ষেত্রে ত্রুটি পাওয়া যায়। যদি আমরা প্যারামিটারের জোড়া নয় বরং ত্রিগুণ বা চতুর্গুণকে একত্রিত করা শুরু করি, যেমন, কে-ওয়ে টেস্টিং ব্যবহার করে, আমরা আরও বেশি সংখ্যক পরীক্ষা পাব কিন্তু আরও ত্রুটিও ধরব।


উদাহরণ স্বরূপ, ধরুন একটি সিস্টেমে তিনটি মান সহ দুটি প্যারামিটার রয়েছে এবং প্রতিটিতে দুটি মান সহ তিনটি পরামিতি রয়েছে:

  • Pairwise: 10 tests with 14% coverage
  • 3-way: 18 tests with 25% coverage
  • 4-way: 36 tests with 50% coverage
  • 5-way: 72 tests with 100% coverage

আপনি পরীক্ষার কভারেজের একটি সন্তোষজনক স্তর এবং একটি গ্রহণযোগ্য সংখ্যক পরীক্ষার ক্ষেত্রে বেছে নিতে পারেন।

পেয়ারওয়াইজের ভিত্তি হল অর্থোগোনাল অ্যারে যাতে এন-টুপল (জোড়া, তিনগুণ, চতুর্গুণ, ...) মানের সমান গুণ থাকে।


পেয়ারওয়াইজ এবং কে-ওয়ে পরীক্ষার জন্য সাধারণ ভিত্তি হল OA(N, V^k, t) , যেখানে:

  • N হল সারির সংখ্যা

  • k হল কলামের সংখ্যা

  • V হল একটি কলামে বিভিন্ন মানের সংখ্যা

  • t হল শক্তি (t=2 জোড়ায়)


OA-তে, t কলামের প্রতিটি সেটে সমস্ত t টিপল সমান সংখ্যক বার অন্তর্ভুক্ত থাকে।

অর্থোগোনাল ম্যাট্রিক্সের পরিবর্তে, কভারিং ম্যাট্রিক্স ব্যবহার করা ভাল। এই ম্যাট্রিক্সগুলি অর্থোগোনালগুলির থেকে আলাদা যে প্রতিটি মানের সেট অন্তত একবার ঘটে, "একটি সমান সংখ্যক বার" নয়। এই ক্ষেত্রে, সামান্য কম পরীক্ষা আছে। ম্যাট্রিক্স কভার করার সাথে ভুল পরীক্ষার ক্ষেত্রে দেখা দিতে পারে, তবে সামগ্রিকভাবে, পরীক্ষার প্রক্রিয়াটি অনেক দ্রুত। এইভাবে, পরীক্ষার প্রক্রিয়া উল্লেখযোগ্যভাবে সরলীকৃত হয়।

CA(N, V^k, t), যেখানে:

  • N হল সারির সংখ্যা
  • k হল কলামের সংখ্যা
  • V হল একটি কলামে বিভিন্ন মানের সংখ্যা
  • t হল শক্তি (t=2 জোড়ায়)

CA-তে, t কলামের প্রতিটি সেটে অন্তত একবার সমস্ত t tuples অন্তর্ভুক্ত থাকে। কভারিং ম্যাট্রিক্স ব্যবহার করে পরীক্ষার সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি না করে পেয়ারওয়াইজ থেকে কে-ওয়ে টেস্টিং-এ যাওয়ার অনুমতি দেয়।

সিস্টেম স্টেটস এবং চেঞ্জিং সিস্টেম স্টেটস টেস্টিং

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


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


গ্রাফ এবং ফিনিট অটোমেটা

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

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


পরিস্থিতি বিশ্লেষণ করতে নিম্নলিখিত উদাহরণ বিবেচনা করা যাক:

তিনজন পরীক্ষক রয়েছেন। প্রথমটি প্রথম পরীক্ষা, দ্বিতীয়টি দ্বিতীয়টি, তৃতীয়টি তৃতীয়টি পরীক্ষা করবে। প্রথম দুটি প্রথম দুটি পরীক্ষা বেশ দ্রুত সম্পন্ন করবে কারণ পথগুলি ছোট (তৃতীয়টির তুলনায়, প্রথম দুটি পথ ছোট হওয়ায়), তবে শেষটি খুব দীর্ঘ সময় নেবে (তৃতীয় পথটি খুবই দীর্ঘ)।

যদি ডি ব্রুইজন অ্যালগরিদম প্রয়োগ করা হয়, তৃতীয় ক্রমটিকে কয়েকটি ছোট ক্রমগুলিতে "কাট" করা যেতে পারে এবং সমস্ত পরীক্ষার সম্পাদন দক্ষতার সাথে সমান্তরাল করা যেতে পারে।


আমরা আরও পরীক্ষা দিয়ে শেষ করতে পারি, কিন্তু সমান্তরাল সম্পাদনের ক্ষেত্রে, পরীক্ষা অনেক দ্রুত শেষ হবে কারণ পরীক্ষাগুলি ছোট।


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


একটি প্লাস হিসাবে, অ্যালগরিদম ডোমেন-নির্দিষ্ট জিনিস ব্যবহার করে না; এটি একেবারে বিমূর্ত অবস্থা এবং সিস্টেমের রূপান্তরের সাথে কাজ করে।


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


মূল সিদ্ধান্তগুলি নিম্নরূপ বিবেচনা করা যেতে পারে:


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


ছোটখাট ত্রুটিগুলির জন্য, এটি লক্ষণীয়:


  • কিছু অ্যালগরিদম কার্যকর এবং সব ক্ষেত্রে প্রাসঙ্গিক নয়; অনেক পরিস্থিতিতে, স্ট্যান্ডার্ড টেস্ট ডিজাইন কৌশলগুলি সমানভাবে বা কখনও কখনও আরও কার্যকর।
  • অ্যালগরিদম প্রয়োগ করার জন্য কিছু গাণিতিক জ্ঞান এবং কখনও কখনও তাদের প্রয়োগের জন্য আরও সময় প্রয়োজন তাই এটি অনেক পরিস্থিতিতে একটি গুরুত্বপূর্ণ ফ্যাক্টর হয়ে উঠতে পারে।

একজন QA পেশাদার হিসাবে, এই সূক্ষ্মতা বোঝা গুরুত্বপূর্ণ। কিছু ক্ষেত্রে তাত্ত্বিক হলেও, সমন্বিত পরীক্ষার নকশা কৌশলগুলির জটিলতা বোঝা QA পেশাদারদের কার্যকরভাবে অ্যাপগুলির জটিল ব্যবসায়িক যুক্তি পরীক্ষা করতে এবং তাদের ব্যবহারকারীদের কাছে উচ্চ-মানের সফ্টওয়্যার সরবরাহ করতে দেয়।