উত্তর:
কিছু অনুমান করবেন না
এটি প্রায়শই কেবল "ওহ, আমি জানি যে এই বিট কোডটি কী করছে, এটি ভাল" say এটা করবেন না। প্রতিটি অনুমান পরীক্ষা করুন এবং সাবধানে সব কিছু মাধ্যমে পদক্ষেপ।
ক্রমবর্ধমান পরীক্ষা করা হচ্ছে ।
আপনার কোডে প্রথমে গভীরতার দিকে যান এবং ক্ষুদ্রতম মডিউলটি ধীরে ধীরে উপরে উঠা থেকে পরীক্ষা করুন this এইভাবে, সমস্যাটি ঠিক কোথায় হতে পারে তা নির্ধারণের জন্য আপনি খুব বেশি চাপের মধ্যে নন।
এর অর্থ এটিও হ'ল এটি এমন সময়ে কম কোডকে প্রভাবিত করে যেহেতু আপনি ক্রমবর্ধমানভাবে চলে যাচ্ছেন..এমন সময়ে আমার কোনও সমস্যা হয়েছিল যেখানে আমি কিছু স্থির করেছিলাম এবং এর ফলে প্রচুর অন্যান্য স্টাফ ভেঙে যায়। আমি আমার মনিবকে এর জন্য কৃতিত্ব দিই যখন তিনি আমাকে এই বিষয়টি শিখিয়েছিলেন যখন আমি চারপাশে গোলযোগ করি।
বিভাজন এবং বিজয় একটি ভাল পদ্ধতির হয়। কিছু দৃশ্যমান ইনপুট (ব্যবহারকারী ইনপুট / নেটওয়ার্ক ইভেন্ট ...) এবং আউটপুট (লগ, ব্যবহারকারীকে আউটপুট, আউটবাউন্ড নেটওয়ার্ক বার্তা ...) সনাক্ত করার চেষ্টা করুন যার মধ্যে সমস্যাটি বিদ্যমান the তাদের মধ্যে বিশাল অংশগুলি বা উল্লেখযোগ্য পয়েন্টগুলিতে প্রিন্টগুলি রাখার চেষ্টা করুন এবং কোডটিতে বাগটি রয়েছে যেখানে সংকীর্ণ করার চেষ্টা করুন।
সংস্করণ নিয়ন্ত্রিত কোডের তুলনায় বিভাজন এবং বিজয়ী খুব ভাল কাজ করতে পারে। দুটি বিল্ড সন্ধান করুন - একটি যেখানে এটি প্রত্যাশা অনুযায়ী কাজ করে, অন্যটি রিগ্রেশন সহ। সম্ভাব্য সন্দেহভাজন হিসাবে আপনার একগুচ্ছ চেকিনগুলি রেখে যাওয়া অবধি ব্যবধানটি সঙ্কুচিত করুন।
বাইনারি বাগ চপের পরিবর্তে, ফর্মটিতে পরীক্ষা লিখুন
আপনি যা সত্য বলে ধরেছেন তার বিপরীতে অ্যাপটির কার্যকারিতা সম্পর্কে আপনি আসলে কী জানেন তা যাচাই করা।
বেশিরভাগ আইডিই পদ্ধতিগুলি নিষ্কাশন করা এবং এক্স ইউনিত পরীক্ষার স্টাবগুলি তৈরি করা সহজ করে। এটি ব্যবহার করুন।
ডিবাগগুলি ছিটিয়ে দেবেন না কেন? কারণ আপনার হয়ে যাওয়ার পরে, আপনাকে সম্ভবত সেই কাজের অনেকটাই পূর্বাবস্থায় ফিরে আসতে হবে এবং deb ডিবাগগুলির একটি মোটামুটি পরিমাণ মুছতে হবে। আপনি যখন পরীক্ষা লিখেন, আপনার ডিবাগিং ভবিষ্যতের বাগগুলি প্রতিরোধ এবং সনাক্তকরণে সহায়তা করবে।
অন্যরা যেমন বলেছে - কিছু অনুমান করবেন না। এটি বিশেষত সত্য যদি এর কোড আপনি লিখেছেন। অন্যের কোডটি ডিবাগ করার সময় আপনার গতি কমার সম্ভাবনা বেশি থাকে কারণ কোডটি আপনার কাছে নতুন বা আপনি কোডারে বিশ্বাস করেন না। আপনার নিজের কোডটি ডিবাগ করার সময় এটি অনুমান করা খুব সহজ যে আপনি এটি সঠিকভাবে লিখেছেন, আস্তে আস্তে!
ডিবাগিংয়ের আসল প্রক্রিয়ার জন্য:
ইউনিট পরীক্ষা যোগ করা এবং ডিবাগারটি প্রথমে ব্যবহার করে আরও দক্ষতার সাথে লগিং করা। আপনি ভবিষ্যতের বাগগুলি প্রবর্তন না করার জন্য ইউনিট পরীক্ষা করার অতিরিক্ত সুবিধা পেয়েছেন এবং লগিং ভবিষ্যতে সেশনগুলি ডিবাগিংয়ে সহায়তা করবে।
একটি ছোট্ট কোডের পদক্ষেপ নেওয়ার আগে, আপনি ফলাফলটি সঠিকভাবে নির্ধারণ করতে পারেন কিনা তা দেখুন। এটি কিছু মনে করবেন না (যা আমি বিটিডব্লিউকে ভোট দিয়েছি) এর মুখে উড়ে যাওয়ার প্রবণতা রয়েছে তবে আপনি অভিজ্ঞতা অর্জন করার সাথে সাথে এটি কোথায় সন্ধান করতে হবে তা সঙ্কুচিত করতে সহায়তা করতে পারে।
এটি তুচ্ছ শোনায় তবে আপনার ডিবাগারের সূক্ষ্মতা শিখুন এবং হট-কীগুলি শিখুন। কখনও কখনও ডিবাগারগুলি এত ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে। আপনি যদি মেশিনটি ধরে রাখতে পারেন এবং চারপাশে ছাঁটাই না করেন তবে এটি সাহায্য করতে পারে।
আপনি যদি ডিবাগ করার সময় কোডটি সংশোধন করতে পারেন:
মত:
bool isLessThan5 = a < 5;
bool isGreaterThan10 = a > 10;
if ( isLessThan5 || isGreaterThan10 )
{
// more code here
}
পরিবর্তে:
if ( a < 5 || a > 10 )
{
// more code here
}
কেসগুলির জন্য আপনি সবকিছু ডিবাগ করতে পারবেন না, যে কারণেই হোক না কেন, সহকর্মীর সাথে "রাবার-হাঁস" শিখুন। কখনও কখনও ব্যাখ্যা আলোচনার আলো হালকা। (ঠিক আছে, সম্ভবত এটি প্রশ্নগুলির থিমের মধ্যে নেই, তবে আমার কাছে মনে হয় এটি উল্লেখের পক্ষে যথেষ্ট পর্যায়ে রয়েছে)
দুটি জিনিস, গত 22 বছরের বেশিরভাগ সময় ব্যয় করার ভিত্তিতে অন্যান্য লোকেরা কোড বজায় রেখেছেন।
আপনি কী ধরণের বাগ লিখতে চান তা বুঝতে পারেন।
উদাহরণস্বরূপ, আমি একটি খুব সাবধানী কোডার, সুতরাং আমার কোডটি একবার কম্পাইল করলে এটি সাধারণত তুচ্ছ বাগ থেকে মুক্ত হয়। সুতরাং আমার বাগগুলি থ্রেড ডেডলকগুলির মতো অদ্ভুত জটিল জিনিস হতে থাকে। ফ্লিপ দিকে, আমার বন্ধু রয়েছে যিনি বেশিরভাগ তুচ্ছ বাগগুলি লিখেন - লুপগুলির জন্য সি ++ এর শেষে অর্ধিকোলন, সুতরাং পরের লাইনটি একবারেই মৃত্যুদন্ড কার্যকর করা হয়, এ জাতীয় জিনিস।
অন্য লোকেরা আপনার মতো একই ধরণের বাগ লিখবে না।
আমি জানি না যে আমি বড় ডিবাগিং বন্দুকগুলি টেনে বের করার জন্য কতবার সময় নষ্ট করেছি, এটি মনে করে যে একটি বাগ আমার সত্যিকারের সূক্ষ্ম অদ্ভুত জিনিস ছিল, কেবল আমার বন্ধুটি আমার কাঁধে তাকিয়ে যেতে চেয়েছিল, "আপনি কি অতিরিক্ত লক্ষ্য করেছেন? সেমিকোলন? " এর বহু বছর পরে, আমি অন্য লোকের কোডটি দেখে প্রথমে তুচ্ছ, নিম্ন-স্তব্ধ ফলের জন্য যাই।
আপনার সরঞ্জামগুলি জানুন। উদাহরণস্বরূপ, ভিজ্যুয়াল স্টুডিওর ডিবাগারটিতে ট্রেসপয়েন্টস নামে একটি দুর্দান্ত বৈশিষ্ট্য রয়েছে যা ব্রেকপয়েন্টের মতো হয় তবে আপনার কোডটি থামিয়ে দেবার পরিবর্তে ডিবাগ আউটপুটে একটি ট্রেস স্টেটমেন্ট সন্নিবেশ করে।
আপনার ডিবাগারটি কীভাবে ব্যবহার করবেন সে সম্পর্কে বই পড়া বা ক্লাস নেওয়া অত্যন্ত প্রস্তাবিত। আমি বেশ কয়েকটি ক্লাস নিয়েছি এবং জন রবিনসের কয়েকটি বই পড়েছিলাম যা একটি ডিবাগার হিসাবে আমার কার্যকারিতাটিতে একটি বড় পার্থক্য তৈরি করে।
স্বয়ংক্রিয় ইউনিট পরীক্ষা এবং অন্যান্য ধরণের সংহতকরণ এবং কার্যকরী পরীক্ষা লিখুন।
আপনার যত বেশি স্বয়ংক্রিয় পরীক্ষাগুলি হবে, কম ডিবাগারে আপনাকে সময় কাটাতে হবে।
এছাড়াও, ভাল নকশা - সলাইড নীতিগুলি। আপনি যদি ছোট, কেন্দ্রীভূত শ্রেণি লিখছেন এবং উত্তরাধিকারের তুলনায় রচনাটির পক্ষে, সদৃশকরণ ইত্যাদি মুছে ফেলুন, তবে আপনার কোডটি সর্বদা ডিবাগ করা সহজ হবে।
আমি দেখতে পেয়েছি যে ভালভাবে ডিজাইন করা কোডগুলি এমন একটি পৃথক বাগ তৈরি করে যে কোডটি ভালভাবে ডিজাইন করা হয়নি। সাধারণভাবে বলতে গেলে, সু-নকশিত কোডগুলি এমন বাগ তৈরি করে যা সন্ধান, পুনরুত্পাদন এবং সংশোধন করা আরও সহজ।
ব্যতিক্রম (এবং সর্বদা একটি থাকে) হ'ল মাল্টিথ্রেডিং কোড :-)
প্রোগ্রামস কেন ব্যর্থ হয়েছে: অ্যান্ড্রিয়াস জেলারের রচনা, সিস্টেম্যাটিক ডিবাগিংয়ের একটি গাইড খুব মূল্যবান বইটি দেখুন । এটি আপনাকে অনেক কৌশল, তত্ত্ব এবং সরঞ্জামগুলির সাথে পরিচয় করিয়ে দেবে, যার কয়েকটি গবেষণার প্রান্তে রয়েছে।
বইটির স্লাইডগুলি অনলাইনে উপলব্ধ, তবে আমি মনে করি বইটি নিজেই পড়া সহজ।
বইটি আপনাকে শুরু করতে এবং ডিবাগিং সম্পর্কে আপনাকে আরও বৈজ্ঞানিকভাবে চিন্তা করতে সহায়তা করবে, তবে এটি অনুশীলনের বিকল্প নয় itute আপনার পারফরম্যান্সে প্রশস্ততার উন্নতির অর্ডার দেখার আগে আপনাকে 10 বছর ধরে লিখতে হবে এবং ডিবাগ করতে হবে। আমার এখনও মনে আছে যে সূর্যতে আমার চোয়ালটি সিনিয়র বিকাশকারীদের দেখে, যারা ৩০ বছর ধরে ইউনিক্সের জন্য প্রোগ্রামিং করে, কয়েক মিনিটের মধ্যে অস্পষ্ট মাল্টিথ্রেডিং বা সমান্তরাল বাগগুলি খুঁজে পায়। অভিজ্ঞতার বিষয়টি!