কীভাবে আপনার নিজের কোডটি পরীক্ষা করে আরও ভাল করবেন


45

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

আমার সংস্থায় আমরা পরীক্ষা-চালিত বিকাশ বা ইউনিট পরীক্ষা করি না। এটি আমাকে অনেক সাহায্য করবে তবে এটি সম্ভবত পরিবর্তিত হবে।

আপনারা বলছেন যে এ থেকে উত্তরণের জন্য আমি কী করতে পারি? আপনার নিজের কোডটি পরীক্ষা করার সময় আপনি কোন পদ্ধতির ব্যবহার করেন?


28
কেবলমাত্র আপনার সংস্থা টিডিডি ব্যবহার করে না বা ইউনিট পরীক্ষার অর্থ এই নয় যে আপনি পারবেন না, যতক্ষণ আপনি আপনার সময়সীমা পূরণ করতে এবং মান কোড তৈরি করে চলেছেন।
থমাস ওয়ানস

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

6
@ ব্রায়ান, আমি মনে করি অন্যেরা বর্তমানে সেগুলি ব্যবহার করছে কিনা তা বিবেচনা না করে আপনার তাদের প্রতিশ্রুতিবদ্ধ হওয়া উচিত। সম্ভবত ভাল অনুশীলন দেখানো অন্যকে অনুসরণ করবে।
ক্যাফগেক

উত্তর:


20

কোডারের কাজ জিনিস তৈরি করা।

পরীক্ষকের কাজ হ'ল জিনিসগুলি ভেঙে ফেলা।

সর্বাধিক কঠিন হ'ল আপনার সবে নির্মিত জিনিসগুলি ভাঙ্গা। আপনি কেবল এই মানসিক বাধা অতিক্রম করেই সফল হতে পারবেন।


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

8
@ ম্যাথো রোদাতাস - কোডার পক্ষের সাথে জড়িত পরীক্ষার পরিমাণ কেবলমাত্র যা কাজ করা উচিত তা কার্যকরভাবে কাজ করে তা যাচাই করা at পরীক্ষকের পক্ষে, লক্ষ্যটি কোডগুলি কাজ করে তা পর্যবেক্ষণ না করে বাগগুলি সন্ধান করা।
মাউভিচিয়াল

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

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

2
@ ডেভ ল্যাসলি - এটি আমার বক্তব্য: আর্কিটেক্ট তার বাড়িটি ছুঁড়ে ফেলার পক্ষে সেরা ব্যক্তি নন: তিনি এর ত্রুটিগুলি দেখতে সক্ষম হওয়ার জন্য কতটা দৃ strong় তা নিয়ে তিনি খুব গর্বিত। কেবলমাত্র অন্য একজন স্থপতি (রাস্তার পাশের লোকটি নয়) বাড়ির উদ্দেশ্যমূলক দৃষ্টি আকর্ষণ করতে পারে এবং এটি জানতে পারে যে বাড়িটি কিছু নির্দিষ্ট অবস্থার মধ্যে ভেঙে যেতে পারে যা পূর্বের স্থপতি কল্পনাও করতে খুব অন্ধ ছিল।
মাউভিচিয়াল

14

ফ্রান্সিসো, আপনি যা বলেছিলেন তার উপর ভিত্তি করে আমি এখানে কিছু অনুমান করাচ্ছি:

"আমরা টিডিডি বা ইউনিট টেস্টও করি না। এটি আমাকে অনেক সাহায্য করবে তবে এটি পরিবর্তিত হবে এমনটা হওয়ার সম্ভাবনা নেই।"

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

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

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

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


11

আপনি যদি সি, অবজেক্টিভ-সি বা সি ++ তে কোড করেন তবে ক্ল্যাং স্ট্যাটিক অ্যানালাইজারটি ব্যবহার করে আপনার উত্সটি চালিত না করেই সমালোচনা করতে পারেন।

কিছু মেমোরি ডিবাগিং সরঞ্জাম উপলব্ধ: ভ্যালগ্র্যান্ড, ম্যাক ওএস এক্সে গার্ড ম্যালোক, * এনআইএক্সে বৈদ্যুতিক বেড়া।

কিছু বিকাশ পরিবেশ ডিবাগিং মেমরি বরাদ্দকারীকে ব্যবহার করার বিকল্প সরবরাহ করে, যা নতুন বরাদ্দকৃত পৃষ্ঠাগুলি এবং আবর্জনা দ্বারা সদ্য মুক্ত পৃষ্ঠাগুলি পূরণ করা, অবিকৃত বিন্দু বিনষ্টকরণ সনাক্তকরণ এবং প্রতিটি হিপ ব্লকের আগে এবং পরে কিছু ডেটা লিখতে পারে, ডিবাগার থাকায় যদি তথ্যের পরিচিত প্যাটার্নটি কখনও পরিবর্তন হয় called

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

প্রতিস্থাপনগুলি ব্যবহার করুন - সি, সি ++ এবং অবজেক্টিভ-সি তে আসক্ত () ম্যাক্রো। যদি আপনার ভাষা কোনও দৃsert় ফাংশন সরবরাহ না করে তবে একটি নিজে লিখুন।

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

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

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

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

(কোনও কারণে আমি কখনই প্রাইভেট ছিলাম না, যদিও বিওএস কোনও অদলবদল ফাইল ছাড়াই চালাতে পারত, এটি সেভাবে অত্যন্ত অস্থির ছিল the বিএফএস ফাইল সিস্টেম লিখেছেন ডমিনিক গিম্পাওলো আমাকে বিন্যাস ছাড়াই কখনও বিওএস না চালানোর আহ্বান জানিয়েছেন I কেন এটি গুরুত্বপূর্ণ তা দেখুন তবে এটি অবশ্যই একরকম বাস্তবায়ন কারুকার্য হয়ে দাঁড়িয়েছিল))

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

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

আপনার অ্যাপ্লিকেশনটিকে ডিবাগারের সাহায্যে বা * এনআইএক্স-তে "কিল -9" দিয়ে হত্যা করার চেষ্টা করুন যখন এটি একটি বড়, গুরুত্বপূর্ণ ফাইলটি লেখার মাঝখানে রয়েছে। যদি আপনার অ্যাপটি ভাল-আর্কিটেটেড থাকে তবে পুরো ফাইলটি লিখিত হয়ে যাবে বা একেবারেই লেখা হবে না, অথবা এটি কেবলমাত্র আংশিকভাবে লিখিত থাকলে কী লিখিত হয় তা ক্ষতিগ্রস্ত হবে না, কোন ডেটা যা সংরক্ষণ করা হয়েছে তা সম্পূর্ণরূপে ব্যবহারযোগ্য হবে ফাইলটি পুনরায় পড়ার পরে অ্যাপ্লিকেশনটি।

ডাটাবেসগুলিতে সর্বদা ত্রুটি-সহনশীল ডিস্ক থাকে I / O, তবে অন্য কোনও অ্যাপ্লিকেশন খুব কমই করে। যখন যাত্রাযুক্ত ফাইল সিস্টেমগুলি বিদ্যুৎ ব্যর্থতা বা ক্রাশের ঘটনায় ফাইল সিস্টেমের দুর্নীতি রোধ করে, তারা দুর্নীতি বা শেষ ব্যবহারকারীর ডেটা হ্রাস রোধ করার জন্য কিছুই করে না। এটি ব্যবহারকারীর অ্যাপ্লিকেশনগুলির দায়িত্ব, তবে ডাটাবেস ব্যতীত অন্য কোনও ফল্ট ফলস-সহনশীলতা প্রয়োগ করে।


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

10

যখন আমি আমার কোডটি পরীক্ষা করে দেখি, আমি সাধারণত চিন্তার প্রক্রিয়াগুলির একটি সিরিজ দিয়ে যাই:

  1. আমি কীভাবে এই "জিনিস" কে টেস্টযোগ্য আকারের অংশগুলিতে ভাঙ্গবো? আমি যা পরীক্ষা করতে চাই ঠিক কীভাবে আমি বিচ্ছিন্ন করতে পারি? আমার কোন স্টাব / উপহাস তৈরি করা উচিত?
  2. প্রতিটি খণ্ডের জন্য: আমি এই খণ্ডটিকে কীভাবে সঠিক ইনপুটগুলির যুক্তিসঙ্গত সেটে সঠিকভাবে প্রতিক্রিয়া জানায় তা পরীক্ষা করতে পারি?
  3. প্রতিটি অংশের জন্য: আমি কীভাবে পরীক্ষা করব যে খণ্ডটি ভুল ইনপুটগুলিতে সঠিকভাবে প্রতিক্রিয়া জানায় (NULL পয়েন্টার, অবৈধ মান)?
  4. সীমানার জন্য আমি কীভাবে পরীক্ষা করব (যেমন মানগুলি স্বাক্ষরিত থেকে স্বাক্ষরিত, 8 বিট থেকে 16 বিট ইত্যাদি)?
  5. আমার পরীক্ষাগুলি কোডটি কতটা ভালভাবে কভার করে? আমি কি কোন শর্ত মিস করেছি? [কোড-কভারেজ সরঞ্জামগুলির জন্য এটি একটি দুর্দান্ত জায়গা]] যদি এমন কোড থাকে যা হারিয়ে যায় এবং কখনই কার্যকর করা যায় না, তবে কী এটির সত্যই সেখানে থাকা দরকার? [এটি সম্পূর্ণ অন্য একটি প্রশ্ন!]

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

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


5

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

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


1
সাইক্লোমেটিক জটিলতার জন্য +1। "আমি সম্ভাব্য সমস্ত পথ অনুসরণ করা সত্যিই কঠিন বলে মনে করি যাতে আমি বাগগুলি খুঁজে পেতে পারি" আমার কাছে বোঝায় যে ওপি কোডটি ছোট, কম জটিল খণ্ডে বিভক্ত হতে পারে।
টবি

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

3

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

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


3

আপনি যদি পছন্দ করেন তবে আপনাকে ইউনিট টেস্টিংয়ের দরকার নেই আমি নিজেই নিজের কোডটি ভাঙার চেষ্টা করার চেয়ে ভাল আর কোনও উপায় দেখতে পাচ্ছি না।

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

ব্যবহারকারীর দৃষ্টিভঙ্গি বিবেচনা করুন । আপনার অ্যাপ্লিকেশন বা ফাংশনগুলির লাইব্রেরি ব্যবহার করবেন এমন একজন ব্যবহারকারী হওয়ার চেষ্টা করুন।


1
ব্যবহারকারীর দৃষ্টিকোণ থেকে জিনিস দেখার জন্য +1।
ম্যাথু রোডাটাস

3

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

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

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

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


2
  • আপনি আপনার কোড লেখার আগে আপনার পরীক্ষা লিখুন।
  • যে কোনও সময় আপনি কোনও বাগটি ঠিক করেন যা পরীক্ষার দ্বারা ধরা পড়ে না, সেই বাগটি ধরার জন্য একটি পরীক্ষা লিখুন।

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


2

অন্যান্য সমস্ত মন্তব্য ছাড়াও, যেহেতু আপনি বলছেন যে আপনার সহকর্মীরা নন-হ্যাপি-পাথ পরীক্ষাগুলি লিখতে ভাল, তাই কেন তাদের কিছু পরীক্ষা লেখার জন্য আপনার সাথে জুড়ি দিতে বলবেন না।

শেখার সর্বোত্তম উপায় হ'ল এটি কীভাবে হয়েছে তা দেখছেন এবং সেখান থেকে আপনি কী শিখেন তা টানতে।


2

ব্ল্যাক বক্স টেস্টিং! আপনার পরীক্ষার কথা মাথায় রেখে আপনার ক্লাস / পদ্ধতি তৈরি করা উচিত। আপনার পরীক্ষাগুলি সফ্টওয়্যারটির নির্দিষ্টকরণের ভিত্তিতে হওয়া উচিত এবং আপনার সিকোয়েন্স ডায়াগ্রামে (ব্যবহারের ক্ষেত্রে) স্পষ্টভাবে সংজ্ঞায়িত করা উচিত।

এখন যেহেতু আপনি পরীক্ষা চালিত বিকাশ করতে চান না ...

সমস্ত আগত ডেটাতে ইনপুট বৈধতা দিন; কাউকে বিশ্বাস করবেন না । নেট ফ্রেমওয়ার্কটি অবৈধ যুক্তি, নাল রেফারেন্স এবং অবৈধ অবস্থার উপর ভিত্তি করে প্রচুর ব্যতিক্রম ছুঁড়েছে। আপনি ইতিমধ্যে ইউআই স্তরতে ইনপুট বৈধতা ব্যবহার করার কথা ভাবেন যাতে এটি মাঝারি ওয়্যারগুলির একই কৌশল।

তবে আপনার সত্যই কিছুটা স্বয়ংক্রিয় পরীক্ষার করা উচিত; এই জিনিস জীবন বাঁচায়।


2

আমার অভিজ্ঞতা

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

ইউএমএল হ'ল আরেক সময় নষ্টকারী। একটি একক হোয়াইটবোর্ড + পেন একই, সস্তা এবং দ্রুত করতে পারে।

বিটিডাব্লু, কোডিংয়ে কীভাবে ভাল হবে (এবং বাগগুলি এড়ানো হবে)?

  • ক) পারমাণবিকতা। একটি ফাংশন যা একটি সাধারণ (বা কয়েকটি একক কাজ) করে। কারণ এটি বোঝা সহজ, এটি ট্র্যাক করা সহজ এবং এটি সমাধান করা সহজ।

  • খ) হোমোলজি। যদি উদাহরণস্বরূপ, আপনি স্টোর পদ্ধতি ব্যবহার করে একটি ডাটাবেস কল করেন তবে বাকী কোডটি করুন।

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

  • d) "পাতলা বরফ" কোড, এমন একটি কোড যা আপনি জানেন যে এটি "ভুল" (বা সম্ভাব্য বিপজ্জনক) তবে তবুও এটির প্রয়োজন রয়েছে, উদাহরণস্বরূপ একটি বহু কার্য প্রক্রিয়াটির জন্য অনিরাপদ কোড। পারলে এড়িয়ে চলুন।

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

  • চ) আপনার কোডে মন্তব্য যুক্ত করুন।

  • ছ) বাগের উত্স হিসাবে ব্যবহারকারী ইনপুট। এটি চিহ্নিত করুন। উদাহরণস্বরূপ, এসকিউএল ইঞ্জেকশনটি কোনও ব্যবহারকারী ইনপুট দ্বারা সৃষ্ট।

  • জ) দলের খারাপ উপাদান চিহ্নিত করুন এবং নির্ধারিত কার্যটি পৃথক করুন। কিছু প্রোগ্রামার কোড স্ক্রু প্রবণ হয়।

  • i) আনসেসারি কোডটি এড়িয়ে চলুন। উদাহরণস্বরূপ, শ্রেণীর যদি ইন্টারফেসের প্রয়োজন হয় তবে এটি ব্যবহার করুন, অন্যথায় অপ্রাসঙ্গিক কোড যুক্ত করা এড়িয়ে চলুন।

ক) এবং খ) কী। উদাহরণস্বরূপ, একটি সিস্টেমে আমার সমস্যা ছিল, যখন আমি একটি বোতামে ক্লিক করি (সংরক্ষণ করুন) এটি ফর্মটি সংরক্ষণ করে না। তারপরে আমি একটি চেকলিস্ট করেছি:

  • বোতামটি কাজ করে? ... হ্যাঁ
  • ডাটাবেস স্টোর কিছু ?. না, তাই ত্রুটিটি একটি মাঝারি পদক্ষেপে ছিল।
  • তারপরে, ডাটাবেসে থাকা ক্লাসটি কাজ করে ?. না <- ঠিক আছে, আমি ত্রুটিটি পেয়েছি। (এটি ডাটাবেসের অনুমতি নিয়ে সম্পর্কিত ছিল)। তারপরে আমি কেবল এই প্রক্রিয়াটিই নয় তবে প্রতিটি পদ্ধতি যা একই কাজ করে তা পরীক্ষা করে দেখি (কারণ কোডের হোমোলজি)। বাগটি ট্র্যাক করতে আমার 5 মিনিট সময় লেগেছে এবং এটি সমাধান করতে 1 মিনিট লেগেছে (এবং অন্যান্য অনেকগুলি বাগ)।

এবং একটি সিডনোট

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


2

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

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

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

  1. ডিবাগিং ; কোডটিতে ব্রেকপয়েন্টগুলি সেট করুন এবং অ্যাপ্লিকেশনটি চালান। আপনি একবার ব্রেকপয়েন্টে চাপ দিলে অ্যাপ্লিকেশনটির সাথে যোগাযোগ করার সাথে সাথে লাইনগুলি সরাতে হবে।
  2. স্বয়ংক্রিয় পরীক্ষা ; কোড লিখুন যা আপনার কোড পরীক্ষা করে। এটি কেবলমাত্র ইউআই এর নীচে স্তরগুলিতে সহায়তা করে।
  3. আপনার পরীক্ষকগণকে জানুন ; তারা আপনার চেয়ে অ্যাপ্লিকেশনটি আরও ভালভাবে জানতে পারে, তাই তাদের কাছ থেকে শিখুন। আপনার অ্যাপ্লিকেশনটির দুর্বলতাগুলি কী এবং বাগগুলি খুঁজে পেতে তারা কী কৌশল ব্যবহার করে তা জিজ্ঞাসা করুন।
  4. আপনার ব্যবহারকারীদের জানুন ; আপনার ব্যবহারকারীদের জুতা হাঁটা শিখুন। কার্যকরী প্রয়োজনীয়তাগুলি হ'ল আপনার ব্যবহারকারীদের ফিঙ্গারপ্রিন্ট। আপনার ব্যবহারকারীরা প্রায়শই অ্যাপ্লিকেশন সম্পর্কে জানেন যা কার্যকরভাবে প্রয়োজনীয়তার মধ্যে পরিষ্কারভাবে না আসে। আপনি যেমন আপনার ব্যবহারকারীদের আরও ভাল বুঝতে পারবেন - আসল বিশ্বে তাদের কাজের প্রকৃতি এবং আপনার অ্যাপ্লিকেশনটি কীভাবে তাদের সহায়তা করবে - আপনি অ্যাপ্লিকেশনটি কী বলে মনে করা হচ্ছে তা আপনি আরও ভাল করে বুঝতে পারবেন।

2

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

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

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

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