সফ্টওয়্যার পরীক্ষার কোনও আনুষ্ঠানিক / গাণিতিক তত্ত্ব আছে?


12

গুগলিং "সফ্টওয়্যার টেস্টিং থিয়োরি" মনে হয় কেবল শব্দটির নরম অর্থে তত্ত্ব প্রদান করেছে; আমি গাণিতিক, তথ্য তাত্ত্বিক বা অন্য কোনও বৈজ্ঞানিক ক্ষেত্রের অর্থে একটি তত্ত্ব হিসাবে শ্রেণিবদ্ধ হবে এমন কোনও কিছুই খুঁজে পাইনি।

আমি যা খুঁজছি সেটি হ'ল যা পরীক্ষণটি কীভাবে প্রথাগত হয়, ব্যবহৃত ধারণাগুলি, পরীক্ষার কেস কী, কোনও কিছুর পরীক্ষার সম্ভাব্যতা, কোনও কিছুর পরীক্ষার কার্যকারিতা, কোন কিছুর পরীক্ষা করা উচিত, আনুষ্ঠানিক সংজ্ঞা / ব্যাখ্যা কোড কভারেজ, ইত্যাদি

আপডেট: এছাড়াও, আনুষ্ঠানিকভাবে যাচাইকরণ এবং আমি যা জিজ্ঞাসা করেছি তার মধ্যে সংযোগ সম্পর্কে আমি স্বজ্ঞাতভাবে নিশ্চিত নই, তবে স্পষ্টভাবে কিছু সংযোগ রয়েছে connection


1
সফ্টওয়্যার টেস্টিং অত্যন্ত মূল্যবান (উদাহরণস্বরূপ ইউনিট পরীক্ষাকে অনুশীলন করা) তবে এর তত্ত্বটিতে সর্বদা কিছু ছিদ্র থাকে। এই শাস্ত্রীয় উদাহরণটি বিবেচনা করুন: double pihole(double value) { return (value - Math.PI) / (value - Math.PI); }যা আমি আমার গণিত শিক্ষকের কাছ থেকে শিখেছি । এই কোডটির ঠিক একটি গর্ত রয়েছে , যা কেবলমাত্র ব্ল্যাক-বাক্স টেস্টিং থেকে স্বয়ংক্রিয়ভাবে আবিষ্কার করা যায় না। মঠে এমন কোনও ছিদ্র নেই। ক্যালকুলাসে একতরফা সীমা সমান হলে আপনাকে গর্তটি বন্ধ করতে দেওয়া হবে।
রবিং

4
- এই আপনি যা খুঁজছিলেন তা অংশ হতে পারে en.wikipedia.org/wiki/Formal_verification
enderland

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

আমি তখন থেকে নির্ভরশীল প্রকারের মাধ্যমে আনুষ্ঠানিক যাচাইয়ের জমির সাথে নিজেকে পরিচিত করেছি এবং আমি @ ডাউনলোড এবং এন্ডারল্যান্ডের সাথে সম্পূর্ণরূপে একমত হতে পারি।
এরিক কাপলুন

1
@ রওং আমি মনে করি আপনাকে সংখ্যক এবং ডিনোমিনেটর উভয়ই সমান শূন্য হওয়ার সম্ভাবনাটি প্রমাণ করেছেন। আংশিক সমস্যা এই ফাংশনটির খারাপ ডিজাইনের কারণে। গাণিতিক আনুষ্ঠানিক যাচাইয়ের কথা বলার সময়, আপনার সঠিক ক্রিয়াকলাপগুলি নির্বিচারে নয় বরং সঠিক তথ্য প্রকারের ভিত্তিতে আনুষ্ঠানিক নিয়ম অনুসরণ করতে হবে। এই উদাহরণে আপনাকে বিভাগ ফাংশনটি ব্যবহার করতে হবে (a,b)=>a/b, যা সঠিকভাবে কমপোজযোগ্য হওয়ার জন্য একটি ওভারফ্লো মান সহ প্রসারিত হওয়া দরকার।
দিমিত্রি জায়তসেভ

উত্তর:


8

সফ্টওয়্যার পরীক্ষার পিছনে গণিত অন্বেষণকারী একটি বইয়ের জন্য ... পাওয়ার জন্য সেমিনাল বইটি হ'ল আর্ট অফ কম্পিউটার সিস্টেম পারফরম্যান্স অ্যানালাইসিস: পরীক্ষামূলক ডিজাইন, পরিমাপ, সিমুলেশন এবং মডেলিংয়ের কৌশলগুলি

১৯৯১ সালে এটি প্রথম প্রকাশিত হওয়ার পরে এটি আজও জনপ্রিয় কারণ এটি একটি প্রয়োগিত গণিতের বই যা কেবলমাত্র পারফরম্যান্স বিশ্লেষণ, সিমুলেশন এবং পরিমাপকে কেন্দ্র করে।


5

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

পরীক্ষার পদ্ধতিগুলি

বিভিন্ন ক্লাসের পরীক্ষা রয়েছে যেমন ইউনিট টেস্ট বা ইন্টিগ্রেশন টেস্ট । একটি ইউনিট পরীক্ষা দৃ 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বিবৃতি ব্যবহার করে স্পষ্টতই চেক করা যায় ।


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

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


2
আমি বিস্তৃত উত্তরটির প্রশংসা করি, তবে আমি ভয় করি যে আমি যা চেয়েছিলাম তার সাথে এর কিছুই করার নেই :) তবে ভাগ্যক্রমে, প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জার / প্রশ্নগুলি / 66675৫/ … আমার কাছে যা ছিল ঠিক তেমন কাছাকাছি বলে মনে হচ্ছে লক্ষ্য।
এরিক কাপলুন

এটি দুর্দান্ত জিনিস। আপনি কোন বই বা জিনিস সুপারিশ করতে পারেন?
মার্সিন

4

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

টেস্ট :: Lectrotest

যেমনটি লেখক বলেছেন, এই পার্ল মডিউলটি হাস্কেলের দ্রুত-চেক মডিউল দ্বারা অনুপ্রাণিত হয়েছিল । এই পৃষ্ঠায় আরও লিঙ্ক রয়েছে, যার মধ্যে কিছু মারা গেছে।


2

একটি গাণিতিক ভিত্তিক পদ্ধতির সমস্ত জোড় পরীক্ষা । ধারণাটি হ'ল বেশিরভাগ বাগগুলি একক কনফিগারেশন বিকল্প পছন্দ দ্বারা সক্রিয় হয় এবং বাকী বেশিরভাগ অংশ একযোগে নেওয়া কয়েকটি নির্দিষ্ট বিকল্প দ্বারা সক্রিয় হয়। সুতরাং বেশিরভাগ "সমস্ত জোড়া" পরীক্ষা করে ধরা যেতে পারে। একটি গাণিতিক ব্যাখ্যা (সাধারণীকরণ সহ) এখানে:

এইটিজি সিস্টেম: সংযুক্তি নকশার উপর ভিত্তি করে পরীক্ষার দিকে দৃষ্টিভঙ্গি

(আরও অনেক উল্লেখ রয়েছে)


2

কিছু গাণিতিক সমীকরণ ব্যবহৃত হয়েছে, তবে এটি আপনি যে ধরণের সফ্টওয়্যার পরীক্ষার ব্যবহার করছেন তা নির্ভর করে। উদাহরণস্বরূপ, সমালোচনামূলক ফল্ট অনুমানটি ধরে নিয়েছে যে ব্যর্থতা 2 বা ততোধিক যুগপত ফল্টের ফলসই নয়। নিম্নলিখিত সমীকরণটি হল: f = 4n + 1. f = ফাংশন যা প্রদত্ত সংখ্যক ভেরিয়েবলের জন্য পরীক্ষার সংখ্যার সংখ্যা গণনা করে ( এন) + 1 হল ধ্রুবকটির সংযোজন যেখানে সমস্ত ভেরিয়েবল নামমাত্র মান ধরে।

আর এক ধরণের পরীক্ষার জন্য যার গাণিতিক সমীকরণ প্রয়োজন, দৃ Rob়তা পরীক্ষা হচ্ছে পরীক্ষা পদ্ধতিতে পরীক্ষার ক্ষেত্রে দৃ cases়তা বা সঠিকতার পরীক্ষা করা। এই পরীক্ষায়, আপনি বৈধ ইনপুট পরিসীমা (পরিষ্কার পরীক্ষার কেস) এবং ইনপুট পরিসরের বাইরে ইনপুট ভেরিয়েবলগুলি (নোংরা পরীক্ষার কেস) ইনপুট করতে পারেন। আপনি নিম্নলিখিত গণিতের সমীকরণটি ব্যবহার করবেন: f = 6n + 16n ইঙ্গিত দেয় যে প্রতিটি ভেরিয়েবলের 6 টি আলাদা মান ধরে নিতে হয় যখন অন্য মানগুলি নামমাত্র মান ধরে থাকে। * + 1 * ধ্রুবক 1 যোগ করার প্রতিনিধিত্ব করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.