ইউনিট পরীক্ষায় আপনি কত সময় ব্যয় করেন?


27

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

ফলস্বরূপ, তবে, আমি টিডিডি, পরীক্ষার সরঞ্জাম, অনুশীলন ইত্যাদি সম্পর্কে অনেক কিছু শিখেছি

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

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


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

টিডিডি মানে কোডের আগে আপনি পরীক্ষা লিখুন। এটি "সত্যের পরে" পরীক্ষার মতো মনে হচ্ছে যা অন্যরকম।

পরিচালকরা কৌশলটির যত্ন নেননি, আমার দলের নেতা টিডিডির উপর জোর দিয়েছিলেন। এটি উভয়ের সংমিশ্রণ হিসাবে শেষ হয়েছিল :)
ম্যাগি

: ম্যাগি, আপনি এই আর্টিকেল আকর্ষণীয় হতে পারে fastcompany.com/magazine/06/writestuff.html

সময় অনুমান করার জন্য কি কিছু মেট্রিসিস রয়েছে? জেএস / .NET কোডের জন্য সরঞ্জামগুলি?
Hellboy

উত্তর:


16

যে ইউনিট পরীক্ষার প্রয়োজন তা কতগুলি কারণের উপর নির্ভর করে:

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

10

আমাদের প্রোডাক্ট গ্রুপে আমরা ইউনিট পরীক্ষাগুলি থেকে 50-70% কোড কভারেজ এবং ইউনিট টেস্ট এবং টেস্ট অটোমেশন মিলিয়ে 90% + কভারেজ লক্ষ্য করি। লেখার ইউনিট পরীক্ষাগুলিতে বাজেট করা সাধারণ সময়টি প্রতিটি বৈশিষ্ট্যের জন্য প্রায় 1 দিন সময় লাগে যা কোডিংয়ে 3-4 দিনের মাথা নেয়। তবে এটি অনেক কারণের সাথে পরিবর্তিত হতে পারে।

99% কোড কভারেজ দুর্দান্ত। ইউনিট পরীক্ষা দুর্দান্ত। কিন্তু একক টেস্টিং থেকে 99% কোড কভারেজ? আমি বিশ্বাস করি যে আপনি একক ইউনিট পরীক্ষার মাধ্যমে এতটা কভারেজ পেতে পারেন তা বিশ্বাস করা শক্ত ।

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

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

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


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

2
এজন্য প্রথমে আপনার পরীক্ষা করা উচিত। তারপরে আপনি এমন প্রাকৃতিক জায়গাগুলি খুঁজে পেতে পারেন যেখানে লজিক একসাথে আঠালো।

10

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

আপনি যা চান তা হ'ল যদি আপনি দুর্ঘটনাক্রমে আপনার কার্যকারিতা পরিবর্তন করেন তবে আপনার পরীক্ষাগুলি বিরতি দেয় যাতে আপনি এই জিনিসগুলি যত তাড়াতাড়ি খুঁজে পান। কার্যকারিতা অপ্রত্যাশিতভাবে পরিবর্তিত হলে গ্রাহকরা তীব্রভাবে অপছন্দ করেন।


3
এবং আপনি যখন খারাপ বাগ ঠিক করেন তখন আপনি কেবলমাত্র বি এবং সি প্রবর্তনের জন্য বাগ এ স্থির করেন
জেফো

যদি বি এবং সি পরীক্ষাগুলিতে ধরা পড়ে বা না

"আপনি এখন ভাবেন তার চেয়ে বেশি সময় বজায় রাখবেন" - প্রকৃতপক্ষে, বিশেষত বিবেচনা করে যে এসডাব্লু পণ্যগুলি সাধারণত তাদের পরিকল্পিত জীবনকালকে বহন করে, প্রায়শই দূরে।
পিয়েটার টার্ক

আপনি দীর্ঘমেয়াদী অ্যাপ্লিকেশন পাওয়ার জন্য সত্যই "পরিকল্পনা" করতে পারবেন না কারণ প্রকল্পটি সফল হবে কিনা তা আপনি আগেই বলতে পারবেন না। আপনার সর্বদা এটি বিবেচনা করা উচিত যখন পরীক্ষার জন্য সময় বাজেট করা হয়
ইরান গাল্পেরিন

1
@ ইরান, সুতরাং আপনার ব্যর্থতার পরিকল্পনা করা উচিত যাতে পরীক্ষার জন্য আপনার বাজেট না পড়ে?

4

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

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


হ্যাঁ, আমার জন্য এটি সত্য (আসলে আমি সাধারণত পরীক্ষাগুলিতে কাজ করে এবং প্রতি কয়েক সেকেন্ডে পণ্য কোডে কাজ করি , মিনিট নয়।) সুতরাং আমি যুক্তিযুক্তভাবে 100% সময় পরীক্ষায় কাজ করছি।
জোনাথন হার্টলি

2

আপনি যদি পরীক্ষাগুলিতে সময় ব্যয় না করেন তবে আপনি লাইভ কোডে ডিবাগ করার জন্য আরও বেশি সময় ব্যয় করবেন।
সুতরাং পরীক্ষাগুলি, সমস্ত (বা কোডের 99%) কভার করার জন্য যতটা প্রয়োজন সময় ব্যয় করুন।


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

3
@ কোডার, কারণ লোকেরা অভিজ্ঞতা আছে এবং জানে যে টেস্টগুলি অন্ধ ডিবাগিংয়ের চেয়ে অনেক বেশি কার্যকর জিনিস।
ওজেড

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

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

1
"আপনি যদি সরঞ্জামগুলি জানেন তবে আপনি খুব কমই কোনও সমস্যার মুখোমুখি হন যা ডিবাগ করতে 5 মিনিটেরও বেশি সময় নেয়" " - @ কোডার আমি ভাবছি আপনি কী ধরণের অ্যাপ্লিকেশনগুলি দেখছেন।
কર્ક ব্রডহર્স্ট

2

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

99 +% ইউনিট পরীক্ষার কভারেজ একইভাবে গড় অ্যাপ্লিকেশনের ক্ষেত্রে আশা করা খুব বেশি তবে জীবন সমালোচনামূলক প্রকল্পের জন্য খুব কম।

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


আপনার মোবাইল অ্যাপ্লিকেশনগুলিতে অভিজ্ঞতা আছে? সাধারণ মোবাইল অ্যাপ্লিকেশনটির জন্য গ্রহণযোগ্য পরীক্ষা / বিকাশ অনুপাত কী হবে?
ম্যাগি

@ ম্যাগি, দুর্ভাগ্যক্রমে নয়। (সুতরাং যদি আমার একটি লেখার প্রয়োজন হয় তবে আমি সম্ভবত আমার সাধারণ সময়ের চেয়ে বেশি ইউনিট টেস্টিংয়ে ব্যয় করতে পারতাম :-)
পিটার টারিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.