কোডটির পরীক্ষা লিখছি যার উদ্দেশ্য আমি বুঝতে পারি না


59

আমি সম্প্রতি একটি ব্ল্যাক-বাক্স রিফ্যাক্টরিং সম্পন্ন করেছি। আমি এটি পরীক্ষা করতে অক্ষম, কারণ এটি কীভাবে পরীক্ষা করতে হয় তা আমি কাজ করতে পারি না।

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

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

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

এখানে আরও ভাল আক্রমণ আছে?


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

11
@ জ্যাকোব্রাইহলে এটি ডিগ্রি সম্পন্ন স্টাফদের জন্য আমি কখনও স্পর্শ করি নি এমন একটি বিশেষায়িত প্রোগ্রাম। আমি যেতে যেতে প্রসঙ্গটি বাছাই করছি, তবে আমার শুরু করার আগে একটি দৃ understanding় বোঝার জন্য অপেক্ষা করা কেবল ব্যবহারিক নয়।
জেটিএম

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

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

3
তুমি কি জিজ্ঞেস করতে পারি / এটি কেউ দ্বারা পর্যালোচনা পেতে আছে কি করে বুঝবে?
pjc50

উত্তর:


122

আপনি ভাল করছেন!

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

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

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

  1. "বাইরে থেকে" কোডটি বোঝার জন্য,
  2. রিগ্রেশন পরীক্ষা লিখুন,
  3. রিফ্যাক্টর, যা কোডটির অভ্যন্তরগুলির আরও ভাল বোঝার দিকে পরিচালিত করে

21
নিখুঁত উত্তর, ঠিক ঠিক "লিগ্যাসি কোডের সাথে কাজ করা" বইয়ে বর্ণিত হয়েছে
আলটায়ার

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

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

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

2
@ নোকমপ্রেন্ডে, এটি মজার বিষয় যে আমি গত সপ্তাহে একটি বৈধ বৈজ্ঞানিক ফোরট্রান code code কোড দিয়ে সেই সঠিক কাজটি করেছি। কোনও ফাইলের মধ্যে এসকিআই ডেটা প্রিন্টিং যুক্ত করুন, ইনপুট এবং প্রত্যাশিত আউটপুট দিয়ে পরীক্ষা ডিরেক্টরিগুলি সেট আপ করুন, এবং আমার পরীক্ষার কেস আউটপুট দুটি সেটগুলির মধ্যে কেবল একটি পৃথক ছিল। যদি তারা চরিত্রের জন্য চরিত্রের সাথে মেলে না, আমি কিছু ভেঙে দিয়েছি। কোডটি যখন বেশিরভাগ দুটি সাবরুটাইন যা প্রতিটি ২-৩ কেও এলওসি থাকে, আপনাকে কোথাও শুরু করতে হবে।
গড্রিক

1

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

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

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


1
যেকোন ধরণের তথ্য ফ্লাইং ব্লাইন্ডের চেয়ে ভাল। আমি ক্র্যাশ ডাম্প ফাইল (ইউনিক্স) এ ডিবাগারটি আহ্বান করে এবং স্ট্যাকের সন্ধানের জন্য জিজ্ঞাসা করে সার্ভার প্রোগ্রামগুলিতে বাগগুলি সনাক্ত করতে ব্যবহৃত হয়েছিল production এটি আমাকে ফাংশনটির নাম দিয়েছে যেখানে ত্রুটি ঘটেছে। এমনকি অন্য কোনও জ্ঞান না থাকলেও (আমি এই ডিবাগারটি কীভাবে ব্যবহার করতে পারি তা জানতাম না) এটি অন্যথায় কী রহস্যজনক এবং অপ্রতিরোধ্য পরিস্থিতি হতে পারে তাতে সহায়তা করেছিল।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.