আমি লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করা বইটি কয়েকবার প্রস্তাবিত দেখেছি । এই বইয়ের মূল বিষয়গুলি কী কী?
ইউনিট / ইন্টিগ্রেশন টেস্ট যুক্ত করার পরে এবং পুনরায় সংশোধন করার চেয়েও লিগ্যাসি কোড নিয়ে কাজ করার আরও অনেক কি আছে?
আমি লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করা বইটি কয়েকবার প্রস্তাবিত দেখেছি । এই বইয়ের মূল বিষয়গুলি কী কী?
ইউনিট / ইন্টিগ্রেশন টেস্ট যুক্ত করার পরে এবং পুনরায় সংশোধন করার চেয়েও লিগ্যাসি কোড নিয়ে কাজ করার আরও অনেক কি আছে?
উত্তর:
উত্তরাধিকার কোডের মূল সমস্যাটি হ'ল এর কোনও পরীক্ষা নেই। সুতরাং আপনাকে কিছু যুক্ত করতে হবে (এবং তারপরে আরও ...)।
এটি স্বয়ংক্রিয়ভাবে অনেক কাজ করতে পারে, যেমন @ ম্যাম্টনজ উল্লেখ করেছেন। তবে লিগ্যাসি কোডের বিশেষ সমস্যাটি এটি পরীক্ষার জন্য ডিজাইন করা হয়নি । সুতরাং সাধারণত এটি স্প্যাগেটি কোডের একটি বিশাল সংশ্লেষযুক্ত জগাখিচুড়ি, যেখানে ইউনিট পরীক্ষার জন্য ছোট অংশগুলি বিচ্ছিন্ন করা খুব কঠিন বা নিখুঁত অসম্ভব। সুতরাং ইউনিট টেস্টিং আগে, আপনি কোড refactor প্রয়োজন এটা আরো testable করা।
তবে নিরাপদে রিফ্যাক্টর করার জন্য, আপনাকে অবশ্যই পরিবর্তনগুলির সাথে কোনও কিছু ভেঙে ফেলা হয়নি তা যাচাই করার জন্য আপনার ইউনিট পরীক্ষা থাকতে হবে ... এটি উত্তরাধিকার কোডের 22 টি ক্যাচ।
এই বইটি আপনাকে শিখিয়েছে কীভাবে কোডটিকে প্রথমে সর্বনিম্ন, নিরাপদ পরিবর্তন করে কেবল প্রথম ইউনিট পরীক্ষাগুলি সক্ষম করতে catch এগুলি ডিজাইনটিকে আরও সুন্দর করার উদ্দেশ্যে নয় - কেবল ইউনিট পরীক্ষা সক্ষম করতে enable আসলে, কখনও কখনও তারা নকশাকে আরও সুন্দর বা আরও জটিল করে তোলে। যাইহোক, তারা আপনাকে পরীক্ষা লেখার অনুমতি দেয় - এবং একবারে আপনি ইউনিট পরীক্ষা করার পরে, আপনি নকশাটি আরও ভাল করতে মুক্ত হন are
কোডটি পরীক্ষণযোগ্য করে তোলার জন্য প্রচুর কৌশল রয়েছে - কিছুগুলি সুস্পষ্টভাবে সাজানো, কিছু কিছু নয়। বইটি না পড়ে এমন কিছু পদ্ধতি আছে যা আমি নিজের সম্পর্কে কখনও ভাবিনি। কিন্তু কি আরও বেশি গুরুত্বপূর্ণ পালক ব্যাখ্যা করেছেন যে হয় কি অবিকল একটি কোড ইউনিট testable করে তোলে। আপনার কোডে নির্ভরতাগুলি কাটাতে এবং বাধাগুলি প্রবর্তন করতে হবে তবে দুটি স্বতন্ত্র কারণে:
নিরাপদে নির্ভরতা কাটা জটিল y ইন্টারফেস, উপহাস এবং নির্ভরতা ইনজেকশন উপস্থাপন করা একটি লক্ষ্য হিসাবে পরিষ্কার এবং দুর্দান্ত, ঠিক এই মুহুর্তে করা নিরাপদ নয়। তাই মাঝে মাঝে কিছু পদ্ধতির ওভাররাইড করার জন্য পরীক্ষার অধীনে ক্লাসটি সাবক্লাসিংয়ের অবলম্বন করতে হয় যা সাধারণত ডিবিতে সরাসরি অনুরোধ শুরু করে। অন্যান্য সময়, আমাদের এমনকি পরীক্ষার পরিবেশে একটি নির্ভরযোগ্য শ্রেণি / জারটি একটি জাল দিয়ে প্রতিস্থাপন করা প্রয়োজন ...
আমার কাছে, পালকের দ্বারা আনা সর্বাধিক গুরুত্বপূর্ণ ধারণাটি হ'ল সেমস । একটি সীম কোডের একটি জায়গা যেখানে আপনি কোডটি নিজেরাই পরিবর্তন না করেই আপনার প্রোগ্রামের আচরণ পরিবর্তন করতে পারেন । আপনার কোডে সিম তৈরি করার ফলে পরীক্ষার অধীনে কোডের টুকরোটি পৃথক করা সম্ভব হয়, তবে সরাসরি পরীক্ষা করা কঠিন বা অসম্ভব হলেও এমনকি কোডটি পরীক্ষার অধীনে আচরণের অনুধাবন করতে সক্ষম করে (যেমন কলটি অন্য কোনও অবজেক্টে বা সাবসিস্টেমে পরিবর্তন করে তোলে , যার রাজ্যটি পরীক্ষা পদ্ধতিতে সরাসরি জিজ্ঞাসা করা সম্ভব নয়)।
এই জ্ঞানটি আপনাকে কোডের নিকৃষ্টতম স্তূপে টেস্টাবিলিটির বীজগুলি লক্ষ্য করতে এবং সেখানে পৌঁছানোর জন্য সর্বনিম্ন, সর্বনিম্ন ব্যাঘাতকৃত, নিরাপদ পরিবর্তনগুলি সন্ধান করতে দেয়। অন্য কথায়, "স্পষ্ট" রিফ্যাক্টরিংগুলি এড়াতে যাতে আপনার নজরে না রেখে কোড ভাঙার ঝুঁকি রয়েছে - কারণ এটি সনাক্ত করার জন্য আপনার কাছে এখনও ইউনিট পরীক্ষা নেই।
উত্তরাধিকার কোড কার্যকরভাবে কার্যকর করার মূল পয়েন্টগুলি পাওয়ার দ্রুত উপায়
আমি কয়েক মিলিয়ন লাইনের কোডের কোড বেসে কাজ করি, কিছু কিছু 1980 এর দশকের কথা back এটি কেবল সফ্টওয়্যার, সুতরাং এটি কয়েকটি ইউনিট পরীক্ষা লেখার বিষয়, যাতে আপনি যেতে পারেন এবং কেবল এটি পুনরুদ্ধার করতে পারেন এবং এটি আরও ভাল করে তুলতে পারেন।
এখানে মূল শব্দটি কেবল - এটি একটি চার অক্ষরের শব্দ যা কোনও প্রোগ্রামারের শব্দভান্ডারে অন্তর্ভুক্ত নয়, যিনি উত্তরাধিকারী ব্যবস্থাতে কাজ করছেন তাকে ছেড়ে দিন।
আপনি এক ইউনিট পরীক্ষা লেখার জন্য, এক ঘন্টা মূল্য উন্নয়নের প্রচেষ্টা পরীক্ষা করতে কত সময় নেন বলে মনে করেন? আলোচনার জন্য, আরও একটি ঘন্টা বলি।
20 মিলিয়ন-বছরের পুরনো ব্যবস্থায় সেই মিলিয়ন-লাইনে কত সময় বিনিয়োগ করা হয়? যাক, 20 বিকাশকারীরা 20 বছরের সময় 2000 ঘন্টা / বার্ষিক জন্য (তারা বেশ কঠোর পরিশ্রম করেছিল)। আসুন এখন একটি সংখ্যা বাছুন - আপনার কাছে নতুন কম্পিউটার এবং নতুন সরঞ্জাম রয়েছে, এবং the% of এই টুকরোটি প্রথম স্থানে লিখেছেন এমন ছেলের চেয়ে আপনারা অনেক বেশি চালাক let's আসুন ধরা যাক যে আপনার 10 এর মূল্যবান। আপনার 40 বছর বয়স হয়েছে, ভাল, আপনি কি ...?
আপনার প্রশ্নের উত্তর তাই অনেক আছে। উদাহরণস্বরূপ, সেই রুটিনটি যে 1000 লাইন (আমার 5000 টিরও বেশি কিছু রয়েছে), এটি অত্যধিক জটিল এবং স্প্যাগেটির একটি অংশ। এটি কেবলমাত্র (আরও চারটি অক্ষরের শব্দ) কয়েক 100 লাইনের রুটিন এবং আরও 20 টি লাইনের সহায়কগুলিতে পুনরায় ফ্যাক্টর করতে কয়েক দিন সময় নেয়, তাইনা? ভুল। এই 1000 লাইনে লুকানো 100 টি বাগ ফিক্স, প্রত্যেকেরই একটি অননুমোদিত ব্যবহারকারীর প্রয়োজনীয়তা বা একটি অস্পষ্ট প্রান্তের কেস। এটি 1000 লাইন কারণ আসল 100-লাইনের রুটিনটি কাজটি করে নি।
আপনাকে "মাইন্ড সেট" দিয়ে কাজ করা দরকার " যদি এটি না ভেঙে যায় তবে এটি ঠিক করবেন না "। এটি যখন ভেঙে যায়, আপনি ঠিক করার সময় আপনাকে খুব সতর্কতা অবলম্বন করা উচিত - আপনি এটি আরও ভাল করার জন্য, যাতে আপনি দুর্ঘটনাক্রমে অন্য কিছু পরিবর্তন করেন না। নোট করুন যে "ভাঙ্গা" এর মধ্যে এমন কোড অন্তর্ভুক্ত থাকতে পারে যা অভাবনীয়, তবে সঠিকভাবে কাজ করা, যা সিস্টেম এবং এর ব্যবহারের উপর নির্ভর করে। জিজ্ঞাসা করুন "যদি আমি এটিকে আরও খারাপ করে দিই তবে কী হবে", কারণ একদিন আপনি যাবেন, এবং আপনি মনিবদের মনিবকে বলতে হবে যে আপনি এটি কেন বেছে নিয়েছেন।
এই সিস্টেমগুলি সর্বদা উন্নত করা যায়। আপনার কাজ করার জন্য বাজেট থাকবে, একটি টাইমলাইন, যাই হোক না কেন। আপনি যদি না - যান এবং একটি তৈরি করুন। যখন অর্থ / সময় শেষ হয়ে যায় তখন এটিকে আরও ভাল করা বন্ধ করুন। একটি বৈশিষ্ট্য যুক্ত করুন, এটিকে কিছুটা আরও ভাল করার জন্য নিজেকে সময় দিন। একটি বাগ ঠিক করুন - আবার, কিছুটা অতিরিক্ত সময় ব্যয় করুন এবং এটি আরও ভাল করুন। আপনি যখন শুরু করেছিলেন তখন এর চেয়ে খারাপ কখনও বিতরণ করবেন না।
বইটি থেকে দূরে নিতে দুটি মূল বিষয় রয়েছে।
অন্যান্য প্রতিক্রিয়াকারীরা যেমন উল্লেখ করেছেন, আপনার বিদ্যমান লিগ্যাসি কোডটি প্রাক-শূন্যতার সাথে আপডেট করার চেষ্টা করা একটি বোকামির কাজ । পরিবর্তে, যখনই আপনাকে উত্তরাধিকার কোডে পরিবর্তন করতে হবে (একটি নতুন বৈশিষ্ট্য বা বাগ ফিক্সের জন্য), এর উত্তরাধিকারের স্থিতিটি সরাতে সময় নিন।