কীভাবে দলের সদস্যদের একটি "ম্যান্ডেলব্যাগ" এর অস্তিত্ব সম্পর্কে বোঝাবেন


20

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

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

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

কোন পরামর্শ?


12
আমি বলবো এটি খুব সহজ। একটি ইউনিট পরীক্ষা তৈরি করুন যা প্রমাণ করে যে আপনি যা বলছেন তা সত্য।
চার্লস স্প্রেবেরি

1
আপনি স্ট্যাকট্রেস কিছু ফর্ম সংরক্ষণ করেছেন? যেমন আপনার আইডিইর একটি স্ক্রিনশট রয়েছে যাতে ক্র্যাশটির স্ট্যাকট্রেস দেখাচ্ছে?
জর্জিও

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

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

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

উত্তর:


35

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

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

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


10

সুতরাং, আপনার কম-বেশি স্পষ্ট করার মতামত থেকে আমি এটি এইভাবে পেয়েছি:

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

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

কাজ ইতিমধ্যে সম্পন্ন হলে বেশিরভাগ লোককে বোঝানো আরও সহজ। এছাড়াও, "এই কোডটি ভুল, এটি কোনওভাবে ঠিক করুন" এর বিপরীতে তারা "এখানে একটি উন্নত সমাধান" এর উপরে আরও ভাল প্রতিক্রিয়া জানান।

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


তিনি এই পরিবর্তনটি একীভূত করতে অস্বীকার করেছেন, কারণ "এটি প্রয়োজনীয় নয়"
ফিথু

@ ফিথু: আমার সম্পাদনা দেখুন।
ডক ব্রাউন

4
"এই কোডটি ভুল, এটি কোনওভাবে সংশোধন করুন" এর বিপরীতে তারা (জনগণ) "এখানে একটি উন্নত সমাধান"
লাইকা

2
@ ফিথু: সুতরাং এমন একটি পরীক্ষার মামলা নিয়ে আসুন যা নিরবচ্ছিন্ন ব্যতিক্রমটিকে ছুঁড়ে ফেলার চেষ্টা করে। অর্থাৎ এটি চালু করে এমন পরামিতিগুলি সন্ধান করুন।
ওয়ার্লবেল

2

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

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


3
"পুনরায় উত্পাদন করতে একই পরামিতি ব্যবহার করে পরীক্ষাটি পুনরায় খেলুন" - থ্রেডিং / নেটওয়ার্কিংয়ের সমস্যাগুলির পক্ষে সত্যই সম্ভব নয়। তবে আমি ধারণাটি পছন্দ করি।
ফিথু

2

শয়তানের উকিল অন্য পথের পরামর্শ দেয়।

অন্য বিকাশকারী স্পষ্টভাবে বলে দিয়েছেন যে কোনও বাগ নেই।

আপনি কি তার অভিযোগ-অস্তিত্বযুক্ত বাগ থেকে নরকে চাপ দেওয়ার মতো উপায় নিয়ে আসতে পারেন এবং এটিকে ঘন ঘন ঘন ঘন ঘটাতে পারেন?


2

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

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

উদাহরণস্বরূপ, কয়েক মাস আগে আমি একটি বাগ ফিক্স করেছি যা কেবল তখনই ঘটে যখন ব্যবহারকারী প্রতি মিনিটে 96 শব্দের চেয়ে দ্রুত টাইপ করে। আমি এটি ঠিক করার আগে, আমি কেবল জানতাম যে বাগটি "কখনও কখনও" ঘটেছিল। আমার কাছে কখনই দ্রুত টাইপ করার জন্য ইউনিট পরীক্ষা লিখতে হবে না। তবে, আমি মূল কারণটি জানার পরে এর জন্য একটি পরীক্ষা করা তুচ্ছ ছিল।

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


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

1
এটি আমার কোড পরিদর্শন ব্যতিক্রমের মধ্যে পড়তে পারে তবে আপনি থ্রেডগুলির একটিতে বিলম্ব প্রবর্তন করে রেসের শর্তগুলিও ট্রিগার করতে পারেন। প্রায়শই আপনি বাহ্যিক উদ্দীপনা বিলম্ব করে এটি সম্পাদন করতে পারেন, বা আদর্শের চেয়ে কম, আপনি পরীক্ষার সময় বিলম্বকে সরাসরি কোডের মধ্যে রাখতে পারেন।
কার্ল বিলেফেল্ট 21

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