আমি ব্রেকপয়েন্টগুলি দিয়ে ডিবাগ করছি এবং আমি কী বোঝার কলটি বুঝতে পারি? আমি ভেবেছিলাম এটি কেবল ইউনিট পরীক্ষার জন্য। ব্রেকপয়েন্টের চেয়ে এটি আরও কী করে? যেহেতু আমি ব্রেকপয়েন্ট পয়েন্ট করতে পারি, কেন আমি আসর্ট ব্যবহার করব?
আমি ব্রেকপয়েন্টগুলি দিয়ে ডিবাগ করছি এবং আমি কী বোঝার কলটি বুঝতে পারি? আমি ভেবেছিলাম এটি কেবল ইউনিট পরীক্ষার জন্য। ব্রেকপয়েন্টের চেয়ে এটি আরও কী করে? যেহেতু আমি ব্রেকপয়েন্ট পয়েন্ট করতে পারি, কেন আমি আসর্ট ব্যবহার করব?
উত্তর:
একটি ডিবাগ সংকলনে, Assert
বুলিয়ান শর্তটিকে পরামিতি হিসাবে গ্রহণ করে এবং শর্তটি মিথ্যা হলে ত্রুটি সংলাপ দেখায়। শর্তটি সত্য হলে প্রোগ্রামটি কোনও বাধা ছাড়াই এগিয়ে চলে।
আপনি যদি রিলিজে সংকলন করেন, সমস্ত Debug.Assert
স্বয়ংক্রিয়ভাবে বাদ পড়েছে।
Debug.Assert
মুক্তি মোডে চান ?
কোড সম্পূর্ণ থেকে
8 ডিফেন্সিভ প্রোগ্রামিং
৮.২ জোর
একটি প্রতিস্থাপনটি এমন কোড যা বিকাশের সময় ব্যবহৃত হয় used সাধারণত একটি রুটিন বা ম্যাক্রো — যা কোনও প্রোগ্রামকে চালিত হওয়ার সাথে সাথে নিজেকে পরীক্ষা করতে সহায়তা করে allows যখন একটি দৃ true়তা সত্য হয়, তার অর্থ প্রত্যাশা অনুযায়ী সবকিছুই পরিচালনা করছে। যখন এটি মিথ্যা হয়, তার মানে এটি কোডটিতে একটি অপ্রত্যাশিত ত্রুটি সনাক্ত করেছে। উদাহরণস্বরূপ, যদি সিস্টেমটি ধরে নেয় যে কোনও গ্রাহক-তথ্য ফাইলে কখনই 50,000 রেকর্ডের বেশি রেকর্ড থাকবে না, প্রোগ্রামটিতে এমন একটি বক্তব্য থাকতে পারে যে রেকর্ডের সংখ্যা 50,000 এর চেয়ে কম বা সমান। যতক্ষণ রেকর্ডের সংখ্যা 50,000 এর থেকে কম বা সমান হয়, ততক্ষণ দৃ silent়তা নিরব থাকবে। এটি যদি ৫০,০০০ রেকর্ডেরও বেশি রেকর্ডের মুখোমুখি হয় তবে এটি উচ্চস্বরে "জোর দিয়ে" বলবে যে প্রোগ্রামটিতে একটি ত্রুটি রয়েছে।
জোর বিশেষত বৃহত, জটিল প্রোগ্রাম এবং উচ্চ-নির্ভরযোগ্যতা প্রোগ্রামগুলিতে দরকারী are তারা প্রোগ্রামারকে আরও দ্রুত মেলে না এমন ইন্টারফেস অনুমানগুলি, কোডটি সংশোধন করার পরে ক্রাইপ হওয়া ত্রুটিগুলি এবং আরও অনেক দ্রুত সক্রিয় করতে সক্ষম করে।
একটি দৃser়তা সাধারণত দুটি যুক্তি গ্রহণ করে: একটি বুলিয়ান এক্সপ্রেশন যা সত্য বলে মনে করা হয় এমন ধারণাটি বর্ণনা করে এবং যদি তা না হয় তবে প্রদর্শন করার জন্য একটি বার্তা।
(...)
সাধারণত, আপনি চান না যে ব্যবহারকারীরা প্রোডাকশন কোডটিতে দৃser় বার্তা দেখতে পাবে; জোর দেওয়া মূলত উন্নয়ন এবং রক্ষণাবেক্ষণের সময় ব্যবহারের জন্য। উত্সগুলি সাধারণত উন্নয়নের সময় কোডে সংকলিত হয় এবং উত্পাদনের জন্য কোডটি সংকলিত হয়। বিকাশের সময়, দাবিগুলি বিরোধী অনুমান, অপ্রত্যাশিত পরিস্থিতি, খারাপ মানগুলি রুটিনগুলিতে প্রবাহিত হয়ে যায়। উত্পাদনের সময় এগুলি কোডের বাইরে সঙ্কলিত হয় যাতে দৃ the়তাগুলি সিস্টেমের কার্য সম্পাদনকে হ্রাস না করে।
ভেরিয়েবলগুলি পরীক্ষা করতে আপনার কোডের প্রতিটি ছোট রেখা ব্রেকআপপয়েন্ট করতে না চাইলে আপনার এটি ব্যবহার করা উচিত, তবে নির্দিষ্ট পরিস্থিতি উপস্থিত থাকলে আপনি কিছুটা প্রতিক্রিয়া পেতে চান, উদাহরণস্বরূপ:
Debug.Assert(someObject != null, "someObject is null! this could totally be a bug!");
System.Diagnostics
মাইক্রোসফ্টের ইউআই ডিজাইনের দক্ষতাগুলিকে ফাঁকি দেওয়ার জন্য আপনাকে আরও একটি সুযোগ দেয় sert আমি বলতে চাইছি: তিনটি বোতামের সাথে একটি কথোপকথন বাতিল করা, পুনরায় চেষ্টা করুন, উপেক্ষা করুন এবং শিরোনাম বারে তাদের কীভাবে ব্যাখ্যা করবেন তার ব্যাখ্যা!
সারণি আপনাকে একটি কোড (পোস্ট বা প্রাক) চাপিয়ে দেওয়ার অনুমতি দেয় যা আপনার কোডে প্রযোজ্য। এটি আপনার উদ্দেশ্যগুলি নথিভুক্ত করার এবং আপনার উদ্দেশ্যটি মান্য না হলে ডিবাগারটি আপনাকে একটি কথোপকথনের মাধ্যমে জানানোর একটি উপায়।
ব্রেক-পয়েন্টের মতো নয়, এ্যাসেটটি আপনার কোডের সাথে যায় এবং আপনার উদ্দেশ্য সম্পর্কে অতিরিক্ত বিশদ যুক্ত করতে ব্যবহার করা যেতে পারে।
সমস্ত Assert()
পদ্ধতি প্রথম Trace
এবং Debug
ক্লাস জন্য উপলব্ধ ।
Debug.Assert()
শুধুমাত্র ডিবাগ মোডে কার্যকর করা হচ্ছে।
Trace.Assert()
ডিবাগ এবং রিলিজ মোডে নির্বাহ করছে।
এখানে একটি উদাহরণ:
int i = 1 + 3;
// Debug.Assert method in Debug mode fails, since i == 4
Debug.Assert(i == 3);
Debug.WriteLine(i == 3, "i is equal to 3");
// Trace.Assert method in Release mode is not failing.
Trace.Assert(i == 4);
Trace.WriteLine(i == 4, "i is equla to 4");
Console.WriteLine("Press a key to continue...");
Console.ReadLine();
এই কোডটি ডিবাগ মোডে এবং তারপরে রিলিজ মোডে চালান।
আপনি লক্ষ্য করবেন যে ডিবাগ মোড চলাকালীন আপনার কোড Debug.Assert
বিবৃতি ব্যর্থ হয়, আপনি অ্যাপ্লিকেশনটির বর্তমান স্ট্যাক ট্রেস দেখিয়ে একটি বার্তা বাক্স পাবেন। Trace.Assert()
শর্তটি সত্য হওয়ায় এটি রিলিজ মোডে ঘটছে না (i == 4)
।
WriteLine()
পদ্ধতিটি আপনাকে ভিজ্যুয়াল স্টুডিও আউটপুটটিতে তথ্য লগ করার একটি বিকল্প দেয়।
চুক্তি দ্বারা ডিজাইনের ক্ষেত্রে দৃser় বৈশিষ্ট্যগুলি বৈশিষ্ট্যযুক্ত (ডিবিসি) যা আমি বুঝতে পেরেছি যে মায়ার, বার্ট্যান্ডের দ্বারা পরিচয় / অনুমোদিত হয়েছিল। 1997. অবজেক্ট-ওরিয়েন্টেড সফটওয়্যার কনট্রাকশন।
একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হ'ল তাদের অবশ্যই পার্শ্ব-প্রতিক্রিয়া তৈরি করা উচিত নয়, উদাহরণস্বরূপ আপনি একটি ব্যতিক্রম পরিচালনা করতে পারেন বা যদি একটি বিবৃতি (ডিফেন্সিভ প্রোগ্রামিং) দিয়ে কোনও ভিন্ন পদক্ষেপ নিতে পারেন।
চুক্তির পূর্বের / পোস্টের শর্তাদি, ক্লায়েন্ট / সরবরাহকারী সম্পর্ক - ক্লায়েন্টকে অবশ্যই সরবরাহকারীর পূর্ব শর্ত পূরণ করা উচিত তা নিশ্চিত করতে উদাহরণ হিসাবে ব্যবহৃত হয় eg £ 5 প্রেরণ করে এবং সরবরাহকারী অবশ্যই পোস্ট-কন্ডিশনগুলি পূরণ করে তা নিশ্চিত করে। 12 গোলাপ সরবরাহ করে। (ক্লায়েন্ট / সরবরাহকারী সম্পর্কে কেবল সহজ ব্যাখ্যা - কম গ্রহণ করতে পারে এবং আরও সরবরাহ করতে পারে তবে জোর দেওয়া সম্পর্কে)। সি # এছাড়াও ট্রেস.আরসেট () প্রকাশ করে, যা প্রকাশের কোডের জন্য ব্যবহার করা যেতে পারে।
প্রশ্নের উত্তরটি হ্যাঁ তারা এখনও কার্যকর, তবে কোড এবং সময় + জটিলতা + পাঠযোগ্যতা যোগ করতে পারে ly আমরা এখনও তাদের ব্যবহার করা উচিত? হ্যাঁ, আমরা সবাই কি সেগুলি ব্যবহার করব? সম্ভবত না, বা মায়ার কীভাবে বর্ণনা করে তার পরিধি পর্যন্ত নয়।
(এমনকি আমি এই কৌশলটি শিখেছি এমন OU জাভা কোর্সটি কেবল সাধারণ উদাহরণ দেখিয়েছে এবং সেখানে বাকি কোডগুলি বেশিরভাগ কোডে ডিবিসি দৃser় বিধি প্রয়োগ করে না, তবে প্রোগ্রামের নির্ভুলতা নিশ্চিত করার জন্য এটি ব্যবহৃত হয়েছিল বলে ধরে নেওয়া হয়েছিল!)
আমি এটি যেভাবে মনে করি এটি ডিবাগ Aএসার্ট একটি প্যারামিটারের মানগুলি সম্পর্কে সুনির্দিষ্ট করে (কেবলমাত্র পরিবর্তনের পরিবর্তে) কেন্দ্রীভূত করার পদ্ধতি সম্পর্কে একটি চুক্তি প্রতিষ্ঠার উপায়। উদাহরণস্বরূপ, যদি আপনাকে দ্বিতীয় প্যারামিটারে কোনও নাল পাঠানোর কথা না হয় তবে আপনি সেই প্যারামিটারের আশেপাশে সংস্থান যুক্ত করে ভোক্তাকে তা না করতে বলুন।
এটি কাউকে অস্থির মাথায় আপনার কোড ব্যবহার করা থেকে বাধা দেয়। তবে এটি সেই অস্থির মাথার উপায়টিকে উত্পাদন করতে দেয় এবং কোনও গ্রাহককে কদর্য বার্তা দেয় না (ধরে নিলে আপনি একটি রিলিজ বিল্ড তৈরি করেন)।