টেস্ট চালিত বিকাশের এই সীমাবদ্ধতা (এবং সাধারণভাবে চতুর) কার্যত প্রাসঙ্গিক?


30

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

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

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

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


আপনি কি টিডিডি সাব-টেকনিককে ট্রায়াঙ্গুলেশন বলে উল্লেখ করছেন ? "গ্রহণযোগ্য সমাধান" দ্বারা, আপনি কি একটি সঠিক বা একটি রক্ষণাবেক্ষণ / মার্জিত / পঠনযোগ্য বোঝাতে চান?
guillaume31

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

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

2
সমস্যাটি বিদ্যমান, তবে এটি টিডিডি বা চটপটে সীমাবদ্ধ নয়। পরিবর্তিত প্রয়োজনীয়তা যার অর্থ পূর্বের লিখিত সফ্টওয়্যারটির নকশা সর্বদা ঘটে থাকে।
রিমকো গ্রিলিচ

@ গিলিউম ৩১: প্রয়োজনীয় ত্রিভঙ্গীকরণ নয় তবে উত্স কোড স্তরে পুনরাবৃত্তি ব্যবহার করে এমন কোনও কৌশল। গ্রহণযোগ্য সমাধানের দ্বারা আমার অর্থ এমন একটি যা সমস্ত পরীক্ষায় উত্তীর্ণ হয় এবং যুক্তিসঙ্গতভাবে ভালভাবে বজায় রাখা যায় ..
ফ্র্যাঙ্ক পাফার

উত্তর:


8

এই জাতীয় পদ্ধতির একটি সুপরিচিত সীমাবদ্ধতা হ'ল তারা বিশ্বব্যাপী সর্বোত্তম, এমনকি একটি গ্রহণযোগ্য স্থানীয় সর্বোত্তম খুঁজে পাওয়ার গ্যারান্টি দেয় না।

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

আমি এমন একটি দৃশ্যের কথা ভাবছি যেখানে আপনি বেশ কয়েকটি পরীক্ষার কেস প্রয়োগ করেছেন এবং তারপরে দেখতে পাবেন যে পরবর্তী পরীক্ষার ক্ষেত্রে একটি প্রতিযোগিতামূলক ভিন্ন পদ্ধতির প্রয়োজন হবে। আপনাকে আপনার আগের কাজটি ফেলে দিতে হবে এবং আবার শুরু করতে হবে।

বাস্তবে এটি ঘটতে পারে এমন পরিস্থিতিটি আমি কল্পনা করতে পারি: আপনি যখন ভুল স্থাপত্যটিকে এমনভাবে বেছে নেন যখন আপনার বিদ্যমান সমস্ত পরীক্ষাগুলি আবার স্ক্র্যাচ থেকে পুনরায় তৈরি করতে হবে। বলুন যে আপনি আপনার প্রথম 20 পরীক্ষার কেসকে অপারেটিং সিস্টেম এ X এর প্রোগ্রামিং ল্যাঙ্গুয়েজে প্রয়োগ করতে শুরু করেছেন দুর্ভাগ্যক্রমে, 21 এর প্রয়োজনীয়তার মধ্যে রয়েছে যে পুরো প্রোগ্রামটি অপারেটিং সিস্টেম বিতে চালিত হওয়া দরকার, যেখানে এক্স উপলব্ধ নেই। সুতরাং, আপনাকে আপনার বেশিরভাগ কাজ ফেলে দিতে হবে এবং Y ওয়াই ভাষায় পুনরায় সংশোধন করতে হবে (অবশ্যই, আপনি কোডটি পুরোপুরি ফেলে দেবেন না, তবে এটি নতুন ভাষা এবং সিস্টেমে পোর্ট করবেন))

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

রবার্ট হার্ভে উদ্ধৃত করে: "আপনি ইউনিট পরীক্ষা থেকে কোনও আর্কিটেকচার বৃদ্ধি করতে পারবেন না।" বা পিডিআর: "টিডিডি আমাকে সেরা চূড়ান্ত নকশায় আসতে সহায়তা করে না, এটি আমাকে কম প্রচেষ্টাতে পেতে সহায়তা করে।"

সুতরাং আসলে আপনি কি লিখেছেন

যদি আপনার শুরুর পয়েন্টটি খারাপ সমাধানগুলির বৃহত অঞ্চল দ্বারা সমস্ত গ্রহণযোগ্য সমাধানগুলি থেকে পৃথক করা হয় তবে সেখানে পৌঁছানো অসম্ভব এবং পদ্ধতিটি ব্যর্থ হবে।

সত্য হয়ে যেতে পারে - আপনি যখন কোনও ভুল আর্কিটেকচার চয়ন করেন, আপনি সেখান থেকে প্রয়োজনীয় সমাধানটিতে পৌঁছানোর সম্ভাবনা নেই।

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


20

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

আপনি যদি টিডিডি সম্পর্কিত সমস্যার বিষয়ে আগ্রহী হন তবে আমি তিনটি ভিন্ন বিষয় উল্লেখ করতে পারি যা আমি প্রায়শই ভাবি:

  1. সম্পূর্ণতার সমস্যা কত পরীক্ষা সম্পূর্ণরূপে একটি সিস্টেম বর্ণনা করতে প্রয়োজনীয়? "উদাহরণস্বরূপ কোডিং কোডিং" কি সিস্টেমকে বর্ণনা করার সম্পূর্ণ উপায়?

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

  3. পরীক্ষা ক্ষতি সমস্যা: অর্ডার গবেষকেরা testable করতে, আমরা লেখার দরুণ পর্যাপ্ত কোডে (কম performant, উদাহরণস্বরূপ) প্রয়োজন হতে পারে। কোডটি যতটা ভাল হতে পারে তাই আমরা কীভাবে পরীক্ষাগুলি লিখি?


একটি মন্তব্যে সম্বোধন করার জন্য সম্পাদিত: এখানে রিফ্যাক্টরিংয়ের মাধ্যমে একটি "ডাবল" ফাংশনের জন্য স্থানীয় সর্বাধিক সরে যাওয়ার উদাহরণ

পরীক্ষা 1: যখন ইনপুট 0 হয়, ফিরে শূন্য

বাস্তবায়ন:

function double(x) {
  return 0; // simplest possible code that passes tests
}

রিফ্যাক্টরিং: প্রয়োজন নেই

পরীক্ষা 2: যখন ইনপুট 1 হয়, 2 ফিরে আসুন

বাস্তবায়ন:

function double(x) {
  return x==0?0:2; // local maximum
}

রিফ্যাক্টরিং: প্রয়োজন নেই

পরীক্ষা 3: যখন ইনপুট 2 হয়, 4 ফিরে আসুন

বাস্তবায়ন:

function double(x) {
  return x==0?0:x==2?4:2; // needs refactoring
}

refactoring:

function double(x) {
  return x*2; // new maximum
}

1
আমি যা অভিজ্ঞতা অর্জন করেছি তা হ'ল আমার প্রথম নকশাটি কিছু সাধারণ ক্ষেত্রে কেবল কাজ করেছিল এবং আমি পরে বুঝতে পেরেছিলাম যে আমার আরও সাধারণ সমাধান প্রয়োজন। আরও সাধারণ সমাধান বিকাশের জন্য আরও পরীক্ষার প্রয়োজন হয় যখন বিশেষ ক্ষেত্রেগুলির মূল পরীক্ষাগুলি আবার কাজ করে না। আমি আরও সাধারণ সমাধান বিকাশের সময় এই পরীক্ষাগুলি সরিয়ে (অস্থায়ীভাবে) গ্রহণযোগ্য বলে মনে করেছি, সময় প্রস্তুত হওয়ার পরে এগুলি আবার যুক্ত করে them
5gon12eder

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

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

1
@ ভনটিকো ঠিক আছে, এখন আমি হয় আপনাকে বিশ্বাস করি বা সংশয়ী হয়ে যাব (যা অভদ্র হবে, তাই এটি করা যাক না)। আসুন শুধু বলি, আমার অভিজ্ঞতায়, আপনি যা বলছেন তেমন কাজ করে না। আমি টিডিডি থেকে কখনও যুক্তিসঙ্গত জটিল অ্যালগরিদম বিবর্তিত হতে দেখিনি। হতে পারে আমার অভিজ্ঞতা খুব সীমিত :)
Andres F.

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

13

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

পার্থক্যটি একটি চটচটে পরিবেশে আপনি কখনই এই মুহূর্তে নিখুঁত হওয়ার আশা করেননি তাই আপনি পুরানো ধারণাটি টস করতে এবং নতুন ধারণার দিকে যেতে আরও প্রস্তুত।

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


13

ইন তার উত্তর , @Sklivvz প্রানবন্ত যুক্তি দিয়েছেন যে সমস্যা বিদ্যমান নয়।

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


8

টিডিডি এবং চপল চর্চা একটি অনুকূল সমাধান উত্পাদন করার প্রতিশ্রুতি দিতে পারে? (বা এমনকি একটি "ভাল" সমাধান?)

বেপারটা এমন না. তবে, এটি তাদের উদ্দেশ্য নয়।

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

... [টিডিডি] সফ্টওয়্যার বিকাশের বিরোধী যা সফ্টওয়্যার যুক্ত করার অনুমতি দেয় যা প্রয়োজনীয়তা পূরণে প্রমাণিত হয় না ... কেন্ট বেক যিনি কৃতিত্বের বিকাশ করেছেন বা 'পুনরায় আবিষ্কার করেছেন' 2003 সালে বলেছিলেন যে টিডিডি সহজ উত্সাহ দেয় ডিজাইন এবং আত্মবিশ্বাসের অনুপ্রেরণা। ( উইকিপিডিয়া )

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

চতুর প্রক্রিয়া হিসাবে:

ওয়ার্কিং সফটওয়্যারটি অগ্রগতির প্রাথমিক পরিমাপ ... প্রতিটি পুনরাবৃত্তির শেষে, স্টেকহোল্ডার এবং গ্রাহক প্রতিনিধি অগ্রগতি পর্যালোচনা করে এবং বিনিয়োগের উপর রিটার্ন অনুকূলকরণের লক্ষ্যে অগ্রাধিকারগুলির পুনরায় মূল্যায়ন ( উইকিপিডিয়া )

তত্পরতা একটি অনুকূল সমাধান খুঁজছেন না ; কেবলমাত্র একটি কার্যক্ষম সমাধান - আরওআইকে অনুকূল করার উদ্দেশ্যে । এটি পরবর্তী সময়ের চেয়ে শীঘ্রই একটি কাজের সমাধানের প্রতিশ্রুতি দেয় ; একটি "অনুকূল" না।

তবে, ঠিক আছে, কারণ প্রশ্নটি ভুল।

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

অন্ততপক্ষে সালে TDD- এ এবং তত্পর চর্চা অসুবিধা স্বীকার করেন এবং দুটি জিনিস যে জন্য নিখুত প্রচেষ্টা হয় উদ্দেশ্য এবং পরিমাপযোগ্য: । ওয়ার্কিং বনাম না ওয়ার্কিং এবং আজ না হোক বনাম পরবর্তীতে।।

এবং যদিও আমাদের উদ্দেশ্যমূলক মেট্রিক হিসাবে "কাজ" এবং "যত তাড়াতাড়ি" রয়েছে, তাদের জন্য অনুকূলিত করার আপনার ক্ষমতাটি মূলত একটি দলের দক্ষতা এবং অভিজ্ঞতার উপর নির্ভরশীল।


প্রচেষ্টা যে সমাধানগুলি উত্সাহ হিসাবে সর্বোত্তম সমাধান তৈরি করতে পারে সেগুলির মধ্যে অন্তর্ভুক্ত রয়েছে:

ইত্যাদি ..

এই জিনিসগুলির প্রতিটিই সর্বোত্তম সমাধান উত্পন্ন করে কিনা তা জিজ্ঞাসা করার জন্য আরও একটি দুর্দান্ত প্রশ্ন হবে!


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

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

@ ফ্র্যাঙ্কপুফার সম্ভবত এটি একটি সংযোজন মূল্য। তবে, মূল কথাটি, আপনি জিজ্ঞাসা করছেন যে এই দুটি জিনিস এমন কিছু অর্জন করে যা তারা আদৌ নকশাকৃত বা অর্জনের উদ্দেশ্যে নয়। আরও এটির জন্য, আপনি জিজ্ঞাসা করছেন যে তারা এমন কিছু অর্জন করতে পারে যা এমনকি পরিমাপ বা যাচাই করা যায় না।
এসভিডজেন

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

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

4

একটি জিনিস যা এখনও কেউ যোগ করেনি তা হ'ল আপনি যে "টিডিডি বিকাশ" বর্ণনা করছেন তা অত্যন্ত বিমূর্ত এবং অবাস্তব। এটি গাণিতিক অ্যাপ্লিকেশনটির মতো হতে পারে যেখানে আপনি একটি অ্যালগরিদমকে অনুকূল করছেন তবে বেশিরভাগ কোডার কাজ করে এমন ব্যবসায়িক অ্যাপ্লিকেশনগুলিতে এটি খুব বেশি ঘটে না।

বাস্তব বিশ্বে আপনার পরীক্ষাগুলি ব্যবসায়িক বিধিগুলি মূলত অনুশীলন এবং বৈধকরণ করে:

উদাহরণস্বরূপ - কোনও গ্রাহক যদি স্ত্রী এবং দুই সন্তানের সাথে 30 বছরের পুরানো ধূমপায়ী হন তবে প্রিমিয়াম বিভাগটি "এক্স" ইত্যাদি is

আপনি প্রিমিয়াম ক্যালকুলেশন ইঞ্জিনটি খুব দীর্ঘ সময়ের জন্য সঠিক না হওয়া পর্যন্ত পুনরাবৃত্তির সাথে পরিবর্তন করতে যাচ্ছেন না - এবং অ্যাপ্লিকেশনটি জীবিত থাকাকালীন প্রায় নয়;)।

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


1
প্রথমে, যখন আমি আপনার উত্তরটি পড়ি, তখন আমি "হ্যাঁ, এটিই মূল বিষয়" thought তবে প্রশ্নটি পুনর্বিবেচনা করার পরে, আমি ভেবেছিলাম এটি এতটা বিমূর্ত বা অবাস্তব নয়। যদি কেউ পুরোপুরি ভুল আর্কিটেকচারকে চোখের সামনে ফেলে দেয় তবে টিডিডি এটি সমাধান করবে না, এটি 1000 পুনরাবৃত্তির পরে নয়।
ডক ব্রাউন

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

আমি যখন "ভুল আর্কিটেকচার" বলি, তখন আমার মনে এমন কেস থাকে যেগুলির জন্য বিদ্যমান টেস্ট স্যুটটি ফেলে দেওয়া দরকার। আপনি আমার উত্তর পড়েছেন?
ডক ব্রাউন

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

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

3

আমি মনে করি না এটি পথে যায়। বেশিরভাগ দলে এমন কোনও ব্যক্তি নেই যা আপনি তাদের হোয়াইটবোর্ডে লিখে রাখলেও সর্বোত্তম সমাধান নিয়ে আসতে সক্ষম। টিডিডি / এগিল তাদের পথে পাবে না।

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

আমি এমন একটি দৃশ্যের কথা ভাবছি যেখানে আপনি বেশ কয়েকটি পরীক্ষার কেস প্রয়োগ করেছেন এবং তারপরে দেখতে পাবেন যে পরবর্তী পরীক্ষার ক্ষেত্রে একটি প্রতিযোগিতামূলক ভিন্ন পদ্ধতির প্রয়োজন হবে। আপনাকে আপনার আগের কাজটি ফেলে দিতে হবে এবং আবার শুরু করতে হবে।

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

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


0

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

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


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

2
[1] আসলে, আমি বেশ নিশ্চিত fibonacci, যা আমি টিডিডি উদাহরণ / টিউটোরিয়াল হিসাবে দেখেছি, এটি কম-বেশি মিথ্যা বলে। আমি টিডিডি'র মাধ্যমে ফাইবোনাচি বা অন্য কোনও অনুরূপ সিরিজ কাউকে কখনও "আবিষ্কার" করতে বাজি রাখতে রাজি নই। প্রত্যেকেই ইতিমধ্যে ফিবোনাচি জানা থেকে শুরু করে, যা প্রতারণা করছে। আপনি যদি এটি টিডিডি করে আবিষ্কার করার চেষ্টা করেন, আপনি সম্ভবত ওপি সম্পর্কে জিজ্ঞাসা করছেন এমন মৃতপ্রান্তে পৌঁছে যাবেন: আপনি কেবল আরও পরীক্ষা এবং রিফ্যাক্টরিং লিখে সিরিজটিকে সাধারণীকরণ করতে পারবেন না - আপনাকে অবশ্যই গাণিতিক প্রয়োগ করতে হবে যুক্তি!
আন্দ্রেস এফ।

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

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

@ ফ্র্যাঙ্কপুফার: ঠিক আছে, তাহলে সফটওয়্যার বিকাশের ক্ষেত্রে "স্থানীয় সর্বোত্তম" এমন কোন পরিমাপযোগ্য মূল্য?
জ্যাকবিবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.