কীভাবে আপনি ইউনিট পরীক্ষাকে আরও আনন্দদায়ক করেছেন? [বন্ধ]


18

আপনি যদি সর্বদা ইউনিট পরীক্ষা পছন্দ করে থাকেন তবে আপনার পক্ষে ভাল! তবে দুর্ভাগ্যবানদের জন্য যারা এর পছন্দ অনুসারে জন্মগ্রহণ করেননি, আপনি কীভাবে এই কাজটিকে আরও উপভোগ্য করতে পেরেছেন?

এটি "ইউনিট পরীক্ষার সঠিক উপায় কী" প্রশ্ন নয়। আমি কেবল সামান্য ব্যক্তিগত কৌশলগুলি জানতে চাই যা ইউনিট পরীক্ষাগুলি লেখার একঘেয়েমি (আমি বলার সাহস) হ্রাস করে।


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

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

উত্তর:


22

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

আমি দেখতে পাই যে আমার জন্য দুটি ইউনিট পরীক্ষার উপায় রয়েছে যা সত্যই এটি উপভোগযোগ্য:

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

12

শ্রেষ্ঠত্ব স্মাগ।

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

* - না, আমি করব না।

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


7

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

উদাহরণস্বরূপ, কিছু লোক একটি ফাংশন লিখবেন এবং তারপরে কয়েকটি মানটি পরীক্ষা করে এটি কার্যকারী তা নিশ্চিত করার জন্য একটি ইন্টারেক্টিভ সেশনটি খুলবেন:

def fact x
  if x == 0
    1
  else 
    x * fact(x-1)
  end
end

>> fact 10
=> 3628800
>> fact 7
=> 5040

তবে এখন আপনি একটি বাগ আবিষ্কার করেছেন:

>> fact -1
SystemStackError: stack level too deep
    from (irb):2:in `fact'
    from (irb):5:in `fact'
    from (irb):10

সুতরাং আপনি এটি ঠিক করুন:

def fact x
  if x < 0
    raise "Can't take the factorial of a negative number"
  elsif x == 0
    1
  else 
    x * fact(x-1)
  end
end

>> fact -1
RuntimeError: Can't take the factorial of a negative number
    from (irb):3:in `fact'
    from (irb):10

তবে এটি এখনও কার্যকর হয় তা নিশ্চিত করার জন্য এখন আপনার সত্যিকারের পরীক্ষা করা উচিত:

>> fact 10
=> 3628800
>> fact 7
=> 5040

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

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

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


@ বিরান, আমি সম্মত কিন্তু এই সমস্ত এটি "সঠিক" জিনিসটিকে পরিণত করে। তবে কীভাবে এটি উপভোগ করতে পারে? এমনকি কিছুটা?
অভিবাদন জানায়

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

সুতরাং, এটি খারাপভাবে সময় ব্যয় করুন, যাতে এটি সঠিকভাবে তুলনা করে মজা অনুভব করে? ... এটি সম্ভবত কার্যকর হতে পারে ....
ব্লেয়ারহিপ্পো

@ বিরান, আমি একমত, সবার অবশ্যই এটি অবশ্যই "প্রথমে" করা উচিত - কেবল একঘেয়েমি দূর করার জন্য নয়, তবে আমি মনে করি যে ইউনিট পরীক্ষার সত্যিকারের সুবিধা অর্জনের জন্য এটি করার সঠিক উপায়।
14:51

@ বিরান, আপনাকে ধন্যবাদ! আমি সম্প্রতি আমার একটি শখের প্রকল্পে টিডিডি ব্যবহার করেছি এবং এটি ইউনিট পরীক্ষার বিষয়ে আমার ধারণা পাল্টে গেছে।
30:10

5

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


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

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

ওহ আমি পুরোপুরি একমত! এলোমেলো বাগ সহ একটি সিস্টেম ঘুমহীন রাত জাগাতে পারে .. আমার পছন্দটি একটি অবাস্তব বিশ্বে কেবল পছন্দ ছিল যেখানে মজা করা ব্যতীত অন্য কিছুই ছিল না!

3

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


3

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


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

1

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


হ্যাঁ, আপনি কেন বলেন ইউনিট পরীক্ষা খুব বেশি চিন্তাভাবনার প্রয়োজন নেই? আপনি যদি টিডিডি নিয়ে কাজ করেন তবে এতে অনেক চিন্তাভাবনা জড়িত। এটা কি সত্য নয়?

আপনি ঠিক বলেছেন, আমি টিডিডি আমলে নিই নি।
ট্যামস সেজেলি

0

কখনও কখনও নিজেকে অনুপ্রাণিত করার জন্য, আমি দিনের শুরুতে আমার বর্তমান "কোড কভারেজ" লিখব। তারপরে প্রতিবার যখন আমি একটি পরীক্ষা লিখি এবং এটি পাস করি তখন আমি স্যুটটি চালাব এবং কভারেজ নম্বর আপডেট করব। এটি মজাদার এবং আমি কেন এটি করছি তা আমাকে মনে করিয়ে দেয় helps (অন্যান্য কারণগুলিও রয়েছে তবে আমি সংখ্যাগুলি পছন্দ করি Maybe সম্ভবত এটি কেবল আমার!)


0

নিজেকে বিভ্রান্ত করার চেষ্টা না করে যে আমি আমার মনকে এই ভেবে ভ্রান্ত করতে পারি যে ইউনিট পরীক্ষাটি যে কোনও স্থায়ী সময়ের জন্য উপভোগযোগ্য হতে পারে।

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

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

অবিশ্বাস্যরূপে, উত্তরটি একটি দুর্দান্ত "না"।

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


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

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