পেরেটো নিয়ম অনুসরণ করে একজন প্রোগ্রামার তার 20% সময় সত্যিই দরকারী জিনিসগুলির জন্য ব্যয় করে।
আমি আমার সময়টির ৮০% ডিবাগ করতে ব্যয় করি, সমস্ত কিছু কাজ করার জন্য ছোট জিনিস স্থির করে।
ডিবাগিং কম সময় ব্যয় করার কোন উপায় আছে কি?
পেরেটো নিয়ম অনুসরণ করে একজন প্রোগ্রামার তার 20% সময় সত্যিই দরকারী জিনিসগুলির জন্য ব্যয় করে।
আমি আমার সময়টির ৮০% ডিবাগ করতে ব্যয় করি, সমস্ত কিছু কাজ করার জন্য ছোট জিনিস স্থির করে।
ডিবাগিং কম সময় ব্যয় করার কোন উপায় আছে কি?
উত্তর:
মধ্যে Code Agda বা Coq । আপনার কোডটি সংকলিত হয়ে গেলে এটি কার্যকর হবে। যদি এটি খুব কঠোর হয় তবে দুর্বল টাইপ সিস্টেমের সাথে একটি ভাষা চয়ন করুন, যেমন, হাস্কেল বা এফ #।
তবে তবুও, বেশিরভাগ ক্ষেত্রে আপনি আপনার সময়কালের 20% কোডিংয়ে এবং 80% টেস্টিং এবং ডিবাগিংয়ে ব্যয় করতে পারেন। এক সপ্তাহের 100% এক ঘন্টার 20% এরও বেশি। যদি ডিবাগিং আপনার জিনিসগুলি করা দরকার তবে ডিবাগ করা সময়ের অপচয় নয় এবং এই অনুপাতটিকে "উন্নত" করার জন্য আপনাকে বিরক্ত করা উচিত নয়।
অংশ পরিক্ষাকরণ.
আমি ইউনিট পরীক্ষার প্রয়োগ শুরু করার পরে আমি দেখতে পেলাম যে আমার লেখা কোডটি আরও ভাল কাঠামোগত হয়ে উঠেছে। তখন বাগগুলি এড়ানো এবং স্পট করা সহজ ছিল। আমি ডিবাগিংয়ে কম সময় ব্যয় করেছি, তবে ইউনিট পরীক্ষা লেখার সাথে আরও বেশি সময় ব্যয় করেছি।
আমি আরও মনে করি যে ইউনিট পরীক্ষাগুলিতে বিনিয়োগের সময়টির ডিবাগিংয়ের পরে বিনিয়োগের আরও ভাল রিটার্ন পাওয়া যায়। একটি ডিবাগিং সেশনের পরে আমি কোডটি ঠিক করেছি। একই বাগটি কয়েক সপ্তাহ পরে উপস্থিত হতে পারে এবং আমাকে আবার ডিবাগ করতে হবে। আমি যদি ইউনিট পরীক্ষা লিখি তবে বাগটি ইউনিট পরীক্ষা হিসাবে নথিভুক্ত হয় এবং পরে এটি রিগ্রেশন টেস্ট হিসাবে কাজ করে। বাগটি আবার উপস্থিত হলে ইউনিট পরীক্ষাগুলি এটি আমার কাছে প্রকাশ করে।
a + b
কোডের টুকরো পরীক্ষা করতে পারবেন না (যদি না আপনার পরীক্ষাটি আপনার গাণিতিক ডেটা ধরণের পুরো পরিসীমাটি কভার করে না)।
ইউনিট টেস্টিং আশাবাদী হিসাবে সহায়তা করবে যদি আপনি বাগ প্রবর্তন করেন তবে তারা আপনার প্রোডাকশন কোডের আগে ভেঙে যাবে - ভাল লিখিত ইউনিট পরীক্ষাগুলি আপনাকে ঠিক কী ভেঙে গেছে তাও জানিয়ে দেবে।
এটি আপনাকে বেশিরভাগ উপায়ে পেয়ে যাবে তবে 99.999% প্রকল্পের জন্য আপনাকে এখনও সময় সময় থেকে জিনিসগুলি ডিবাগ করতে হবে। এখানে সবচেয়ে ভাল জিনিসটি আমি খুঁজে পেয়েছি 4 টি কাজ করা:
ডিবাগিংয়ে কীভাবে কম সময় ব্যয় করবেন? কম কোড লিখুন।
গম্ভীরভাবে, যতক্ষণ আপনি কোড লিখবেন ততক্ষণ আপনি এটি ডিবাগ করতে হবে। ইউনিট পরীক্ষাগুলি ইত্যাদি প্রচুর সাহায্য করে তবে আপনি কখনই এর প্রয়োজনীয়তা পুরোপুরি সরিয়ে ফেলবেন না বলে মনে করবেন না।
কোড লেখা শুরু করার আগে কী এবং কেন তা বুঝুন। তারপরে ধারাবাহিকভাবে একটি পদ্ধতি ব্যবহার করুন। আপনি কোন পদ্ধতিটি বেছে নিন তা পদ্ধতিটির ধারাবাহিক পুনরাবৃত্তি হিসাবে ততটা গুরুত্বপূর্ণ নয়। আপনি যদি ধারাবাহিকভাবে ভাল ফলাফল চান, আপনার ধারাবাহিকভাবে ভাল কাজ করা দরকার এবং এই ফলাফলগুলি পাওয়ার প্রথম পদক্ষেপ "আপনার পাগলের কাছে পদ্ধতি" থাকা। সমস্যাগুলি সনাক্ত করার সাথে সাথে আপনি আপনার প্রয়োজন অনুসারে আপনার পদ্ধতিটি সামঞ্জস্য করতে পারেন এবং সময়ের সাথে সাথে আপনি আপনার বিকাশ প্রক্রিয়াটি উন্নত করতে পারবেন এবং আশা করি কম বাগ এবং আরও নতুন, অর্থবহ বিকাশ হবে।
আপনার কোডটি সংকলনের আগে সাবধানে পড়ুন। সিনট্যাক্স এবং কার্যকারিতা জন্য খুব যত্নশীল পড়া। এটি আশ্চর্যজনকভাবে তথ্যবহুল হতে পারে এবং কোডের একটি বিভাগ খুব জটিল হলে এটিও একটি ভাল সূচক।
সর্বাধিক উত্তরগুলি আপনাকে কীভাবে ডিবাগ করতে হবে এবং যে মূল্যবান তা হ্রাস করতে হবে সেদিকে মনোনিবেশ করা মনে হচ্ছে। যাইহোক, ডিবাগিং সর্বদা প্রয়োজনীয় হবে সুতরাং ডিবাগিংয়ের সময়ে দ্রুত হওয়ার উপায়গুলি দেখতে এটি দরকারী।
আপনার সংস্করণ নিয়ন্ত্রণ সফ্টওয়্যার কীভাবে ব্যবহার করবেন তা জানুন।
আপনি যে প্রোগ্রামিং ল্যাঙ্গুয়েজটি ব্যবহার করেন তা বোঝার উন্নতি করুন।
যৌক্তিক হতে হবে
ইউনিট পরীক্ষার জন্য মন্তব্যে যুক্ত করা তবে এটি কেবলমাত্র তখনই ভাল তবে আপনার কোডটি সমর্থন করার জন্য পৃথক করা হয়েছে (যেমন এমভিসি)। আপনি যদি এমভিসি (বা অনুরূপ) (উত্তরাধিকার প্রকল্প) বাস্তবায়ন করতে না পারেন তবে ইউনিট পরীক্ষাগুলি আপনার ইউআই এর জন্য মোটেও কাজ করে না। এরপরে আমি স্বয়ংক্রিয় ইউআই টেস্টিং যুক্ত করব (মাইক্রোসফ্ট কোডেড ইউআই টেস্টস, ওয়েটএন) কারণ এটি আপনার কোডের সেই অংশের ত্রুটিগুলি হ্রাস করবে।
আমি স্থিতিশীল বিশ্লেষণ সরঞ্জামগুলি (যেমন, এফএক্সকপ / মাইক্রোসফ্ট কোড বিশ্লেষণ, পুনরায় ভাগ্যবান, এমএস ওয়ার্ল্ডের জন্য জাস্টকোড) চালানোর সুপারিশ করব। এগুলি সমস্ত ধরণের সাধারণ কোডিং সমস্যাগুলি খুঁজে পেতে পারে যা নিরীহ ডিবাগিং কার্যগুলিকে হ্রাস করতে পারে এবং ব্যবসায়িক যুক্তি ডিবাগিংয়ে আরও ফোকাস করতে পারে।
এটিকে কাজ করুন, তারপরে এটি দ্রুত করুন, তারপরে এটি সুন্দর করুন। বেশিরভাগ বাগগুলি কোডের লাইনে প্রাথমিক অপ্টিমাইজেশান বা পুনরায় ফ্যাক্টরিং থেকে আসে যা সম্পূর্ণ সূক্ষ্ম ছিল। যদি আপনি অবজেক্ট অরিয়েন্টেশন দিয়ে যান তবে নিজেকে পুনরাবৃত্তি করবেন না, এটিকে সহজ রাখুন এবং সর্বদা মান পরিসীমাগুলির বিশুদ্ধতা যাচাই করে নিন বিশেষত যদি আপনার পদ্ধতিগুলি এখনও সীমাবদ্ধতায় কাজ করে। এটি আপনাকে কম ভুল করতে সহায়তা করবে না তবে এটি সম্ভবত ত্রুটিগুলি দ্রুত চিহ্নিত করতে সহায়তা করবে এবং ডিবাগিংয়ে কম সময় লাগে।
আমাকে সম্প্রতি এই সমস্যায় অনেকটা চিন্তাভাবনা দেওয়া হয়েছে - এর সহজ উত্তরটি ডোন নরমানের ডিজাইনের রোজকার জিনিসগুলি পড়ুন; কোডটি লিখুন যেমন আপনি কোনও পণ্য ডিজাইন করেন।
প্যারাফ্রেজ করতে, ভাল ডিজাইন ত্রুটি হ্রাস করে। তার অর্থ, কয়েকটি জিনিস, যার বেশিরভাগ আপনি ইতিমধ্যে করেছেন (যদিও আপনি ঠিক জানেন না কেন )।
নাম স্বজ্ঞাতভাবে ফাংশন। এটি আনুষ্ঠানিকভাবে সাধ্য হিসাবে পরিচিত। এটি, একটি বোতাম টিপতে হবে, একটি লিভারকে সুইচ করতে হবে, একটি হ্যান্ডেল টেনে তোলা হবে ইত্যাদি ords
-যুদ্ধ কোড লিখতে কষ্ট করুন। খারাপ ইনপুট পরীক্ষা করুন এবং তত দ্রুততার পরে ত্রুটিগুলি নিক্ষেপ করুন, উপযুক্ত হলে অ্যাপস হানি ব্যবহার করুন ইত্যাদি এগুলিকে লকআউট ফাংশন বলে called
উপযুক্ত যেখানে অ্যাবস্ট্রাকশন ব্যবহার করুন। স্বল্প-মেয়াদী স্মৃতি দুর্বল is
- ডকুমেন্টেশন স্পষ্টতই গুরুত্বপূর্ণ, তবে কোডটি সঠিকভাবে ব্যবহৃত হয়েছে তা নিশ্চিত করার ক্ষেত্রে এটি সবচেয়ে কম কার্যকর। সংক্ষেপে, ভালভাবে ডিজাইন করা পণ্যগুলির কোনও ডকুমেন্টেশন প্রয়োজন হয় না। (এটি দেখার সর্বাধিক সুস্পষ্ট উপায়টি খারাপ উদাহরণগুলি দেখছে: যথা, হ্যান্ডলগুলি সহ যে দরজাগুলি আপনার ধাক্কা দেওয়ার কথা))
- পরীক্ষা পরীক্ষা। এগুলি সত্যই ত্রুটিগুলি রোধ করে না, তবুও বাগগুলি কোথায় রয়েছে তা স্পষ্ট করে তোলে এবং সংবেদনশীলতা সরবরাহ করে।
আমি নিশ্চিত যে আমি আরও অনেক নীতি মিস করছি, তবে মূল বিষয়টি হচ্ছে, ত্রুটির জন্য ডিজাইনিংয়ের বিষয়টি পড়ুন।
আমি উপরে উল্লিখিত ইউনিট পরীক্ষার সম্পূর্ণ সমর্থন করি, তবে টিডিডি বা বিডিডি আপনার পক্ষে মূল্য এবং সমস্যাটির সমাধান সম্পর্কে প্রথমে চিন্তা করা দরকার।
তবে ব্যক্তিগতভাবে আমার জন্য, কয়েক মিনিট সময় নিঃশব্দে বসে এবং সমস্যাটি সম্পর্কে কীভাবে চিন্তা করা যায় এবং কীভাবে এটির কাছে আসা যায় এবং প্রতিটি পদ্ধতির সাথে কোনও প্রো-ও কনস কীভাবে আমার কোডের মানটির জন্য বিস্ময়কর কাজ করে এবং আমার বিশৃঙ্খলার বিষয়টি পরিষ্কার করতে সহায়তা করে।
কখনও কখনও কাগজের টুকরোতে দ্রুত স্ক্রিবল আপনাকে ধাঁধাটির বৃহত সংযুক্ত অংশগুলি দেখতে সহায়তা করে।
আমি সবচেয়ে খারাপ কোডটি লিখি যখন আমি প্রথমে মাথায় ডুব দিয়ে কীবোর্ডটি পাউন্ড করি। কিছুটা চিন্তাভাবনা এবং মনন এক পার্থক্য তৈরি করে তোলে।
পুনশ্চ. আমার অর্থ 5 সম্ভবত দশ মিনিট, একটি বিশাল চপ লিখতে ঘন্টা নয়।
ইতিমধ্যে কিছু ভাল উত্তর, অন্যেরা যা বলেছে তার সংযোজন করার জন্য কেবল আরও কিছু খাবার।
আপনার ভুল থেকে শিখুন। বার বার একই জিনিসগুলি বানাবেন না।
প্রোগ্রামিং করার সময় প্রান্তের কেসগুলি নিশ্চিত করার বিষয়টি নিশ্চিত করুন - এগুলি এমন জায়গা যেখানে ঘন ঘন বাগ থাকে।
প্রয়োজন মনোযোগ দিন। এমনকি যদি এটি কাজ করে তবে প্রয়োজনীয়ত যা নির্দিষ্ট করে তা না করে তবে এটি একটি বাগ।
এখন থেকে ছয় মাস অন্তর কিছু ভুল হয়ে গেলে ব্যতিক্রম লগগুলি সত্যিকারের সহায়ক হতে পারে। ব্যতিক্রম রেকর্ড করার অভ্যাসে থাকুন।
আমার দুটি শীর্ষ ধারণা হ'ল 1) আরও ভাল কোড লিখুন যা আপনি যখন অপ্রত্যাশিত কিছু করেন তখন ব্যর্থ হবে 2) ডিবাগিংয়ে আরও ভাল হয়ে উঠুন
আমার কোড দিয়ে ফাঁকা আছে
if(value!=null) throw new NotImplementedException();
if(obj.v>0) throw new Exception(); //sometimes i dont write NotImplementedException
if(value=="thing") throw ...;
আমি যখনই কোডটির এই টুকরোগুলি কার্যকর করি তখন ব্যতিক্রম ছুঁড়ে ফেলা হয় যার ফলে ডিবাগারটি বন্ধ হয়ে যায় যা আমাকে নতুন বৈশিষ্ট্যগুলিতে কোড করতে দেয় বা শর্তগুলি এড়াতে দেয় তবে কী ঘটছে সে সম্পর্কে বিভ্রান্ত হয়ে পড়ে / বাগ থাকে
কল স্ট্যাক, ব্রেকপয়েন্টস (শর্তাবলী সহ), তাত্ক্ষণিক উইন্ডো (প্রম্পট বা রিপ্লাল উইন্ডো নামে পরিচিত), 'ওয়াচ' ভেরিয়েবল এবং অন্য যে কোনও কিছুই দিয়ে চারপাশে ডিবাগিং জগাখিচির আরও ভাল হয়ে উঠতে পারে।