আমরা কীভাবে ইউনিট পরীক্ষা দ্রুত চালাতে পারি?


40

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

আমি বিশ্বাস করি যে এই সমস্যাটি প্রায় 120 টি প্রকল্পে বেড়েছে (আমরা সাধারণত অনেক ছোট প্রকল্প করি এবং এটি ঠিক দ্বিতীয়বারের মতো আমরা সঠিকভাবে টিডিডি করি) এবং বিল্ড + পরীক্ষার সময়টি প্রায় দুই-তিন মিনিটের মধ্যে বেড়েছে believe কম মেশিনে।

আমরা কীভাবে পরীক্ষার রান সময় কম করব? কৌশল আছে? আরও জাল? কম জাল? সমস্ত পরীক্ষা চালানোর সময় বড় ইন্টিগ্রেশন টেস্টগুলি স্বয়ংক্রিয়ভাবে চালানো উচিত নয়?

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


8
ভাল হার্ডওয়্যার পাবেন? হার্ডওয়্যার প্রোগ্রামার সময়ের তুলনায় সস্তা।
ব্রায়ান ওকলে

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

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

13
অভিশাপ, আমি আশা করি আমাদের পরীক্ষাগুলি মাত্র ২-৩ মিনিট ছিল were আমাদের সমস্ত ইউনিট পরীক্ষা চালাতে, এটি 25 মিনিট সময় নেয় - এবং আমাদের কাছে এখনও কোনও সংহতকরণ পরীক্ষা নেই।
ইজকাটা

4
2 থেকে 3 মিনিট? বলছোটা। আমাদের ঘন্টা চলতে পারে ...
ফ্রিজেন মটর রডি

উত্তর:


51

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

যখন নতুন কোডটি লিখতে হবে তখন প্রদত্ত বিকাশকারীরা সংগ্রহস্থলে যা কিছু করছে তার জন্য একটি শাখা তৈরি করবে। সমস্ত শাখায় এই শাখায় কাজ করা হবে এবং কোডের মূল লাইনটি গণ্ডগোল না করে যে কোনও সময় তারা শাখায় তাদের পরিবর্তনগুলি সম্পাদন করতে পারে।

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

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

এই জাতীয় একটি সেটআপ করার একটি উপায় সম্পর্কে দুর্দান্ত গাইড এখানে পাওয়া যাবে (গিট নির্দিষ্ট তবে অন্যান্য সংস্করণ নিয়ন্ত্রণ সিস্টেমের জন্য কাজ করা উচিত): http://nvie.com/posts/a-successful-git-branching-model/


15
এই. ডেভেলপারদের "তাদেরকে (ইউনিট পরীক্ষা) একটি চেক করার আগে চলমান সঙ্গে বিরক্ত বন্ধ করে", তাহলে আপনি চান আপনার সি আই সেটআপ তাদের চলমান করা পর একটি চেক।
Carson63000

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

ব্রাঞ্চিং পদ্ধতিটি কি টিএফএসের সাথে কাজ করবে? আমরা টিএফএস সহ সি # লিখি এবং টিএফএসে শাখা প্রশাখা গিটের চেয়ে কম বন্ধুত্বপূর্ণ। আমি বিশ্বাস করি যে এই ধারণাটি এমনকি প্রত্যাখ্যাত হবে কারণ আমরা কখনই শাখা করি না।
জিভ

টিএফএসের সাথে কাজ করার আমার কোনও ব্যক্তিগত অভিজ্ঞতা নেই; : কিন্তু, আমি যা পোস্টে এক একটি simlilar শাখাবিন্যাস কৌশল দেন বলে মনে হয় Microsoft থেকে এই সহায়িকার জুড়ে আসা করতে সক্ষম হন msdn.microsoft.com/en-us/magazine/gg598921.aspx
মাইক

33

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

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


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

2
আপনার সঠিক যে এগুলি ইন্টিগ্রেশন পরীক্ষা বলে মনে হচ্ছে।
টম স্কুয়ার্স

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

6
@ রুং - দুঃখিত, আমি বুলশিট কল করি। আমার প্রাপ্ত মেট্রিকটি আমার কাছে উপলব্ধ দুটি পৃথক পেশাদার প্রকল্প চালানো থেকে শুরু করে: একটিতে ~ 300 টি পরীক্ষা, একটি ~ 30000 পরীক্ষা এবং পরীক্ষার রানটাইমের দিকে তাকানো। <1000 পরীক্ষার জন্য 2-3 মিনিটের সময় নেওয়া একটি পরীক্ষার স্যুটটি অত্যাচারজনক এবং পরীক্ষাগুলি পর্যাপ্তভাবে বিচ্ছিন্ন নয় এমন একটি চিহ্ন।
তেলস্তিন

2
@ রুংটি টেলাস্টিনের মতো একই শিরাতে, এখানে আমার কাছ থেকে একটি তথ্য পয়েন্ট রয়েছে: এমনকি বেশ কয়েকটি বৃহত্তর-আদর্শ পরীক্ষাগুলি সহ, পরীক্ষার কাঠামো ( py.test) ব্যাকগ্রাউন্ডে অনেকগুলি যাদু করছে এবং সমস্ত কিছুই পাইথন কোড ("100x) হচ্ছে সি "এর চেয়ে ধীর গতির), আমার একটি প্রকল্পে সার্কা 500 টি পরীক্ষা চালানো কয়েক বছরের পুরানো, ধীর নেটবুকের চেয়ে 6 সেকেন্ডেরও কম সময় নেয়। এই চিত্রটি পরীক্ষার সংখ্যাতে প্রায় লিনিয়ার; কিছু স্টার্ট-আপ ওভারহেড থাকাকালীন, এটি সমস্ত পরীক্ষার উপরে সাদৃশ্যযুক্ত এবং প্রতি পরীক্ষার ওভারহেড ও (1) হয়।

16

অনুরূপ সমস্যা সমাধানের জন্য আমি বেশ কয়েকটি পদ্ধতি ব্যবহার করেছি:

  1. মৃত্যুদন্ড কার্যকর করার সময় পরীক্ষা করুন, এবং সবথেকে ধীরতম পরীক্ষাগুলি সন্ধান করুন এবং তারপরে তারা কার্যকর করতে এত সময় কেন নেয় তা বিশ্লেষণ করুন
  2. আপনার 100 টি প্রকল্প রয়েছে, আপনি কি প্রতিবার সেগুলি তৈরি এবং পরীক্ষার প্রয়োজন নেই? আপনি কি কেবলমাত্র রাতের বেলায় সমস্ত ইউনিটস্টেট চালাতে পারবেন? প্রতিদিনের ব্যবহারের জন্য বেশ কয়েকটি 'দ্রুত' বিল্ড কনফিগারেশন তৈরি করুন । সিআই সার্ভার আপনার বর্তমান উন্নয়ন প্রক্রিয়ার 'হট' অংশগুলির সাথে সম্পর্কিত ইউনিটেটস প্রকল্পগুলির সীমিত সেটগুলি সম্পাদন করবে ।
  3. আপনি যা কিছু করতে পারেন তা মক করুন এবং আলাদা করুন , যখনই সম্ভব এটি ডিস্ক / নেটওয়ার্ক I / O এড়িয়ে চলুন
  4. যখন এই জাতীয় ক্রিয়াকলাপগুলি বিচ্ছিন্ন করা সম্ভব হয় না, তখন আপনার কি সংহতকরণ পরীক্ষা হতে পারে? আপনি কি কেবল রাতের বিল্ডগুলিতে একীকরণ পরীক্ষার সময়সূচী করতে পারেন ?
  5. সমস্ত অনিয়মিত সিঙ্গেলনগুলি পরীক্ষা করুন, যা দৃষ্টান্ত / সংস্থানগুলিতে রেফারেন্স রাখে এবং মেমরি গ্রাস করে, এটি সমস্ত পরীক্ষা চালানোর সময় কর্মক্ষমতা হ্রাস পেতে পারে।

আপনার জীবন দু'টিকে সহজতর করার জন্য এবং পরীক্ষাগুলি দ্রুত চালানোর জন্য আপনি নিম্নলিখিত সরঞ্জামগুলি ব্যবহার করতে পারেন

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

12

আপনার প্রোগ্রামারদের কথা শুনুন।

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

1. আপনার পরীক্ষাগুলি 100% নির্ভরযোগ্য করুন।

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

২. সমস্ত পরীক্ষাগুলি সমস্ত সময় অতিক্রম করে তা নিশ্চিত করার জন্য আপনার সিস্টেমগুলি পরিবর্তন করুন।

কেবল পাসিং কমিটগুলি মূল / অফিসিয়াল / রিলিজ / যে কোনও শাখায় মিশে যায় তা নিশ্চিত করার জন্য অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেমগুলি ব্যবহার করুন।

৩. আপনার সংস্কৃতিকে ১০০% উত্তীর্ণ পরীক্ষার মান হিসাবে পরিবর্তন করুন।

পাঠ শিখান যে কোনও পরীক্ষা 100% পরীক্ষা পাস না হওয়া অবধি কোনও কাজ "সম্পন্ন" হয় না এবং এটি মূল / আধিকারিক / রিলিজ / যে কোনও শাখায় মিশে যায়।

৪. দ্রুত পরীক্ষা করুন।

আমি এমন প্রকল্পগুলিতে কাজ করেছি যেখানে পরীক্ষাগুলি দ্বিতীয় হয় এবং যে প্রকল্পগুলিতে তারা সারাদিন নেয়। পরীক্ষা চালানো সময় এবং আমার উত্পাদনশীলতার মধ্যে একটি দৃ corre় সম্পর্ক রয়েছে lation

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

এমন পরীক্ষাগুলি কল্পনা করুন যা এতো দ্রুত চলে যে আপনি প্রতিবার সংকলন করার সময় আপনি সেগুলি স্বয়ংক্রিয়ভাবে চালাতে আপত্তি করবেন না।

দ্রুত পরীক্ষা করা কঠিন হতে পারে (ওপি এটিই বলেছে, ঠিক!) ডিকোপলিং কী। মক / জাল ঠিক আছে, তবে আমি মনে করি আপনি মক / ফেকগুলি অপ্রয়োজনীয় করে তুলতে রিফ্যাক্টর করে আরও ভাল করতে পারবেন। Http://arlobelshee.com/post/the-no-mocks-book দিয়ে শুরু করে আরলো বেলশির ব্লগটি দেখুন

৫. পরীক্ষাগুলি কার্যকর করুন।

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


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

এবং কীভাবে আপনি # 5 এর সাথে একমত হতে পারবেন না?!? 1 এবং 3, বা হ্যাক, 2 এবং 4 এর সাথেও! যাইহোক, চারপাশে দুর্দান্ত উত্তর।
22:54 এ 20

4

ইউনিট পরীক্ষার জন্য কয়েক মিনিট ঠিক আছে। তবে, মনে রাখবেন যে এখানে 3 টি বড় ধরণের পরীক্ষা রয়েছে:

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

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

পরীক্ষা করার বিষয়গুলি:

  • আপনার ইউনিট পরীক্ষা এবং ইন্টিগ্রেশন পরীক্ষাগুলি পৃথক কিনা তা নিশ্চিত করে নিন to সংহতকরণ পরীক্ষা সবসময় ধীর হবে।

  • আপনার ইউনিট পরীক্ষা সমান্তরালভাবে চলমান রয়েছে তা নিশ্চিত করুন। তারা সত্য ইউনিট পরীক্ষার জন্য না করার কোনও কারণ নেই

  • আপনার ইউনিট পরীক্ষাগুলি "নির্ভরতা মুক্ত" নিশ্চিত করুন। তাদের কখনও ডেটাবেস বা ফাইল সিস্টেম অ্যাক্সেস করা উচিত নয়

তা ছাড়া, আপনার পরীক্ষাগুলি এখনই খুব খারাপ শোনাচ্ছে না। যাইহোক, রেফারেন্সের জন্য, মাইক্রোসফ্ট টিমের আমার এক বন্ধুর 4,000 ইউনিট পরীক্ষা রয়েছে যা सभ्य হার্ডওয়্যারে 2 মিনিটের মধ্যে চলে (এবং এটি একটি জটিল প্রকল্প)। দ্রুত ইউনিট পরীক্ষা করা সম্ভব। নির্ভরতা (এবং যতটা প্রয়োজন ততটাই ব্যঙ্গ করা) দূর করা গতি অর্জনের মূল বিষয়।


3

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

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

  1. চিন্তা না করে কিছু কোড টাইপ করুন
  2. হিট বিল্ড / কম্পাইল
  3. এটির সংকলন করতে আপনার সিনট্যাক্সটি ঠিক করুন
  4. আপনি যা লিখেছেন তা আসলে কী অর্থবোধ করে তা পরীক্ষা করে চালান run

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


2
আমি আপনার তালিকার সাথে প্রচুরভাবে একমত, তবে "দিনে মাত্র দু'বার বিল্ডিং চালানো 50 বারের চেয়ে ভাল" এর সাথে একেবারেই নয়।
ডক ব্রাউন

3

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

পরিবর্তে, আপনি এ এবং লিব প্রকল্পগুলির সাথে সমাধান 'এ' এবং বি এবং লিব প্রকল্পগুলির সাথে বি সমাধান করতে পারেন।


2

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

7 মিনিট হ'ল তুলনামূলকভাবে স্বল্প সময় তবে এটি প্রতিশ্রুতিবদ্ধ হওয়ার আগে আপনি কিছু করবেন না।

আমাদের কাছে স্বয়ংক্রিয় ইউআই পরীক্ষারও একটি সেট রয়েছে, তাদের রান সময়টি 2 ঘন্টা। এটি এমন কিছু নয় যা আপনি আপনার কম্পিউটারে প্রতিদিন চালাতে চান।

তো এখন কি করা?

  1. পরীক্ষাগুলি পরিবর্তন করা সাধারণত খুব কার্যকর হয় না।
  2. আপনার প্রতিশ্রুতিবদ্ধ হওয়ার আগে কেবল প্রাসঙ্গিক পরীক্ষা চালান।
  3. বিল্ড সার্ভারে আপনার সমস্ত পরীক্ষা প্রতিদিন (বা একাধিকবার) চালান। এটি আপনাকে সুন্দর কোড কভারেজ ও কোড বিশ্লেষণের প্রতিবেদন তৈরি করার সম্ভাবনাও দেবে।

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


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

@ মিশেলকোহেন আমি জানতাম যে কেউ এটি স্পট করবে। আমি জানি তারা ঠিক ইউনিট পরীক্ষা নয় তবে তারা একই উদ্দেশ্যটি পরিবেশন করে, কেবলমাত্র আপনি তাদের নাম কী রাখবেন তা কেবল।
সুলতান

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

1

যদিও আপনার সমস্যার বিবরণটি কোডবেস সম্পর্কে পুরোপুরি অন্তর্দৃষ্টি দেয় না, তবে আমি মনে করি নিরাপদে বলতে পারি যে আপনার সমস্যা দ্বিগুণ।

সঠিক পরীক্ষা লিখতে শিখুন।

আপনি বলছেন আপনার প্রায় এক হাজার পরীক্ষা আছে এবং আপনার 120 টি প্রকল্প রয়েছে। ধরে নিই যে এই প্রকল্পগুলির প্রায় অর্ধেকই পরীক্ষামূলক প্রকল্প, আপনার 60 টি প্রোডাকশন কোড প্রকল্পের 1000 টি পরীক্ষা রয়েছে। এটি আপনাকে প্রায় 16-17 পরীক্ষার জনসংযোগ দেয়। প্রকল্পের !!!

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

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

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

প্রকল্পের কাঠামো পরিচালনা করতে শিখুন।

আপনি সমাধানটি 120 টি প্রকল্পে ভাগ করেছেন। এটাই আমার মানদণ্ডে এক বিস্ময়কর প্রকল্প।

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

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

তবে যে কোনও হারে, আপনাকে প্রকল্পের কাঠামো সম্পর্কে কিছু করতে হবে। হয় প্রকল্পগুলিকে পৃথক উপাদানগুলিতে বিভক্ত করুন, বা প্রকল্পগুলি মার্জ করা শুরু করুন।

নিজেকে জিজ্ঞাসা করুন আপনার যদি সত্যিই 120 টি প্রকল্প দরকার?

PS আপনি এনক্রাঞ্চ পরীক্ষা করতে চাইবেন might এটি একটি ভিজ্যুয়াল স্টুডিও প্লাগ-ইন যা ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে আপনার পরীক্ষা চালায়।


0

JUnit পরীক্ষা সাধারণত দ্রুত হওয়ার জন্য, তবে তাদের মধ্যে কিছু কিছুকে ছাড়িয়ে যাওয়ার জন্য কিছুটা সময় নিতে হবে।

উদাহরণস্বরূপ, ডাটাবেস পরীক্ষাটি সাধারণত আরম্ভ এবং শেষ করতে কিছুটা সময় নেয়।

আপনার যদি কয়েকশ টেস্ট থাকে তবে তা দ্রুত থাকলেও তাদের সংখ্যার কারণে তাদের চালানোর জন্য প্রচুর সময় প্রয়োজন।

যা করা যায় তা হ'ল:

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

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


0

আমি দেখেছি সমস্যাগুলি:

ক) পরীক্ষার উপাদানগুলি তৈরি করতে আইওসি ব্যবহার করা। 70 সেকেন্ড -> 7 সেকেন্ডে কনটেইনারটি সরিয়ে।

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

গ) কী ঘটছে তা জানতে তাদের প্রোফাইল দিন। আমি দেখতে পেয়েছি যে কন্সট্রাক্টর স্টাফ তৈরি করছে আমার প্রয়োজন নেই তাই আমি এটিকে স্থানীয়করণ করেছি এবং রানের সময় হ্রাস করেছি।

d) প্রোফাইল। সম্ভবত কোডটি খুব ভাল নয় এবং আপনি পর্যালোচনা থেকে কিছু দক্ষতা অর্জন করতে পারেন।

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


0

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

যে জিনিসগুলি খায় তা সময় বাড়িয়ে তোলে:

  • প্যাকেজ ডাউনলোডিং (সি # এর জন্য নুগেট, জাভা এর জন্য ম্যাভেন, রুবির জন্য রত্ন ইত্যাদি)
  • ফাইল সিস্টেমে প্রচুর পরিমাণে ফাইল অনুলিপি করা হচ্ছে (উদাহরণ: জিডিএল সমর্থন ফাইল)
  • ডাটাবেসে সংযোগ খোলার জন্য (কিছু লোক সংলাপের জন্য এক সেকেন্ড সময় নেয়)
  • প্রতিবিম্ব ভিত্তিক কোড
  • অটোজেনারেটেড কোড
  • প্রোগ্রাম প্রবাহ নিয়ন্ত্রণ করতে ব্যতিক্রম ব্যবহার করে

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

সমস্যাগুলি সমাধান করার উপায় রয়েছে:

  • একীকরণে একটি ডাটাবেস জড়িত পরীক্ষাগুলি সরান (যেমন কেবলমাত্র সিআই বিল্ড সার্ভারে)
  • আপনার পরীক্ষায় লুপগুলিতে মক তৈরি করা থেকে বিরত থাকুন। আসলে আপনার পরীক্ষাগুলিতে পুরোপুরি লুপগুলি এড়িয়ে চলুন। সেক্ষেত্রে প্যারামিটারাইজড টেস্ট ব্যবহার করে আপনি সম্ভবত একই ফলাফল পেতে পারেন।
  • আপনার বিশাল সমাধানটিকে পৃথক সমাধানে বিভক্ত করার বিষয়টি বিবেচনা করুন

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


-1

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

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