জটিল লিগ্যাসি অ্যাপ্লিকেশনটিতে নতুন বাগ প্রবর্তনের প্রতিক্রিয়া হ্রাস করার জন্য আমি কোন পদ্ধতি অবলম্বন করতে পারি?


10

আমি যেখানে কাজ করি সেখানে প্রায়শই আমাকে পুরানো সিস্টেমে (.NET 1) বিকাশ করতে হয় যার কোডটি সম্পূর্ণ স্প্যাগেটি - ভেরিয়েবলের নাম, প্রোগ্রামের কাঠামো বা মন্তব্যগুলিতে খুব কম চিন্তা করা না দিয়ে।

এর কারণে আমার কি বিটগুলি পরিবর্তন করা দরকার তা বুঝতে যুগে যুগে সময় লাগে এবং আমি প্রায়শই বিদ্যমান সফ্টওয়্যারটি 'ব্রেক' করি কারণ আমি একটি পরিবর্তন করেছি। আমি সত্যিকার অর্থে কয়েক মাস (সহকর্মীদের সাথে) রিফ্যাক্টরে যাওয়ার জন্য ব্যয় করতে চাই তবে বিদ্যমান বিকাশকারীরা উভয়ই এটির প্রয়োজন দেখতে পাচ্ছেন না - বা মনে করেন না যে এর জন্য সময় আছে (সিস্টেমটি বিশাল)।

আমি তার কোডটিতে কাজ করার ভয় পাচ্ছি কারণ আমি অন্য কিছু ভেঙে ফেলেছি তা খুঁজে পেতে কেবল কোনও কিছু ঠিক করতে কয়েক দিন সময় লাগে। এটি অবশ্যই আমাকে অক্ষম দেখায় - তাই আমি কীভাবে এটি মোকাবেলা করতে পারি?


উত্তর:


16

আপনি যে অংশগুলিতে কাজ করছেন তার জন্য পরীক্ষা লিখতে শুরু করুন। আপনি এমন একটি ওয়ার্কফ্লো চেষ্টা করতে পারেন যা এরকম কিছু হয়:

  1. আপনি যে অংশটি পরিবর্তন করতে চলেছেন তার জন্য পরীক্ষা লিখুন। বিদ্যমান কোডটি কীভাবে আচরণ করে তা বুঝতে এটি আপনাকে সহায়তা করবে।
    • প্রয়োজনে টেস্টিং সমর্থন করার জন্য রিফ্যাক্টর কোড, তবে সময় কম হলে আপনি নন-ইউনিট পরীক্ষা লিখতে চাইতে পারেন।
  2. আপনার প্রত্যাশা মতো জিনিসগুলি কাজ করছে তা নিশ্চিত করতে আপনার পরীক্ষা চালান।
  3. আপনার পরিবর্তনগুলি করুন। অবিচ্ছিন্ন কোড উন্নতির চেতনায় প্রয়োজনে রিফ্যাক্টর, তবে চালিয়ে যান না।
  4. আপনি একই কার্যকারিতা বজায় রেখেছেন তা নিশ্চিত করতে আপনার পরীক্ষাগুলি আবার চালান।

যদি আপনি আপনার পরীক্ষাগুলি দূরে না ফেলে থাকেন তবে আপনি সময়ের সাথে সাথে একটি পরীক্ষার স্যুট তৈরি করবেন যা অ্যাপ্লিকেশনটির সর্বাধিক গুরুত্বপূর্ণ (এবং / বা উদ্বায়ী) অংশগুলি coverেকে রাখতে হবে এবং এতে পরিবর্তন করা সহজ এবং নিরাপদ হয়ে উঠবে।

আপনি মাইকেল পালক দ্বারা লিগ্যাসি কোড দিয়ে কার্যকরভাবে কাজ করাও পেতে পারেন ।


1
"এর জন্য +1 ... তবে আপনি যদি সময় কম করেন তবে নন-ইউনিট পরীক্ষা লিখতে চাইতে পারেন" "
মারসি

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

6

আমি অনুসরণ করতে চান আঙ্কেল বব মার্টিন এর বয় স্কাউট রুল :

"যখন আপনার কাছে একটি বড় অগোছালো উত্তরাধিকারের ওয়াড রয়েছে, তখন আপনাকে যা করতে হবে তা হল ... আপনাকে যা করতে হবে তা হ'ল মেসগুলি তৈরি করা বন্ধ করে এবং সেগুলি পরিষ্কার করা শুরু করুন।

এর অর্থ এই নয় যে আপনি আপনার পরিচালকদের একটি সম্মেলন কক্ষে ডাকবেন এবং তাদের বলবেন যে আপনি কোডটি রিফ্যাক্ট করার সময় পরবর্তী তিন মাসের জন্য বৈশিষ্ট্য সরবরাহ করবেন না। এটা করো না! বরং এটির অর্থ হ'ল আপনি "বয় স্কাউট বিধি" অবলম্বন করতে যাচ্ছেন এবং প্রতিটি মডিউলটি যখন আপনি এটি পরীক্ষা করে দেখেছেন তখন তার চেয়ে কিছুটা পরিষ্কার করে পরীক্ষা করতে হবে।

পুনরাবৃত্তি থেকে পুনরাবৃত্তি, এবং রিলিজ থেকে রিলিজ পর্যন্ত, আপনি এতে নতুন বৈশিষ্ট্য এবং কার্যকারিতা যুক্ত করার সময় এই সিস্টেমটি পরিষ্কার করতে যাচ্ছেন। অন্য কোন উপায় নেই."


2

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

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


1
আমি সম্মত হই - এবং অতীতে আমি এই 'ছোট' রিফ্যাক্টরগুলিকে অন্তর্ভুক্ত করেছি কারণ কোডটি বোঝার জন্য আমার কেবল প্রয়োজন ছিল - তবে কেউ সাধারণত "আপনি এটি সম্পূর্ণভাবে ভেঙে ফেলেছেন" এর সাথে উপস্থিত হন এবং এটি কেমন ছিল তা ফিরে ফিরিয়ে দেন ...
বিলি.বব

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

2

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

এবং ইউনিট পরীক্ষা তৈরি করা (বা, আশাকরি, বিদ্যমান পরীক্ষার স্যুটটি প্রসারিত করা) আপনার অজান্তেই কিছু ভেঙে যাওয়ার সম্ভাবনা কম হওয়া উচিত।


0

আরেকটি টিপ। বাগ স্পষ্ট পেয়েছেন নিজেদের, এবং ব্যাণ্ডেজ প্রয়োগের পরে না সেখানেই শেষ!

পাঁচটি হুইসকে জিজ্ঞাসা করুন, লাল বড়িটি ধরুন এবং খরগোশের গর্তটি কত গভীর হয় তা দেখুন এবং মূল কারণটি (এবং সেখানে নীচের পথ) ঠিক করুন।

আপনি সিস্টেম সম্পর্কে অনেক কিছু শিখতে পারেন। এটি কী সংশোধন এবং চুল্লী অগ্রাধিকার দিতে সহায়তা করে। এবং এই জাতীয় কয়েকটি ট্রিপের পরে আপনার স্প্যাগেটির একচেটিয়া স্তূপ জোরদার করার জন্য কিছু শক্ত "সাপোর্ট বিম" রয়েছে।


0

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

// old code
...

if (!File.ReadAllText("c:\patch_control.txt").Contains("StrangeUIBugFix=0"))
{
    // new code goes here
    ...
}

// old + new code
int someValue = 
    IsEnabled("StrangeUIBugFix") ? a + b :  // new code
    a * b; // old code

0

একটি জিনিস: Never change any existing code if you are not sure what effect change would have on complete application.

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