লিগ্যাসি কোডবেজে, কীভাবে ব্যবহৃত হচ্ছে এবং কী হচ্ছে না তা আমি কীভাবে দ্রুত আবিষ্কার করব?


21

আমাকে সেই কোডবেস রক্ষণাবেক্ষণের চুক্তি করার পূর্বসুরী হিসাবে যথেষ্ট পরিমাণে উত্তরাধিকার কোডবেজ বলে মনে হচ্ছে তা মূল্যায়ন করতে বলা হয়েছে।

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

ভিতরে কাঠামো যেমন ভিতর থেকে দেখা যায়, এটি গোলযোগ। সমস্ত জায়গা জুড়ে "_old" এবং "_DELETE" প্রত্যয়যুক্ত ফোল্ডার রয়েছে। ফোল্ডারগুলির মধ্যে অনেকগুলি কোনও উদ্দেশ্যহীনভাবে উপস্থিত হয় না বা খুব ক্রিপ্টিক নাম রয়েছে বলে মনে হয়। বৈধ-সন্ধানী ফোল্ডারে এমনকি প্রচুর পুরানো, অব্যবহৃত স্ক্রিপ্ট থাকতে পারে। কেবল এটিই নয়, নিঃসন্দেহে অনেকগুলি ডিফল্ট কোড বিভাগ রয়েছে এমনকি অন্যথায়-অপারেশনাল স্ক্রিপ্টগুলিতেও (খুব কম উদ্বেগজনক উদ্বেগ)।

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

কোডবেজে toোকার জন্য মনে আসার একমাত্র পন্থাটি হ'ল সাইটের মূল থেকে শুরু করে ধীরে ধীরে তবে অবশ্যই লিঙ্কযুক্ত স্ক্রিপ্টগুলির মাধ্যমে নেভিগেট করা ... এবং সম্ভবত শত শত ব্যবহারের সম্ভাবনা রয়েছে, এবং আরও শত শত যা তা নয়। প্রদত্ত যে সাইটের বেশিরভাগ অংশ ফ্ল্যাশ-এ রয়েছে, এটি আরও কম সহজ, যেহেতু বিশেষত পুরানো ফ্ল্যাশ অ্যাপ্লিকেশনগুলিতে, অন্যান্য স্ক্রিপ্টগুলির লিঙ্কগুলি টেক্সট ফাইল (.AS / অ্যাকশনস্ক্রিপ্ট) এর পরিবর্তে বাইনারি (.এফএলএস) এ এম্বেড করা যেতে পারে।

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


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

অশুভ সমাধান: এগুলি মুছুন এবং ত্রুটিগুলি / বাগ রিপোর্টগুলির জন্য অপেক্ষা করুন। (কেবল এটি পুনরুদ্ধারযোগ্য তা নিশ্চিত করুন!)
ইজকাটা

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

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

@ ওডেড পুনঃনামকরণ ট্রায়াল-ত্রুটি মোছার চেয়ে স্পষ্টতই সহজ! ভাল চিন্তা আছে। এটি বাক্সে আরও একটি সরঞ্জাম।
ইঞ্জিনিয়ার

উত্তর:


32

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

  • কোন পৃষ্ঠাগুলি রয়েছে এবং কী কী অভ্যন্তরীণ তা অনুধাবন করতে একটি স্পাইডারিং সরঞ্জাম ব্যবহার করুন। এমনকি একটি প্রাথমিক লিঙ্কচেকার সরঞ্জাম - কোনও নির্দিষ্ট "নিরীক্ষণের উদ্দেশ্যে" মাকড়সা নয় - এই ক্ষেত্রে কার্যকর হবে।
  • একটি বেসিক অডিট / ইনভেন্টরি স্প্রেডশিট করুন। এটি ডিরেক্টরি দ্বারা সংগঠিত ফাইলগুলির তালিকা এবং তাদের শেষ-সংশোধিত সময়ের মতোই সহজ হতে পারে। এটি আপনাকে সুযোগের বোধ তৈরি করতে সহায়তা করবে, এবং আপনি যখন _OLD এবং _DELETE এর মতো ডিরেক্টরিতে পৌঁছবেন তখন আপনি একটি বড় লক্ষ রাখতে পারেন যে ক) আপনার মূল্যায়নগুলি সেই ডিরেক্টরিগুলিতে নয় স্টাফের উপর ভিত্তি করে খ) সেই ডিরেক্টরিগুলির উপস্থিতি এবং সম্ভাবনার সম্ভাবনাগুলি ক্রাফ্ট / লুকানো দুঃস্বপ্নগুলি গভীরভাবে ইস্যুগুলির প্রমাণ দেয় যা কোনওভাবেই আপনার ক্লায়েন্টের বিডের জন্য গণ্য করা উচিত । আপনাকে সম্ভাব্য সমস্যাগুলি _ ওল্ড বা _ডিইটিইটিতে গণনা করতে গাজিলিয়ন বছর ব্যয় করতে হবে না; তথ্যটি শেষ বিডে ফিড করবে।
  • সম্পূর্ণ ওয়েব-ভিত্তিক অ্যাপ্লিকেশনটি কী বলে মনে হচ্ছে তা পর্যালোচনা করে আপনি এমনকি স্ট্যান্ডার্ড লগ বিশ্লেষক সরঞ্জামগুলি আপনার বন্ধু হতে চলেছে। আপনি "এটি অ্যাক্সেস করা স্ক্রিপ্টগুলির শীর্ষ দশে" বা এরকম কিছু বোঝার স্প্রেডশিটে যুক্ত করতে সক্ষম হবেন। এমনকি যদি স্ক্রিপ্টগুলি ফ্ল্যাশ ফাইলগুলিতে এম্বেড থাকে এবং তাই স্পিডেবল না হয় তবে তাদের পোস্ট বা জিইটি এর মাধ্যমে অ্যাক্সেস করার উচ্চ সম্ভাবনা রয়েছে এবং সার্ভার লগগুলিতে প্রদর্শিত হবে। আপনি যদি জানেন যে আপনার কাছে 10 টির বেশি অ্যাক্সেসযুক্ত স্ক্রিপ্ট রয়েছে, 100 নয় (বা বিপরীতে), এটি আপনাকে রক্ষণাবেক্ষণের কাজটি কীভাবে চলবে সে সম্পর্কে একটি ভাল ধারণা দেবে।

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


2
+1 এটি একটি দুর্দান্ত উত্তর। +5 বোতামটি কোথায় গেছে ...
ইঞ্জিনিয়ার

1
টিএল; ডিআর: আপনার যতক্ষণ না দরকার ততক্ষণ নিজেকে খরগোশের গর্তে নামাবেন না। :)
jcmeloni

4

" লিগ্যাসি কোডের সাথে কার্যকরভাবে কার্যকরীভাবে " বইয়ে পাওয়া নিদর্শনগুলি ব্যবহার করে বিদ্যমান উত্স কোডটি (পুনরায় লেখার বিপরীতে) ব্যবহার করে আমি দৃ strongly়ভাবে সুপারিশ করব ।

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

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

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

"এর একটি সূক্ষ্ম কারণ আছে যে প্রোগ্রামাররা সর্বদা কোডটি ফেলে দিয়ে আবার শুরু করতে চায় The কারণটি হ'ল তারা মনে করেন যে পুরাতন কোডটি একটি জঞ্জাল। এবং এখানে আকর্ষণীয় পর্যবেক্ষণটি: তারা সম্ভবত ভুল। কোডিং একটি গণ্ডগোল কারণ প্রোগ্রামিং এর মূল, মৌলিক আইন:

কোডটি লেখার চেয়ে এটি পড়ার পক্ষে আরও কঠিন "" - - http://www.joelonsoftware.com/articles/fog000000006969 html


4
+1 টি। জোয়েলের এই মন্তব্যের জবাবে, "এটি রক্তাক্ত ভাল হওয়া উচিত নয়।" কারণ আমি সমস্যাটি সহজাত হিসাবে দেখছি না। আমি এটিকে আংশিক সত্য হিসাবে দেখছি যে অনেকে লোকেড়পূর্ণ কোড লেখেন এবং যত্ন নেন না, আবার অনেকেই যুক্তিসঙ্গতভাবে ভাল কোড লেখেন তবে "স্ব-ডকুমেন্টিং কোড" ধারণার দ্বারা বেঁচে থাকেন ... এটি কেবল সরল বিএস: একজন চাটুকার করতে পারে নিজের কোডিং শৈলীতে সবার গোপনীয়তার শুভেচ্ছা থাকে, তবে যখন পাবলিক কোডবেসের কথা আসে তখন এমন কোনও মন্তব্য নেই যেহেতু আগামীকাল নেই। ক্ষতি করে না এবং অবশেষে এমন লোকেরা আছেন যাঁকে টাইট টাইম বাজেটে লিগ্যাসি কোডবেজে কাজ করতে হবে।
ইঞ্জিনিয়ার

2

একটি সাধারণ জাভা কোড বেসে, আমি পিএমডি, ফাইন্ডব্যাগস, বা সোনারের মতো সরঞ্জামগুলি ব্যবহার করার বিষয়টি বিবেচনা করব এবং তারপরে আমি সরঞ্জাম প্রতিবেদনগুলি (ডেড কোড, নথিভুক্ত কোড, নকল কোড ইত্যাদি) বোঝার চেষ্টা করব)

প্রতিবেদনের ভিত্তিতে আমি অ্যাপ্লিকেশন / সাইটের বিভিন্ন স্তর (ব্যবসায় স্তর, ডিবি, এসকিউএল, ইত্যাদি) সন্ধান করার চেষ্টা করব

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


1
ধন্যবাদ। যদিও আপনার উত্তরটি কিছুটা জাভা নির্দিষ্ট, আপনার স্তরযুক্ত পদ্ধতির ... পেঁয়াজের খোসা ছাড়ানো, তাই কথা বলা আকর্ষণীয়। আমার মনে হয় কিছু।
ইঞ্জিনিয়ার

1

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

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


টস এবং পুনর্লিখন পদ্ধতির সাথে সাধারণত আমি আপনার সাথে 100% থাকি। তবে এই উদাহরণে (এবং অন্তত এখনের জন্য), সাইটটি রক্ষণাবেক্ষণের জন্য আমাকে কেবল কাজের জন্য অর্থ প্রদান করতে হবে, বরং আরও বিস্তৃত ওভারহোল যা কয়েক সপ্তাহ সময় লাগবে than এছাড়াও, আমি এখনই চাইলেও, আমি তা চালিয়ে যেতে পারি না এবং চলতে চলতে থাকা আমার সাথে থাকা অন্যান্য চুক্তিগুলিও ধরে রাখতে পারি না, যেহেতু এটির জন্য আমার সাপ্তাহিক প্রাপ্যতা স্পষ্টভাবে সীমাবদ্ধ - আমার প্রাথমিক চুক্তিটি অবশ্যই এটি পূরণ করতে হবে সাপ্তাহিক সর্বনিম্ন 40 ঘন্টা।
ইঞ্জিনিয়ার

1
টস এবং পুনর্লিখনের সাথে দ্বিমত! Joelonsoftware.com/articles/fog000000006969 html থেকে ... "একটি সূক্ষ্ম কারণ আছে যে প্রোগ্রামাররা সর্বদা কোডটি ফেলে দিতে এবং আবার শুরু করতে চায় The কারণটি হ'ল তারা মনে করেন যে পুরাতন কোডটি একটি বিশৃঙ্খলা। এবং এখানে আকর্ষণীয় পর্যবেক্ষণ : এগুলি সম্ভবত ভুল। কারণ তারা মনে করে যে পুরাতন কোডটি একটি জগাখিচুড়ি কারণ প্রোগ্রামিংয়ের মূল এবং মৌলিক আইন: কোডটি লেখার চেয়ে এটি পড়া আরও শক্ত। " পরিবর্তে, আমি দৃ strongly়ভাবে রিফ্যাক্টরিংয়ের পরামর্শ দিচ্ছি: amazon.ca/Working-Effectively-Legacy-Michael-Fiethers/dp/…
কাইল হজসন

1
@ কাইলহডসন কখনও কখনও কোডটি আসলে একটি গোলমাল হয়ে যায় এবং আপনি যখন পড়ে থাকেন যে কোডটি পড়ার আগে কোডটি খুঁজে পাওয়া কোনও গোলমাল, তখন এটি শুরু হওয়ার সময়।
রাইথাল

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

1

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


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

0

দ্রষ্টব্য: আপনি কোড ব্যবহারের বিষয়ে জিজ্ঞাসা করার সময় আমি ডাটাবেস ব্যবহারের উপরে একটি অ্যাকসেন্ট রেখেছি। উত্তরটি আমি উল্লেখ করেছি প্রতিটি পয়েন্টে এখনও উভয় ক্ষেত্রেই প্রযোজ্য।

আপনি ইতিমধ্যে শেষ অনুচ্ছেদে নিজের প্রশ্নটির অংশে ইতিমধ্যে উত্তর দিয়েছেন: অ্যাপ্লিকেশন চলাকালীন কী অ্যাক্সেস করা হয়েছে তা দেখুন।

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

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

  3. স্থির বিশ্লেষণ এবং কিছু সংকলক মৃত কোড প্রকাশ করতে পারে তবে তবুও আপনি যে উত্তর চান তা দেয় না।

  4. ডেটা নিজেই বিশ্লেষণ বা ডাটাবেস মেটাডেটা কিছু আকর্ষণীয় তথ্য প্রকাশ করতে পারে। উদাহরণস্বরূপ, এটি দৃ to়ভাবে বলা যায় যে LogonAudit(uniqueidentifier LogonAuditId, datetime LogonEvent, ...)২০০ 2006 থেকে ২০০৯ সাল পর্যন্ত প্রতিদিন ১০,০০০ রেকর্ড রয়েছে এবং সেপ্টেম্বর, ১৮ , ২০০৯ এর মধ্যে কোনও রেকর্ড রয়েছে তবে টেবিলটি আর ব্যবহার করা হবে না a সারণী যা তথ্য ধারণ করে বেশিরভাগই কেবল পঠনযোগ্য।

এই চারটি পয়েন্ট একসাথে আপনাকে ব্যবহৃত সারণির তালিকা দেবে। বাকিগুলি হয় হয় ব্যবহার করা হয় বা হয় না। আপনি দৃser়ভাবে দাবিগুলি তৈরি করতে পারেন এবং সেগুলি পরীক্ষা করতে পারেন, তবে ভাল ইউনিট পরীক্ষার কভারেজ ছাড়া এটি সহজ হবে না। যে কোনও "সহজ" উপায়ও ব্যর্থ হবে। উদাহরণস্বরূপ, আপনার যদি কোনও products_delme_not_usedটেবিল থাকে তবে আপনি জোর দিয়ে বলতে পারেন যে টেবিলটি মোটেই ব্যবহৃত হচ্ছে না এবং আপনার কোডে "product_delme_not_used" পরীক্ষা করুন। এটি আশাবাদী: পুরানো কোডবেজে ডেইলিডব্লিউটিএফ প্রার্থীর মতো এটি পাওয়া অস্বাভাবিক নয়:

// Warning: WTF code below. Read with caution, never reuse it, and don't trust
// the comments.

private IEnumerable<Product> GetProducts()
{
    // Get all the products.
    return this.GetEntities<Product>("PRODUCT");
}

private IEnumerable<T> GetEntities<T>(string tableName)
{
    // Everyone knows that SQL is case sensitive.
    tableName = tableName.ToLower();

    if (tableName == "user" || tableName == "product")
    {
        // Those tables were renamed recently in the database. Don't have time
        // to refactor the code to change the names everywhere.
        // TODO: refactor the code and remove this `if` block.
        tableName += "s";
    }

    if (this.IsDelme(tableName))
    {
        // We have some tables which are marked for deletion but are still
        // used, so we adjust their name.
        tableName = this.Delme(tableName);
    }

    return this.DoSelectQuery<T>("select top 200 * from " + tableName);
}

private bool IsDelme(string name)
{
    // Find if the table is among candidates for removal.
    List<string> names = this.Query<string>("select Names from DelmeTables");
    return names.Contains(name);
}

private string Delme(string name)
{
    // Return the new name for a table renamed for deletion.
    return string.Join("_", new [] { name, "delme", "not", "used" });
}

আপনি কি বুঝতে পারেন যে এই কোডটি আসলে products_delme_not_usedটেবিল ব্যবহার করে ?

আমি আপনাকে হলে আমি হবে:

  1. সমস্ত ডাটাবেস অবজেক্টগুলিকে জায়গায় রাখুন,
  2. সম্পূর্ণ অ্যাপ্লিকেশনটি রিফ্যাক্টর (যদি এটির জন্য এটি মূল্য হয়),
  3. অ্যাপ্লিকেশন এবং বিশেষত ডাটাবেস ব্যবহারের জন্য দস্তাবেজ (রিফ্যাক্টর করার সময়)।

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


0

আমার কাছে মনে হচ্ছে আপনার একটি উদ্ধৃতি তৈরির জন্য পর্যাপ্ত তথ্য পাওয়া দরকার তাই আমি সেই প্রচেষ্টাটিতে মনোনিবেশ করব।

আমি এই সাইটে কতগুলি ব্যবহারের মামলা জড়িত তা নির্ধারণ করার চেষ্টা করব। এটি সাধারণত সাইটটি কত বড় এবং জটিল এবং সাইট / অ্যাপ্লিকেশনটি পুনরায় তৈরি বা রক্ষণাবেক্ষণ করতে কত সময় নিতে পারে তার একটি ধারণা দেয়।

হ্যাঁ, এটি সত্য যে কখনও কখনও কোডটি আর ব্যবহার করা হয় না এবং এটি অ্যাপ্লিকেশনটিকে এটির চেয়ে খানিকটা বড় দেখায়, তবে আমি মনে করি না যে এটি সংখ্যাগুলিকে সর্বাধিক ২০% এর বেশি প্রভাবিত করবে , তাই আমি সেই অংশটি নিয়ে চিন্তা করব না।

উত্স কোড, ওয়েব পৃষ্ঠাগুলি এবং ডাটাবেস সারণিগুলির দিকে তাকানো আপনাকে এটি আবিষ্কার করতে সহায়তা করবে।

আপনি নিজের সুরক্ষার জন্য প্রাক-নির্ধারিত ফি বাবদ এই প্রকল্পে ব্যয় করতে পারেন এমন প্রতি মাসে আপনি কত ঘন্টা সীমাবদ্ধ তা বিবেচনা করতে পারেন।

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

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