অ-প্রজননযোগ্য বাগগুলির সাথে লেনদেন করা


73

মনে করুন আপনার দলটি এমন একটি সফ্টওয়্যার সিস্টেম লিখেছিল যা বেশ চালিয়ে যাচ্ছে (বেশ আশ্চর্যজনক!)

একদিন ইঞ্জিনিয়ারদের একজন ভুল করে কিছু এসকিউএল ক্যোয়ারী চালায় যা ডিবি ডেটার কিছু পরিবর্তন করে, তারপরে এটি ভুলে যায়।

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

এটার সাথে তুমি কিভাবে চুক্তি করলে?


32
ইঞ্জিনিয়ার যদি এটির কথা ভুলে যায় তবে কীভাবে জানবেন যে যা ঘটেছে? কেউ কীভাবে কোনও স্ক্রিপ্ট চালিয়ে দুর্নীতিগ্রস্থ করেছিলেন, এবং কোনও বাগ দ্বারা নয়?
ডেভজি 21

18
তার দু'একদিন পরেই এপিফানি হয়েছিল। এটি কখনই মনে করতে পারেনি যে এটি সহজেই ঘটতে পারে This
নিক কিরিয়াকাইডস

12
এটি একটি অনুমানমূলক। আমি নিশ্চিত যে প্রধানমন্ত্রী যদি আমাদের মনে না রাখেন তবে আমরা যত তাড়াতাড়ি তাড়া করতে চাইতাম is আমি জানি আমি।
নিক কিরিয়াকাইডস 21

59
xkcd.com/583 ;) [এনএসএফডাব্লু ভাষা]
বাল্ড্রিক 24

100
"ধরুন আপনার দলটি এমন একটি সফ্টওয়্যার সিস্টেম লিখেছে যা ভাল চলছে” "অসম্ভব কল্পনা করে আমাকে বিরক্ত করা বন্ধ করুন!
পল ডি ওয়েট

উত্তর:


134

এটা স্পষ্টতই যে কোনও প্রকল্প ব্যবস্থাপক এ জাতীয় সমস্যার জন্য অসীম সময় ব্যয় করবেন না। তারা আবার একই পরিস্থিতি যাতে ঘটেছিল তা আটকাতে চায়।

এই লক্ষ্য অর্জনের জন্য, এমনকি যদি কেউ এই জাতীয় ব্যর্থতার মূল কারণটি না খুঁজে পায় তবে প্রায়শই কিছু ব্যবস্থা নেওয়া সম্ভব হয়

  • এ জাতীয় ব্যর্থতা পুনরায় পুনরায় শুরু করার ক্ষেত্রে তাদের সনাক্ত করুন
  • এটি কম সম্ভাবনা তৈরি করুন আবার একই ব্যর্থতা আবার ঘটবে
  • নির্দিষ্ট ধরণের অসঙ্গতির বিরুদ্ধে সিস্টেমটিকে আরও শক্তিশালী করুন

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

আপনার পরিস্থিতিতে উপযুক্ত ধরণের পদক্ষেপ কী হতে পারে তা ভেবে দেখুন এবং এটি দলকে পরামর্শ দিন; আমি নিশ্চিত আপনার প্রকল্পের পরিচালক সন্তুষ্ট হবেন।

একদিন ইঞ্জিনিয়ারদের একজন ভুল করে কিছু এসকিউএল ক্যোয়ারী চালায় যা ডিবি ডেটার কিছু পরিবর্তন করে, তারপরে এটি ভুলে যায়।

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


8
পুনঃটুইট করেছেন নিকোলাস কিরিয়াকাইডস সম্ভবত দুজনেই। এগুলি সমস্তই "বিলম্বিত" ডিবাগিংকে সহজতর করার সাধারণ জ্ঞানের ব্যবস্থা। এগুলি সম্ভবত অসংখ্য পদ্ধতিতে লেখা হয়েছে।
নিক হার্টলি

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

2
@ নিকোলাস কিরিয়াকাইডস: কয়েক দশক ধরে ব্যক্তিগত অভিজ্ঞতা।
ডক ব্রাউন

4
এটিও লক্ষ করা উচিত যে এটি খুব সম্ভব যে কোনও বাগ থাকলেও এটি আর থাকবে না। আপনি কখনও কখনও সর্বোত্তম করতে পারেন ডেটা স্থির করে এবং একই সমস্যা আবার না ঘটে তা নিশ্চিত করার জন্য টেস্টিং / পদ্ধতিগুলি উন্নত করে।
কুত্স্কেম

2
মাঝেমধ্যে ইস্যুগুলি অনুসন্ধান করা হ'ল লগিং করা এবং একটি দমবন্ধ বিন্দু সন্ধান করা যা সেগুলি ঘটতে পারে তা সনাক্ত করতে পারে, এবং সেখান থেকে উত্সটি চিহ্নিত করার জন্য সেখান থেকে পিছনে হাঁটা। কখনও কখনও এটির জন্য ট্রিগার, বা শোরগোলের ত্রুটি লগিংয়ের সাথে কোড মোতায়েনের মতো অপ্রীতিকর জিনিসগুলির প্রয়োজন হয়, কেবল কখন / কোথায় ত্রুটি হয় তার একটি পরিচালনা পেতে get
অ্যারোনএলএস

51

এটি একটি বাগ না

কমপক্ষে আপনার কোডে নেই। এটি আপনার প্রক্রিয়াতে একটি বাগ । আপনার প্রোজেক্ট ম্যানেজার আপনার কোডের চেয়ে আপনার প্রক্রিয়া সম্পর্কে অনেক বেশি চিন্তিত হওয়া উচিত।

এটার সাথে তুমি কিভাবে চুক্তি করলে?

মোটামুটি সহজভাবে, ইঞ্জিনিয়ারদের উত্পাদন বা ভাগ করে নেওয়া ডেটাবেসগুলি পরিবর্তন না করে


ধরে নিই এটি একটি ভাগ করা ডেভেলপমেন্ট ডেটাবেস:

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

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

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

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


এটি ধরে নেওয়া একটি উত্পাদন ডাটাবেস:

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

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

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

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


12
সুতরাং, আপনার প্রস্তাবিত সমাধান সময় ভ্রমণ?
বেনুবার্ড

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

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

2
@ বেনুবার্ড আমি মনে করি যে উত্তরটি "আপনি এটির সাথে যেভাবে আচরণ করেছেন তা আবার ঘটতে বাধা দিচ্ছে" এ উত্সাহিত হয়। আমি মনে করি না আপনি কোনও সফ্টওয়্যার ইঞ্জিনিয়ারিং দৃষ্টিকোণ থেকে দূষিত উত্পাদন ডেটাবেস "সমাধান" করতে পারেন।
goncalopp

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

13

একটি উত্পাদনের ডাটাবেসে সম্পূর্ণ অ্যাক্সেস লগিং এবং ভূমিকা ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ থাকা উচিত। সুতরাং আপনার কাছে কড়া প্রমাণ থাকতে হবে যে WHO WHAT WHEN WHAT WHEN WHAT WHODDOSE এইভাবে কোড থেকে মনোভাবকে দুর্বল অপারেশনাল সুরক্ষায় সরিয়ে নিয়েছে।


2
এগুলি শোনা যাচ্ছে যে তারা কখনই ডেটা দুর্নীতি ঘটেছে তা সঠিকভাবে জানেন না, যা তাদের তদন্তের জন্য প্রয়োজনীয় লগগুলি নির্ধারণ করা কঠিন করে তুলতে পারে।
নাথানেল

3
দুর্ভাগ্যক্রমে এর মধ্যে একটি সনাক্ত করার সময় আমরা আবিষ্কার করেছি এটি লগগুলিও ট্র্যাশ করছে। (হ্যাঁ, এটি। বাগটি আসল ছিল))
জোশুয়া

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

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

@ ডেভিডকনরাদ: অ্যাপ্লিকেশন প্রযোজনায় ব্যবহৃত শংসাপত্রগুলিতে কেন ডেভসের অ্যাক্সেস থাকে? আপনার কোনও ধরণের গোপনীয় ব্যবস্থাপনার ব্যবহার করা উচিত যাতে প্রযোজনা অ্যাপ্লিকেশন সার্ভারগুলি থেকে আপনার অ্যাপ্লিকেশন পরিষেবা অ্যাকাউন্টটি ব্যতীত cred শংসাপত্রগুলিও পড়া যায় না।
ড্যানিয়েল প্রাইডেন

6

এই ক্ষেত্রে, আপনি শেষ পর্যন্ত কারণটি সন্ধান করেছেন, তবে আপনার অনুমানটি নেওয়া যে আপনি করেননি ...

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

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

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


5
  1. আপনার প্রোজেক্ট ম্যানেজারকে ব্যাখ্যা করুন যে আপনি সম্ভবত মনে করেন ম্যানুয়াল ডাটাবেস অ্যাক্সেসের সর্বাধিক সম্ভাব্য কারণ।
  2. যদি তারা এখনও আপনাকে কোডটি সন্ধান করতে চায় তবে এর ফলে কোডটি দেখুন এবং অন্য কোডটি দেখুন।
  3. কয়েক ঘন্টা পরে (বা অন্য কোনও উপযুক্ত সময়) ফিরে আসুন এবং বলুন যে আপনি এমন কোনও কোড খুঁজে পাচ্ছেন না যার ফলে এটি ঘটেছিল, সুতরাং আপনি এখনও বিশ্বাস করেন যে সর্বাধিক সম্ভবত কারণটি ম্যানুয়াল ডাটাবেস অ্যাক্সেস is
  4. তারা যদি এখনও কোডটি সন্ধান করতে চায় তবে তারা আপনাকে এই সময়টি ব্যয় করতে কতটা সময় চায় তা জিজ্ঞাসা করুন। সাবধানে তাদের মনে করিয়ে দিন যে আপনি এটি করার সময় আপনি বৈশিষ্ট্য এক্স, বাগ ওয়াই বা বর্ধনশীল জেডে কাজ করবেন না।
  5. তারা যতটা সময় ব্যয় করবে। আপনি যদি এখনও মনে করেন যে সর্বাধিক সম্ভাব্য কারণ হ'ল ম্যানুয়াল ডাটাবেস অ্যাক্সেস, তাদের এটি বলুন।
  6. যদি তারা এখনও আপনার কোডটি সন্ধান করতে চায় তবে সমস্যাটি বাড়িয়ে দিন কারণ এটি স্পষ্টতই আপনার দলের সময়ের অনুকরণীয় ব্যবহারে পরিণত হয়েছে।

ভবিষ্যতে এই ধরণের সমস্যার কারণ হিসাবে ম্যানুয়াল ডাটাবেস অ্যাক্সেসের সম্ভাবনা হ্রাস করার জন্য আপনার যদি অতিরিক্ত প্রক্রিয়া যুক্ত করা উচিত তবে আপনি এটি বিবেচনা করতেও পারেন।


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

5
"আমার প্রশ্নটি হ'ল যদি আপনি কারণটি খুঁজে না পান এবং সম্ভাব্য কারণটি কী হতে পারে তা প্রস্তাব করতে না পারলে" সঠিক কারণটি 'ঠিক করবে না - সদৃশ করতে পারে না' পতাকাটি আবিষ্কার হয়েছিল।
esoterik

4

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

পদক্ষেপ 0: গ্রাহককে ডেটাবেস মেরামত করে আবার চলতে সহায়তা করুন।

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

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

পদক্ষেপ 2: আমরা তখন সফ্টওয়্যারটিতে দুটি পরিবর্তন করেছি: (ক) "হ্যাঁ আমি জানি আমি কী করছি" ব্যবহারকারীর ইন্টারফেসের মাধ্যমে দুর্ঘটনাক্রমে এই প্রভাবটি তৈরি করা আরও কঠিন করে তুলেছে, এবং (খ) একটি নতুন লগ ফাইল প্রবর্তন করা হয়েছে যাতে এটি আবার কখনও ঘটল, আমাদের ব্যবহারকারীর ক্রিয়াগুলির একটি রেকর্ড থাকবে।

সুতরাং মূলত (ক) ক্ষতি মেরামত করুন এবং লাইভ দৌড়াতে পুনরুদ্ধার করুন, (খ) এর মূল কারণটি আবিষ্কার করুন, (গ) এটি পুনরায় ঘটে যাওয়া রোধ করার জন্য যা প্রয়োজন, তা করুন বা এটি আবার ঘটে গেলে সহজে নির্ণয়ের সক্ষম করুন।


3

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

একটি উত্পাদনের ডাটাবেসে সম্পূর্ণ অ্যাক্সেস লগিং এবং ভূমিকা ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ থাকা উচিত। সুতরাং আপনার কাছে কড়া প্রমাণ থাকতে হবে যে WHO WHAT WHEN WHAT WHEN WHAT WHODDOSE এইভাবে কোড থেকে মনোভাবকে দুর্বল অপারেশনাল সুরক্ষায় সরিয়ে নিয়েছে।

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

কোথাও এর মতো একটি উক্তি অবশ্যই থাকতে হবে, তা না হলে আপনি আমাকে এতে উদ্ধৃতি দিতে পারেন:

টয়লেট পরিষ্কারের জন্য শেফরা দায়বদ্ধ না হওয়ার পুরোপুরি ভাল কারণ রয়েছে।


1

নন-প্রজননযোগ্য বাগ সহ অবশ্যই বেশ কয়েকটি জিনিস করা উচিত।

  1. এটির জন্য একটি টিকিট তৈরি করুন

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

  1. একটি কঠোর বিশ্লেষণ করুন

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

  • মত ডেডিকেটেড কল (সঙ্গে অ্যাড-হক কোড প্রতিস্থাপন execute(<query>)সঙ্গেexecuteMyStoredProcedure(<params>)
  • ডেটা অখণ্ডতা যাচাই করতে রাত্রে যাচাই স্ক্রিপ্টগুলি চালান (যাতে এটি পরবর্তী সময়ের 24 ঘন্টা মধ্যে সনাক্ত করা যায়)
  • লগিং এবং সংরক্ষণাগার যুক্ত করুন / উন্নত করুন (ব্যাকআপ নেওয়া)।
  • অযৌক্তিক সুরক্ষা সীমা পরিবর্তন করুন (উদাহরণস্বরূপ, লোকেরা / প্রোগ্রাম যারা কেবল ডেটা পড়েন তাদের লেখার অনুমতি নেই; উত্পাদনের দায়বদ্ধ নন এমন বিকাশকারীদের উত্পাদন সার্ভারগুলিতে লগ ইন করতে না দেওয়া)
  • অনুপস্থিত যেখানে তথ্য যাচাইকরণ / স্যানিটেশন যোগ করুন

এটি বাগটি ঠিক করতে পারে না, তবে এটি না পারলেও সিস্টেমটি এখন আরও স্থিতিশীল / সুরক্ষিত তাই এটি এখনও পরিশোধ করে।

  1. সিস্টেম সতর্কতা যুক্ত করুন

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


0

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

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

সেক্ষেত্রে আপনি এখনও জানেন যে একটি সমস্যা ছিল যা আপনি পুনরাবৃত্তি করতে চান না, তাই আপনি প্রথম ক্ষেত্রে যেমন একই পদক্ষেপ নেন।

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