আমাদের কতটা প্রতিরক্ষামূলক হওয়া উচিত?


11

আমরা কিছু কোডের উপর পেক্স চালিয়ে যাচ্ছি এবং এটি কিছু ভাল জিনিস দেখায় (ভাল খারাপ জিনিস, তবে এটি উত্পাদন পাওয়ার আগে তা প্রদর্শন করে!)।

তবে, পেক্স সম্পর্কে একটি দুর্দান্ত জিনিস হ'ল এটি প্রয়োজনীয় বিষয়গুলি অনুসন্ধান করার চেষ্টা বন্ধ করে দেয় না।

একটি ক্ষেত্র যা আমরা পেয়েছি তা হ'ল স্ট্রিংয়ের পাশ দিয়ে যাওয়ার সময় আমরা খালি স্ট্রিংয়ের জন্য যাচ্ছিলাম না।

সুতরাং আমরা পরিবর্তন করেছি:

if (inputString == null)

প্রতি

if (string.IsNullOrEmpty(inputString)) // ***

এটি প্রাথমিক সমস্যাগুলি স্থির করেছে। তবে তারপরে, আমরা যখন আবার পেক্স চালালাম, তখন সিদ্ধান্ত নিয়েছে:

inputString = "\0";

সমস্যা সৃষ্টি করছিল। এবং তারপর

inputString = "\u0001";

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

ইহা কি যথেষ্ট?


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

@ ফ্রাস্ট্রেটেড: হ্যাঁ, আমরা যে প্রোফাইলটি করতে পারি এবং কী করছি সেগুলিতে অবশ্যই টুইটস রয়েছে। পেক্স হ'ল এক দুর্দান্ত সরঞ্জাম। এটি প্রদর্শিত ফলাফল সবেমাত্র প্রশ্ন উত্সাহিত করেছে।
পিটার কে।

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

@ ওয়েইনএম: হ্যাঁ, এটি বেশ ভাল, যদিও এটি কী করছে তা বোঝার জন্য আমাকে কয়েকটি উদাহরণ দিয়ে যেতে হয়েছিল। লিগ্যাসি কোডের জন্য, এটি দুর্দান্ত। এটি নতুন কোডের জন্য আরও ভাল!
পিটার কে।

উত্তর:


9

আপনার কোডিংয়ে কতটা প্রতিরক্ষামূলক হতে হবে তা নির্ধারণ করতে তিনটি প্রশ্ন আপনাকে সহায়তা করবে।

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

দ্বিতীয়ত, কতজন লোক এই ফাংশনটি বা কোডের টুকরোটি পুনরায় ব্যবহার করবে? শুধু তুমি? আপনার বিভাগ? আপনার প্রতিষ্ঠান? আপনার গ্রাহকরা? কোডটির ব্যবহার যত বেশি বিস্তৃত তত বেশি রক্ষণাত্মক।

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

কোনও সিস্টেমে আরও ত্রুটি পরীক্ষা এবং বৈধতা যুক্ত করা সর্বদা সম্ভব হবে। মুল বক্তব্যটি হ'ল এই কোডটি লেখার এবং বজায় রাখার ব্যয়টি কোডের ত্রুটিগুলির কারণে সৃষ্ট সমস্যার ব্যয়কে ছাড়িয়ে যাবে।


6

ব্যবহারকারীরা মন্দ, এবং যে কোনও কিছুতে তারা ইনপুট দেয় তা অত্যন্ত কঠোরতার সাথে পরীক্ষা করা উচিত।

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

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


2

আপনার যেমন প্রয়োজন তেমন আমি প্রতিরক্ষামূলক হয়ে উঠব। কিছুটা অস্পষ্ট, আমার মনে হয় তবে আমি ব্যাখ্যা করার চেষ্টা করব।

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

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

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

1) এই চেকটি করার জন্য আমার কি একমাত্র জায়গা প্রয়োজন? এই অবস্থার জন্য এই পরিবর্তনশীলটিকে প্রচুর বিভিন্ন স্থানে পরীক্ষা করা দরকার। যদি তাই হয় তবে আমি চেকটি একবার চেইন আপ করতে এবং তারপরে বৈধতা ধরে নিতে পারি

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

3) কোড এই মুহুর্তে ব্যর্থতা ফলাফল কি। এটি কি পুরো জিনিসটিকে ব্যর্থ করে দেবে? কোনও ত্রুটি অন্য কোথাও ধরা পড়বে এবং কমপক্ষে ত্রুটিটি ধরা পড়বে কি?

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

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


1

আমি কয়েক সপ্তাহ আগে বাগগুলিতে কাটিয়েছি যা এই সামনের দিকে 5 মিনিট অতিরিক্ত কাজ করে সনাক্ত করা যেত। আমার মনে এই সামনের কাজটি সর্বদা মূল্যবান। আপনি শেষ পর্যন্ত বাগ ঠিক করতে হবে। একমাত্র প্রশ্ন হ'ল এটি আপনাকে কতক্ষণ সময় নেবে।

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

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

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