আমি জাভা লিখিত একটি বিতরণ সিস্টেম প্রকল্পে আছি যেখানে আমাদের কয়েকটি ক্লাস রয়েছে যা খুব জটিল বাস্তব-বিশ্ব-ব্যবসায়ের সাথে সম্পর্কিত। এই বস্তুগুলির ক্রিয়াকলাপের সাথে সম্পর্কিত অনেকগুলি পদ্ধতি রয়েছে যা ব্যবহারকারী (বা অন্য কোনও এজেন্ট) সেই বস্তুর জন্য প্রয়োগ করতে পারে। ফলস্বরূপ, এই ক্লাসগুলি খুব জটিল হয়ে ওঠে।
সিস্টেমের সাধারণ আর্কিটেকচার পদ্ধতির ফলে কয়েকটি শ্রেণিতে মনোনিবেশ করা অনেকগুলি আচরণ এবং সম্ভাব্য মিথস্ক্রিয়া পরিস্থিতি দেখা যায়।
উদাহরণ হিসাবে এবং জিনিসগুলি সহজ এবং পরিষ্কার রাখার জন্য, আসুন আমরা বলতে পারি যে রোবট এবং কার আমার প্রকল্পের ক্লাস ছিল।
সুতরাং, রোবট শ্রেণিতে আমার নিম্নলিখিত পদ্ধতিতে প্রচুর পদ্ধতি থাকবে:
- ঘুম(); isSleepAvaliable ();
- জাগ্রত (); isAwakeAvaliable ();
- (দিক নির্দেশ) পদব্রজে ভ্রমণ; isWalkAvaliable ();
- অঙ্কুর (দিক নির্দেশ); isShootAvaliable ();
- turnOnAlert (); isTurnOnAlertAvailable ();
- turnOffAlert (); isTurnOffAlertAvailable ();
- রিচার্জ (); isRechargeAvailable ();
- যন্ত্র বন্ধ(); isPowerOffAvailable ();
- stepInCar (গাড়ি); isStepInCarAvailable ();
- stepOutCar (গাড়ি); isStepOutCarAvailable ();
- selfDestruct (); isSelfDestructAvailable ();
- মরা (); isDieAvailable ();
- জীবিত(); জাগ্রত(); isAlertOn (); getBatteryLevel (); getCurrentRidingCar (); getAmmo ();
- ...
গাড়ী শ্রেণিতে, এটি একই রকম হবে:
- চালু করা(); isTurnOnAvaliable ();
- বন্ধ কর(); isTurnOffAvaliable ();
- (দিক নির্দেশ) পদব্রজে ভ্রমণ; isWalkAvaliable ();
- আবার জ্বালানি ভরে নেওয়া (); isRefuelAvailable ();
- selfDestruct (); isSelfDestructAvailable ();
- বিপর্যস্ত (); isCrashAvailable ();
- isOperational (); isOn (); getFuelLevel (); getCurrentPassenger ();
- ...
এর প্রত্যেকটি (রোবট এবং গাড়ি) একটি রাষ্ট্রীয় যন্ত্র হিসাবে প্রয়োগ করা হয়, যেখানে কিছু রাজ্যে কিছু ক্রিয়া সম্ভব এবং কিছু হয় না। ক্রিয়াগুলি বস্তুর স্থিতি পরিবর্তন করে। IllegalStateException
অকার্যকর অবস্থায় ডাকা হলে ক্রিয়া পদ্ধতিগুলি ছুঁড়ে মারে এবং isXXXAvailable()
পদ্ধতিগুলি জানায় যে সেই সময়ে কর্মটি সম্ভব কিনা। যদিও কিছু রাজ্য থেকে সহজেই ছাড়যোগ্য হয় (উদাহরণস্বরূপ, ঘুমন্ত অবস্থায়, জাগ্রত পাওয়া যায়), কিছু না (গুলি করার জন্য, এটি অবশ্যই জাগ্রত, জীবিত, গোলাবারুদ এবং গাড়ীতে চড়া না করে) থাকতে পারে।
তদুপরি, অবজেক্টগুলির মধ্যে মিথস্ক্রিয়াগুলিও জটিল। উদাহরণস্বরূপ, গাড়ী কেবল একটি রোবট যাত্রী ধরে রাখতে পারে, সুতরাং অন্য কেউ যদি প্রবেশের চেষ্টা করে তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া উচিত; গাড়িটি বিধ্বস্ত হলে যাত্রী মারা যেতে হবে; যদি কোনও গাড়ির ভিতরে রোবটটি মারা যায় তবে গাড়ি নিজেই ঠিক আছে, এমনকি তিনি পদ ছাড়তে পারবেন না; রোবট যদি কোনও গাড়ীর ভিতরে থাকে তবে তিনি পদ ছাড়ার আগে অন্য কোনওটিতে প্রবেশ করতে পারবেন না; প্রভৃতি
এর ফলাফলটি, যা আমি ইতিমধ্যে বলেছি, এই ক্লাসগুলি সত্যই জটিল হয়ে উঠেছে। জিনিসগুলিকে আরও খারাপ করে তোলার জন্য, রোবট এবং গাড়ি আন্তঃক্রিয়েবরণ করার সময় শত শত সম্ভাব্য পরিস্থিতি রয়েছে। তদ্ব্যতীত, এই যুক্তিটির বেশিরভাগ ক্ষেত্রে অন্যান্য সিস্টেমে দূরবর্তী ডেটা অ্যাক্সেস করতে হবে। ফলস্বরূপ যে ইউনিট-পরীক্ষার এটি খুব শক্ত হয়ে ওঠে এবং আমাদের প্রচুর পরীক্ষার সমস্যা হয়, যার ফলে একজন অপরটিকে একটি দুষ্কৃতাকারী চক্রের মধ্যে নিয়ে আসে:
- টেস্টকেসস সেটআপগুলি অত্যন্ত জটিল, কারণ তাদের অনুশীলনের জন্য একটি উল্লেখযোগ্য জটিল বিশ্ব তৈরি করা প্রয়োজন।
- পরীক্ষার সংখ্যা বিশাল।
- পরীক্ষার স্যুটটি চালাতে কয়েক ঘন্টা সময় নেয়।
- আমাদের পরীক্ষার কভারেজ খুব কম।
- পরীক্ষার কোডটি তারা পরীক্ষিত কোডের চেয়ে কয়েক সপ্তাহ বা মাস পরে লিখিত হতে থাকে বা কখনই হয় না।
- প্রচুর পরীক্ষাগুলিও খুব বেশি ভাঙা হয়, কারণ পরীক্ষিত কোডের প্রয়োজনীয়তা পরিবর্তিত হয়।
- কিছু পরিস্থিতি এত জটিল, যেগুলি সেটআপের সময়সীমাতে ব্যর্থ হয় (প্রতিটি টেস্টে আমরা একটি টাইমআউট কনফিগার করেছি, সবচেয়ে খারাপ ক্ষেত্রে 2 মিনিট দীর্ঘ এবং এইবার দীর্ঘ সময়সীমা স্থির করে আমরা নিশ্চিত করেছি যে এটি কোনও অসীম লুপ নয়)।
- বাগগুলি নিয়মিতভাবে উত্পাদনের পরিবেশে যায়।
রোবট এবং গাড়ির দৃশ্যপট আমাদের বাস্তবে যা আছে তা স্থূল ও সরলকরণ। স্পষ্টতই, এই পরিস্থিতিটি পরিচালনাযোগ্য নয়। সুতরাং, আমি এই বিষয়ে সহায়তা এবং পরামর্শ চাইছি: 1, ক্লাসের জটিলতা হ্রাস করুন; ২) আমার অবজেক্টগুলির মধ্যে মিথস্ক্রিয়া পরিস্থিতি সহজতর করুন; ৩. পরীক্ষার জন্য পরীক্ষার সময় এবং কোডের পরিমাণ কমিয়ে আনুন।
সম্পাদনা:
আমি মনে করি রাষ্ট্রীয় মেশিনগুলির বিষয়ে আমি পরিষ্কার ছিলাম না। রোবট নিজেই একটি রাষ্ট্রীয় মেশিন, যেখানে "ঘুমন্ত", "জাগ্রত", "রিচার্জিং", "মৃত" ইত্যাদি রয়েছে The
সম্পাদনা 2: আমার সিস্টেমটি আসলে কী তা সম্পর্কে আপনি কৌতূহল বোধ করার ক্ষেত্রে, যে ক্লাসগুলি ইন্টারেক্ট করে সেগুলি হ'ল সার্ভার, আইপিএড্রেস, ডিস্ক, ব্যাকআপ, ব্যবহারকারী, সফটওয়্যারলাইসেন্স ইত্যাদি The রোবট এবং গাড়ির দৃশ্যটি কেবলমাত্র এমন একটি ঘটনা যা আমি পেয়েছি আমার সমস্যাটি ব্যাখ্যা করার জন্য এটি যথেষ্ট সহজ।