কীভাবে ত্রুটি পরিচালনা করা কার্যকর করা যায় [বন্ধ]


13

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

আমার ত্রুটি পরিচালনার পিছনে কোনও কাঠামো নেই। আমি এটি পেশাদার পর্যায়ে কীভাবে প্রয়োগ করা হয়েছে তা শিখতে এবং বুঝতে চাই। এটি এমন একটি অঞ্চল যেখানে আমার জ্ঞানের অভাব রয়েছে।

কখন আমার ব্যতিক্রম ব্যবহার করা উচিত এবং কখন আমি সাফল্যের স্থিতি ফিরিয়ে আনব, যুক্তি প্রবাহে যাচাই করা উচিত? ব্যতিক্রম মিশ্রিত করা এবং কোনও স্থিতি ফিরে দেওয়া কি ঠিক আছে?

আমি সি # তে মূলত কোড করি।


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

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

ত্রুটি পরিচালনার বিষয়ে ওয়েবে অনেক নিবন্ধ রয়েছে: এটি ব্যবহার করে দেখুন: msdn.microsoft.com/en-us/library/seyhszts.aspx
নীর কর্নফিল্ড

উত্তর:


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

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

  3. ব্যতিক্রমী ক্ষেত্রে ব্যতিক্রম ব্যবহার করবেন না। এই সত্য যে ব্যবহারকারীকে একটি নম্বর লিখতে বলা হয়েছিল, "কুকুর" প্রবেশ করানো ব্যতিক্রম প্রাপ্য তাই ব্যতিক্রমী নয়।

  4. ব্যতিক্রমগুলির প্রকারগুলি বেছে নেওয়ার সময় সাবধানতা অবলম্বন করুন। যখন প্রয়োজন হয় তখন নিজের মতো করে তৈরি করুন। পিতা-মাতাকে ধরাই বাচ্চাদেরও ধরবে তা মনে রেখে, সাবধানতার সাথে উত্তরাধিকারটি বেছে নিয়েছে। কখনই না throw Exception

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

  6. যে ক্ষেত্রে কোনও পদ্ধতিতে ত্রুটি ফিরে আসার আশা করা হয় এবং ত্রুটিটি ব্যতিক্রমী নয়, এনামগুলি ব্যবহার করুন, কখনও ত্রুটি সংখ্যাটি ব্যবহার করবেন না। উদাহরণ:

    // Note that the operation fails pretty often, since it deals with the servers which are
    // frequently unavailable, and the ones which send garbage instead of the actual data.
    private LoadOperationResult LoadProductsFromWeb()
    {
        ...
    }
    

    অর্থ LoadOperationResult.ServerUnavailable, LoadOperationResult.ParsingErrorইত্যাদি আরো অনেক কিছু স্পষ্ট হয়, তুলনায় বলতে যে কোড স্মরণ 12 মানে যে সার্ভার ডাউন, এবং কোড 13 - যে ডেটা বিশ্লেষণ করা যায় না।

  7. ত্রুটি কোডগুলি ব্যবহার করুন যখন তারা সাধারণগুলি উল্লেখ করে, নির্দিষ্ট ডোমেনে কাজ করে এমন প্রতিটি বিকাশকারী দ্বারা পরিচিত। উদাহরণস্বরূপ, HTTP 404 পাওয়া যায়নি বা HTTP 500 অভ্যন্তরীণ সার্ভার ত্রুটির জন্য কোনও এনাম মান পুনর্নবীকরণ করবেন না।

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

  9. প্রতিটি ব্যতিক্রম ধরবেন না (যদি আপনি স্ট্যাকের একেবারে শীর্ষে না হন) আপনি যদি কোনও ব্যতিক্রম ধরা দেন তবে আপনার এটি পরিচালনা করার জন্য প্রস্তুত হওয়া উচিত। সমস্ত কিছুকে ক্যাচ করা দেখিয়ে দিচ্ছে যে আপনার কোডটি সঠিকভাবে চলে কিনা আপনার কোনও যত্ন নেই। এটি "এখনই সন্ধান করতে চাই না কীভাবে এটি ঠিক করতে হবে" এর সমাধান করতে পারে তবে তাড়াতাড়ি বা পরে আপনাকে আঘাত করবে।

  10. সি # তে কখনই এর মতো ব্যতিক্রমগুলি পুনর্বিবেচনা করবেন না:

    catch (SomeException ex)
    {
        ...
        throw ex;
    }
    

    কারণ আপনি স্ট্যাক ভাঙ্গছেন। পরিবর্তে এটি করুন:

    catch (SomeException)
    {
        ...
        throw;
    }
    
  11. ব্যতিক্রম বার্তা লিখতে চেষ্টা করুন। কতবার দেখেছি এরকম কিছু throw Exception("wrong data")বা throw Exception("shouldn't call this method in this context")। নিজেকে ছয় মাস পরে অন্য বিকাশকারীদের, কোন তথ্য কোনটি ভুল এবং কেন বা কেন আমরা একটি প্রসঙ্গে কিছু পদ্ধতি কল করতে পারি না বা কোন প্রসঙ্গে যথাযথভাবে বলা উচিত তা সম্পর্কে কোনও ধারণা নেই।

  12. ব্যবহারকারীর কাছে ব্যতিক্রম বার্তা প্রদর্শন করবেন না। এগুলি সাধারণ মানুষের কাছে প্রত্যাশিত নয় এবং প্রায়শই বিকাশকারীরা তাদের কাছে এমনকি অপঠনযোগ্যও হন।

  13. ব্যতিক্রম বার্তা স্থানীয়করণ করবেন না। স্থানীয়ীকৃত বার্তার জন্য ডকুমেন্টেশন সন্ধান করানো ক্লান্তিকর এবং অর্থহীন: প্রতিটি বার্তা কেবল ইংরেজী এবং ইংরেজী ভাষায় হওয়া উচিত।

  14. ব্যতিক্রম এবং ত্রুটিগুলিতে একচেটিয়াভাবে ফোকাস করবেন না: লগগুলি অত্যন্ত গুরুত্বপূর্ণ।

  15. .NET- এ, পদ্ধতির এক্সএমএল ডকুমেন্টেশনে ব্যতিক্রমগুলি অন্তর্ভুক্ত করতে ভুলবেন না:

    /// <exception cref="MyException">Description of the exception</exception>

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

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


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


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

@ শেলবি ১১৫: তালিকাটি ক্রমানুসারে এসেছে: স্ট্যাক এক্সচেঞ্জ, ব্যক্তিগত অভিজ্ঞতা এবং স্টিভ ম্যাককনেলের কোড কমপ্লিট।
আর্সেনী মোরজেঙ্কো

আপনাকে ধন্যবাদ @ মাইনামা এটি একটি দুর্দান্ত প্রতিক্রিয়া! আমি বিশ্ববিদ্যালয়ে পড়ার সময় কোড কমপ্লিটের মালিক ছিলাম তবে কেউ এটি চুরি করেছে। আমি এটি পড়তে পাই না।
জেমস জেফারি

@ জেমস জেফারি: তারপরে একটি লাইব্রেরিতে দ্বিতীয় সংস্করণ ধার করুন, বা একটি কিনুন: এটি বিরল বিকাশ সম্পর্কিত বইগুলির মধ্যে একটি যা পুরোপুরি অর্থের জন্য মূল্যবান।
আর্সেনি মরজেনকো

@ মাইনমা ​​কেবলমাত্র আমাজন থেকে আদেশ করেছেন, ধন্যবাদ: ডিআইও ক্লিন কোডের মালিক, এবং অধ্যায় about সম্পর্কে সম্পূর্ণরূপে ভুলে গেছেন
জেমস জেফারি

1

আমার মনে হয় মাইনমার তালিকাটি খুব সম্পূর্ণ। আমি কেবল আমার নিজের কয়েকটি যুক্ত করব:

  1. তিনি কীভাবে ব্যতিক্রমগুলি শ্রেণিবদ্ধ করেন সে সম্পর্কে এরিক লিপার্টের নিবন্ধটি পড়ুন । আপনার কোডটিতে বাস্তবে বাগ রয়েছে এমন ব্যতিক্রমগুলি ধরা না নেওয়ার বিষয়ে তাঁর বক্তব্যটি বিশেষত গুরুত্বপূর্ণ। পরিবর্তে কোড ঠিক করুন!
  2. যদি আপনি জানেন যে একটি ব্যতিক্রম ঘটতে পারে এবং আপনি এটি সম্পর্কে কিছু করতে পারেন তবে এটি পরিচালনা করুন, তবে আপনি যে নির্দিষ্ট ব্যতিক্রমটি প্রত্যাশা করছেন সেটি ধরার চেষ্টা করুন এবং ধরুন। অর্থাৎ এটি করবেন না:

public void Foo() {
    try {
        //get input from use
        //do calculations
        //open file
    }
    catch (Exception ex) {
       //handle exception
    }
}

পরিবর্তে এটি করুন:

public void Foo() {
    //get input from use
    //do calculations
    try {
        //open file
    }
    catch (FileOpenException ex) {
       //handle exception
    }
}
  • নিয়ন্ত্রণ প্রবাহের জন্য ব্যতিক্রম ব্যবহার করবেন না। উদাহরণস্বরূপ, কোনও অনুসন্ধান সংলাপে একটি ক্লায়েন্টনটফাউন্ডএক্সসেপশন নিক্ষেপ করবেন না (ক্লায়েন্টকে পাওয়া যায়নি এই পরিস্থিতিতে ব্যতিক্রমী নয়) এবং যখন এটি ঘটে তখন কলিং কোডটি "কোনও ফলাফল পাওয়া যায় না" বার্তাটি দেখানোর প্রত্যাশা করে।

  • ব্যতিক্রম গিলবেন না!

  • মনে রাখবেন যে সত্যই একটি ব্যতিক্রম হ্যান্ডেল করার অর্থ কেবল 3 টি জিনিস হতে পারে:

    1. অপারেশনটি আবার চেষ্টা করুন। সমস্যাটি ক্ষণস্থায়ী হলে কেবল বৈধ।
    2. একটি বিকল্প চেষ্টা করুন।
    3. সমস্যা সম্পর্কে কাউকে জানান। বিজ্ঞপ্তিটি কার্যকর থাকলেই কেবল বৈধ, যার অর্থ ব্যবহারকারী এটি সম্পর্কে কিছু করতে পারেন।

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

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