টিডিডিতে প্রথম পরীক্ষায় আপনার প্রয়োজন হবে এমন জিনিসগুলি তৈরি করছে


15

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

উদাহরণস্বরূপ, আমার গিথুব কনভেজেস গেম অফ লাইফের উদাহরণটিতে আমি প্রথম পরীক্ষা লিখেছি (नियम 1_zeroNebbours) আমি একটি গেমফ্লাইফ অবজেক্ট তৈরি করে শুরু করেছি যা এখনও কার্যকর হয়নি; অস্তিত্বহীন এমন একটি সেট পদ্ধতি বলা হয়, অস্তিত্বহীন একটি পদক্ষেপ পদ্ধতি, অস্তিত্বহীন একটি গেট পদ্ধতি এবং তারপরে একটি দৃ used়পদ ব্যবহার করা হয়েছিল।

আমি আরও পরীক্ষা এবং রিফ্যাক্টর লেখার সাথে সাথে পরীক্ষাগুলি বিকশিত হয়েছিল তবে মূলত এটি দেখতে এরকম কিছু দেখাচ্ছে:

@Test
public void rule1_zeroNeighbours()
{
    GameOfLife gameOfLife = new GameOfLife();
    gameOfLife.set(1, 1, true);
    gameOfLife.step();
    assertEquals(false, gameOfLife.get(1, 1));
}

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

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

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


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

উত্তর:


9

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

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

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

প্রো আপফ্রন্ট ডিজাইন

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

প্রো টেস্ট ড্রাইভিং ডিজাইন

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

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

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


লিঙ্কটি খুব ভাল পড়া বেন ছিল। ভাগ করে নেওয়ার জন্য ধন্যবাদ।
রাবারডাক

1
@ রাবারডাক আপনাকে স্বাগতম! আমি এটির সাথে পুরোপুরি একমত নই, তবে আমি মনে করি এটি সেই দৃষ্টিকোণকে তর্ক করার একটি দুর্দান্ত কাজ করে।
বেন অ্যারনসন

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

17

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

জুনিত এবং মকিতোর সাথে ব্যবহারিক ইউনিট পরীক্ষা থেকে :

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

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

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

"ব্যর্থ হয় এমন একটি পরীক্ষা লিখুন" পদক্ষেপের উপরে চকচকে করা সহজ। তবে ব্যর্থ পরীক্ষা যা আপনি এটি করতে চান সেভাবে কাজ করে তা টিডিডির মূল বিষয়।


1
কোনও সেল বিবেচনা করা একটির জন্য কেবল একটি মোড়ক হিসাবে বিবেচিত হবে boolean, সেই নকশাটি কার্য সম্পাদনের জন্য অবশ্যই খারাপ। ভবিষ্যতে এটির জন্য আরও বেশি দুটি রাজ্যের সহ অন্যান্য সেলুলার অটোম্যাটার কাছে এক্সটেনসিবল হওয়ার প্রয়োজন নেই?
ব্যবহারকারী 253751

2
@ মিমিবিস এটি বিশদ বিব্রতকর। আপনি এমন একটি ক্লাস দিয়ে শুরু করতে পারেন যা ঘরের সংগ্রহকে উপস্থাপন করে। কর্মক্ষমতা যদি কোনও সমস্যা হয় তবে আপনি সেল ক্লাস এবং এর পরীক্ষাগুলি পরে শ্রেণীর সংস্থার প্রতিনিধিত্ব করে এমন একটি শ্রেণীর সাথে মাইগ্রেট / সংযুক্ত করতে পারেন could
এরিক

@ মিম্বিস পারফরম্যান্সের কারণে লাইভ প্রতিবেশীদের সংখ্যা সংরক্ষণ করা যেতে পারে। রঙিন কারণে
কোষটি

@ মিমিবিসের অকাল অপটিমাইজেশনটি হ'ল মন্দ ... তদুপরি, আদিম আবেগ এড়ানো ভাল মানের কোড লেখার দুর্দান্ত উপায়, এটি যতটা রাজ্যই সমর্থন করুক না কেন। একবার দেখুন: jamesshore.com/Blog/PrimitiveObsession.html
পল

0

এই সম্পর্কে বিভিন্ন চিন্তা স্কুল।

কেউ কেউ বলেন: পরীক্ষার সংকলন নয় ত্রুটি - ছোটতম উপলব্ধ প্রযোজনীয় কোডটি লিখুন ঠিক করুন।

কেউ কেউ বলেছেন: পরীক্ষার জন্য প্রথমে লিখন ঠিক আছে যদি এটি পিপীলিকা সফল হয় (না) তবে নিখোঁজ শ্রেণি / পদ্ধতি তৈরি করুন

প্রথম পদ্ধতির সাহায্যে আপনি সত্যিই একটি লাল-সবুজ-চুল্লী চক্রে আছেন। সেকেন্ডের সাথে আপনি কী অর্জন করতে চান তার সামান্য বিস্তৃত ওভারভিউ রয়েছে।

আপনি কোন পথে কাজ করবেন তা চয়ন করা আপনার উপর নির্ভর করবে। আইএমএইচও উভয় পন্থা বৈধ।


0

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

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

আপনার পরীক্ষাগুলি লেখার জন্য শসা ব্যবহার করতে অনুরূপ বা অনুরূপ কী হতে পারে ।


0

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

টিডিডি হ'ল একটি উন্নয়ন পদ্ধতির লিঙ্ক: টিডিডি
১. একটি পরীক্ষা যুক্ত করুন
২. সমস্ত পরীক্ষা চালান এবং দেখুন যে নতুনটি ব্যর্থ হয়েছে কিনা
৩. কিছু কোড লিখুন
৪. পরীক্ষা চালান
৫. রিফ্যাক্টর কোড
পুনরাবৃত্তি

টিডিডি আপনাকে আপনার সফ্টওয়্যারটি বিকাশ শুরু করার আগে যা পরিকল্পনা করেছিল তা সমস্ত প্রয়োজনীয় বৈশিষ্ট্যগুলি coverাকতে সহায়তা করে। লিঙ্ক: উপকারিতা


0

আমি সেই কারণে জাভা বা সি # তে লিখিত সিস্টেম স্তরের পরীক্ষা পছন্দ করি না । সি # এর জন্য স্পেসফ্লো দেখুন বা জাভা (সম্ভবত জেবিহেভ) এর শসা ভিত্তিক পরীক্ষার কাঠামোর একটি। তারপরে আপনার পরীক্ষাগুলি আরও দেখতে এটি দেখতে পারে।

এখানে চিত্র বর্ণনা লিখুন

এবং আপনি আপনার সমস্ত সিস্টেম পরীক্ষার পরিবর্তন না করেই আপনার অবজেক্টের নকশা পরিবর্তন করতে পারেন।

("সাধারণ" ইউনিট পরীক্ষা একক ক্লাস পরীক্ষা করার সময় দুর্দান্ত।)

জাভা জন্য বিডিডি ফ্রেমওয়ার্ক মধ্যে পার্থক্য কি?

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