বৈশিষ্ট্য ছেদগুলি সাথে আচরণ করে


11

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

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

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

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

সুতরাং আপনি কীভাবে কোনও পদ্ধতিগত ফ্যাশনে সেরা ফলাফল পাবেন যা কোনও বাজেট বিস্ফোরিত হয় না এবং শালীন, দরকারী এবং পেশাদারভাবে গ্রহণযোগ্য উপায়ে সম্পূর্ণ is

  • স্পেসিফিকেশন: আপনি যখন কোনও নতুন বৈশিষ্ট্য নির্দিষ্ট করেন - আপনি কীভাবে নিশ্চিত হন যে এটি অন্যান্য সমস্ত বাচ্চার সাথে ভাল খেলেছে?

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

  • বাস্তবায়ন: আপনি যখন কোনও বৈশিষ্ট্য বাস্তবায়ন করেন - আপনি কীভাবে নিশ্চিত করেন যে আপনার কোডটি সমস্ত ক্ষেত্রে সঠিকভাবে ইন্টারেক্ট করে / ছেদ করে।

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

  • যাচাইকরণ: আপনি যখন কোনও বৈশিষ্ট্য পরীক্ষা করেন - আপনি কীভাবে এই বিষয়টিটির সাথে মোকাবিলা করবেন যে আপনি কেবল এই বৈশিষ্ট্যটির ছেদ স্থানের একটি ভগ্নাংশ পরীক্ষা করতে পারেন?

    এটা জেনে রাখা শক্ত যে বিচ্ছিন্নতার মধ্যে একটি একক বৈশিষ্ট্য পরীক্ষা করা ত্রুটি-মুক্ত কোডের কাছাকাছি কোনও কিছুর গ্যারান্টি দেয় না, তবে আপনি যখন 2^-Nএটির একটি ভগ্নাংশকে হ্রাস করেন তখন মনে হয় শত টেস্টগুলি মিলিত সমস্ত সমুদ্রের একফোঁটা জলও waterেকে রাখছে না seems । আরও খারাপ, সবচেয়ে সমস্যাযুক্ত ত্রুটিগুলি হ'ল বৈশিষ্ট্যগুলি ছেদ থেকে শুরু করে, যা কারও কোনও সমস্যার কারণ হতে পারে না বলে আশা করা যায় - তবে আপনি যদি এইরকম দৃ strong় ছেদ না আশা করেন তবে কীভাবে আপনি এইগুলির জন্য পরীক্ষা করবেন?

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


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

উত্তর:


6

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

অনুশীলনে, ভাল ডিজাইন এমনভাবে ডাইপুলিং সরবরাহ করতে পারে যে ছেদকারী বৈশিষ্ট্যগুলির সংখ্যা 2 ^ N এর চেয়ে অনেক কম, যদিও এটি সম্ভবত ভাল ডিজাইন করা সিস্টেমেও এন এর চেয়ে বেশি বলে মনে হয়।

যতদূর সূত্র হিসাবে, এটি আমার কাছে মনে হয় যে সফ্টওয়্যার ডিজাইন সম্পর্কে প্রায় প্রতিটি বই বা ব্লগ কার্যকরভাবে সম্ভব সেই 2 ^ N হ্রাস করার চেষ্টা করছে, যদিও আমি জানি না যে আপনার মতো একই পদে সমস্যাটি ফেলেছিল don't না।

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

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

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

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

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


0

এটি যে কোনও উপায়ে সেরা উত্তর হবে না তবে আমি এমন কিছু বিষয় নিয়ে ভাবছিলাম যা আপনার প্রশ্নের পয়েন্টগুলিকে ছেদ করে তাই আমি ভেবেছিলাম আমি সেগুলি উল্লেখ করব:

কাঠামোগত সাহায্য

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

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

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

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

নকশা

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

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

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

সহজতর করা!

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

যাইহোক, এটি আমার 2 সি।

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