আমার টেস্ট কোডটি কীভাবে পরীক্ষা করব?


22

বেশিরভাগ সফটওয়্যার বিকাশকারী যেগুলির সাথে সম্মত হন সেগুলির মধ্যে একটি হ'ল আপনি যদি পরীক্ষা না করেন তবে সঠিকভাবে কাজ করার জন্য কোডের উপর নির্ভর করা উচিত নয়। যদি আপনি এটি পরীক্ষা না করেন তবে এটিতে লুকিয়ে থাকা বাগ থাকতে পারে যা কেবলমাত্র আপনাকে রাস্তায় আরও বেশি কাজ করতে পারে।

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

আমার কাছে মনে হচ্ছে এটি করার সর্বোত্তম উপায় হ'ল পরীক্ষাটি বাগি কোডের জন্য ব্যর্থ হয়েছে কিনা তা নিশ্চিত করা * যদি আমি কোডটিতে পর্যায়ক্রমে 2 মিনিট সময় যুক্ত করি এবং এটি ব্যর্থ হয় তা নিশ্চিত করা আমার পক্ষে একটি গ্রহণযোগ্য ডিগ্রি থাকা উচিত পরীক্ষা 'কাজ'। এটি আমার দ্বিতীয় প্রশ্নের কাছে নিয়ে আসে: বাগের পরীক্ষাগুলির দ্বারা এটি ধরা পড়েছে তা নিশ্চিত করার জন্য ভাল উপায়গুলি কী? আমি কি এলোমেলোভাবে বিবৃতি দিয়ে মন্তব্য করা উচিত, if-elseএটির পরিস্থিতি উপেক্ষা করে একটি এর ভুল শাখা চালানো হয়েছে তা নিশ্চিত করা এবং পার্শ্ব-প্রতিক্রিয়া ইত্যাদির সাথে কোডের সম্পাদনের ক্রম পরিবর্তন করা উচিত, যতক্ষণ না আমি সন্তুষ্ট না হওয়া পর্যন্ত আমার পরীক্ষাগুলি সবচেয়ে বেশি ধরা পড়বেসাধারণ বাগ? পেশাদার বিকাশকারীরা কীভাবে যাচাই করবেন যে তাদের পরীক্ষাগুলি আসলে তারা যা করার কথা বলেছিল তা করে? তারা কি কেবল পরীক্ষাগুলি কার্যকর বলে ধরে নিয়েছে, বা সেগুলি পরীক্ষা করার জন্য কি সময় নেয়? তা হলে তারা কীভাবে পরীক্ষা দেয়?

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

* 'বাগ-ফ্রি' কোড পরীক্ষার সময় পরীক্ষাটি পাস হয় কিনা তা আমি পরীক্ষা করে দেখতে পারি, তবে পরীক্ষার জন্য কোড হিসাবে কোডটি ব্যবহার করা বেশ পিছনের দিকে মনে হচ্ছে ...


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


আরও সরঞ্জাম ব্যবহার করার আগে, আপনার প্রকৃত সরঞ্জামগুলি আরও ভাল ব্যবহার করুন । কম পরীক্ষা লিখুন, তবে আরও দক্ষ এবং আরও ভাল লিখিত পরীক্ষাগুলি। আপনি বুঝতে পারেন না এমন কিছুতে আপনি বিশ্বাস করতে পারবেন না।
স্টিভ চ্যামিলার্ড

উত্তর:


16

টিডিডির জন্য প্রমিত প্রবাহটি হ'ল:

  1. একটি ব্যর্থ পরীক্ষা লিখুন। (লাল)
  2. ক্ষুদ্রতম কোড পরিবর্তন করুন যা এটি পাস করে (সবুজ)
  3. রিফ্যাক্টর (এটিকে সবুজ করে রাখা)

এই ক্ষেত্রে আপনার পরীক্ষার জন্য পরীক্ষাটি প্রথম পদক্ষেপ - আপনি কোনও কোড পরিবর্তন করার আগে পরীক্ষা ব্যর্থ হয়েছে তা নিশ্চিত করে।

আমার পছন্দমতো আরেকটি পরীক্ষা হ'ল আপনি কিছু কোড মুছে ফেলতে পারেন এবং এটিকে অন্যভাবে পুনরায় প্রয়োগ করতে পারেন এবং আপনার পরীক্ষাগুলি মোছার পরে ব্যর্থ হয় তবে ভিন্ন জায়গায় একটি অ্যালগরিদম নিয়ে কাজ করে।

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


4
ডাবল বুককিপিং: ইউনিট পরীক্ষা কোডটি এবং তার বিপরীতে পরীক্ষা করে। একই সমস্যাটি বর্ণনা করার জন্য এগুলি দুটি ভিন্ন উপায়। দ্বিগুণ বুককিপিংয়ের মতো, যেখানে আপনি আপনার লেনদেন দুটি পৃথক উপায়ে রেকর্ড করেন এবং উভয়েরই অবশ্যই মোট योगফল পান।
এরিকশাফার

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

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

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

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

9

একটি পদ্ধতির হ'ল মিউটেশন টেস্টিং , জেসটারের মতো একটি সরঞ্জাম ব্যবহার করে :

জেসেস্টার আপনার কোডে কিছুটা পরিবর্তন এনেছে, আপনার পরীক্ষা চালায় এবং পরীক্ষাগুলি পাস হলে জেসের কোনও বার্তা প্রদর্শন করে যা বলেছে এটি কী বদলেছে


4

পরীক্ষার জন্য পরীক্ষা? ওই রাস্তায় যাবেন না। তারপরে আপনার সম্ভবত পরীক্ষার জন্য পরীক্ষার জন্য টেস্টগুলির প্রয়োজন হবে, এবং তারপরে পরীক্ষার জন্য পরীক্ষার জন্য পরীক্ষাগুলি ... আপনি কোথায় থামবেন?

সাধারন পরীক্ষার প্রবাহ এ রকম হয় এবং একজন বিকাশকারী হিসাবে আপনি আপনার বেশিরভাগ সময় 1-3 পয়েন্টে ব্যয় করবেন:

  1. কোড
  2. ইউনিট পরীক্ষা
  3. সংহতকরণ পরীক্ষা
  4. সিস্টেম / অন্যান্য স্বয়ংক্রিয়
  5. কিউএ / মানব পরীক্ষকগণ

আমি যদি বিকল্পভাবে কোডটিতে বাগ যুক্ত করে 2 মিনিট সময় ব্যয় করি (...)

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

আমি কি এলোমেলোভাবে বিবৃতি দিয়ে মন্তব্য করব, যদি নিশ্চিত হয়ে যায় যে যদি অন্যথায় তার শর্তটি উপেক্ষা করে চালিত হয় (...)

আপনি বাস্তবে আপনি যা ভাবেন তা যাচাই করে কিনা তা যাচাই করার জন্য এটি আসলে একটি কার্যকর পন্থা। "টেস্টের পরীক্ষার জন্য পরীক্ষা ..." জিনিসটি একই সমস্যার সাথে ভুগলে এটি সর্বদা ভাল বলে আমি মনে করি না : আপনি 100% কাজ পরীক্ষা করছেন এমন কোড জেনে কোড পরিবর্তন করা কখন বন্ধ করবেন?

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


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

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

3

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


0

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

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


-2

এমন একটি মিউটেশন টেস্টিং রয়েছে যা পরীক্ষার উপযুক্ততা এবং মানকে মূল্যায়ন করে এবং পরিমাপ করে।

আমরা এটি "পরীক্ষা" নিজেই মূল্যায়নের জন্য ব্যবহার করতে পারি।

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

যদি টেস্টএ কোড এবং এর রূপান্তর কোডগুলির মধ্যে পার্থক্য খুঁজে না পায়, তার অর্থ টেস্টএর মূল কোডটি পরীক্ষা করার জন্য খুব রুক্ষ নিয়ম রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.