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