আপনি ইউনিট পরীক্ষা ইউনিট কিভাবে করবেন? [বন্ধ]


89

আমি এমভিসিএসটোরফ্রন্ট অ্যাপে রব কনারিজের ওয়েবকাস্টগুলি দেখছিলাম এবং আমি লক্ষ্য করেছি যে তিনি এমনকি সবচেয়ে জাগতিক বিষয়গুলিরও পরীক্ষা করছেন, যেমন:

public Decimal DiscountPrice
{
   get
   {
       return this.Price - this.Discount;
   }
}

যেমন একটি পরীক্ষা হবে:

[TestMethod]
public void Test_DiscountPrice
{
    Product p = new Product();
    p.Price = 100;
    p.Discount = 20;
    Assert.IsEqual(p.DiscountPrice,80);
}

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

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

অতিরিক্তভাবে, আপনার ইউনিট পরীক্ষাটি ব্যর্থতার আরেকটি বিষয়:

[TestMethod]
public void Test_DiscountPrice
{
    Product p = new Product();
    p.Price = 100;
    p.Discount = 20;
    Assert.IsEqual(p.DiscountPrice,90);
}

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

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

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

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

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


4
অনেক ক্ষেত্রে ইউনিট পরীক্ষাটি হ'ল নকল, এবং ডকুমেন্টেশনও!
স্টিভেন এ। লো

32
... এবং তারপরে ইউনিট পরীক্ষা ইউনিটের পরীক্ষা ইউনিটের পরীক্ষা ... তবে ইউনিট what 4 পরীক্ষা এবং ইউনিট ^ 5 পরীক্ষা ... আআআআআআআআআআআআআআহহহহহহ!
dacracot

14
কোনও ধরণের পরীক্ষার পরিমাণই আপনাকে ভুল স্পেসিফিকেশন থেকে রক্ষা করবে না।
বিল

4
হাতের তালি বাজানোর মতো শব্দ শুনে অন্য কেউ কি শুনলেন?
জিনোভাইস

9
আমি মনে করি উপযুক্ত উদ্ধৃতিটি "এটি পুরো পথটি কচ্ছপ মাত্র" "
কুইন টেলর

উত্তর:


63

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

দ্বিতীয়ত, আপনি সাবরোটাইনগুলিতে পরীক্ষাগুলি ভাঙ্গতে পারেন যা সেগুলি পরে পরীক্ষা করা যেতে পারে। আপনার যখন 20 টি অনুরূপ পরীক্ষা করা হয়, একটি (পরীক্ষিত) সাবরুটিন তৈরি করার অর্থ আপনার প্রধান পরীক্ষাটি হ'ল সাব্রোটিনের 20 টি সাধারণ অনুরোধ যা সঠিক হওয়ার সম্ভাবনা বেশি।

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


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

4
এজন্য আপনি প্রতিটি স্তর পৃথকভাবে পরীক্ষার জন্য মক অবজেক্টগুলি ব্যবহার করছেন।
টুন ক্রিজিথ

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

16
@ জোনাথন - না, আপনি আত্মবিশ্বাস অর্জন করেছেন যে আপনার কোডটি কাজ করে - ধরে নিয়ে আপনি কমপ্লেক্সঅজেক্টের ইন্টারফেসে পৌঁছেছেন এবং সেই ইন্টারফেসের বিরুদ্ধে পর্যাপ্তভাবে পরীক্ষিত হয়েছেন। সবচেয়ে খারাপ, আপনি এই জ্ঞান অর্জন করেছেন যে কমপ্লেক্সঅবজেক্ট সম্পর্কে আপনার অনুধাবনটি আপনার প্রত্যাশা মতো নয়।
tvanfosson

9
@ ফ্লাইওয়াত: আইএমকডকম্পলক্সঅবজেক্ট সম্পর্কে আপনার মন্তব্যের জবাবে আমি অন্য উত্তরের উপর ক্রোয়াশের মন্তব্যটির উদ্ধৃতি দিয়েছিলাম: "আপনি যা পরীক্ষা করার চেষ্টা করছেন তা আপনি বিদ্রূপ করেন না, আপনি যা পরীক্ষা করার চেষ্টা করছেন না তা নিয়ে মশকরা করেন।"
ব্রায়ান

39

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

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

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

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

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

[সম্পাদনা সম্পর্কিত: আমি মনে করি এটি অনিবার্য যে একটি ভুল স্পেসিফিকেশন ব্যর্থতার একটি বিন্দু। অ্যাপটি কী করার কথা আপনি যদি জানেন না, তবে এটি এটি না করার সম্ভাবনা রয়েছে। তবে অনুমানটিকে প্রতিবিম্বিত করতে টেস্টগুলি লেখার ফলে এই সমস্যাটি বাড়বে না, এটি কেবল এটি সমাধান করতে ব্যর্থ। সুতরাং আপনি ব্যর্থতার নতুন পয়েন্টগুলি যুক্ত করছেন না, আপনি কেবল ওয়াফেল ডকুমেন্টেশনের পরিবর্তে কোডের বিদ্যমান ত্রুটিগুলি উপস্থাপন করছেন ]


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

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

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

4
খুব আকর্ষণীয় উত্তর।
পিটার

22

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

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

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

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


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

@ অ্যান্ডি: আপনাকে নিজের তুলনা পদ্ধতিটি আলাদাভাবে পরীক্ষা করতে হবে। একবার আপনি এটির পুরোপুরি পরীক্ষা করে নেওয়ার পরে, আপনি অন্যান্য পরীক্ষায় এটির উপর নির্ভর করতে পারেন।
বিল করুন

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

11

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

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

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

[সম্পাদনা]

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


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

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

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

@ কাওয়াশ - আপনার মন্তব্যটি আমার উত্তরে কীভাবে প্রযোজ্য তা আমি নিশ্চিত নই। আমি বিদ্রূপের কথা উল্লেখ করিনি ... এবং আমি আপনার পর্যবেক্ষণের সাথে একমত।
tvanfosson

@ ট্যাননফসন - আমার শেষ মন্তব্যটি @ ফ্লাইওয়াত "" বিধিটিকে অপ্রয়োজনীয় হিসাবে বিদ্রূপ করার প্রতিক্রিয়া হিসাবে জানিয়েছিল। " দুঃখিত আমি নির্দিষ্ট করতে ভুলে গেছি।
cwash

10

একটি পরীক্ষা কিভাবে পরীক্ষা করে ? মিউটেশন টেস্টিং একটি মূল্যবান কৌশল যা আমি ব্যক্তিগতভাবে আশ্চর্যজনকভাবে ভাল প্রভাবের জন্য ব্যবহার করেছি। আরও তথ্যের জন্য লিঙ্কিত নিবন্ধ এবং আরও বেশি একাডেমিক রেফারেন্সের লিঙ্কগুলি পড়ুন তবে সাধারণভাবে এটি আপনার উত্স কোডটি পরিবর্তন করে "উদাহরণস্বরূপ" x + = 1 "থেকে" x - = 1 "পরিবর্তন করে" আপনার পরীক্ষাগুলি পরীক্ষা করে "এবং তারপরে কমপক্ষে একটি পরীক্ষা ব্যর্থ হয় তা নিশ্চিত করে আপনার পরীক্ষাগুলি পুনরায় চালিত করা। পরীক্ষার ব্যর্থতা না ঘটায় এমন কোনও মিউটেশন পরবর্তী তদন্তের জন্য চিহ্নিত করা হয়েছে।

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


4
+1 আকর্ষণীয় ধারণা যা আমি এখনও শুনিনি
উইম কয়েনেন

9

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

এই প্রক্রিয়াটিকে কঠোরভাবে অনুসরণ করার সময়, সমস্ত 'ইউনিট' 'ইউনিট পরীক্ষাগুলি তৈরি করছে এমন সুরক্ষা নেট দ্বারা সুরক্ষিত, এমনকি সবচেয়ে জাগতিক।

Assert.IsEqual(p.DiscountPrice,90);

পরীক্ষাটি সেই দিকে বিকশিত হওয়ার কোনও কারণ নেই - বা আমি আপনার যুক্তিতে কিছু অনুপস্থিত। যখন দাম 100 এবং ছাড় 20 হয়, তখন ছাড়ের দাম 80 হয় This এটি কোনও আক্রমণকারীের মতো।

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


লাল - সবুজ - রিফ্যাক্টর - এটি টিডিডি প্রক্রিয়াটির সারাংশ মনে রাখা।

রেড বোঝায় JUnit বার লাল একটি পরীক্ষা ব্যর্থ।

সব পরীক্ষা যখন পাস হয় তখন সবুজ হল জুনিত প্রগতি বারের রঙ।

সবুজ শর্তে রিফ্যাক্টর : যে কোনও দ্বৈতকরণ সরিয়ে ফেলুন, পাঠযোগ্যতার উন্নতি করুন।


এখন "কোডের উপরে 3-4 স্তরগুলি" সম্পর্কে আপনার বক্তব্যকে সম্বোধন করার জন্য, এটি প্রথাগত (জলপ্রপাতের মতো) প্রক্রিয়াতে সত্য, যখন উন্নয়ন প্রক্রিয়াটি চৌকস হয় না। এবং চৌকস হ'ল বিশ্ব যেখানে টিডিডি আসছে; এক্সডিট্রিম প্রোগ্রামিংয়ের মূল ভিত্তি টিডিডি ।

চতুরতা প্রাচীরের নথির চেয়ে বেশি নথির চেয়ে সরাসরি যোগাযোগ সম্পর্কে about


8

যদিও আমি সবাই ইউনিট পরীক্ষার জন্য আছি, আমি মাঝে মাঝে অবাক হই যে পরীক্ষার প্রথম বিকাশের এই ফর্মটি সত্যিই উপকারী কিনা ...

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

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

... [আমি] সত্যিকারের প্রক্রিয়া নয়, আপনার কোডের (ব্যবসায়িক অনুরোধ, প্রয়োজনীয় কাগজপত্র, আর্কিটেকচার ডকুমেন্ট) এর উপরে আপনার 3-4 স্তর রয়েছে, যেখানে প্রকৃত সংজ্ঞায়িত ব্যবসায়ের নিয়ম (ছাড়ের মূল্য মূল্য - ছাড়) ভুল অপছন্দকৃত হতে পারে। যদি এমন অবস্থা হয় তবে আপনার ইউনিট পরীক্ষাটি আপনার কাছে কিছুই বোঝায় না।

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

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

অতিরিক্তভাবে, আপনার ইউনিট পরীক্ষাটি ব্যর্থতার আরেকটি বিষয় ...

একটি সফল পরীক্ষা হ'ল এটি সিস্টেমের ব্যর্থতা প্রদর্শন করে। একটি ব্যর্থ পরীক্ষা আপনাকে পরীক্ষার যুক্তিতে বা আপনার সিস্টেমের যুক্তিতে কোনও ত্রুটি সম্পর্কে সতর্ক করবে। আপনার পরীক্ষাগুলির লক্ষ্য হ'ল আপনার কোডটি ভঙ্গ করা বা একটি দৃশ্যের কাজ প্রমাণ করা।

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

আমরা এখানে কি লাভ?

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

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

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

[আমি] চ ছাড়ের মূল্যটি ভুল, পরীক্ষা দল এখনও বিষয়টি খুঁজে পাবে, ইউনিট টেস্টিং কোনও কাজ কীভাবে বাঁচিয়েছিল?

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

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

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

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

একটি দম্পতি লোক উল্লেখ করে রাখে যে পরীক্ষাটি অনুমানটিকে কার্যকর করতে সহায়তা করে। আমার অভিজ্ঞতা হয়েছে যে অনুমানটিও ভুল হয়েছে, প্রায়শই না ...

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

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


7

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

পরীক্ষার প্রচেষ্টা কীভাবে মূল্যবান হতে চলেছে? আমার অভিজ্ঞতায় কমপক্ষে চারটি উপায়ে, কমপক্ষে পরীক্ষা চালিত বিকাশ করার সময়:

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

5

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

যদি নিয়ম পরিবর্তন হয়, পরীক্ষা ব্যর্থ হবে এবং এটি একটি ভাল জিনিস। সুতরাং আপনাকে এই ক্ষেত্রেও পরীক্ষাটি পরিবর্তন করতে হবে।

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

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


4

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


এটি আমার কোনও চিন্তার সমাধান করে না। আমি টিডিডির প্রাথমিক মন্ত্রটি বুঝতে পারি ... আমি কোনও লাভ দেখছি না।
ফ্লাইওয়াত

4

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


3

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

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

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


3

আমি আপনার বক্তব্যটি দেখতে পাচ্ছি, তবে এটি স্পষ্টতই উর্ধ্বমুখী।

আপনার যুক্তিটি মূলত: টেস্টগুলি ব্যর্থতার পরিচয় দেয়। সুতরাং পরীক্ষাগুলি খারাপ / সময় নষ্ট করে।

যদিও এটি কিছু ক্ষেত্রে সত্য হতে পারে, এটি সম্ভবত সংখ্যাগরিষ্ঠ।

টিডিডি ধরে নেয়: আরও পরীক্ষা = কম ব্যর্থতা।

টেস্টগুলি তাদের পরিচয় করিয়ে দেওয়ার চেয়ে ব্যর্থতার পয়েন্ট ধরার সম্ভাবনা বেশি।


1

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

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

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


1

আমি এই প্রশ্নের জবাব দেওয়ার একটি ভাল উপায় সম্পর্কে কিছুটা ভেবেছি এবং বৈজ্ঞানিক পদ্ধতির সমান্তরাল আঁকতে চাই। আইএমও, আপনি এই প্রশ্নটি পুনরায় জবাব দিতে পারেন, "আপনি কীভাবে একটি পরীক্ষা নিরীক্ষা করেন?"

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

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

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


1

পরীক্ষা লেখার সময় আপনাকে সঠিক দৃষ্টান্ত ব্যবহার করতে হবে use

  1. প্রথমে আপনার পরীক্ষাগুলি লিখে শুরু করুন।
  2. নিশ্চিত করুন যে তারা শুরু করতে ব্যর্থ হয়েছে।
  3. তাদের পাস করুন।
  4. আপনার কোড চেক করার আগে কোড পর্যালোচনা (পরীক্ষাগুলি পর্যালোচনা করা হয়েছে তা নিশ্চিত করুন))

আপনি সর্বদা নিশ্চিত হন না তবে তারা সামগ্রিক পরীক্ষাগুলির উন্নতি করে।


0

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

উন্নয়নের পর্যায়ে সমস্যা সমাধানের চেয়ে উত্পাদনে বাগ ঠিক করা অনেক বেশি ব্যয়বহুল। পার্শ্ব-প্রতিক্রিয়া হিসাবে, গ্রাহকদের বহনের কারণে আপনি আয় হারাবেন। 1 জন ক্রুদ্ধ গ্রাহকের জন্য আপনি 11 হারানো বা অর্জিত গ্রাহককে গণনা করতে পারেন।

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