উত্তরাধিকার কোড কার্যকরভাবে কার্যকর করার মূল বিষয়গুলি কী কী? [বন্ধ]


133

আমি লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করা বইটি কয়েকবার প্রস্তাবিত দেখেছি । এই বইয়ের মূল বিষয়গুলি কী কী?

ইউনিট / ইন্টিগ্রেশন টেস্ট যুক্ত করার পরে এবং পুনরায় সংশোধন করার চেয়েও লিগ্যাসি কোড নিয়ে কাজ করার আরও অনেক কি আছে?



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

9
সম্ভবত আপনার সবেমাত্র বইটি পড়তে হবে
এইচএলজিইএম

এখানে চমৎকার পর্যালোচনা: andreaangella.com/2014/03/…
রোহানক্র্যাগ

উত্তর:


157

উত্তরাধিকার কোডের মূল সমস্যাটি হ'ল এর কোনও পরীক্ষা নেই। সুতরাং আপনাকে কিছু যুক্ত করতে হবে (এবং তারপরে আরও ...)।

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

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

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

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

  • সেন্সিং - কোনও কোডের টুকরা কার্যকর করার প্রভাবগুলি যাচাই করতে এবং যাচাই করতে এবং
  • পৃথকীকরণ - কোডের নির্দিষ্ট টুকরোটি প্রথমে একটি পরীক্ষার জোতাতে পাওয়ার জন্য।

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

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

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


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

99

উত্তরাধিকার কোড কার্যকরভাবে কার্যকর করার মূল পয়েন্টগুলি পাওয়ার দ্রুত উপায়


3
যে Hanselminutes পৃষ্ঠাতে MP3 টি লিংক নষ্ট হয়ে গেছে, কিন্তু এক hanselminutes.com/165/... নয় - s3.amazonaws.com/hanselminutes/hanselminutes_0165.mp3
পিটার মর্টেনসেন

পিডিএফ লিঙ্কটি ঠিক করার জন্য রসস্টনকে ধন্যবাদ। দেখে মনে হচ্ছে অবজেক্টর ডট কম গেছে - সম্ভবত "আঙ্কেল বব" ব্যবসা থেকে গেছে?
মার্কজে

আমি নিশ্চিত না আপত্তিজনক পরামর্শদাতার কী হয়েছে তবে আজকাল আঙ্কেল বব 7 তম লাইটের জন্য কাজ করছেন।
জুলাই

40

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

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

আপনি এক ইউনিট পরীক্ষা লেখার জন্য, এক ঘন্টা মূল্য উন্নয়নের প্রচেষ্টা পরীক্ষা করতে কত সময় নেন বলে মনে করেন? আলোচনার জন্য, আরও একটি ঘন্টা বলি।

20 মিলিয়ন-বছরের পুরনো ব্যবস্থায় সেই মিলিয়ন-লাইনে কত সময় বিনিয়োগ করা হয়? যাক, 20 বিকাশকারীরা 20 বছরের সময় 2000 ঘন্টা / বার্ষিক জন্য (তারা বেশ কঠোর পরিশ্রম করেছিল)। আসুন এখন একটি সংখ্যা বাছুন - আপনার কাছে নতুন কম্পিউটার এবং নতুন সরঞ্জাম রয়েছে, এবং the% of এই টুকরোটি প্রথম স্থানে লিখেছেন এমন ছেলের চেয়ে আপনারা অনেক বেশি চালাক let's আসুন ধরা যাক যে আপনার 10 এর মূল্যবান। আপনার 40 বছর বয়স হয়েছে, ভাল, আপনি কি ...?

আপনার প্রশ্নের উত্তর তাই অনেক আছে। উদাহরণস্বরূপ, সেই রুটিনটি যে 1000 লাইন (আমার 5000 টিরও বেশি কিছু রয়েছে), এটি অত্যধিক জটিল এবং স্প্যাগেটির একটি অংশ। এটি কেবলমাত্র (আরও চারটি অক্ষরের শব্দ) কয়েক 100 লাইনের রুটিন এবং আরও 20 টি লাইনের সহায়কগুলিতে পুনরায় ফ্যাক্টর করতে কয়েক দিন সময় নেয়, তাইনা? ভুল। এই 1000 লাইনে লুকানো 100 টি বাগ ফিক্স, প্রত্যেকেরই একটি অননুমোদিত ব্যবহারকারীর প্রয়োজনীয়তা বা একটি অস্পষ্ট প্রান্তের কেস। এটি 1000 লাইন কারণ আসল 100-লাইনের রুটিনটি কাজটি করে নি।

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

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


2
টিপস জন্য ধন্যবাদ! এগুলি আপনার নাকি বই থেকে?
আরমান্ড

3
সম্ভবত দু'জনের মধ্যেই - আমি এই কাজটি করার কয়েক বছর পরে বইটি পড়েছি এবং সম্ভবত এটি এগ্রিয়ান পড়া উচিত। যে কোনও ভাল বইয়ের মতো এটি আপনাকে বর্তমানে যা করছেন তার কিছু চ্যালেঞ্জ করতে, আপনি যা করছেন তার বেশিরভাগ ক্ষেত্রে পুনরায় প্রয়োগ করুন, তবে আপনার নির্দিষ্ট সমস্যাগুলির সেটগুলির জন্য সমস্ত উত্তর নেই।
mattnz

7
"এটি 1000 লাইনের কারণ মূল 100 লাইনের রুটিন কাজটি করেনি।" তাই খুব কমই এটি বাস্তবে প্রদর্শিত হয়। প্রায়শই এটির জন্য নয় এটি 1000 লাইন কেবল কারণ মূল বিকাশকারী তার আস্তিনগুলি ঘূর্ণায়মান এবং পরিকল্পনা বা ডিজাইনের জন্য এমনকি এক মুহুর্তও ছাড়ার আগে কোডিং শুরু করে।
স্টিফেন টোসেট

3
না, আমি বলছি যে বেশিরভাগ ক্ষেত্রে (আমি ব্যক্তিগতভাবে মুখোমুখি হয়েছি), 1,000 লাইন রুটিনগুলি একটি সুস্পষ্ট ইঙ্গিত যা লোকে কীভাবে একটি সঠিক বিমূর্ততা লিখতে হবে তা চিন্তা করার আগে কোড লেখা শুরু করেছিল। হাজার লাইনের রুটিনগুলি কার্যত সংজ্ঞা অনুসারে খুব জটিল - আপনি কি বলছেন যে শত শত লুকানো, অবিচ্ছিন্ন বাগফিক্স সহ এক হাজার লাইনের রুটিন কোনও দায়িত্বশীল বিকাশকারীর পরিচয়?
স্টিফেন টাউসেট

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

19

বইটি থেকে দূরে নিতে দুটি মূল বিষয় রয়েছে।

  1. লিগ্যাসি কোড এমন কোনও কোড যা পরীক্ষার কভারেজ নেই।
  2. যখনই আপনাকে উত্তরাধিকারের কোডটি পরিবর্তন করতে হবে, আপনার অবশ্যই এটির কভারেজ রয়েছে কিনা তা নিশ্চিত হওয়া উচিত।

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


6
+1 দুর্দান্ত পয়েন্ট: "যখনই আপনাকে উত্তরাধিকারের কোডটিতে পরিবর্তন আনতে হবে, এর উত্তরাধিকারের স্থিতিটি সরাতে সময় নিন" "
জন

3
উত্তরাধিকারের স্থিতি সরানো, আমার ভোট পান :)
রাচেল

7

বাদামের শেলের মধ্যে এটি সত্য - পরীক্ষা এবং রিফ্যাক্টরিং যুক্ত হ'ল এটি।

তবে বইটি কোডের সাথে এমনটি করার জন্য আপনাকে অনেকগুলি বিভিন্ন কৌশল দেয় যা নিরাপদে নিরাপদে পরীক্ষা করা এবং রিফ্যাক্টর করা খুব কঠিন।

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