টিডিডি - বাইরের ভিতরে বনাম ইনসাইড আউট


53

টিডিডি ব্যবহার করে ইনসাইড আউট তৈরির বাইরে অ্যাপ্লিকেশন তৈরির মধ্যে পার্থক্য কী ?

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

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

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

যাইহোক, আমি xUnit টেস্ট প্যাটার্নগুলির একটি অনুচ্ছেদ জুড়ে এসেছি যাতে লোকেরা টিডিডির কাছে যাওয়ার উপায় নিয়ে আলোচনা করে। সেখানে 2 স্কুল বাইরে বনাম ইনসাইড আউট

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


দুটি পন্থা XUnit টেস্ট প্যাটার্নস সাইটে বর্ণিত হয়েছে: xunitpatterns.com / দর্শনশাস্ত্রে ২০২০ থেকে ১০০ টেস্ট ৯০ অটোমেশন এইচটিএমএল । এটি অদ্ভুত যে তারা বইটিতে নেই।
guillaume31

উত্তর:


45

ইনসাইড-আউট এবং আউটসাইড-ইন মোটামুটি বিরল শব্দ, প্রায়শই আমি ক্লাসিক স্কুল এবং লন্ডন স্কুল সম্পর্কে শুনে / শুনেছি ।

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

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

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

আপনি যেটি ব্যবহার করুন না কেন এটি প্রায়শই পরিস্থিতিগত।

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


2
মজাদার. আপনি কীভাবে এই সিদ্ধান্তে পৌঁছলেন যে টিডির বাইরে "মকবিদ" টিডিডি আছে? আমি খুব বাইরে বাইরে চিন্তাভাবনা এবং নকশা পছন্দ করি এবং এইভাবে পরীক্ষা করি ( সফ্টওয়্যারনস্ট্রিং.কম / ২০১৫ / ২০১০ / ২০১৮ দেখুন ) তবুও ফাউলারের নিবন্ধটি আমাকে দৃ classic়তার সাথে ক্লাসিস্ট ক্যাম্পে ফাউলারের সাথে রাখে। Mockist সবসময় একটি বাহিরে-ইন পদ্ধতির ব্যবহার করতে পারেন সময় আপনি এটি প্রায় ফিরিয়ে নেয় এবং বলে যে বাইরে-ইন নকশা এবং টেস্টিং করতে পারবে না হয় mockist TDD- এ। বাইরের অভ্যন্তর ক্লাসিকবিদ টিডিডি-এরগুলিও খুব অনুশীলন করতে পারেন।
মার্জন ভেনেমা

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

1
আমি একমত নই যে ক্লাসিক / মকবিদ এবং ইনসাইড-আউট / আউটসাইড ইন সম্পর্কিত। এগুলি অরথোগোনাল। আপনি যে কোনওটির সাথে ইনসাইড-আউট / আউটসাইড-ইন ব্যবহার করতে পারেন।
ড্যানিয়েল কাপলান

ড্যানিয়েলের সাথে একমত আপনি দুটি ট্যাক্সনোমির তুলনা করছেন যা আলাদা। যদিও বাহিরের বিকাশ প্রায়শই লন্ডন (মকবিদ) বিদ্যালয়ের সাথে যুক্ত হয় তবে এটি সর্বদা হয় না।
guillaume31

আমি মনে করি না এটি বাহ্যিক প্রক্রিয়াটির সঠিক বর্ণনা। এটি সর্বজনীন ইন্টারফেস থেকে ইন্টার্নালগুলিতে সংযুক্ত না হয়ে যতটা সম্ভব পরীক্ষা করার বিষয়ে।
mcintyre321

15

সংক্ষিপ্ত উত্তর: যথারীতি এটি আপনার কোডিং পছন্দ এবং টিমের পদ্ধতির উপর নির্ভর করবে ।

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

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

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


8

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

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

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

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


7

আমি এটি দেখতে পেয়েছি, বাহিরের উন্নয়নের ধারণাটি সত্যই 2 স্তরে ছড়িয়ে পড়ে। জেরার্ড Meszaros সংক্ষেপে বর্ণনা করে তাদের "বাহিরে-ইন হিসাবে নকশা " এবং "বাহিরে ইন / ভিতরে-আউট কোডিং "।

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

  • দ্বিতীয় স্তরটি প্রযুক্তিগত এবং প্রয়োগমূলক স্তরগুলির সাথে সম্পর্কিত। কোডিংয়ের বাইরে মূলত ইউআই থেকে শুরু করে কেন্দ্রীয় স্তর (সাধারণত ব্যবসায় / ডোমেন স্তর) এর অভ্যন্তরে যেতে হয়। এটি অভ্যন্তরীণ আউট কোডিংয়ের বিরোধিতা হিসাবে বোঝানো হয়েছে যা কেন্দ্রীয় স্তর থেকে শুরু হয়ে বাহ্যিক স্তরগুলিকে শেষ পর্যন্ত কোডিং করছে।

সুতরাং আপনার বাইরের ইন কোডিং বা ইন-আউট কোডিং সহ বাইরের ইন ডিজাইন থাকতে পারে।

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

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

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

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

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