থ্যালকিংওয়ালট জিজ্ঞাসা করেছেন:
ইউনিট পরীক্ষার মান টিমের সংশয়ী বিকাশকারীদের বোঝানোর জন্য কিছু ভাল উপায় কী?
ইউনিট পরীক্ষা কেন ভাল তা নীল বাদে এখানকার প্রত্যেকে প্রচুর কারণে গাদা করতে যাচ্ছেন। যাইহোক, আমি দেখতে পাই যে প্রায়শই কাউকে কোনও কিছুর কাছে বোঝানোর সর্বোত্তম উপায় হ'ল তাদের যুক্তি শুনতে এবং একে একে বিন্দু দ্বারা সম্বোধন করা। যদি আপনি শুনতে এবং তাদের উদ্বেগকে ভারবাল করতে সহায়তা করেন তবে আপনি প্রত্যেককে সম্বোধন করতে পারেন এবং তাদের এটিকে আপনার দৃষ্টিকোণে রূপান্তর করতে পারেন (বা খুব কমপক্ষে, তাদের একটি পায়ে দাঁড়াতে ছাড়ুন)। কে জানে? সম্ভবত তারা আপনাকে বোঝাবে কেন ইউনিট পরীক্ষাগুলি আপনার পরিস্থিতির জন্য উপযুক্ত নয়। সম্ভবত না, তবে সম্ভব। সম্ভবত আপনি যদি ইউনিট পরীক্ষার বিরুদ্ধে তাদের যুক্তিগুলি পোস্ট করেন তবে আমরা কাউন্টারারেগমেন্টগুলি সনাক্ত করতে সহায়তা করতে পারি।
তর্কটির উভয় পক্ষ শোনানো এবং বোঝা গুরুত্বপূর্ণ। যদি আপনি জনগণের উদ্বেগ বিবেচনা না করে খুব উদ্যোগের সাথে ইউনিট পরীক্ষা গ্রহণের চেষ্টা করেন, আপনি একটি ধর্মযুদ্ধের (এবং সম্ভবত সত্যই নিরর্থক ইউনিট পরীক্ষা) শেষ করবেন। আপনি যদি ধীরে ধীরে এটি গ্রহণ করেন এবং এটি প্রয়োগ করে শুরু করেন যেখানে আপনি সর্বনিম্ন ব্যয়ের জন্য সর্বাধিক উপকার পাবেন, আপনি ইউনিট পরীক্ষার মানটি প্রদর্শন করতে সক্ষম হতে পারবেন এবং লোককে বোঝানোর আরও ভাল সুযোগ পাবেন। আমি বুঝতে পারি এটি যেমনটি শোনাচ্ছে তত সহজ নয় - এটি একটি দৃ usually়প্রত্যয়ী যুক্তি তৈরি করার জন্য সাধারণত কিছু সময় এবং সতর্কতাযুক্ত মেট্রিকের প্রয়োজন হয়।
ইউনিট পরীক্ষাগুলি একটি অন্য সরঞ্জামের মতো একটি সরঞ্জাম এবং এটিকে এমনভাবে প্রয়োগ করা উচিত যাতে সুবিধা (বাগগুলি ধরা) ব্যয়কে ছাড়িয়ে যায় (সেগুলি লেখার প্রচেষ্টা) effort / যেখানে তারা উপলব্ধি করে না এবং তাদের মনে রাখবেন যে তারা কেবল আপনার সরঞ্জামগুলির অস্ত্রাগার (যেমন পরিদর্শন, জোর, কোড বিশ্লেষক, আনুষ্ঠানিক পদ্ধতি ইত্যাদি) এর অংশ। আমি আমার বিকাশকারীদের যা বলি তা হ'ল:
তারা কোনও পদ্ধতির জন্য পরীক্ষা লেখার বিষয়টি বাদ দিতে পারে যদি তাদের কাছে প্রয়োজনীয় তাত্পর্যপূর্ণ যুক্তি থাকে তবে (উদাহরণস্বরূপ এটির পক্ষে মূল্যবান হওয়া খুব সহজ বা এর পক্ষে মূল্যবান হওয়াও খুব কঠিন) এবং কীভাবে পদ্ধতিটি অন্যথায় যাচাই করা হবে (উদাহরণস্বরূপ পরিদর্শন, দাবি) , আনুষ্ঠানিক পদ্ধতি, ইন্টারেক্টিভ / ইন্টিগ্রেশন পরীক্ষা)। তাদের বিবেচনা করা দরকার যে পরিদর্শন এবং ফর্মাল প্রুফের মতো কিছু যাচাইকরণ একটি সময়ে করা হয়েছে এবং তারপরে প্রতিবার উত্পাদনের কোডটি পরিবর্তন করা উচিত এবং ইউনিট পরীক্ষা এবং দৃser়তাগুলি রিগ্রেশন টেস্ট হিসাবে ব্যবহার করা যেতে পারে (একবার লিখিত এবং তারপরে বারবার কার্যকর করা হয়েছিল) )। কখনও কখনও আমি তাদের সাথে একমত হই, তবে প্রায়শই আমি একটি পদ্ধতি সত্যই খুব সাধারণ বা ইউনিট পরীক্ষার পক্ষে খুব কঠিন কিনা তা নিয়ে বিতর্ক করব।
যদি কোনও বিকাশকারী যুক্তি দেখান যে কোনও পদ্ধতি ব্যর্থ হওয়ার পক্ষে খুব সহজ বলে মনে হচ্ছে, তবে এটির জন্য একটি সাধারণ 5-লাইনের ইউনিট পরীক্ষা লেখার জন্য 60 সেকেন্ডের প্রয়োজন কি নয়? এই 5 টি লাইন কোড পরের বছর বা তারও বেশি সময় ধরে প্রতি রাতে চলবে (আপনি রাত্রে তৈরি করেন, তাই না?) এবং প্রচেষ্টাটি উপযুক্ত হবে যদি একবারই এমন সমস্যা দেখা দেয় যা সনাক্ত করতে 15 মিনিট বা তার বেশি সময় নিয়েছে এবং ডিবাগ। এছাড়াও, সহজ ইউনিট পরীক্ষাগুলি লিখতে ইউনিট পরীক্ষার গণনা চালানো হয়, যা বিকাশকারীকে দেখতে দুর্দান্ত দেখায়।
অন্যদিকে, যদি কোনও বিকাশকারী যুক্তি দেখান যে কোনও পদ্ধতিটি পরীক্ষা ইউনিট করা খুব কঠিন বলে মনে হচ্ছে (প্রয়োজনীয় তাত্পর্যপূর্ণ প্রচেষ্টার জন্য মূল্য নয়), সম্ভবত এটি একটি ভাল ইঙ্গিত যে সহজ অংশগুলি পরীক্ষা করার জন্য পদ্ধতিটি বিভক্ত বা রিফ্যাক্টর করা দরকার। সাধারণত, এগুলি হ'ল পদ্ধতিগুলি যা সিঙ্গলটনের মতো অসাধারণ সংস্থানসমূহ, বর্তমান সময়, বা কোনও ডাটাবেস ফলাফল সেটের মতো বাহ্যিক সংস্থানগুলিতে নির্ভর করে। এই পদ্ধতিগুলির সাধারণত একটি পদ্ধতিতে রিফ্যাক্টর করা দরকার যা সংস্থানটি পায় (যেমন কলগুলি গেটটাইম () কল করে এবং এমন একটি পদ্ধতি যা সংস্থানটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে (উদাহরণস্বরূপ প্যারামিটার হিসাবে টাইমস্ট্যাম্প নেয়)। আমি তাদের রিসোর্সটি পুনরুদ্ধার করে এমন পদ্ধতিটি পরীক্ষা করতে এড়িয়ে চলি এবং তারা পরিবর্তে সেই পদ্ধতির জন্য একটি ইউনিট পরীক্ষা লিখতে দেয় যা এখন সংস্থান হিসাবে একটি সংস্থান হিসাবে গ্রহণ করে। সাধারণত, এটি ইউনিট পরীক্ষা লেখাকে অনেক সহজ করে তোলে এবং তাই লেখার পক্ষে সার্থক হয়।
বিকাশকারীকে তাদের ইউনিট পরীক্ষাগুলি কতটা বিস্তৃত হওয়া উচিত তার একটি "বালিতে রেখা" আঁকতে হবে। পরে বিকাশে, যখনই আমরা কোনও ত্রুটি খুঁজে পাই, তাদের আরও নির্ধারণ করা উচিত যে আরও ইউনিট পরীক্ষাগুলিতে সমস্যাটি ধরা পড়েছে কিনা। যদি তাই হয় এবং যদি এই জাতীয় বাগগুলি বারবার ক্রপ হয় তবে ভবিষ্যতে আরও বিস্তৃত ইউনিট পরীক্ষা লেখার জন্য তাদের "লাইন" সরিয়ে নেওয়া দরকার (বর্তমান বাগের জন্য ইউনিট পরীক্ষা যোগ বা সম্প্রসারণের মাধ্যমে শুরু করা)। তাদের সঠিক ভারসাম্য খুঁজে পাওয়া দরকার।
তার গুরুত্বপূর্ণ ইউনিট পরীক্ষা উপলব্ধি করার জন্য একটি কবচ নয় এবং সেখানে হয় অত্যধিক ইউনিট টেস্টিং যেমন একটা জিনিস। আমার কর্মক্ষেত্রে, যখনই আমরা একটি শেখা পাঠ করি, আমি অনিবার্যভাবে শুনতে পাই "আমাদের আরও ইউনিট পরীক্ষা লিখতে হবে"। ম্যানেজমেন্ট চুক্তিতে সম্মতি জানায় কারণ এটি তাদের মাথায় ঝাঁকিয়ে পড়েছে যে "ইউনিট পরীক্ষা" == "ভাল"।
তবে আমাদের "আরও ইউনিট পরীক্ষার" প্রভাব বুঝতে হবে। একজন বিকাশকারী একটি সপ্তাহে কেবল কোডের ~ N লাইন লিখতে পারে এবং সেই কোডটির কত শতাংশ ইউনিট পরীক্ষার কোড বনাম উত্পাদন কোড হওয়া উচিত তা নির্ধারণ করতে হবে। একটি শিথিল কর্মক্ষেত্রে ইউনিট টেস্ট হিসাবে কোডের 10% এবং প্রডাকশন কোড হিসাবে 90% কোড থাকতে পারে, ফলে প্রচুর (খুব বগি হলেও) বৈশিষ্ট্যযুক্ত (এমএস ওয়ার্ড ভাবেন) পণ্য পাওয়া যায়। অন্যদিকে, 90% ইউনিট পরীক্ষা এবং 10% প্রোডাকশন কোড সহ একটি কঠোর দোকানে খুব কম বৈশিষ্ট্যযুক্ত ("" vi "ভাবেন) সহ একটি রক শক্ত পণ্য থাকবে। পরবর্তী পণ্য ক্র্যাশিংয়ের বিষয়ে আপনি কখনও শুনবেন না, তবে কোডটির মানের সাথে যতটা সম্পর্ক রয়েছে তেমন পণ্যটি বিক্রি না করায় এর সাথে তার যথেষ্ট সম্পর্ক রয়েছে।
সবচেয়ে খারাপ বিষয়, সফ্টওয়্যার বিকাশের সম্ভবত একমাত্র নিশ্চিততা হ'ল "পরিবর্তন অনিবার্য"। ধরে নিন কঠোর দোকান (90% ইউনিট পরীক্ষা / 10% উত্পাদন কোড) এমন একটি পণ্য তৈরি করে যার ঠিক 2 টি বৈশিষ্ট্য রয়েছে (অনুমান করে 5% উত্পাদন কোড == 1 বৈশিষ্ট্য)। যদি গ্রাহক উপস্থিত হন এবং বৈশিষ্ট্যগুলির মধ্যে 1 টি পরিবর্তন করেন তবে সেই পরিবর্তনটি কোডের 50% (ইউনিট পরীক্ষার 45% এবং উত্পাদন কোডের 5%) ট্র্যাশ করে। ল্যাক্স শপের (10% ইউনিট পরীক্ষা / 90% উত্পাদন কোড) এর 18 টি বৈশিষ্ট্যযুক্ত একটি পণ্য রয়েছে যার মধ্যে কোনওটি খুব ভাল কাজ করে না। তাদের গ্রাহক তাদের বৈশিষ্ট্যগুলির 4 টির জন্য প্রয়োজনীয়তাগুলি পুরোপুরি পুনর্নির্মাণ করে। যদিও পরিবর্তনটি চারগুণ বড়, তবুও কোড বেসের অর্ধেক অংশ ট্র্যাশ হয়ে যায় (~ 25% = ~ 4.4% ইউনিট পরীক্ষাগুলি + 20% উত্পাদন কোড)।
আমার বক্তব্যটি হ'ল আপনাকে যোগাযোগ করতে হবে যে আপনি খুব সামান্য এবং অত্যধিক ইউনিট পরীক্ষার মধ্যে যে ভারসাম্যটি বুঝতে পেরেছেন - মূলত আপনি ইস্যুটির উভয় পক্ষেই ভেবেছিলেন। আপনি যদি আপনার সমবয়সীদের এবং / অথবা এটির পরিচালনাকে বোঝাতে পারেন তবে আপনি বিশ্বাসযোগ্যতা অর্জন করতে পারেন এবং সম্ভবত তাদের জয় করার আরও ভাল সুযোগ থাকতে পারে।