নির্দিষ্ট মানের মান পূরণের জন্য আমি কীভাবে একটি বৃহত লিগ্যাসি কোডবেস আপডেট করতে পারি?


10

উত্তরাধিকারের কোডবেসগুলি উন্নত করার জন্য সরঞ্জাম এবং কৌশল সম্পর্কে প্রচুর তথ্য রয়েছে, তবে আমি কোনও সফল বাস্তব বিশ্বের কেস স্টাডি করতে পারি নি। বেশিরভাগ পরামর্শটি মাইক্রো স্তরের হয় এবং সহায়ক হওয়ার পরেও ম্যাক্রো স্তরে সহায়তা করতে পারে এমন প্রমাণের অভাবে অনেক লোককে বোঝায় না।

আমি বিশেষত ইনক্রিমেন্টাল উন্নতিগুলির সন্ধান করছি যা আজকের মানের মানগুলি পূরণ করার জন্য একটি বৃহত উত্তরাধিকার কোডবেস আপডেট করার সময় বাস্তব বিশ্বে সাফল্য হিসাবে প্রমাণিত হয়েছে, এবং একটি সম্পূর্ণ পুনর্লিখন নয়।

আগে:

  • বড়: 1MLOC এর চেয়ে বড় greater
  • উত্তরাধিকার: কোনও স্বয়ংক্রিয় পরীক্ষা নেই
  • নিম্ন মানের: উচ্চ জটিলতা, উচ্চ মিলন, উচ্চ ত্রুটিযুক্ত ত্রুটি

পরে

  • স্বয়ংক্রিয় পরীক্ষা
  • আরও সহজ আপডেট / রক্ষণাবেক্ষণ
  • উচ্চমান: জটিলতা হ্রাস, ডিকপলড কোড, কয়েকজন ত্রুটি থেকে রক্ষা পেয়েছে

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

যদি সম্ভব হয় তবে একটি উদাহরণ সংস্থা বা একটি বড় লিগ্যাসি প্রকল্পের কেস স্টাডি অন্তর্ভুক্ত করুন যা এটির ব্যাক আপ করার জন্য আপনার উত্তরে "সফল" মানের উন্নতি প্রক্রিয়াটি পেরেছে।




7
পুরো আর্থিক শিল্প? এর বেশিরভাগটি 40 বছরের পুরানো ফরট্রান কোডে চলে। নেটস্কেপের বিপরীতে তারা এটিকে ছাঁটাই করতে এবং এটিকে আবার স্ক্র্যাচ থেকে লিখতে পারে না, তাই এটি ধীরে ধীরে পুরো সময়ের উন্নতি করে চলেছে।
ম্যাটডি ডেভী

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

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

উত্তর:


8

Http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 এর মতো বইগুলি শিল্পে কত বড়, উত্তরাধিকারী দুর্বল মানের কোড ঘাঁটি সাধারণ, তার যথেষ্ট সাক্ষী হওয়া উচিত be

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

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

দ্রষ্টব্য: আমি এটি একটি মন্তব্য করতে চেয়েছিলাম, কিন্তু এটি অনেক দীর্ঘ ছিল। আমি বুঝতে পেরেছি এটি পুরোপুরি প্রশ্নের উত্তর দেয় না।

সম্পাদনা: সি ++ 11 এবং জিসিসির দীর্ঘমেয়াদী কার্যকারিতা সম্পর্কে প্রশ্ন করা হয়েছে - যদি বিকাশকারীরা জিসিসিকে রিফেক্টর করে এবং এটিকে এলএলভিএম / ঝনঝন হিসাবে আরও টেকসই করে তোলে, তবে এটি একটি ভাল উদাহরণ প্রদান করতে পারে। আলোচনায় উল্লেখ করা হয়েছে যে নতুন বিকাশকারীদের উচ্চতর প্রবেশের পথে বাধা দেয় এমন কিছু জায়গায় ডকুমেন্টেশনগুলি দুর্বল।


4

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

উপস্থাপনাটি অনলাইনে স্ট্রিম করা যেতে পারে এবং (আমার মনে হয়) রেকর্ডিংগুলি ভবিষ্যতের কোনও তারিখে উপলভ্য হবে।


1
আমি বুঝতে পারি যে এটি এখন থেকে কয়েক দিনের জন্য নির্ধারিত হয়েছে, তবে একবার এটি সম্প্রচারিত হলে আপনি কি তাদের উত্তর ভিত্তিতে তাদের কোড বেসকে আধুনিকীকরণ করতে নিয়ে যাওয়া প্রক্রিয়াটির সংক্ষিপ্তসার যুক্ত করতে সক্ষম হবেন, যদি সেই লিঙ্কগুলি কখনও মরে যায়?
রাহেল

@ রাচেল - আমি যদি সম্প্রচারটি ধরতে সক্ষম হই তবে অবশ্যই আমি তা করব do ধন্যবাদ।
জোশ কেলি 31'13

4

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

প্রথমবারের মতো একটি অ্যাপ্লিকেশন ছিল যা বিশ্বাস করুন বা না বিশ্বাস করুন এটি একটি মৌলিক স্থাপত্য ছিল যা এটি কেবল ডট ম্যাট্রিক্স প্রিন্টারগুলির সাথে কাজ করে। যখন আমার সংস্থাটি ফিতা সরবরাহ করার জন্য আর কোনও বিক্রেতাকে খুঁজে পেল না, তখন তারা আমাকে এটি লেজার প্রিন্টারের সাথে কাজ করার জন্য নিয়োগ দেয়।

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

তৃতীয়বারের মতো আমি এখনও মাঝখানে আছি, যা সংযুক্তিকে হ্রাস করে ইউনিট পরীক্ষার অনুমতি দেওয়ার জন্য এবং ক্রস প্ল্যাটফর্মের উদ্দেশ্যে এক বিশাল একশব্দ অ্যাপ্লিকেশনকে মডিউলাইজ করছে।

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

ধরা যাক আপনার কাছে উদাহরণস্বরূপ, উচ্চ সংযুক্ত কোডের 60,000 ফাইল রয়েছে। আপনি এটি ইউনিট পরীক্ষার অধীনে রাখা শুরু করতে চান, তবে নির্ভরতা এটি অসম্ভব করে তোলে। আপনি কিভাবে এটি ঠিক করবেন? আপনি একটি ফাইল decouple । আপনি স্বয়ংক্রিয় পরীক্ষাগুলি যুক্ত করুন। আপনি এগিয়ে যাওয়ার আগে স্থিতিশীল স্থানে ফিরে যান। 59,999 বার পুনরাবৃত্তি করুন।

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

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


1

বহু মিলিয়ন লাইন কোড বেসে কাজ করা ব্যক্তিগত অভিজ্ঞতা থেকে আমি কয়েকটি কৌশল খুঁজে পেয়েছি যা কাজ করে বলে মনে হচ্ছে।

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

যদি আপনি দেখতে পান যে অনেকগুলি বিষয় যা "সিস্টেম" সমস্যার ইঙ্গিত দেয় এমন একাধিক উপাদানগুলির সাথে সম্পর্কিত এবং এমন কোডের দিকে নির্দেশ করতে পারে যা খুব শক্তভাবে মিলিত হয় বা একটি এপিআই যাতে সতেজ হওয়া দরকার।

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

  • ইউনিট টেস্টিং কাজ করতে পারে তবে প্রায়শই আপনি দৃ tight়ভাবে সংযুক্ত কোডের কারণে ইউনিট টেস্ট করা যেতে পারে তার মধ্যে সীমাবদ্ধ থাকেন। তবে আপনি যেখানে পারেন সেখানে এটি করুন।
  • বাহ্যিক পরীক্ষা করা অন্য উপায়। আমি ধরে নিয়েছি যে আপনার সম্ভবত ইতিমধ্যে এটি রয়েছে এবং না থাকলে আমি এটি তৈরিতে কিছুটা সময় ব্যয় করব। অতিরিক্তভাবে আমার জন্য কাজ করে এমন কিছু হ'ল সিস্টেমে এলোমেলোভাবে ত্রুটি / ঘটনাগুলি ইনজেক্ট করার ক্ষমতা যুক্ত করা। এছাড়াও এটি নতুন উপায়ে ব্যর্থ করার চেষ্টা করার জন্য একই সাথে একাধিক জিনিস ইনজেক্ট করার চেষ্টা করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.