ডিবাগ করতে অনেক বেশি সময় ব্যয় হচ্ছে


24

গতকাল, আমি একটি ওয়েব প্রকল্পের একটি ভি 1.0 রিলিজটি রোল করেছি যা আমি প্রায় 6 সপ্তাহ ধরে কাজ করেছি (চালু এবং বন্ধ করছি) spent আমি আমার সময়ের কোনও সঠিক রেকর্ড তৈরি করিনি, তবে আমার অভিজ্ঞতা অনুসারে আমি অনুমান করতে পারি যে আমি যতক্ষণ প্রোগ্রামিংয়ে ব্যয় করেছি তার মধ্যে অর্ধেকটি ডিবাগিংয়ে ব্যয় করেছে। আমি অনুমান করি যে প্রায় 15-20 ঘন্টা ডিবাগিংয়ের জন্য ব্যয় করা ভাল, যা আমার কাছে মূল্যবান সময় যা নতুন কোড লেখার ক্ষেত্রে বা প্রকল্প শেষ করার আগে আরও ভাল ব্যয় করতে পারত। এটিও বিশেষত সহায়তা করে না যে আমি 5 সপ্তাহের মধ্যে কলেজের একজন নতুন হয়ে উঠব।

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

ভবিষ্যতে কীভাবে আমি এটিকে আটকাতে পারি? আমি আমার 50% সময় ডিবাগিংয়ে ব্যয় করতে চাই না, আমি বরং 10% ডিবাগিং এবং বাকীটি নতুন কোড লেখার জন্য ব্যয় করব। এই লক্ষ্যে পৌঁছাতে সাহায্য করার জন্য আমি কী কী কৌশল ব্যবহার করতে পারি?


22
আমি যখন নতুন ছিলাম, তখন আমিও ধীর কোডার ছিলাম। শুধু 20 বছর দিন।
কাজ

27
হ্যাঁ, শুভকামনা। "যদি ডিবাগিংটি ত্রুটিগুলি সরানোর প্রক্রিয়া হয় programming তবে প্রোগ্রামিং এগুলি অবশ্যই রাখার প্রক্রিয়া হবে।" -এডজার ডিজকস্ট্রা
ম্যাট

7
আপনি কি এই ভুলগুলি থেকে কিছু শিখলেন? আপনি যদি তা করেন তবে আপনি সেগুলি পরের বার তৈরি করবেন না এবং এটি আপনার ডিবাগিংয়ের সময় কমিয়ে দেবে।
ক্রেগ টি

5
এটিকে "অভিজ্ঞতা" বলা হয় এবং আপনার পরবর্তী প্রকল্পে আপনাকে সহায়তা করবে ।

4
১৯৪০ এর দশকের শেষের দিকে কথা বলতে গিয়ে মরিস উইলকস লিখেছিলেন: "আমরা প্রোগ্রামিং শুরু করার সাথে সাথে আমরা আমাদের অবাক করে দিয়েছিলাম যে আমাদের ধারণা মতো প্রোগ্রামগুলি পাওয়া এতটা সহজ ছিল না। ডিবাগিংটি আবিষ্কার করতে হয়েছিল। এটি একটিতে ছিল ইডিএসএসি রুম এবং মুষ্টির সরঞ্জামগুলির মধ্যে আমার যাত্রা যা 'সিঁড়ির কোণে দ্বিধায় পড়েছে' উপলব্ধিটি আমার কাছে পুরোপুরিভাবে এসেছিল যে আমার জীবনের বাকি অংশের একটি ভাল অংশ আমার নিজস্ব প্রোগ্রামগুলিতে ত্রুটিগুলি খুঁজে পেতে ব্যয় করতে চলেছে। "
ট্রেভর পাওয়েল

উত্তর:


35

আপনি সফটওয়্যার ইঞ্জিনিয়ারিংয়ের হলি গ্রেইলের জন্য জিজ্ঞাসা করছেন, এবং এখনও এই প্রশ্নের উত্তর "কারও" নেই।

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

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

ডিজাইন পর্যায় ত্রুটি

যদি আপনি দেখতে পান যে আপনার বেশিরভাগ ত্রুটি সমস্যা বিবরণের ভুল বোঝাবুঝি থেকে এসেছে বা আপনি যদি সমস্যাগুলি সমাধানের জন্য অনুসরণ করার জন্য ভুল অ্যালগরিদম বা পথটি বেছে নিয়ে থাকেন তবে আপনার নকশার পর্যায়ে সমস্যা রয়েছে।

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

কোডিং ত্রুটি

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

আপনি যদি সি তে প্রোগ্রামিং করে থাকেন তবে সমস্ত সংকলক সতর্কতা চালু করুন, একটি শব্দার্থ পরীক্ষাকারী পছন্দ করুন lintএবং valgrindসাধারণ গতিশীল-মেমরি সম্পর্কিত সমস্যাগুলি ধরার জন্য একটি সরঞ্জাম ব্যবহার করুন ।

আপনি যদি পার্ল প্রোগ্রামিং করে থাকেন তবে চালু করুন strictএবং warningsএটি কী বলে তা মনোযোগ দিন।

আপনি কোন ভাষাটি ব্যবহার করছেন তা বিবেচনা না করেই, ডিবাগিং পর্যায়ে পৌঁছানোর অনেক আগে সাধারণ ভুলগুলি ধরতে সহায়তা করার জন্য সম্ভবত সেখানে প্রচুর সরঞ্জাম উপস্থিত রয়েছে।

ইন্টিগ্রেশন পর্যায় ত্রুটি

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

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

এবং তাই ...

সফ্টওয়্যার ইঞ্জিনিয়ারিং এবং ব্যবহারিক কোডিং কৌশলগুলি সম্পর্কে কয়েকটি বই তুলে নিন এবং আপনি বিকাশকে কম বিশৃঙ্খলাযুক্ত এবং আরও নির্ভরযোগ্য করার বিভিন্ন উপায় শিখবেন। আপনি এটি খুঁজে পাবেন যে কেবল সাধারণ পুরানো অভিজ্ঞতা - হার্ড নাকের স্কুল থেকে একটি ডিগ্রি অর্জন করুন - আপনাকেও আকৃতিতে রূপ দেবে।

প্রায় সমস্ত কি কি উত্সাহিত করে তা হ'ল সামান্য সময় এবং কাজের অগ্রগতি পরে বিকাশ / প্রকাশের প্রক্রিয়াতে বিশাল লভ্যাংশে অর্থ প্রদান করে।

আপনার ক্যারিয়ারের প্রথম দিকে আপনি এই বিষয়গুলি লক্ষ্য করেছেন এই বিষয়টি আপনার ভবিষ্যতের পক্ষে ভাল কথা বলেছে এবং আমি আপনাকে শুভকামনা জানাচ্ছি।


1
এটি একটি দুর্দান্ত উত্তর তবে একটি স্বল্প পৃথক প্রশ্নের আইএমএইচও। ওপি বলছে যে আমি কিছু লিখতে / বন্ধ করতে 6 সপ্তাহ অতিবাহিত করেছি এবং আমাকে ডিবাগ করতে অনেক সময় ব্যয় করতে হয়েছিল। আমরা এখনও তার পণ্যগুলির গুণমান, রক্ষণাবেক্ষণযোগ্যতা, স্কেলাবিলিটি কিছুই জানি না। আমরা যদি টিডিডি, ভাল ডিজাইন, বাগ ট্র্যাকিং ধরে নিই, তবে আমরা কীভাবে কম ত্রুটিযুক্ত কোডটি (টেস্ট কোডটিও ডিবাগ করা দরকার) সহ কীভাবে লিখব তা নিয়ে প্রশ্ন রয়েছে। সতর্কতা চালু করা, লিন্ট ব্যবহার করা ইত্যাদি ভাল পরামর্শ। স্কুল থেকে যারা আরও বেশি কড়া ছুঁড়েছে? :-)
গাই স্যারটন

1
@ গুয় - হ্যাঁ ... ওপির প্রশ্নটি কিছুটা অস্পষ্ট ছিল, এ কারণেই আমি মূল কারণ বিশ্লেষণের উপর জোর দিয়েছিলাম। আপনি কী জানেন না যতক্ষণ না ভুল না হওয়া পর্যন্ত you সমস্যার ক্ষেত্রগুলির সমীক্ষা দেওয়ার কারণটি হ'ল আমি চেয়েছিলাম যে তিনি অনেকগুলি সম্ভাব্য সমস্যা সম্পর্কে সচেতন হন এবং প্রক্রিয়াটির প্রতিটি স্তর তার নিজস্ব পরীক্ষার দাবি রাখে। আমি জানি সকলের জন্য, তিনি পরবর্তী টনি হোয়ার হতে পারেন, তবে একজন অন্ধ হাতির টাইপিং দক্ষতা সহকারে - বিভিন্ন কারণে বিভিন্ন কারণ fix
আনপাইথোনিক

37

ইউনিট টেস্ট লিখুন

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

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

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


ইউনিট পরীক্ষার জন্য +1 - এর আগে বিকাশ প্রক্রিয়াতে যে বাগগুলি ধরা হয় তত সস্তা এবং সহজ করার জন্য এটি ঠিক করা।
পল আর

26

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

এবং সত্যি বলতে কী, এটি রক্ষণাবেক্ষণ প্রোগ্রামিংয়ের ক্ষেত্রে আরও খারাপ - বেশিরভাগ ক্ষেত্রে, আমি ঠিক কী ভুল হয় তা সন্ধান করার জন্য এক ঘন্টা ব্যয় করতাম, তারপরে কোডটি পাঁচ মিনিট লিখে ঠিক করে ফেলতাম এবং তারপরে আধা ঘন্টা পুরো বিষয়টি পরীক্ষা করে দেখতাম। এটি প্রায় 5% কোডিং বনাম প্রায় 95% নন-কোডিংয়ের বেশি।

ডিবাগিংয়ের সময় কমাতে আপনি কয়েকটি জিনিস করতে পারেন যদিও:

  • ডিবাজিযোগ্য কোড লিখুন । এর অর্থ: যথাযথ ত্রুটি পরিচালনা (এটিতে কিছু চিন্তাভাবনা সহ) পরিচালনা করা, আপনার কোডটিকে অনুসরণ করা সহজ করার জন্য কাঠামোবদ্ধ করা, দৃ ,়তা, চিহ্নগুলি ব্যবহার করা এবং অন্য যে কোনও কিছুই ডিবাগারের জীবনকে সহজ করে তুলতে পারে। জটিল রেখাগুলি এড়িয়ে চলুন; একাধিক জিনিস করে এমন একটি লাইন বিভক্ত হওয়া উচিত যাতে আপনি পৃথকভাবে সেগুলির মধ্য দিয়ে যেতে পারেন।
  • পরীক্ষারযোগ্য কোড লিখুন । আপনার কোডটিকে সাধারণ ফাংশনে বিভক্ত করুন (বা আপনার পছন্দের ভাষা সমর্থন করে যা কিছু); পার্শ্ব প্রতিক্রিয়া এড়ান, কারণ এগুলি ইউনিট পরীক্ষায় ক্যাপচার করা শক্ত। আপনার ফাংশনগুলি ডিজাইন করুন যাতে এগুলি বিচ্ছিন্নভাবে চালানো যায়। বহু উদ্দেশ্যমূলক কাজগুলি এড়িয়ে চলুন। প্রান্তের মামলাগুলি এড়িয়ে চলুন। আপনার ফাংশনগুলি কী করণীয় তা নথিভুক্ত করুন।
  • পরীক্ষা লিখুন । ইউনিট পরীক্ষা করার অর্থ আপনি জানেন যে আপনার ফাংশনগুলি তাদের ইনপুটগুলির কমপক্ষে একটি উপসেটের জন্য কাজ করে; এর অর্থ হ'ল আপনার পরিবর্তনগুলি কোনও কিছু না ভঙ্গ করে তা নিশ্চিত করার জন্য আপনার কাছে স্যানিটি চেক রয়েছে। আপনি কোড কভারেজ এবং ইনপুট কভারেজের ধারণাগুলি পাশাপাশি ইউনিট পরীক্ষার সীমাবদ্ধতাগুলিও বুঝতে পেরেছেন তা নিশ্চিত করুন।
  • একটি 'ওয়ার্কবেঞ্চ' সেট আপ করুন । আপনি কীভাবে এটি করেন তা নির্ভর করে ভাষার ভাষার উপর on পাইথন বা হাস্কেল এর মতো কিছু ভাষা ইন্টারেক্টিভ ইন্টারপ্রেটার নিয়ে আসে এবং এটির সাথে খেলতে আপনি নিজের বিদ্যমান কোডটিকে এতে লোড করতে পারেন। এটি নিখুঁত, যেহেতু আপনি সর্বনিম্ন প্রচেষ্টা সহ আপনার পছন্দসই প্রসঙ্গে আপনার ফাংশনগুলিকে কল করতে পারেন - বাগগুলি খুঁজে পেতে এবং বিচ্ছিন্ন করার জন্য একটি অমূল্য সরঞ্জাম। অন্যান্য ভাষায় এই বিলাসিতা নেই, এবং আপনাকে সামান্য ইন্টারেক্টিভ টেস্ট প্রোগ্রাম লেখার জন্য অবলম্বন করতে হবে।
  • পঠনযোগ্য কোড লিখুন । আপনার উদ্দেশ্যগুলি যতটা সম্ভব পরিষ্কার করার জন্য আপনার কোডটি লেখার অভ্যাস করুন habit পুরোপুরি সুস্পষ্ট নয় এমন সমস্ত বিষয় নথি করুন।
  • সহজ কোড লিখুন । যদি আপনার নিজের মস্তিষ্কে পুরো কোডবেসটি বুঝতে সমস্যা হয় তবে এটি সহজ নয়, এবং অন্য কেউ এটি পুরোপুরি বুঝতে সক্ষম হবেন এমন সম্ভাবনা খুব কম। কোডটি এটি করার কথা বলে না বুঝলে আপনি কার্যকরভাবে ডিবাগ করতে পারবেন না।
  • 'মুছুন' বোতামে সহজ হন । আপনার এখনই যে কোড দরকার নেই তা ট্র্যাশ ক্যানের অন্তর্গত। আপনার যদি পরে এটির প্রয়োজন হয় তবে এটি উত্স নিয়ন্ত্রণ থেকে পুনরুদ্ধার করুন (অভিজ্ঞতা দেখায় যে এটি অত্যন্ত বিরল)। আপনি যত বেশি কোড নিষ্পত্তি করবেন ততই আপনার ডিবাগিং পৃষ্ঠ।
  • প্রাথমিক এবং প্রায়শই রিফ্যাক্টর । রিফ্যাক্টরিং ব্যতীত, নতুন বৈশিষ্ট্য যুক্ত করার সময় আপনি নিজের কোডটি ডিবাগযোগ্য অবস্থায় রাখতে পারবেন না।

1
এছাড়াও সমস্যাগুলির ক্ষেত্রে বিশ্ব আপনার প্রত্যাশার চেয়ে আলাদা আচরণ করতে পারে। এটি খুব সূক্ষ্ম বাগের কারণ হতে পারে।

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

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

5

আরও পরিকল্পনা

এটি অনিবার্য যে আপনি ডিবাগিংয়ের বেশ ভাল সময় ব্যয় করতে যাচ্ছেন, 10% বেশ উচ্চাকাঙ্ক্ষী লক্ষ্য। যদিও ডিবাগিং এবং বিকাশিত সময় ব্যয় হ্রাস করার অন্যতম সেরা উপায় হ'ল পরিকল্পনা পর্যায়ে বেশি সময় ব্যয় করা।

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


1
+1 কারণ আমার ডিবাগিংয়ের সময় কমাতে আমি এটিই করি। যখন আমি একটি নতুন প্রকল্প শুরু করি, আমি মন্তব্যে যা করতে যাচ্ছি তার সবই লিখি, তারপরে ফিরে গিয়ে মন্তব্যগুলির সাথে কোডটি প্রতিস্থাপন করি
ক্যামেলব্লুইজ

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

5

আরও সাবধানে কাজ করুন

এটি "একবারে দুইবার কাটা পরিমাপ" এর সমতুল্য সফ্টওয়্যার:

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

যা কিছু বলেছিল, কিছুই ত্রুটিগুলি পুরোপুরি মুছে ফেলছে না। আপনার এটিকে জীবনের সত্য হিসাবে গ্রহণ করতে হবে। ত্রুটিগুলির জন্য এই বাস্তব পরিকল্পনাটি দেওয়া হয়েছে, যেমন ইউনিট পরীক্ষা। এটিকে "চিরদিন নিন" (ওরফে বিশ্লেষণ-পক্ষাঘাত) বোঝাতেও নেবেন না। এটি ভারসাম্য খুঁজে পাওয়া সম্পর্কে।


4

অন্যান্য উত্তরগুলি ইতিমধ্যে আমি যা বলতে চাই তার বেশিরভাগটি কভার করেছে, তবে আমি এখনও আপনাকে আমার (নির্মমভাবে সত্য) মতামত দিতে চাই:

মূলত, অ-তুচ্ছ সফ্টওয়্যার কাজের জন্য, আপনার অপ্রতিরোধ্য বেশিরভাগ সময় রক্ষণাবেক্ষণ এবং ডিবাগিংয়ে ব্যয় করার প্রত্যাশা করুন। যদি আপনি একটি পরিপক্ক, উত্পাদন সফ্টওয়্যার সিস্টেমে কাজ করছেন, এবং আপনি আপনার রক্ষণাবেক্ষণ এবং ডিবাগিংয়ের জন্য 80-90% এর চেয়ে কম সময় ব্যয় করছেন, আপনি ভাল করছেন!

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

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


2

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

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


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

2

ধারাবাহিক সংহতকরণ (সিআই) এর উত্তর।

অবিচ্ছিন্ন ইন্টিগ্রেশন = কনফিগারেশন ম্যানেজমেন্ট সিস্টেম (যেমন, গিট, মার্কিউরিয়াল, এসভিএন, ইত্যাদি) + সিআই সরঞ্জাম + ইউনিট টেস্ট + ধোঁয়া পরীক্ষা

এই সূত্রটি আপনাকে অবিচ্ছিন্ন একীকরণ (সিআই) এর উপর আরও পড়তে প্ররোচিত করবে। নীচে এই অঞ্চলে কিছু সংস্থান আছে:


1

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

আমি যেমন আমার নিয়োগকর্তাদের বোঝানোর চেষ্টা করি, কোড রক্ষণাবেক্ষণ এবং প্রযুক্তি সমর্থন হ্রাস করার সর্বোত্তম উপায় হ'ল আপনার কোডটি আগে থেকেই পরিকল্পনা করার জন্য সময় ব্যয় করা।


1

পরীক্ষিত চালিত বিকাশ ডিবাগিংয়ের সময় কমাতে সাহায্য করে:

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

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


1

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

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

পাশাপাশি, আপনার সময়ে সময়ে আপনার কোডটি রিফ্যাক্টর করা উচিত। আমি আপনাকে মার্টিন ফাউলারের বইটি পড়ার পরামর্শ দিচ্ছি: রিফ্যাক্টরিং: বিদ্যমান কোডের নকশা উন্নত করা


1

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

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

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


0

উপরে দুর্দান্ত উত্তর কিন্তু প্রত্যেকে সরাসরি উল্লেখ করা হয়নি (যদিও এটিতে সবচেয়ে বেশি ইঙ্গিত দেওয়া হয়েছে):

পড়ুন পড়ুন পড়ুন পড়ুন এবং বমি বেলাতে ...

আপনি যত বেশি জানেন, তত কম জানেন না। কিছুটা ক্লিচ, তবে তবুও মৌলিক সত্য।

একবার আপনি উপরের টিপসগুলি অনুসরণ করে বিশ্লেষণাত্মকভাবে বাগগুলি নথিভুক্ত করার পরে সেগুলি শ্রেণিবদ্ধ করার চেষ্টা করুন এবং তারপরে প্রাসঙ্গিক সাহিত্য পড়ুন।

এটি কি কোনও ডিজাইনের সিদ্ধান্তের বিষয় ছিল? ডিজাইন প্যাটার্নস পড়ুন।

এটি কি কাঠামো বা ভাষার জ্ঞানের অভাব ছিল? অস্থির!

ইত্যাদি

একটি (লাইভ) বিকাশকারী কখনও পালাতে পারবেন না এমন দুটি জিনিস রয়েছে: পরিবর্তন করুন (আইটিতে একমাত্র ধ্রুবক) এবং আরটিএফএমিং ...


0

ইউনিট পরীক্ষা এবং জোর দেওয়া

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

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


0

আপনি যখন কোনও প্রকল্প শুরু করেন, আপনি কতগুলি বিকল্প পন্থা সনাক্ত করেন?

আপনার কি দুটি থেকে চারটি ভিন্ন পদ্ধতির, প্রত্যেকটির পক্ষে ভাল এবং কনস রয়েছে? তাহলে আপনি কি তাদের মধ্যে থেকে যুক্তিযুক্ত নির্বাচন করেন?

তারপরে, সর্বাধিক গুরুত্বপূর্ণ, আপনি কি সরলতার বিষয়টি অত্যন্ত গুরুত্বপূর্ণ হিসাবে বিবেচনা করছেন?

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

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


0

প্রতিবার আপনি যখন কোনও বাগ ঠিক করেন, আপনি আবার একই ভুলটি এড়াতে চান। এটি করার জন্য, আপনি নিম্নলিখিতগুলি করতে পারেন:

  • এটি একটি ত্রুটি রেকর্ডিং লগটিতে লিখুন , যার মধ্যে রয়েছে:

    • ত্রুটি প্রকার
    • যে দফায় ত্রুটি ইনজেকশন করা হয়েছিল
    • যে পর্বে এটি সরানো হয়েছিল
    • নির্দিষ্ট সময়
    • সমস্যার বিবরণ এবং ঠিক করুন
  • আপনার লেখার কোডের স্টাইলকে স্বাভাবিক করার জন্য একটি স্টাইলগাইড গ্রহণ করুন

  • আপনার কোড পর্যালোচনা প্রক্রিয়াতে সুরক্ষিত কোডিং বিধিগুলিকে একীভূত করুন

  • নিয়ন্ত্রণ প্রবাহ এবং ডেটা ভিজ্যুয়ালাইজ করুন

তথ্যসূত্র

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