আপনার প্রশ্নের উত্তর
অনেক বেশি ইউনিট পরীক্ষা করানোর মতো জিনিস আছে কি?
অবশ্যই ... আপনি উদাহরণস্বরূপ, একাধিক পরীক্ষা করতে পারেন যা প্রথম নজরে আলাদা বলে মনে হয় তবে সত্যই একই জিনিসটি পরীক্ষা করতে পারে (পরীক্ষার অধীনে "আকর্ষণীয়" অ্যাপ্লিকেশন কোডের একই লাইনের উপর যৌক্তিকভাবে নির্ভর করে)।
অথবা আপনি আপনার কোডের অভ্যন্তরীণগুলি পরীক্ষা করতে পারেন যা কখনই বাইরের দিকে কখনও উত্থিত হয় না (অর্থাত্ কোনও ধরণের ইন্টারফেস চুক্তির অংশ নয়), যেখানে কেউ এটি যুক্তিযুক্ত কিনা তা নিয়ে তর্ক করতে পারে। উদাহরণস্বরূপ অভ্যন্তরীণ লগ বার্তাগুলি বা যা কিছু হুবহু শব্দ করা।
আমি একটি বিদ্যমান অ্যাপ্লিকেশন জন্য ইউনিট পরীক্ষা লেখার দায়িত্ব দেওয়া হয়েছে। আমার প্রথম ফাইলটি শেষ করার পরে, আমার কাছে 419 লাইনের মূল কোডের জন্য পরীক্ষার কোডের 717 লাইন রয়েছে।
এটি আমাকে বেশ স্বাভাবিক হিসাবে আঘাত করে। আপনার পরীক্ষাগুলি প্রকৃত পরীক্ষার উপরে সেটআপ এবং টিয়ারডাউনটিতে প্রচুর লাইন অফ কোড ব্যয় করে। অনুপাতটি উন্নতি করতে পারে, নাও পারে। আমি নিজেই বেশ পরীক্ষার ভারী, এবং প্রায়শই প্রকৃত কোডের চেয়ে পরীক্ষাগুলিতে বেশি লোক এবং সময় বিনিয়োগ করি।
আমরা আমাদের কোডের আওতায় বাড়ার সাথে সাথে এই অনুপাতটি কি নিয়ন্ত্রণহীন হয়ে উঠবে?
অনুপাত এত বেশি করে না। পরীক্ষাগুলির আরও কিছু গুণ রয়েছে যা তাদেরকে নিয়ন্ত্রণহীন করে তোলে। আপনার কোডে বরং সাধারণ পরিবর্তনগুলি করার সময় যদি আপনাকে নিয়মিত পরীক্ষার পুরো গুচ্ছটি রিফ্যাক্টর করতে হয় তবে কারণগুলির দিকে আপনার ভাল নজর দেওয়া উচিত। এবং এটি আপনার কাছে কতগুলি লাইন রয়েছে তা নয়, তবে আপনি কীভাবে পরীক্ষাগুলির কোডিংয়ের কাছে যান।
ইউনিট টেস্টিং সম্পর্কে আমার বোধটি ক্লাসে প্রতিটি পদ্ধতি পরীক্ষা করা ছিল তা নিশ্চিত করার জন্য যে প্রতিটি পদ্ধতি প্রত্যাশা অনুযায়ী কাজ করেছে।
এটি কঠোর অর্থে "ইউনিট" পরীক্ষার জন্য সঠিক। এখানে, "ইউনিট" হচ্ছে কোনও পদ্ধতি বা শ্রেণীর মতো কিছু। "ইউনিট" পরীক্ষার বিন্দুটি কেবলমাত্র একটি নির্দিষ্ট ইউনিটের কোডের পরীক্ষা করা, পুরো সিস্টেমটি নয়। আদর্শভাবে আপনি সিস্টেমের পুরো অংশটি সরিয়ে ফেলবেন (ডাবল বা হোয়াট নোট ব্যবহার করে)।
তবে, টান অনুরোধে আমার প্রযুক্তি নেতৃত্বটি উল্লেখ করেছে যে আমার উচ্চ স্তরের পরীক্ষার উপর ফোকাস করা উচিত।
তারপর আপনি মানুষ আসলে অভিমানী ফাঁদ মধ্যে পড়ে গিয়েছিলেন বোঝানো ইউনিট পরীক্ষা যখন তারা বলেন ইউনিট পরীক্ষা। আমি অনেক প্রোগ্রামারদের সাথে দেখা করেছি যারা "ইউনিট পরীক্ষা" বলে তবে একেবারে আলাদা কিছু বোঝায়।
তিনি প্রতিটি ফাংশনকে সম্পূর্ণরূপে পরীক্ষার চেয়ে প্রশ্নে ক্লাসে সবচেয়ে বেশি ব্যবহৃত 4-5 টি ব্যবহারের ক্ষেত্রে পরীক্ষার পরামর্শ দিয়েছিলেন।
অবশ্যই, গুরুত্বপূর্ণ কোডের শীর্ষস্থানীয় ৮০% উপর মনোনিবেশ করাও লোড হ্রাস করে ... আমি আপনার প্রশংসা করি যে আপনি আপনার বসকে খুব বেশি ভাবেন, তবে এটি আমাকে সর্বোত্তম পছন্দ হিসাবে আঘাত করে না।
আমার কাছে, 100% ইউনিট পরীক্ষার কভারেজ একটি উচ্চ লক্ষ্য, তবে আমরা কেবল 50% পর্যন্ত পৌঁছে গেলেও আমরা জানতে পারি যে 50% এর 100% আচ্ছাদিত ছিল।
"ইউনিট টেস্ট কভারেজ" কী তা আমি জানি না। আমি ধরে নিয়েছি আপনার অর্থ "কোড কভারেজ", অর্থাত্ পরীক্ষার স্যুট চালানোর পরে, কোডের প্রতিটি লাইন (= 100%) কমপক্ষে একবার কার্যকর করা হয়েছে।
এটি একটি দুর্দান্ত বলপার্ক মেট্রিক, তবে এখন পর্যন্ত সেরা মানের কোনওটিই এটির জন্য শুটিং করতে পারে না। কেবল কোড লাইনগুলি কার্যকর করা পুরো ছবি নয়; এটি জটিল, নেস্টেড শাখাগুলির মাধ্যমে বিভিন্ন পাথের জন্য অ্যাকাউন্ট করে না, উদাহরণস্বরূপ। এটি এমন একটি মেট্রিকের চেয়ে বেশি যা আঙুলটি কোডের টুকরাগুলিতে দেখায় যা খুব কম পরীক্ষিত হয় (স্পষ্টতই, যদি কোনও শ্রেণি 10% বা 5% কোড কভারেজ হিসাবে থাকে তবে কিছু ভুল হয়); অন্যদিকে একটি 100% কভারেজ আপনাকে বলবে না যে আপনি যথেষ্ট পরীক্ষা করেছেন কিনা বা আপনি সঠিকভাবে পরীক্ষা করেছেন কিনা।
ইন্টিগ্রেশন টেস্টিং
লোকেরা যখন আজ ডিফল্টরূপে ইউনিট পরীক্ষার বিষয়ে ক্রমাগত কথা বলছে তখন তা আমাকে যথেষ্ট বিরক্ত করে। আমার মতে (এবং অভিজ্ঞতা), ইউনিট টেস্টিং লাইব্রেরি / এপিআই এর জন্য দুর্দান্ত; আরও ব্যবসায়িক কেন্দ্রিক অঞ্চলে (যেখানে আমরা হাতে থাকা প্রশ্নগুলির মতো কেস ব্যবহারের বিষয়ে কথা বলি), সেগুলি অগত্যা সর্বোত্তম বিকল্প নয়।
সাধারণ অ্যাপ্লিকেশন কোডের জন্য এবং গড় ব্যবসায়ের ক্ষেত্রে (যেখানে অর্থ উপার্জন, সময়সীমা বেঁধে দেওয়া এবং গ্রাহক সন্তুষ্টি পূরণ করা গুরুত্বপূর্ণ) এবং আপনি প্রধানত এমন বাগগুলি এড়াতে চান যেগুলি সরাসরি ব্যবহারকারীর মুখে রয়েছে, বা যা সত্য বিপর্যয়ের কারণ হতে পারে - আমরা তা করি না এখানে নাসা রকেট প্রবর্তন করে), সংহতকরণ বা বৈশিষ্ট্য পরীক্ষাগুলি অনেক বেশি দরকারী।
যারা আচরণের চালিত বিকাশ বা বৈশিষ্ট্যযুক্ত চালিত বিকাশের সাথে একসাথে চলেছেন; যারা সংজ্ঞা অনুসারে (কঠোর) ইউনিট পরীক্ষার সাথে কাজ করে না।
এটি সংক্ষিপ্ত রাখতে (ইশ), একটি সংহতকরণ / বৈশিষ্ট্য পরীক্ষা পুরো অ্যাপ্লিকেশন স্ট্যাকটি ব্যবহার করে। একটি ওয়েব ভিত্তিক অ্যাপ্লিকেশন, এটা একটি ব্রাউজার প্রয়োগের মাধ্যমে এ ক্লিক করলে (এবং কোন বিষয়টি সর্বজন বিদিত যে নেই মত আচরণ করবে আছে খুঁজে বার করো - যে সরল হতে, সেখানে আউট খুব শক্তিশালী অবকাঠামো যে কাজ করতে হয় // শসা করুন: http। io উদাহরণ হিসাবে)।
ওহ, আপনার শেষ প্রশ্নের উত্তর দেওয়ার জন্য: নতুন বৈশিষ্ট্যটি কেবল তার বৈশিষ্ট্য পরীক্ষাটি প্রয়োগ ও ব্যর্থ হওয়ার পরে প্রোগ্রাম করা হয়েছে কিনা তা নিশ্চিত করে আপনি আপনার পুরো দলটিকে একটি উচ্চ পরীক্ষার কভারেজ পাবেন। এবং হ্যাঁ, এর অর্থ প্রতিটি বৈশিষ্ট্য। এটি আপনাকে 100% (ধনাত্মক) বৈশিষ্ট্য কভারেজের গ্যারান্টি দেয় । সংজ্ঞা অনুসারে এটি গ্যারান্টি দেয় যে আপনার অ্যাপ্লিকেশনটির কোনও বৈশিষ্ট্য কখনই "দূরে যাবে" না। এটি 100% কোড কভারেজের গ্যারান্টি দেয় না (উদাহরণস্বরূপ, আপনি সক্রিয়ভাবে নেতিবাচক বৈশিষ্ট্যগুলি প্রোগ্রাম না করলে আপনি নিজের ত্রুটি পরিচালনা / ব্যতিক্রম হ্যান্ডলিংটি অনুশীলন করবেন না)।
এটি আপনাকে বাগ-মুক্ত অ্যাপ্লিকেশনটির গ্যারান্টি দেয় না; অবশ্যই আপনি সুস্পষ্ট বা খুব বিপজ্জনক বগি পরিস্থিতি, ভুল ব্যবহারকারীর ইনপুট, হ্যাকিং (উদাহরণস্বরূপ, সেশন ম্যানেজমেন্ট, সুরক্ষা এবং এ জাতীয়) ইত্যাদির জন্য বৈশিষ্ট্য পরীক্ষা লিখতে চাইবেন; এমনকি কেবল ইতিবাচক পরীক্ষাগুলি প্রোগ্রামিংয়ের অসাধারণ সুবিধা রয়েছে এবং এটি আধুনিক, শক্তিশালী ফ্রেমওয়ার্কগুলির সাথে যথেষ্ট সম্ভাব্য।
বৈশিষ্ট্য / সংহতকরণ পরীক্ষার স্পষ্টতই তাদের নিজস্ব কৃমি থাকতে পারে (উদাহরণস্বরূপ, পারফরম্যান্স; তৃতীয় পক্ষের কাঠামোর অপ্রয়োজনীয় পরীক্ষা; যেহেতু আপনি সাধারণত ডাবল ব্যবহার করেন না সেগুলিও আমার অভিজ্ঞতাতে লেখার পক্ষে শক্ত হয়ে থাকে ...) তবে আমি ' d যে কোনও দিন 100% কোড-কভারেজ-ইউনিট-পরীক্ষিত অ্যাপ্লিকেশন (গ্রন্থাগার নয়!) এর উপরে 100% ধনাত্মক-বৈশিষ্ট্যযুক্ত পরীক্ষা-নিরীক্ষা নিন।