ইউনিট পরীক্ষাগুলি কীভাবে নকশাকে সহজতর করে?


43

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

আপনি যে প্রশ্নটিকে সদৃশ হিসাবে চিহ্নিত করেছেন তা একই নয়, আমি প্রকৃত উদাহরণগুলিতে আগ্রহী যে এটি কীভাবে সহায়তা করে, কেবল তত্ত্বটি "এটি সহায়তা করে" বলে নয়। আমি নীচের উত্তর এবং মন্তব্য পছন্দ করি তবে আমি আরও শিখতে চাই।



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

4
@ ইউনিট টেস্টিং ইউনিট টেস্টিং স্বয়ংক্রিয়ভাবে টিডিডি বোঝায় না, এটি অন্যরকম প্রশ্ন
জোপ্পে

11
"ইউনিট পরীক্ষা (ক্ষেত্রগুলিতে মানগুলি যাচাই করা হচ্ছে)" - আপনি ইনপুট বৈধকরণের সাথে ইউনিট পরীক্ষাগুলি বিবাদ করছেন বলে মনে হচ্ছে।
jonrsharpe

1
@ জোনারশপে প্রদত্ত যে এটি কোডটি একটি সিএসভি ফাইল পার্সিং করছে, তিনি একটি আসল ইউনিট পরীক্ষার বিষয়ে কথা বলছেন যা একটি নির্দিষ্ট সিএসভি স্ট্রিং যাচাই করে যা প্রত্যাশিত আউটপুট দেয়।
জলিজোকার

উত্তর:


3

ইউনিট পরীক্ষাগুলি কেবল নকশাকে সহজতর করে না, তবে এটি তাদের মূল সুবিধা key

টেস্ট-প্রথম লেখার মাধ্যমে মডুলারিটি এবং পরিষ্কার কোড কাঠামো চালিত হয়।

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

"প্রদত্ত শর্ত এক্স, ব্যবহার Y করবে," প্রায়ই সরবরাহের অসম্পূর্ণ হয়ে যাবে x(যা একটি হল দৃশ্যকল্প এবং যা বর্তমান উপাদানের আচরণ যাচাই করার জন্য পরীক্ষা প্রয়োজন) yএকটি উপহাস, যা একটি কল এ যাচাই করা হবে হয়ে যাবে পরীক্ষার সমাপ্তি (যদি না এটি "প্রত্যাবর্তন করা উচিত y," তবে ক্ষেত্রে পরীক্ষাটি কেবলমাত্র প্রত্যাবর্তনের মানটি স্পষ্টভাবে যাচাই করবে)।

তারপরে, একবার এই ইউনিটটি নির্দিষ্ট হিসাবে আচরণ করলে আপনি আবিষ্কার করেছেন এমন নির্ভরতা ( xএবং এর জন্য y) লিখতে যান writing

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

পরীক্ষাগুলি লেখার পরে আপনাকে বলবে যখন আপনার কোডটি খারাপভাবে কাঠামোযুক্ত।

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

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

যখন আপনার পরিস্থিতিতে খুব জটিল হয়ে ( "যদি xএবং yএবং zতারপর ...") কারণ আপনার বিমূর্ত আরও অনেক কিছু, আপনি জানেন আপনার কোডে করতে উন্নতি আছে।

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

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


@ এসএসইকমিনিউটি: আজ পর্যন্ত মাত্র ২ টি আপোস্ট দিয়ে এই উত্তরটি উপেক্ষা করা খুব সহজ। আমি মাইকেল পালক দ্বারা টকটি উচ্চারণের প্রস্তাব দিচ্ছি যা এই উত্তরের সাথে যুক্ত হয়েছে।
নাম

103

ইউনিট পরীক্ষাগুলির দুর্দান্ত জিনিস হ'ল তারা আপনাকে আপনার কোডটি ব্যবহারের অনুমতি দেয় যাতে অন্যান্য প্রোগ্রামাররা আপনার কোডটি কীভাবে ব্যবহার করবে।

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


7
দুর্দান্ত উত্তর। আমি সর্বদা আমার পরীক্ষাগুলি কোডের প্রথম ক্লায়েন্ট হিসাবে ভাবতে পছন্দ করি; যদি পরীক্ষাগুলি লিখতে কষ্ট হয় তবে এপিআই বা আমি যে বিকাশ করছি সেগুলি গ্রহন করে এমন কোডটি লিখতে কষ্ট হবে painful
স্টিফেন

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

7
@ user949300 - আমি প্রথমে পরীক্ষায় বড় বিশ্বাসী নই। আমার উত্তরটি প্রথমে কোডের ধারণা (এবং অবশ্যই নকশা করা) এর উপর ভিত্তি করে। এপিআইগুলি ইউনিট-পরীক্ষার জন্য নকশা করা উচিত নয়, সেগুলি আপনার গ্রাহকের জন্য ডিজাইন করা উচিত। ইউনিট-পরীক্ষাগুলি আপনার গ্রাহকের আনুমানিক সহায়তা করে তবে তারা একটি সরঞ্জাম tool তারা আপনার সেবা করার জন্য রয়েছে, বিপরীতে নয়। এবং তারা অবশ্যই আপনাকে ক্রেপি কোড তৈরি করা থেকে বিরত করবে না।
টেলাস্টিন

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

2
@ ব্যবহারকারী949300 - আমি এখানে যে ক্লাসিক উদাহরণটি মনে রেখেছিলাম তা হ'ল একটি সংগ্রহস্থল যা একটি কানস্ট্রিং প্রয়োজন। মনে করুন আপনি এটি সর্বজনীন লিখনযোগ্য সম্পত্তি হিসাবে প্রকাশ করেছেন এবং আপনার নতুন () সংগ্রহস্থল স্থাপনের পরে এটি সেট করতে হবে। ধারণাটি হ'ল যে 5 ম বা 6th ষ্ঠ বারের পরে আপনি একটি পরীক্ষা লিখেছেন যা সেই পদক্ষেপ নিতে ভুলে যায় - এবং এর মাধ্যমে ক্র্যাশ হয়ে যায় - আপনি সংযোগকারীকে একটি শ্রেণীর আক্রমণকারী হতে বাধ্য করার দিকে ঝুঁকবেন - কনস্ট্রাক্টারে পাস করেছেন - যার ফলে আপনার এপিআই আরও ভাল এবং এটির আরও বেশি সম্ভাবনা তৈরি করে যে উত্পাদন কোডটি এই ফাঁদটিকে এড়িয়ে চলে can এটি কোনও গ্যারান্টি নয় তবে এটি সাহায্য করে o
স্টিফেন

31

এটি উপলব্ধি করতে আমার বেশ খানিকটা সময় লেগেছিল, তবে পরীক্ষিত চালিত বিকাশের ( ইউনিট পরীক্ষাগুলি ব্যবহার করে ) আসল উপকারিতা (আমার কাছে আপনার মিলটি পরিবর্তিত হতে পারে) এটি হ'ল আপনাকে এপিআই ডিজাইনটি সামনের দিকে করতে হবে !

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

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

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


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

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

@ এন্টপি হ্যাঁ, এটি এপিআই ডিজাইনের একটি অংশ।
থরবজর্ন রাভন অ্যান্ডারসন

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

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

6

আমি 100% এর সাথে সম্মত হব যে ইউনিট পরীক্ষাগুলি "আমাদের ডিজাইন এবং রিফ্যাক্টর জিনিসগুলিকে পরিমার্জন করতে সহায়তা করে" সহায়তা করে।

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

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

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


পদ্ধতির পরামিতিগুলির দীর্ঘ সংখ্যা হ'ল একটি কোড গন্ধ এবং একটি ডিজাইনের ত্রুটি।
সুফিয়ান

5

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

প্রোগ্রামটি বিকশিত হওয়ার সাথে সাথে (ইউনিট টেস্ট সহ) ত্রুটিগুলি অনাবৃত হওয়ার সাথে সাথে আপনি বাগগুলি ঠিক হয়ে গেছে কিনা তা নিশ্চিত করতে পরীক্ষা যুক্ত করতে পারেন।

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

আমি আমার কিছু সহকর্মীর তুলনায় কিছুটা আলগা হতে ঝোঁক, কেননা কোডটি প্রথমে লেখা আছে বা পরীক্ষাটি প্রথমে লেখা আছে কিনা সেদিকে আমি পাত্তা দিই না।


এটি আমার কাছে দুর্দান্ত উত্তর। আপনি কি কয়েকটি উদাহরণ স্থাপন করতে আপত্তি করবেন না, উদাহরণস্বরূপ প্রতিটি ক্ষেত্রে একটি করে (যখন আপনি ডিজাইনের অন্তর্দৃষ্টি পাবেন))
ব্যবহারকারী039402

5

আপনি যখন যথাযথভাবে আপনার পার্সার সনাক্তকরণের মানটি সীমিত করে পরীক্ষা করতে চান আপনি এটি কোনও সিএসভি ফাইল থেকে এক লাইন পাস করতে চাইতে পারেন। আপনার পরীক্ষাটি সরাসরি এবং সংক্ষিপ্ত করতে আপনি এটি একটি পদ্ধতির মাধ্যমে এটি পরীক্ষা করতে চাইতে পারেন যা একটি লাইন গ্রহণ করে।

এটি স্বয়ংক্রিয়ভাবে আপনাকে পৃথক মানগুলি পড়া থেকে রেখাগুলি পৃথক করে তুলবে।

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

একটি প্রাথমিক উদাহরণ, কেবল এটি অনুশীলন শুরু করুন, আপনি কিছুটা সময় যাদুটি অনুভব করবেন (আমার কাছে))


4

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

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

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

public OopsIHardcoded {

   Cache cacheOfExpensiveComputations;

   OopsIHardcoded() {
       this.cacheOfExpensiveComputation = buildBigCache();
   }

   ExpensiveValue computeStuff() {
      //DOES THIS WORK CORRECTLY WHEN CACHE EVICTS DATA?
   }
}

তবে, যখন আমরা নির্ভরতা ইনজেকশন ব্যবহার করি তখন ক্যাশ স্টাফ উচ্ছেদের শুরু করে যখন পদ্ধতিটি কম্পিউট স্টাফ সঠিকভাবে কাজ করে তবে এটি পরীক্ষা করা আরও সহজ। আমরা যা করি তা একটি পরীক্ষা তৈরি করা হয় যেখানে আমরা new HereIUseDI(buildSmallCache()); নোটিশ বলি , আমাদের অবজেক্টটির আরও সংখ্যক নিয়ন্ত্রণ রয়েছে এবং এটি অবিলম্বে লভ্যাংশ প্রদান করে।

public HereIUseDI {

   Cache cacheOfExpensiveComputations;

   HereIUseDI(Cache cache) {
       this.cacheOfExpensiveComputation = cache;
   }

   ExpensiveValue computeStuff() {
      //DOES THIS WORK CORRECTLY WHEN CACHE EVICTS DATA?
   }
}

যখন আমাদের কোডটিতে এমন ডেটা প্রয়োজন হয় যা সাধারণত একটি ডাটাবেসে থাকে ... ঠিক তেমনই আপনার প্রয়োজনীয় ডেটাটি পাস করুন you


2
সত্যি বলতে কী, আপনি উদাহরণটির অর্থ কী তা আমি নিশ্চিত নই। পদ্ধতিটি কীভাবে গণনা স্টাফের সাথে সম্পর্কিত?
জন ভি

1
@ ব্যবহারকারী 970696 - হ্যাঁ, আমি বোঝাচ্ছি যে "কমপ্যুড স্টাফ ()" ক্যাশে ব্যবহার করে। প্রশ্নটি হ'ল "কি কম্পিউট স্টাফ () সারাক্ষণ সঠিকভাবে কাজ করে (যা ক্যাশের অবস্থার উপর নির্ভর করে)" ফলস্বরূপ, এটি নিশ্চিত করা শক্ত যে আপনি যদি / ক্যাশেটি তৈরি করুন কারণ আপনি "cacheOfExpensiveComputation = buildBigCache ()" রেখাটি হার্ডকোড করেছেন; (সরাসরি কনস্ট্রাক্টরের মাধ্যমে ক্যাশে যাওয়ার বিপরীতে)
ইভান

0

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

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

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

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

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


-2

নতুন কোডটি পুরানো সমস্ত পরীক্ষায় পাস করলে ইউনিট পরীক্ষাগুলি রিফ্যাক্টরিংয়ে সহায়তা করতে পারে ।

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

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


1
এটি সত্য তবে কোড ডিজাইনের গুণমানের উপরে সরাসরি প্রভাবের চেয়ে এটি রক্ষণাবেক্ষণের সুবিধা।
অ্যান্ট পি

@ অ্যান্টপি, ওপি রিফ্যাক্টরিং এবং ইউনিট পরীক্ষা সম্পর্কে জিজ্ঞাসা করেছিল।
ওম

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

-3

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


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