পরিপ্রেক্ষিত:
সুতরাং আসুন আমরা এক পদক্ষেপ নিয়ে আসি এবং জিজ্ঞাসা করি যে টিডিডি আমাদের সাহায্য করার চেষ্টা করছে? টিডিডি আমাদের কোডটি সঠিক কিনা তা নির্ধারণে আমাদের সাহায্য করার চেষ্টা করছে। এবং সঠিকভাবে, আমার অর্থ "কোডটি কি ব্যবসায়ের প্রয়োজনীয়তা পূরণ করে?" বিক্রয় কেন্দ্রটি হ'ল আমরা জানি ভবিষ্যতে পরিবর্তনগুলি প্রয়োজন হবে এবং আমরা নিশ্চিত করতে চাই যে আমরা এই পরিবর্তনগুলি করার পরেও আমাদের কোডটি সঠিক রয়েছে।
আমি সেই দৃষ্টিভঙ্গি এনেছি কারণ আমি মনে করি যে বিবরণে হারিয়ে যাওয়া এবং আমরা কী অর্জন করার চেষ্টা করছি তার দৃষ্টি হারানো সহজ lose
মূলনীতি - এসএপি:
যদিও আমি টিডিডিতে বিশেষজ্ঞ নই, আমি মনে করি যে আপনি সিঙ্গল সিদ্ধার নীতিমালা (এসএপি) যা শেখানোর চেষ্টা করছেন তার একটি অংশ হারিয়েছেন। স্যাপটিকে "একবারে একটি জিনিস পরীক্ষা করতে" হিসাবে পুনঃস্থাপন করা যেতে পারে। কিন্তু TOTAT জিএপটি সহজে স্যাপের মতো সহজে গড়িয়ে যায় না।
একবারে একটি জিনিস পরীক্ষা করার অর্থ আপনি একটি ক্ষেত্রে ফোকাস করেছেন; এক পথ; একটি সীমানা শর্ত; একটি ত্রুটি কেস; পরীক্ষায় প্রতি যাই হোক না কেন এক । এবং এর পিছনে ড্রাইভিং ধারণা হ'ল পরীক্ষার কেস ব্যর্থ হলে কী ভেঙে গেছে তা আপনার জানা দরকার, যাতে আপনি সমস্যাটি আরও দ্রুত সমাধান করতে পারেন। আপনি যদি পরীক্ষার মধ্যে একাধিক শর্ত (যেমন একাধিক জিনিসের) পরীক্ষা করে থাকেন এবং পরীক্ষাটি ব্যর্থ হয়, তবে আপনার হাতে আরও অনেক বেশি কাজ রয়েছে। আপনাকে প্রথমে কোনটি একাধিক ক্ষেত্রে ব্যর্থ হয়েছে তা চিহ্নিত করতে হবে এবং তারপরে সেই মামলাটি কেন ব্যর্থ হয়েছিল তা নির্ধারণ করতে হবে।
আপনি যদি একবারে একটি জিনিস পরীক্ষা করেন তবে আপনার অনুসন্ধানের ক্ষেত্রটি অনেক ছোট এবং ত্রুটিটি আরও দ্রুত চিহ্নিত করা যায়। মনে রাখবেন যে "একবারে একটি জিনিস পরীক্ষা করুন" অগত্যা আপনাকে একবারে একাধিক প্রক্রিয়া আউটপুট দেখার থেকে বাদ দেয় না। উদাহরণস্বরূপ, "পরিচিত ভাল পাথ" পরীক্ষা করার সময়, আমি একটি নির্দিষ্ট, ফলস্বরূপ মানের foo
পাশাপাশি অন্য মানটিও দেখতে আশা করতে bar
পারি এবং আমি foo != bar
এটি আমার পরীক্ষার অংশ হিসাবে যাচাই করতে পারি। কীটি পরীক্ষা করা হচ্ছে তার ভিত্তিতে আউটপুট চেকগুলিকে যৌক্তিকভাবে গোষ্ঠী করা।
মূলনীতি - পিএমপি:
তেমনি, আমি মনে করি আপনি ব্যক্তিগত পদ্ধতি নীতি (পিএমপি) আমাদের কী শিখিয়েছেন সে সম্পর্কে আপনি কিছুটা মিস করছেন। পিএমপি আমাদের সিস্টেমটিকে একটি কালো বাক্সের মতো আচরণ করতে উত্সাহিত করে। প্রদত্ত ইনপুটটির জন্য, আপনার দেওয়া আউটপুট পাওয়া উচিত। ব্ল্যাক বক্স কীভাবে আউটপুট জেনারেট করে তা আপনি চিন্তা করেন না। আপনি কেবল যত্ন নিচ্ছেন যে আপনার ফলাফলগুলি আপনার ইনপুটগুলির সাথে একত্রিত হয়।
পিএমপি আপনার কোডের এপিআই দিকগুলি দেখার জন্য সত্যই ভাল দৃষ্টিকোণ। আপনাকে যা পরীক্ষা করতে হবে তা স্কোপকেও সহায়তা করতে পারে। আপনার ইন্টারফেস পয়েন্টগুলি সনাক্ত করুন এবং সেগুলি তাদের চুক্তির শর্তাদি পূরণ করে তা যাচাই করুন। ইন্টারফেসের পিছনে (আর্ফ প্রাইভেট) পদ্ধতিগুলি কীভাবে তাদের কাজ করে সে সম্পর্কে আপনার যত্ন নেওয়ার দরকার নেই। আপনার যা যা করা উচিত ছিল তা কেবল তাদের যাচাই করতে হবে।
ফলিত টিডিডি (আপনার জন্য )
সুতরাং আপনার পরিস্থিতি একটি সাধারণ প্রয়োগের বাইরে কিছুটা বলিরেখা উপস্থাপন করে। আপনার অ্যাপ্লিকেশনগুলির পদ্ধতি রাষ্ট্রীয়, সুতরাং তাদের আউটপুট কেবল ইনপুটই নয় বরং এর আগে যা করা হয়েছিল তা নির্ভরযোগ্য। আমি নিশ্চিত যে <insert some lecture>
এখানে আমার অবস্থা ভয়াবহ এবং ব্লাহ ব্লাহ ব্লাহ সম্পর্কে হওয়া উচিত , তবে এটি সত্যিই আপনার সমস্যা সমাধানে সহায়তা করে না।
আমি ধরে নিতে চলেছি যে আপনার কাছে এক ধরণের রাজ্য চিত্রের টেবিল রয়েছে যা বিভিন্ন সম্ভাব্য রাজ্যগুলি দেখায় এবং একটি ট্রানজিশন ট্রিগার করার জন্য কী করা উচিত। যদি আপনি এটি না করেন তবে আপনার এটির প্রয়োজন হবে কারণ এটি এই ব্যবস্থার ব্যবসায়ের প্রয়োজনীয়তাগুলি প্রকাশ করতে সহায়তা করবে।
টেস্টগুলি: প্রথমত, আপনি পরীক্ষার একটি সেট দিয়ে শেষ করতে যাচ্ছেন যা রাষ্ট্র পরিবর্তনকে কার্যকর করে। আদর্শভাবে, আপনার পরীক্ষাগুলি রয়েছে যেগুলি ঘটতে পারে এমন পুরো পরিবর্তনগুলির রাষ্ট্র ব্যায়ামের অনুশীলন করবে তবে আমি এমন কয়েকটি পরিস্থিতি দেখতে পাচ্ছি যেখানে আপনাকে সম্পূর্ণ পরিসরের প্রয়োজন হয় না।
এরপরে, আপনাকে ডেটা প্রক্রিয়াকরণকে বৈধতা দেওয়ার জন্য পরীক্ষাগুলি তৈরি করতে হবে। আপনি ডেটা প্রসেসিং টেস্টগুলি তৈরি করার সময় সেই স্টেট টেস্টগুলির মধ্যে কয়েকটি পুনরায় ব্যবহার করা হবে। উদাহরণস্বরূপ, ধরুন আপনার একটি পদ্ধতি Foo()
রয়েছে যার একটি Init
এবং State1
রাজ্যের উপর ভিত্তি করে আলাদা আউটপুট রয়েছে । তুমি তোমার ব্যবহার করতে চাইবেন ChangeFooToState1
অর্ডার আউটপুট পরীক্ষা করার জন্য যখন "একটি সেটআপ পদক্ষেপ হিসেবে পরীক্ষা Foo()
হয় State1
।"
এই পদ্ধতির পিছনে কিছু বিষয় রয়েছে যা আমি উল্লেখ করতে চাই। স্পোলার, এখানেই আমি পিউরিস্টদের উদ্বুদ্ধ করব
প্রথমত, আপনাকে মেনে নিতে হবে যে আপনি কোনও পরিস্থিতিতে পরীক্ষা হিসাবে এবং অন্য পরিস্থিতিতে সেটআপ হিসাবে কিছু ব্যবহার করছেন। একদিকে, এটি স্যাপের সরাসরি লঙ্ঘন বলে মনে হয়। তবে যদি আপনি যৌক্তিকভাবে ChangeFooToState1
দুটি উদ্দেশ্য হিসাবে ফ্রেম করে থাকেন তবে আপনি এখনও এসএপি আমাদেরকে কী শিখিয়ে দিচ্ছেন তার চেতনা পূরণ করছেন। আপনার যখন Foo()
পরিবর্তনগুলি নিশ্চিত করার দরকার হয় তখন আপনি ChangeFooToState1
পরীক্ষা হিসাবে ব্যবহার করেন। এবং "যখন" Foo()
এর আউটপুটটি বৈধ করার দরকার হয় State1
তখন আপনি ChangeFooToState1
সেটআপ হিসাবে ব্যবহার করেন।
দ্বিতীয় আইটেমটি হ'ল ব্যবহারিক দৃষ্টিকোণ থেকে, আপনি আপনার সিস্টেমে সম্পূর্ণরূপে এলোমেলো ইউনিট পরীক্ষা করতে চান না। আউটপুট বৈধতা পরীক্ষা চালানোর আগে আপনার সমস্ত রাজ্যের পরিবর্তন পরীক্ষা চালানো উচিত। এই অর্ডারের পিছনে এসএপি হ'ল গাইড নীতি। যা স্পষ্ট হওয়া উচিত তা উল্লেখ করার জন্য - এটি পরীক্ষা হিসাবে ব্যর্থ হলে আপনি সেটআপ হিসাবে কিছু ব্যবহার করতে পারবেন না।
একসাথে রেখে:
আপনার রাজ্য চিত্রটি ব্যবহার করে, আপনি স্থানান্তরগুলি কভার করার জন্য পরীক্ষা তৈরি করবেন gene আবার, আপনার চিত্রটি ব্যবহার করে, আপনি রাষ্ট্র দ্বারা চালিত সমস্ত ইনপুট / আউটপুট ডেটা প্রসেসিং কেসগুলি কভার করার জন্য পরীক্ষা তৈরি করে।
আপনি যদি এই পদ্ধতির অনুসরণ করেন তবে bloated, complicated, long, and difficult to write
পরীক্ষাগুলি পরিচালনা করা কিছুটা সহজ হওয়া উচিত। সাধারণভাবে, তাদের ছোট হওয়া উচিত এবং এগুলি আরও সংক্ষিপ্ত হওয়া উচিত (অর্থাত্ জটিল জটিল)। আপনার খেয়াল করা উচিত যে পরীক্ষাগুলি আরও ডিকপলড বা মডুলার হিসাবেও রয়েছে।
এখন, আমি বলছি না যে প্রক্রিয়াটি সম্পূর্ণ ব্যথা মুক্ত হবে কারণ ভাল পরীক্ষা লিখতে কিছু প্রচেষ্টা নেওয়া দরকার। এবং এর মধ্যে কিছু এখনও অসুবিধা হবে কারণ আপনি আপনার বেশ কয়েকটি ক্ষেত্রে দ্বিতীয় পরামিতি (রাষ্ট্র) ম্যাপ করছেন। এবং একদিকে যেমন, রাষ্ট্রহীন ব্যবস্থা কেন পরীক্ষা করা আরও সহজ। তবে আপনি যদি আপনার অ্যাপ্লিকেশনের জন্য এই পদ্ধতির সাথে মানিয়ে নেন তবে আপনার অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করছে কিনা তা প্রমাণ করতে আপনি সক্ষম হওয়া উচিত।