টিডিডি, নতুন পরীক্ষাগুলি যখন পুরানোগুলি এখনও প্রয়োগ করা হয়নি


13

আমি পরীক্ষা-চালিত বিকাশের জন্য পরীক্ষা নিরীক্ষা করছি এবং আমি দেখতে পেলাম যে আমি প্রায়শই নিম্নলিখিত পরিস্থিতিতে আসি:

  1. আমি কিছু কার্যকারিতা এক্সের জন্য পরীক্ষা লিখি Those এই পরীক্ষাগুলি ব্যর্থ হয়।
  2. এক্স প্রয়োগ করার চেষ্টা করার সময়, আমি দেখতে পাচ্ছি যে আমার কোডের নীচের স্তরে কিছু বৈশিষ্ট্য ওয়াই প্রয়োগ করতে হবে। তাই ...
  3. আমি Y এর জন্য পরীক্ষা লিখি X এখন এক্স এবং ওয়াই উভয় পরীক্ষা ব্যর্থ।

একবারে কোডের বিভিন্ন স্তরে একই সাথে কাজ করার পরে আমার 4 টি বৈশিষ্ট্য ছিল এবং আমি আসলে কী করছি সে সম্পর্কে আমার ফোকাসটি হারাচ্ছিলাম (একই সাথে প্রচুর পরীক্ষা ব্যর্থ হচ্ছে))

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

এই ধরনের ক্ষেত্রে আমার কী করা উচিত? টিডিডির কি কোনও সুপারিশ রয়েছে?

উত্তর:


9

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


অভ্যন্তরীণভাবে কোনও পদ্ধতিতে কী করা উচিত (নিম্ন স্তরের এপিআই কী কল করতে হবে) সম্পর্কে আমার পরীক্ষাগুলির সাধারণত জ্ঞান থাকে না। পরীক্ষিত কোডে আমার যা প্রয়োজন তা উপহাস করার জন্য কি কেবল পরীক্ষাগুলি সামঞ্জস্য করা উচিত?
লাইওরি

2
একইভাবে, আপনার পরীক্ষিত ক্লাসগুলিতে 'নিম্ন স্তরগুলি' কী করবে তা যত্নশীল হওয়া উচিত নয়। প্রকৃত ক্লাস / অবজেক্টের জায়গায় মক / স্টাব ব্যবহার করুন। এটি নকশায় কিছুটা বেশি প্রচেষ্টা প্রয়োজন হতে পারে তবে কোডের ফলাফল যা কম সংযুক্ত এবং পুনরায় ব্যবহার করা সহজ।
Mchl

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

@ মাইক ব্রাউন, হ্যাঁ, আমি করি। আমি জানি আমি মক অবজেক্ট তৈরি করতে পারি। তবে তারপরে বৈশিষ্ট্যটির জন্য আমার পরীক্ষায় Xআমাকে জানতে হবে যে Xআমার নির্ভরতার কোন অংশটি উপহাস করা উচিত। আমি অনুভব করি যে এটি বাস্তবায়নের বিশদগুলির একটি অংশ, যা পরীক্ষাগুলির অংশ হওয়া উচিত নয় - অন্যথায় বাস্তবায়নের পুনর্নির্মাণের সময় আমাকে পরীক্ষা পরিবর্তন করতে হবে to আমি কি এই সম্পর্কে চিন্তা করা উচিত?
লাইওরি

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

4

স্টাবস এবং মকগুলি এখনও কার্য সম্পাদনযোগ্য / কার্যকর করা হয়নি এমন কার্যকারিতা অনুকরণ করতে ব্যবহার করা যেতে পারে। এই ধরণের 'চেইন প্রতিক্রিয়া' ঘটায় এমন নির্ভরতাগুলি সমাধান করতেও তারা আপনাকে সহায়তা করতে পারে।

অন্যদিকে, সম্ভবত কেবলমাত্র একটি (ব্যর্থ) পরীক্ষা রাখা যা পরের পরিবর্তনটিকে চালিত করে তা সেরা পদ্ধতির।

অন্যান্য কার্যকারিতা যা কোডটিকে লক্ষ্য করে নতুন কার্যকারিতার উপর নির্ভর করে তারা স্থায়ীভাবে অক্ষম হতে পারে কারণ তারা এই মুহুর্তে প্রকৃতপক্ষে প্রাসঙ্গিক নয়। আপনার ক্ষেত্রে, আপনি ওয়াই ইত্যাদি প্রয়োগ না করা পর্যন্ত এক্সের জন্য পরীক্ষাগুলি অক্ষম করুন etc.

এইভাবে আপনি পরবর্তী পরিবর্তনগুলিতে আপনার দৃষ্টি নিবদ্ধ রাখতে পারেন যা আপনি চান কেবল তাই, আমার ধারণা।


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

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

3

স্টপ

অফহ্যান্ড দেখে মনে হচ্ছে এখানে দুটি পৃথক সমস্যা থাকতে পারে:

  1. আপনি কয়েকটি গল্প এবং পরীক্ষার পরিস্থিতি ভুলে গিয়েছিলেন এবং নির্দিষ্ট টেস্টের দৃশ্যে এবং / অথবা এর উপর কাজ শুরু না করা অবধি এগুলি আবিষ্কার করেননি

  2. আপনি আসলে ইউনিট টেস্টিং করছেন, টিডিডি বৈশিষ্ট্য পরীক্ষা করছেন না

# 1 এর জন্য, থামুন , ফিরে যান, এবং গল্পগুলি এবং পরীক্ষার পরিস্থিতি আপডেট করুন, তারপরে একটি ভিন্ন দৃশ্য দিয়ে শুরু করুন।

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


আমি আপনার উত্তরটি সত্যিই পছন্দ করি, এটি কী ঘটছে তা ব্যাখ্যা করার চেয়ে আরও ভাল কাজ করে।
maple_shaft

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

@ ম্যাপেল_শ্যাফ্ট: আপনি পুনরায় গোষ্ঠী স্থাপন করতে যে পরিমাণ সময় বন্ধ করেছেন তা কেবল কয়েক ঘন্টা হতে পারে - যদি না আপনার প্রক্রিয়াটি পথ অবলম্বন করে, বেসের পথে না যায়, তবে কিছুদিনের জন্য এটি ট্র্যাকে ফিরে পেতে কয়েক দিনের জন্য থামানো আরও বেশি সম্ভাবনা তৈরি করে দেয় প্রকল্পটি সফল হবে। পুরো বাষ্পে ভুল ট্র্যাকের নিচে এগিয়ে যাওয়ার কোনও মানে নেই!
স্টিভেন এ। লো

0

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

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

প্রোটোটাইপ

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

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

সেই সময়ে আপনার নিম্ন স্তরের এপিআই সম্পর্কে আরও জানতে হবে এবং আপনার উচ্চ স্তরের উপাদানগুলিতে নিম্ন স্তরের এপিআই সফলভাবে উপহাস করতে সক্ষম হবেন।


সুতরাং আপনি প্রকৃতপক্ষে কোনও অনানুষ্ঠানিক (= কিছু আনুষ্ঠানিক পদ্ধতিতে যাচ্ছেন না) পদ্ধতিতে অনুসন্ধানের কোডিং করে পরিকল্পনার পর্বের জন্য আরও তথ্য পাওয়ার পরামর্শ দিচ্ছেন। এবং তারপরে ধরে নিন যে এটি বাস্তব কোডটি পরিকল্পনার জন্য পর্যাপ্ত তথ্য দেবে। আমি কি সঠিক?
লাইওরি

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

"অনানুষ্ঠানিক উপায়ে" বলতে আমি বোঝাতে চাইনি যে প্রোটোটাইপিংয়ের জন্য সময়টি গণনা করা উচিত নয়, তবে আপনি প্রোটোটাইপগুলি করার সময়, আপনি টিডিডি বা অন্য কোনও কোড পদ্ধতি অনুসরণ করেন না।
লাইওরি

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

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

0

এটি টিডিডি করার সময় আপনার লেখার কী ধরণের পরীক্ষা করে তা নির্ভর করে।

ক্লাসিক মডেলটি হ'ল ইউনিট পরীক্ষাগুলি লিখতে এবং কোডের অন্যান্য "ইউনিট" থেকে পরীক্ষাটি ডিক্লুপ করতে মক বা স্টাব ব্যবহার করে।

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

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