আপনার ইউনিট পরীক্ষা কত গভীর?


88

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

আমার প্রশ্ন আপনি কোন স্তরের গ্রানুলারিটির সাথে আপনি ইউনিট পরীক্ষা লেখেন?

..আর কি খুব বেশি টেস্ট করার কেস আছে?

উত্তর:


221

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

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


40
বিশ্ব ভাবছে না কেন্ট বেক এই কথা বলবে! বিকাশকারীদের এখানে রয়েছে 100% কভারেজ যথাযথভাবে অনুসরণ করে কারণ তারা মনে করে এটি কেন্ট বেক যা করবে! আমি অনেককে বলেছি যে আপনি বলেছেন, আপনার এক্সপি বইয়ে, আপনি সর্বদা ধর্মীয়ভাবে টেস্ট ফার্স্ট মানেন না। তবে আমিও অবাক।
চার্লি ফুল

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

4
আমি কভারেজ আগ্রহী না। আমি ব্যর্থ পরীক্ষার প্রতিক্রিয়া হিসাবে লিখিত ছিল না যে মিস্টার বেক কত ঘন ঘন কোড প্রতিশ্রুতি খুব আগ্রহী।
শেলডনহ

4
@ রিকার্ডোরোড্রিগস, আপনি যে কোডটি অন্য লোকেরা পরে লিখবেন তা কভার করার জন্য আপনি পরীক্ষা লিখতে পারবেন না। এটাই তাদের দায়িত্ব।
কিফ

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

20

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

  1. বাগ ঠিক করা হয়েছে;
  2. বাগটি আবার প্রদর্শিত হবে না।

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


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

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

@ j_random_hacker হ্যাঁ, অবশ্যই পঠনযোগ্যতা গুরুত্বপূর্ণ। টেস্টগুলি ডকুমেন্টেশনের একটি ফর্ম এবং প্রডাকশন কোডের মতো গুরুত্বপূর্ণ। আমি সম্মত হই যে বড় পরিবর্তনগুলির জন্য স্ক্র্যাপিং পরীক্ষাগুলি একটি ভাল জিনিস (টিএম) এবং সেই পরীক্ষাগুলি ইন্টারফেস স্তরে করা উচিত।
জনো নোলান

19

সবকিছু যতটা সম্ভব সহজ করা উচিত, তবে সহজ নয়। - এ আইনস্টাইন

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


হ্যাঁ এটি অস্পষ্ট ... এর অর্থ কি কনস্ট্রাক্টর হিসাবে অংশীদারি আচরণ নয় আমাদের এটি পরীক্ষা করা উচিত নয়। তবে আমার কি MyClass.DoSomething () পরীক্ষা করা উচিত?
জনো নোলান

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

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

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

15

যারা "সমস্ত কিছুর" পরীক্ষার প্রস্তাব দেয়: তাদের বুঝতে হবে যে "সম্পূর্ণ পরীক্ষার" মতো একটি পদ্ধতির int square(int x)জন্য সাধারণ ভাষা এবং সাধারণ পরিবেশে প্রায় 4 বিলিয়ন পরীক্ষার কেস প্রয়োজন।

বস্তুত, এটা যে এর চেয়ে এমনকি খারাপ আছে: একটি পদ্ধতি void setX(int newX)এছাড়াও বাধ্য হয় না বাদ দিয়ে অন্য কোন সদস্যদের মান পরিবর্তন করতে x- আপনি যে পরীক্ষা obj.y, obj.zইত্যাদি সব কলিং পর অপরিবর্তিত থাকবে obj.setX(42);?

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


9

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

আপনার কনস্ট্রাক্টর বৈশিষ্ট্য নির্ধারণ না করে যদি পরে ত্রুটি হতে পারে, তবে সেগুলি সেট করা আছে তা পরীক্ষা করে নেওয়া ওভারকিল নয়।


হ্যাঁ এবং এটি অনেক ধরণের সম্পত্তি এবং অনেক কনস্টাক্টর সহ একটি শ্রেণীর জন্য একটি বাইন্ড।
জন্নো নোলান

তত তুচ্ছ সমস্যাটি যেমন (কোনও সদস্যকে শূন্যে ভুলে যাওয়া ভুলে যাওয়া), এটির ডিবাগ করতে তত বেশি সময় লাগবে।
লেভ

5

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

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


5

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

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


4

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

অত্যধিক পরীক্ষার ক্ষেত্রে এটি বিতর্কযোগ্য। কেউ কেউ বলতেন যে দৃ everything়তার জন্য সমস্ত কিছু পরীক্ষা করা উচিত, আবার কেউ কেউ বলে থাকেন যে দক্ষ পরীক্ষার জন্য, কেবল যে জিনিসগুলি ভাঙতে পারে (যেমন যুক্তি) তা পরীক্ষা করা উচিত।

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

সুতরাং, না - আমি বলব যে সাধারণ অর্থে "অত্যধিক" পরীক্ষার মতো জিনিস নেই, কেবল ব্যক্তিদের জন্য।


3

পরীক্ষা চালিত বিকাশের অর্থ হ'ল যখন আপনার সমস্ত পরীক্ষা পাস হয় আপনি কোডিং বন্ধ করে দেন।

আপনার যদি কোনও সম্পত্তির জন্য কোনও পরীক্ষা না থাকে, তবে কেন আপনি এটি বাস্তবায়ন করবেন? যদি আপনি "অবৈধ" কার্যভারের ক্ষেত্রে প্রত্যাশিত আচরণটি পরীক্ষা / সংজ্ঞায়িত না করেন তবে সম্পত্তিটি কী করবে?

সুতরাং আমি এক শ্রেণীর প্রদর্শন করা উচিত প্রতিটি আচরণ পরীক্ষা করার জন্য করছি। "আদিম" বৈশিষ্ট্য সহ।

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

[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{

    private MyObject obj = null;

    public override void SetUp() { obj = new MyObject(); }
    public override void TearDown() { obj = null; }

    public override int Get() { return obj.SomeProperty; }
    public override Set(int value) { obj.SomeProperty = value; }

    public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
    public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }

}

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

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


আমি এমবিউনিতের একটি উপস্থাপনায় গিয়েছিলাম। এটা দেখতে অসাধারণ.
জনো নোলান

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

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

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

1

আমি সর্বাধিক সম্ভাব্য কভারেজে পৌঁছানোর জন্য ইউনিট পরীক্ষা করি। যদি আমি কোনও কোডে পৌঁছতে না পারি, তবে কভারেজ যতক্ষণ সম্ভব পূর্ণ না হওয়া পর্যন্ত আমি রিফ্যাক্টর

লেখার পরীক্ষা অন্ধ করার পরে, আমি সাধারণত প্রতিটি বাগ প্রজনন করে একটি পরীক্ষার কেস লিখি

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


1

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

আমি স্বীকার করি যে এটি সমস্ত ত্রুটিগুলি কভার করবে না এবং এগুলি ক্যাপচারের জন্য অন্যান্য traditionalতিহ্যগত পরীক্ষা পদ্ধতি ব্যবহার করবে না।


0

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

আপনি খুব পরীক্ষা করতে পারেন? সম্ভবত, তবে সম্ভবত সাধারণভাবে সাবধানতার দিক থেকে ভুল করা ভাল, যদিও এটি আপনার প্রয়োগটি কীভাবে মিশন-সমালোচনামূলক তা নির্ভর করবে।


0

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


0

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

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

আপনি বলেন নি কেন আর্কিটেকচার আপনিও কোডিং করছেন। কিন্তু জাভা আমি ব্যবহারের জন্য ম্যাভেন 2 , JUnit , DbUnit , Cobertura , & EasyMock


এটি কোনটি মোটামুটি ভাষা-অজ্ঞাত প্রশ্ন হিসাবে আমি বলিনি।
জন্নো নোলান

টিডিডিতে ইউনিট টেস্টিং কেবল আপনাকে কোডটি লেখার সময় কভার করে না, এটি আপনার কোডটি অন্তর্ভুক্তকারী ব্যক্তির বিরুদ্ধেও সুরক্ষা দেয় এবং তারপরে ভাবেন যে এটি প্রাপ্তির অভ্যন্তরে কোনও মান ফর্ম্যাট করে তোলে!
প্যাক্সিক

0

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

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

যদি আপনার প্রযোজকটি কখনও অযৌক্তিক হয় তবে আপনি তার জন্য এখনও একটি পরীক্ষা যুক্ত করতে পারেন।


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

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

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

0

উত্স কোডটি পরীক্ষা করুন যা আপনাকে এটি সম্পর্কে উদ্বিগ্ন করে তোলে।

যতক্ষণ আপনি এতে ভুল করেন না এমন কোডের অংশগুলি পরীক্ষা করার জন্য আপনি কার্যকর না you

বাগফিক্সগুলি পরীক্ষা করুন, যাতে আপনি প্রথমবার এবং শেষ বার কোনও বাগ ঠিক করেন।

অস্পষ্ট কোড অংশগুলির আস্থা অর্জনের জন্য পরীক্ষা করুন, যাতে আপনি জ্ঞান তৈরি করেন।

ভারী এবং মাঝারি রিফ্যাক্টরিংয়ের আগে পরীক্ষা করুন, যাতে আপনি বিদ্যমান বৈশিষ্ট্যগুলি ভঙ্গ না করেন।


0

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

  1. আপনি যে ইউনিট পরীক্ষা করতে চান সেই পদ্ধতির সাইক্লোমেটিক জটিলতা মান নির্ধারণ করুন (উদাহরণস্বরূপ ভিজ্যুয়াল স্টুডিও 2010 আলটিমেট এটি স্ট্যাটিক বিশ্লেষণ সরঞ্জামগুলির সাহায্যে আপনার জন্য গণনা করতে পারে; অন্যথায়, আপনি এটি ফ্লোগ্রাফ পদ্ধতিতে - http://users.csc মাধ্যমে হাতে গণনা করতে পারেন । Calpoly.edu/~jdalbey/206/ বক্তৃতা / বেসিসপথটিউটোরিয়াল / সূচক html )
  2. আপনার পদ্ধতির মাধ্যমে প্রবাহিত স্বাধীন পাথগুলির ভিত্তির সেটটি তালিকাভুক্ত করুন - ফ্লোগ্রাফ উদাহরণের জন্য উপরের লিঙ্কটি দেখুন
  3. পদক্ষেপ 2 এ নির্ধারিত প্রতিটি স্বতন্ত্র ভিত্তিক পাথের জন্য ইউনিট পরীক্ষা প্রস্তুত করুন

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