আমাদের কি আমাদের সমস্ত পদ্ধতি পরীক্ষা করা উচিত?


61

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

SomeClass getSomething(parameters) {
    return myDao.findSomethingBySomething(parameters);
}

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

যদিও এটি আমাকে ভাবতে বাধ্য করেছে। আমাদের কি সর্বোচ্চ পরীক্ষা কভারেজ% করার জন্য প্রচেষ্টা করা উচিত? না কি কেবল তখন শিল্পের জন্য কোনও শিল্প? আমি কেবল পরীক্ষার পিছনে কোনও কারণ দেখতে পাচ্ছি না:

  • গেটার্স এবং সেটার্স (যদি না তাদের মধ্যে আসলে কিছু যুক্তি না থাকে)
  • "বয়লারপ্লেট" কোড

স্পষ্টতই এই জাতীয় পদ্ধতির (মক সহ) পরীক্ষা করার জন্য আমাকে এক মিনিটেরও কম সময় লাগবে তবে আমার ধারণা যে এখনও সময় নষ্ট হয় এবং প্রতিটি সিআইয়ের জন্য এক মিলি সেকেন্ড বেশি সময় লাগে।

কেন কোনও যুক্তিযুক্ত / "জ্বলনযোগ্য" কারণগুলির জন্য কেন প্রত্যেকটি একক (বা তিনি যতটা পারেন) লাইন কোডটি পরীক্ষা করা উচিত?


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

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


এটি আপনার সিস্টেমে কিছুটা হলেও নির্ভর করবে, যদি আপনি মাঝারি থেকে উচ্চতা সুরক্ষা শংসাপত্রের স্তর সহ একটি সিস্টেম বিকাশ করে থাকেন তবে আপনার তুচ্ছ
jk

উত্তর:


48

আমি কেন্ট বেকের থাম্ব বিধি দ্বারা চলেছি:

সম্ভবত ভাঙ্গতে পারে এমন সমস্ত কিছুর পরীক্ষা করুন।

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

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


আহ আমি পুরো উক্তিটি ভুলে গেছি! অনুমান করুন আমি এটিকে আমার মূল যুক্তি হিসাবে ব্যবহার করব কারণ খোলামেলাভাবে - এখানে কী ভাঙ্গতে পারে? আসলেই বেশি কিছু নয়। কেবল যে জিনিসটি ভেঙে যেতে পারে তা হ'ল পদ্ধতিটি আহ্বান এবং এর চেয়ে যদি এটি ঘটে তবে এর অর্থ আসলে খারাপ কিছু ঘটেছে। ধন্যবাদ!
জেনজেন

5
@ জেনজেন: "এখানে কী ভাঙ্গতে পারে? আসলে তেমন কিছু হয় না।" - তাই এটি ভেঙে যেতে পারে । শুধু একটি ছোট টাইপ। অথবা কেউ কেউ কিছু কোড যুক্ত করে। বা নির্ভরতা জড়ান। আমি সত্যিই ভাবি যে বেক দাবি করবে যে আপনার মূল উদাহরণটি ব্রেকযোগ্য হিসাবে যোগ্য। গেটার্স এবং সেটটারগুলি কম, যদিও আমি নিজেকে অনুলিপি / পেস্ট ত্রুটি করে ফেলেছি, তারপরেও। আসল প্রশ্নটি হ'ল, যদি পরীক্ষা লিখতে খুব তুচ্ছ হয়, তবে কেন এটি বিদ্যমান?
পিডিআর

1
আপনি ইতিমধ্যে আপনি পরীক্ষাটি লিখতে পারতেন এটি সম্পর্কে ভেবে কতটা সময় ব্যয় করেছেন। আমি বলছি পরীক্ষা লিখুন, ধূসর অঞ্চল হিসাবে পরীক্ষা না লেখার সময় ছেড়ে যাবেন না, আরও ভাঙ্গা উইন্ডো উপস্থিত হবে।
কেট_চাপ

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

7
অন্ধভাবে যা কিছু ভেঙে যেতে পারে তা পরীক্ষা করে দেখার অর্থ হয় না। একটি কৌশল তৈরি করা দরকার যেখানে উচ্চ ঝুঁকির উপাদানগুলির প্রথম পরীক্ষা করা হয়।
কোডার্ট

12

ইউনিট পরীক্ষার কয়েকটি ধরণের রয়েছে:

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

আপনি যদি প্রথমে আপনার পরীক্ষাটি লেখেন তবে এটি আরও বেশি অর্থপূর্ণ হবে - যেহেতু আপনি কোনও ডেটা অ্যাক্সেস লেয়ার কল করার প্রত্যাশা করবেন। পরীক্ষা প্রথমদিকে ব্যর্থ হবে। তারপরে আপনি পরীক্ষার পাস করার জন্য প্রোডাকশন কোডটি লিখবেন।

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

  • পরীক্ষা করে দেখুন যে আমি সঠিক পরামিতি সহ ডেটা অ্যাক্সেস লেয়ারটিকে কল করেছি।
  • এটি একবার কল করা হয়েছে তা পরীক্ষা করে দেখুন।
  • ডেটা অ্যাক্সেস স্তর দ্বারা আমাকে যা দেওয়া হয়েছে ঠিক তা আমি ফিরে আসছি কিনা তা পরীক্ষা করে দেখুন। অন্যথায় আমি পাশাপাশি নাল ফিরে আসতে পারে।

বর্তমানে সেখানে কোনও যুক্তি নেই, তবে সবসময় এটি হবে না।

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

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

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

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


আপনার ডাল কেবল একবার ফোন করা হয়েছে তা আপনি কেন পরীক্ষা করবেন?
মার্জন ভেনেমা

9

আপনার সফ্টওয়্যারটির গুণমান সম্পর্কে চিন্তা করার ভাল উপায়:

  1. টাইপ চেকিং সমস্যার অংশ পরিচালনা করছে।
  2. পরীক্ষা বাকি পরিচালনা করবে

বয়লারপ্লেট এবং তুচ্ছ ফাংশনগুলির জন্য, আপনি এটি কাজ করে টাইপ চেকিংয়ের উপর নির্ভর করতে পারেন, এবং বাকিগুলির জন্য আপনার পরীক্ষার কেসগুলি দরকার।


অবশ্যই টাইপ চেকিং কেবলমাত্র যদি আপনি আপনার কোডে নির্দিষ্ট ধরণের ব্যবহার করেন তবেই কাজ করে এবং আপনি হয় একটি সংকলিত ভাষা ব্যবহার করছেন বা আপনি অন্যথায় স্থির বিশ্লেষণ চেকটি প্রায়শই চালিত হয় তা নিশ্চিত করে সিআই এর অংশ হিসাবে।
বিডএসএল

6

আমার মতে সাইক্লোমেটিক জটিলতা একটি পরামিতি। যদি কোনও পদ্ধতি পর্যাপ্ত জটিল না হয় (যেমন গেটার এবং সেটটার)। কোন ইউনিট পরীক্ষার প্রয়োজন হয় না। ম্যাককেবের সাইক্লোমেটিক জটিলতা স্তরটি 1 এর বেশি হওয়া উচিত Another অন্য শব্দটির সর্বনিম্ন 1 ব্লক স্টেটমেন্ট থাকতে হবে।


মনে রাখবেন কিছু গেটার বা সেটটারের পার্শ্ব প্রতিক্রিয়া রয়েছে (যদিও এটি নিরুৎসাহিত করা হয় এবং বেশিরভাগ ক্ষেত্রে এটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়), সুতরাং আপনার উত্স কোডে পরিবর্তনও এটি প্রভাবিত করতে পারে।
আন্দ্রেজেববাক

3

টিডিডি (এবং কয়েকটি ব্যতিক্রম সহ) সহ একটি দুর্দান্ত গী

বিতর্কিত ঠিক আছে, তবে আমি যুক্তি দিয়ে বলছি যে যে কেউ এই প্রশ্নের 'না' উত্তর দেয় সে টিডিডির একটি মৌলিক ধারণা অনুপস্থিত।

আমার জন্য, আপনি টিডিডি অনুসরণ করলে উত্তরটি হ'ল হ্যাঁ । আপনি যদি না হন তবে কোনও উত্তর দেওয়ার মতো উত্তর নেই।

টিডিডিতে ডিডিডি

টিডিডি প্রায়শই আপনাকে প্রধান বেনিফিট বলে উল্লেখ করা হয়।

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

বাস্তবায়ন থেকে দায়িত্ব পৃথক করুন

প্রোগ্রামার হিসাবে, এটি বৈশিষ্ট্যগুলি তাত্পর্যপূর্ণ এবং গেটার্স এবং সেটারকে কোনও ধরণের ওভারহেড হিসাবে কিছু হিসাবে বিবেচনা করতে ভীষণ লোভনীয়।

তবে বৈশিষ্ট্যগুলি একটি বাস্তবায়নের বিশদ, যখন সেটার এবং গেটারগুলি চুক্তিভিত্তিক ইন্টারফেস যা প্রকৃতপক্ষে প্রোগ্রামগুলিকে কাজ করে।

কোনও বানানের উচিত এমন বানানটি আরও বেশি গুরুত্বপূর্ণ:

এর ক্লায়েন্টদের এর অবস্থা পরিবর্তন করার অনুমতি দিন

এবং

এর ক্লায়েন্টদের তার অবস্থা জিজ্ঞাসা করার অনুমতি দিন

তাহলে কীভাবে এই রাজ্যটি আসলে সংরক্ষণ করা হয় (যার জন্য কোনও বৈশিষ্ট্য সর্বাধিক সাধারণ, তবে একমাত্র উপায় নয়)।

যেমন একটি পরীক্ষা

(The Painter class) should store the provided colour

টিডিডি এর ডকুমেন্টেশন অংশের জন্য গুরুত্বপূর্ণ ।

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

রাউন্ড ট্রিপ ইঞ্জিনিয়ারিংয়ের অভাব ...

সিস্টেম ডেভলপমেন্ট ওয়ার্ল্ডের অন্যতম প্রধান সমস্যা হ'ল রাউন্ড ট্রিপ ইঞ্জিনিয়ারিং 1 এর অভাব - একটি সিস্টেমের বিকাশ প্রক্রিয়াটি বিচ্ছিন্ন উপ-প্রক্রিয়াগুলিতে বিভক্ত হয়ে যায় যাগুলির নিদর্শনগুলি (ডকুমেন্টেশন, কোড) প্রায়শই বেমানান হয়।

1 ব্রোডি, মাইকেল এল। "জন মেলোপল্লো: ধারণামূলক মডেলিংয়ের বীজ সেলাই করছেন।" ধারণামূলক মডেলিং: ভিত্তি এবং অ্যাপ্লিকেশন। স্প্রিঞ্জার বার্লিন হাইডেলবার্গ, ২০০৯. ১-৯।

... এবং টিডিডি কীভাবে এটি সমাধান করে

এটি টিডিডির ডকুমেন্টেশন অংশ যা এটি নিশ্চিত করে যে সিস্টেমের কোড এবং এর কোড সবসময় সামঞ্জস্যপূর্ণ।

প্রথমে ডিজাইন করুন, পরে বাস্তবায়ন করুন

টিডিডির মধ্যে আমরা প্রথমে ব্যর্থতা গ্রহণযোগ্যতা পরীক্ষা লিখি, কেবলমাত্র তখনই কোডটি লিখি যা তাদের পাস হতে দেয়।

উচ্চ-স্তরের বিডিডি-র মধ্যে আমরা প্রথমে দৃশ্যাবলী লিখি, তারপরে সেগুলি পাস করি।

কেন আপনার সেটার এবং গেটর বাদ দেওয়া উচিত?

তত্ত্বগতভাবে, একজনের পক্ষে পরীক্ষা লেখার পক্ষে টিডিডি-র মধ্যে একেবারে সম্ভব, এবং অন্যটি কোডটি পাস করে এমনটি প্রয়োগ করে।

তাই নিজেকে জিজ্ঞাসা করুন:

কোনও শ্রেণীর জন্য পরীক্ষা লেখার ব্যক্তিটি গেটার এবং সেটারের উল্লেখ করে।

যেহেতু গেটার্স এবং সেটটারগুলি একটি শ্রেণীর কাছে সর্বজনীন ইন্টারফেস, উত্তরটি অবশ্যই হ্যাঁ , বা কোনও অবজেক্টের স্থিতি স্থাপন বা অনুসন্ধানের কোনও উপায় থাকবে না।

স্পষ্টতই, আপনি যদি কোডটি প্রথমে লিখেন তবে উত্তরটি এতটা ক্লিয়ারকুট নাও হতে পারে।

ব্যতিক্রমসমূহ

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

উদাহরণস্বরূপ, একটি স্থানীয় পদ্ধতি 'বি ()':

function A() {

    // B() will be called here    

    function B() {
        ...
    }
} 

বা ব্যক্তিগত ফাংশন square()এখানে:

class Something {
private:
    square() {...}
public:
    addAndSquare() {...}
    substractAndSquare() {...}
}

বা অন্য কোনও ফাংশন যা publicইন্টারফেসের অংশ নয় যা সিস্টেম উপাদানগুলির নকশায় বানানের প্রয়োজন।


1

যখন কোনও দার্শনিক জিজ্ঞাসার মুখোমুখি হন, ড্রাইভিং প্রয়োজনীয়তাগুলিতে ফিরে যান।

আপনার লক্ষ্য কি প্রতিযোগিতামূলক ব্যয়ে যুক্তিসঙ্গতভাবে নির্ভরযোগ্য সফ্টওয়্যার তৈরি করা?

বা ব্যয় নির্বিশেষে সর্বোচ্চ সম্ভাব্য নির্ভরযোগ্যতার সফ্টওয়্যার তৈরি করা?

বিন্দু অবধি, গুণমান এবং বিকাশের গতি / ব্যয় দুটি প্রান্তিককরণের দুটি লক্ষ্য: ত্রুটিগুলি স্থির করার চেয়ে পরীক্ষাগুলি লেখার জন্য আপনি কম সময় ব্যয় করেন।

কিন্তু এই বিষয়টির বাইরে, তারা তা করে না। এটি বলা এতটা কঠিন নয় যে, প্রতি মাসে একজন বিকাশকারী প্রতি বাগ রিপোর্ট করেছে। এই প্রতি দুই মাসে একজনকে রেখেই কেবল দু'দিন বাজেটের বাজেট প্রকাশ করে এবং আরও অতিরিক্ত পরীক্ষা করা সম্ভবত আপনার ত্রুটি হারকে অর্ধেক করবে না। সুতরাং এটি আর সহজ জয় / জয় নয়; গ্রাহকের ত্রুটিযুক্ত ব্যয়ের ভিত্তিতে আপনাকে এটি ন্যায়সঙ্গত করতে হবে।

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

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


0

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

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


0

এটি একটি জটিল প্রশ্ন।

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

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

ব্যক্তিগতভাবে আমি প্রায় 85-95% এ লাইনে কভারেজ রাখতে চাই এবং লাইন প্রতি বিদ্যমান ইউনিট পরীক্ষার কভারেজটি সমস্ত কোড ফাইলের জন্য এই স্তরে হিট হয় এবং কোনও ফাইল উন্মুক্ত হয় না এমন মূলধারায় গেট চেক-ইনগুলি রাখতে চাই।

ধরে নিচ্ছেন সেরা পরীক্ষার অনুশীলনগুলি অনুসরণ করা হচ্ছে এটি কভারেজের স্বার্থে কীভাবে হার্ড ব্যায়াম কোড বা তুচ্ছ কোডের জন্য অতিরিক্ত কভারেজ কীভাবে পাবেন তা নির্ধারণের চেষ্টা করার জন্য সময় নষ্ট করতে বাধ্য না করে প্রচুর পরিমাণে কভারেজ দেয়।


-1

সমস্যাটি নিজেই প্রশ্ন, আপনার সিস্টেমের সমস্ত বৈশিষ্ট্য পরীক্ষা করার জন্য আপনাকে সমস্ত "মেথডোস" বা সমস্ত "শ্রেণি" পরীক্ষা করার দরকার নেই।

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

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

পদ্ধতি ক্লাসে নয় এমন বৈশিষ্ট্যগুলি / আচরণগুলিতে চিন্তা করুন, আমি এটি পর্যাপ্ত সময়ের পুনরাবৃত্তি করতে পারি না।


-4

যদিও এটি আমাকে ভাবতে বাধ্য করেছে। আমাদের কি সর্বোচ্চ পরীক্ষা কভারেজ% করার জন্য প্রচেষ্টা করা উচিত?

হ্যাঁ, আদর্শভাবে 100%, তবে কিছু জিনিস ইউনিট পরীক্ষামূলক নয়।

গেটার্স এবং সেটার্স (যদি না তাদের মধ্যে আসলে কিছু যুক্তি না থাকে)

যাত্রী / সেটাররা বোকা - কেবল তাদের ব্যবহার করবেন না। পরিবর্তে, আপনার সদস্য পরিবর্তনশীল পাবলিক বিভাগে রাখুন।

"বয়লারপ্লেট" কোড

সাধারণ কোড আউট করুন, এবং ইউনিট এটি পরীক্ষা করুন। যে হিসাবে সহজ হতে হবে।

কেন কোনও যুক্তিযুক্ত / "জ্বলনযোগ্য" কারণগুলির জন্য কেন প্রত্যেকটি একক (বা তিনি যতটা পারেন) লাইন কোডটি পরীক্ষা করা উচিত?

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

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


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

1
এছাড়াও, যেহেতু আমি এটি লক্ষ্য করিনি "সাধারণ কোড আউট করুন, এবং ইউনিট এটি পরীক্ষা করুন That এটি যতটা সহজ should" এর মানে কি বোঝাতে চাচ্ছো? এটি একটি পরিষেবা শ্রেণি (জিইউআই এবং ডিএওর মধ্যে একটি পরিষেবা স্তরে), এটি পুরো অ্যাপ্লিকেশনে সাধারণ। আসলেই এটি আরও জেনেরিক করা যায় না (যেহেতু এটি কিছু পরামিতি গ্রহণ করে এবং ডিএওতে একটি নির্দিষ্ট পদ্ধতি কল করে)। এটির একমাত্র কারণ হ'ল অ্যাপ্লিকেশনটির স্তরযুক্ত আর্কিটেকচারটি মেনে চলা যাতে GUI সরাসরি ডিএওর কল করবে না।
জেনজেন

20
-১ "গেটার্স / সেটার্স নির্বোধ - কেবল সেগুলি ব্যবহার করবেন না Instead পরিবর্তে, আপনার সদস্য পরিবর্তনশীলটিকে পাবলিক বিভাগে রাখুন" " - খুব ভুল. এসও নিয়ে এটি বেশ কয়েকবার আলোচনা হয়েছে । সর্বত্র সর্বজনীন ক্ষেত্রগুলি ব্যবহার করা প্রকৃতপক্ষে সর্বত্র পাওয়া এবং সেটার ব্যবহারের চেয়েও খারাপ।
পিয়েটার তুরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.