unit testing - ইউনিট টেস্টিং প্রচেষ্টা প্রচেষ্টা?




unit-testing (20)

Thetalkingwalnut জিজ্ঞাসা:

ইউনিট টেস্টিংয়ের মূল্যের দলের সন্দেহভাজন বিকাশকারীদের কিছুটা ভাল উপায় কী?

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

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

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

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

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

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

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

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

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

খারাপ, এখনো সফ্টওয়্যার বিকাশের একমাত্র নিশ্চিততা হল "পরিবর্তন অনিবার্য"। কঠোর দোকানটি ধরুন (90% ইউনিট পরীক্ষা / 10% উত্পাদন কোড) এমন পণ্য তৈরি করে যা ঠিক ২ টি বৈশিষ্ট্য রয়েছে (উত্পাদন কোডের 5% অনুমান == 1 বৈশিষ্ট্য)। যদি গ্রাহক বরাবর আসে এবং 1 টি বৈশিষ্ট্য পরিবর্তন করে তবে সেই পরিবর্তনটি কোডের 50% (ইউনিট পরীক্ষাগুলির 45% এবং উত্পাদন কোডের 5%) ট্র্যাশ করে। ল্যাক্স শপ (10% ইউনিট পরীক্ষা / 90% উত্পাদন কোড) 18 টি বৈশিষ্ট্য সহ একটি পণ্য রয়েছে, যার মধ্যে কোনটি খুব ভালভাবে কাজ করে না। তাদের গ্রাহক সম্পূর্ণরূপে তাদের বৈশিষ্ট্য 4 জন্য প্রয়োজনীয়তা revamps। যদিও পরিবর্তনটি 4 গুণ বড়, কোড কোডের অর্ধেকেরও বেশি অংশ ট্র্যাশ হয়ে যায় (~ 25% = ~ 4.4% ইউনিট পরীক্ষা + উত্পাদন কোডের 20%)।

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

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


[আমি উপরে দেখতে দেখতে যে একটি বিন্দু আছে]

"প্রতিটি ইউনিট পরীক্ষা, তারা অপরিহার্যভাবে এটি বুঝতে না - FACT"

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

যে ইউনিট টেস্টিং - মৌলিক এবং খারাপভাবে একত্র করা কিন্তু আপনি কয়েক ক্ষেত্রে জন্য কোড টুকরা পরীক্ষা।

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

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


আমাদের অফিসে প্রতিদিন একটি বিনিময় হয় যা এরকম কিছু যায়:

"ম্যান, আমি শুধু একক পরীক্ষা ভালোবাসি, আমি কিছু কাজ করার পরিবর্তে বেশ কয়েকটি পরিবর্তন করতে সক্ষম হয়েছি, এবং তারপর নিশ্চিত হয়েছি যে আমি আবার পরীক্ষা চালানোর মাধ্যমে কিছু ভাঙ্গিনি ..."

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

কিন্তু, যে উপেক্ষা, এখানে আমার প্রচেষ্টা!

  1. ইউনিট টেস্টগুলি আপনাকে দ্রুত কোডে বড় পরিবর্তন করতে দেয়। আপনি জানেন যে এটি এখন কাজ করে কারণ আপনি পরীক্ষাগুলি চালাচ্ছেন, যখন আপনি যে পরিবর্তনগুলি করতে চান সেগুলি আপনাকে করতে হবে, আপনাকে আবার পরীক্ষাগুলি পরীক্ষা করতে হবে। এই ঘন্টা বাঁচায়।

  2. কোডিং বন্ধ করার সময় টিডিডি আপনাকে বুঝতে সাহায্য করে। আপনার পরীক্ষাগুলি আপনাকে আস্থা দেয় যে আপনি এখন যথেষ্ট পরিমাণে করেছেন এবং tweaking এবং পরবর্তী জিনিসটিতে চলে যেতে পারেন।

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

  4. TDD কোডিং কোষ্ঠকাঠিন্য সাহায্য করে। লেখার একটি বড় এবং daunting টুকরা সম্মুখীন মুখোমুখি হলে পরীক্ষা দ্রুত আপনি চলন্ত পেতে হবে।

  5. ইউনিট টেস্টগুলি আপনি যে কোডটি ব্যবহার করছেন তার নকশাটি সত্যিই বুঝতে সহায়তা করে। কিছু করার জন্য কোড লেখার পরিবর্তে, আপনি কোডটি সাপেক্ষে সমস্ত শর্তগুলি রূপরেখা দিয়ে শুরু করছেন এবং আপনি এর থেকে কোনও আউটপুট আশা করবেন।

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

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

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

  9. ভালো ইউনিট পরীক্ষা ডকুমেন্টকে সাহায্য করতে পারে এবং কী করতে হবে তা নির্ধারণ করতে পারে

  10. ইউনিট পরীক্ষা কোড পুনরায় ব্যবহার সঙ্গে সাহায্য। আপনার নতুন প্রকল্পে আপনার কোড এবং আপনার পরীক্ষা উভয় স্থানান্তর করুন। আবার পরীক্ষা চালানো পর্যন্ত কোড পরিবর্তন করুন।

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


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


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

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


আমি এখানে সংখ্যাগরিষ্ঠের বিপরীতে দৃষ্টিকোণ থেকে একমত: এটি ঠিক আছে ইউনিট টেস্ট লিখতে না বিশেষ করে প্রোটোটাইপ-ভারী প্রোগ্রামিং (উদাহরণস্বরূপ এআই) ইউনিট পরীক্ষার সাথে একত্রিত করা কঠিন।


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


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

"পরীক্ষার পরে" যাচাইয়ের দৃষ্টিকোণ থেকে ইউনিট পরীক্ষার কথা বলার পরিবর্তে, বাস্তবায়ন করার আগে আপনি একটি স্পেক / পরীক্ষা / ধারণা লেখার জন্য সেট করা প্রকৃত মানটি দেখবেন।

এই সহজ ধারণাটি আমি সফটওয়্যার লিখার উপায়টি পরিবর্তিত করেছি এবং আমি "পুরানো" পথে ফিরে যাব না।

কিভাবে প্রথম উন্নয়ন আমার জীবন পরিবর্তন


ইউনিট টেস্টিং ভাল বিনিয়োগ মূল্য ভাল। কয়েক বছর আগে ইউনিট-পরীক্ষার ব্যবহার শুরু করার পরে, আমি কিছু বাস্তব সুবিধা পেয়েছি:

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

কোড স্নিপেট পরীক্ষা তৈরির ওভারহেড হ্রাসে একটি দুর্দান্ত সাহায্য হতে পারে। স্নিপেটগুলি তৈরি করা কঠিন নয় যা একটি শ্রেণির রূপরেখা তৈরি এবং কয়েক সেকেন্ডের মধ্যে সংশ্লিষ্ট ইউনিট-পরীক্ষা দৃঢ়তা তৈরি করতে সক্ষম করে।


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


ইউনিট পরীক্ষা স্যুট সঙ্গে অক্ষর বাকি বাকি রেখে যখন কোড পরিবর্তন করতে পারেন। এটি একটি মহান সুবিধা। যখন আপনি নতুন বৈশিষ্ট্য কোডিং শেষ করেন তখন আপনি ইউনিট পরীক্ষা সাটি এবং রিগ্রেশন পরীক্ষা স্যুটটি ব্যবহার করেন।


ইউনিট পরীক্ষাগুলি বিশেষভাবে কার্যকর যখন এটি পুনঃসংযোগ বা একটি কোড একটি টুকরা পুনরায় লেখার আসে। আপনি ভাল ইউনিট পরীক্ষা কভারেজ আছে, আপনি আস্থা সঙ্গে refactor করতে পারেন। ইউনিট পরীক্ষা ছাড়া, আপনি কিছু ভাঙ্গা না তা নিশ্চিত করা প্রায়ই কঠিন।


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

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

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

পরামর্শের শেষ অংশটি কেবল আপনার কোডটি পরীক্ষা করার জন্যই নয়, তবে পরীক্ষাটি প্রথমে শুরু করুন (আরো জন্য TDD এবং BDD দেখুন)


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

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

প্রতিটি সময় যখন আপনি রিপোজিটরি থেকে আপডেট করেন তখন নতুন বৈশিষ্ট্যগুলির কারণে ভাঙা পরীক্ষাগুলি আপডেট করার সময়গুলি কার্যকরী এবং মজাদার নয়।


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

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

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

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

পরিবর্তন রাতে ঘটবে না, কিন্তু একটু ধৈর্যের সাথে, আপনি আপনার লক্ষ্য অর্জন করতে পারেন।


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

একটি ইউনিট পরীক্ষা লিখতে অল্প পরিমাণ সময় লাগবে ভবিষ্যতে ডিবাগিং ঘন্টা বাঁচাতে পারেন।


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

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

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


যদি আপনি NUnit ব্যবহার করছেন তবে একটি সহজ কিন্তু কার্যকরী ডেমো Nunit এর নিজস্ব স্যুট (গুলি) তাদের সামনে চালানো হয়। একটি কোডবেজ সরবরাহকারী একটি বাস্তব পরীক্ষা স্যুট দেখে একটি হাজারো শব্দ মূল্যের হয় ...


সন্তুষ্ট করার সর্বোত্তম উপায় ... একটি বাগ খুঁজুন, এটির জন্য একটি ইউনিট পরীক্ষা লিখুন, বাগ সংশোধন করুন।

যে বিশেষ বাগ আবার কখনও প্রদর্শিত অসম্ভাব্য, এবং আপনি আপনার পরীক্ষা দিয়ে এটি প্রমাণ করতে পারেন।

আপনি যদি যথেষ্ট করেন, অন্যদের দ্রুত ধরা হবে।


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

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







unit-testing