ইউনিট পরীক্ষা প্রতিযোগিতা


12

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

আমরা প্রতিটি পরীক্ষার ক্ষেত্রে পয়েন্ট বরাদ্দ করছিলাম। সুতরাং আপনি যদি এইভাবে একটি ইউনিট পরীক্ষা লিখেন ...

for (int i = 0; i < 100; i++) {
  assertTrue(i*i, square(i));
}

আপনি 100 পয়েন্ট দেওয়া হবে। স্পষ্টতই এটি একটি সরল উদাহরণ, তবে এটি প্রতিটি পরীক্ষার ক্ষেত্রে "পয়েন্ট" নির্ধারণ করে সমস্যাগুলি দেখায়।

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

এই প্রতিযোগিতার বিজয়ী কীভাবে আমরা আরও ভালভাবে নির্ধারণ করতে পারি সে সম্পর্কে কারও কি কোনও পরামর্শ রয়েছে?

সম্পাদন করা

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

সম্পাদন করা

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


বেশ না। আমি এটি শুরু থেকেই উপলব্ধি করেছি
শান

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

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

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

1
আমি থমাসের সাথে আছি ... বিজয়ীর কোড বেইজ / গ্রাহক হওয়া উচিত কারণ কোডের মান উন্নত হয়েছিল। ইউনিট পরীক্ষাগুলির কোড কভারেজের ভিত্তিতে সামগ্রিক / গোষ্ঠী লক্ষ্য সেট করুন ... বর্তমান বা যা কিছু হোক তার চেয়ে বেশি + 5%। ... এবং পুরষ্কারের জন্য সিস্টেমটি খেলবেন না ... একটি কাজের ভাল যা ঘটেছিল তা তার নিজের পুরষ্কার?
JeffC

উত্তর:


15

এই প্রতিযোগিতার বিজয়ী কীভাবে আমরা আরও ভালভাবে নির্ধারণ করতে পারি সে সম্পর্কে কারও কি কোনও পরামর্শ রয়েছে?

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

বোনাস হিসাবে, আপনি আপনার সমস্ত পরীক্ষার পিয়ার পর্যালোচনা পাবেন।


2
এটা আমার চিন্তা ছিল। পরীক্ষাগুলির মান পরিমাপ করার উপায় নেই।
এরিক কিং

2
হ্যাঁ, "ভাল টেস্টিং" এমন একটি বিষয়গত বিষয় যা বিচারক বা সম্মানিত কর্তৃপক্ষ দ্বারা বিবেচনা করা উচিত। মেট্রিক্স তাড়া করে কেবল প্রচুর অপচয় এবং অল্প মূল্য আসবে। একাধিক পুরষ্কার পাওয়া আকর্ষণীয় হতে পারে: সর্বাধিক কল্পনাপ্রসূত পরীক্ষা, "টেস্টিং যা আগে অস্ট্রেলীয় হিসাবে বিবেচিত কিছু" পুরষ্কার, সেরা পারফরম্যান্স পরীক্ষা, সর্বাধিক কার্যকর পরীক্ষা, সবচেয়ে অস্পষ্ট পরীক্ষা, ক্লিভারেস্ট টেস্ট, সর্বাধিক মূল্যবান পরীক্ষা, পরীক্ষা সম্ভবত শেষ ব্যবহারকারীদের দ্বারা প্রশংসা হওয়ার সম্ভাবনা রয়েছে ...
টিমডে

6

সুতরাং আপনি যদি এইভাবে একটি ইউনিট পরীক্ষা লিখেন ...

for (int i = 0; i < 100; i++) {
 assertTrue(i*i, square(i));
}

আপনি 100 পয়েন্ট দেওয়া হবে।

আমি এই ব্যক্তিকে 0 পয়েন্ট দেব (এমনকি যদি পরীক্ষাটি আসলে প্রাসঙ্গিক কোনও কিছুর পরীক্ষা করছিল), কারণ একটি লুপের মধ্যে থাকা দৃ .়তাগুলি কিছুটা বোধগম্য করে এবং একাধিক সংস্থার (বিশেষত একটি লুপ বা মানচিত্রের আকারে) সাথে কাজ করা কঠিন।

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

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

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

  1. ব্যবহার যুগল পর্যালোচনা পরীক্ষার জন্য এবং অনুরূপ কিছু আছে মিনিটে প্রতি WTFs সংখ্যা মেট্রিক।

  2. বাগের সংখ্যার উপর সময়ের সাথে সাথে এই পরীক্ষাগুলির প্রভাব পরিমাপ করুন । এর বিভিন্ন সুবিধা রয়েছে:

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

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


1
শূন্য পয়েন্টের জন্য +1। অন্যান্য আপত্তি হবে এএএ - সাজান, আইন, দৃsert়তা; প্যারামিটারাইজড টেস্ট; বাস্তবায়নের কোডের কোনও অনুলিপি নেই ...
থিপ্যাকার

5

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

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

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

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

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


2
প্রতিশ্রুতিবদ্ধ শোনায় ... তবে তারপরে "সিস্টেম গেমিং" আচরণ নিজেকে পরের টেস্ট প্রতিযোগিতায় "আবিষ্কার" করার জন্য কেবলমাত্র পরিচিত বাগগুলির একটি দুর্দান্ত সংগ্রহ তৈরি করে তোলে
টিমডে

3
একটি বিকল্প হ'ল কেবল কোডে থাকা বাগের জন্য পয়েন্ট পুরস্কার দেওয়া যা অন্য কেউ লিখেছিল।
সেল স্কেগস


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

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