আপনি কীভাবে আপনার ইন্টিগ্রেশন পরীক্ষার স্কেল করবেন?


21

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

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

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

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

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

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

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

আমরা পরীক্ষার প্রতিটি লজিক্যাল গ্রুপের জন্য আমাদের ডেটা স্টোরটি পুনর্নির্মাণ এবং পরীক্ষার ডেটা দিয়ে প্রিলোডিংয়ের একটি পরীক্ষামূলক কৌশল ব্যবহার করছি। ডেটা অখণ্ডতার বিস্তৃতভাবে বীমা করার সময় এটি প্রতিটি পরীক্ষায় 5-15% প্রভাব যুক্ত করে। সুতরাং আমরা মনে করি পণ্য বিকাশের এই মুহুর্তে সেই পরীক্ষার কৌশলটি অনুকূল করে তোলার খুব কমই আছে। 

এর দীর্ঘ এবং সংক্ষিপ্তটি হ'ল: যদিও আমরা প্রতিটি পরীক্ষার আউটপুট অনুকূলিত করতে পারি (এমনকি যদি প্রতিটি 30% -50% পর্যন্ত হয়) তবে আমরা এখনও কয়েক শতাধিক পরীক্ষা দিয়ে কার্যকরভাবে স্কেল করব না। ১ ঘন্টা এখন পর্যন্ত এখনও মানুষের সহনীয়তার তুলনায় অনেক বেশি, এটি টেকসই করার জন্য আমাদের সামগ্রিক প্রক্রিয়াতে প্রসারিত-ইশ উন্নতির একটি আদেশ প্রয়োজন।

সুতরাং, আমি পরীক্ষার সময়কে হ্রাস করার জন্য কী কী কৌশল এবং কৌশল ব্যবহার করতে পারি তা খতিয়ে দেখছি।

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

এই স্থানটিতে অন্যরা কী কৌশল (এবং সরঞ্জামগুলি) ব্যবহার করছে তা আমি দেখতে চেয়েছিলাম।

(আমি বিশ্বাস করতে পারি যে অন্যেরা নির্দিষ্ট প্রযুক্তি সেট ব্যবহার করার ক্ষেত্রে এই জাতীয় অসুবিধা দেখতে পাবে))

[আপডেট: 12/16/2016: ফলাফলের আলোচনার জন্য আমরা সিআই সমান্তরাল পরীক্ষায় বেশি বিনিয়োগ শেষ করেছি: http://www.mindkin.co.nz/blog/2015/12/16/16-jobs]


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

দেখে মনে হচ্ছে এটি কী এবং কোনটি ইন্টিগ্রেশন টেস্ট নয় এবং ইউনিট টেস্টিং এবং ইন্টিগ্রেশন টেস্ট সম্পর্কে লোকের ভুল বোঝাবুঝি, সে সম্পর্কে আলোচনায় নেমেছে oh
জেজ সান্টোস 21

উত্তর:


9

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

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

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


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

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

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

8

ইন্টিগ্রেশন টেস্টগুলি সর্বদা দীর্ঘ চলতে থাকবে কারণ তাদের প্রকৃত ব্যবহারকারীর নকল করা উচিত। এই কারণেই আপনার সবগুলি একযোগে চালানো উচিত নয়!

আপনি ইতিমধ্যে ক্লাউডে স্টাফ চালাচ্ছেন বলে মনে হচ্ছে আপনি একাধিক মেশিনের মাধ্যমে আপনার পরীক্ষাগুলি স্কেল করার জন্য প্রধান অবস্থানে আছেন।

চরম ক্ষেত্রে, পরীক্ষার জন্য একটি নতুন পরিবেশ স্পিন আপ করুন এবং সেগুলি একই সাথে চালান। আপনার একীকরণ পরীক্ষাগুলি কেবল দীর্ঘতম চলমান পরীক্ষা হিসাবে গ্রহণ করবে।


ভাল যুক্তি! এর মতো কৌশলটি খুঁজছেন, তবে এমন কিছু সরঞ্জামের সাহায্যে যা বিতরণ করা পরীক্ষায় সহায়তা করে
জেজ সান্টোস

4

পরীক্ষাগুলি কেটে ফেলা / অপ্টিমাইজ করা আমার কাছে সেরা ধারণা বলে মনে হয়, তবে এটি বিকল্প না হলে আমার কাছে প্রস্তাব দেওয়ার বিকল্প রয়েছে (তবে কিছু সাধারণ মালিকানা সরঞ্জাম তৈরি করতে হবে)।

আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি কিন্তু আমাদের ইন্টিগ্রেশন টেস্টগুলিতে নয় (যারা কয়েক মিনিটে দৌড়েছিল)। পরিবর্তে এটি কেবল আমাদের বিল্ডগুলিতে ছিল: বড় আকারের সি কোডবেস তৈরি করতে কয়েক ঘন্টা সময় লাগবে।

যা আমি অত্যন্ত অপব্যয়কর দেখলাম তা হ'ল আমরা স্ক্র্যাচ থেকে প্রায় পুরো জিনিসটি পুনর্নির্মাণ করছি (প্রায় 20,000 উত্স ফাইল / সংকলন ইউনিট) এমনকি যদি কেবল কয়েকটি উত্স ফাইলই পরিবর্তিত হয়, এবং এইভাবে পরিবর্তনের জন্য কয়েক ঘন্টা ব্যয় হয় যা কেবল কয়েক সেকেন্ড বা মিনিট সময় নেয় নাহয়.

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

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

পার্শ্ব প্রকল্প অপেক্ষা করার সময়, পরে একীভূত করুন

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

কি পুনর্নির্মাণ / পুনরায় তৈরি করতে হবে তা নির্ধারণের জন্য উত্স ফাইলগুলি ম্যানুয়ালি পার্সিং করা

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

একই কৌশল ইন্টিগ্রেশন পরীক্ষার ক্ষেত্রে প্রযোজ্য হওয়া উচিত। ইন্টিগ্রেশন টেস্টগুলি কোন ফাইলের উপর নির্ভর করে তা নির্ধারণ করার জন্য কেবল পুনরাবৃত্তভাবে উত্স ফাইলগুলি পার্স করুন (উদা: importজাভাতে,#includeসার্ভার সাইডে সি বা সি ++) এ থাকা এবং সেই ফাইলগুলি অন্তর্ভুক্ত / আমদানিকৃত ফাইলগুলি এবং সিস্টেমের জন্য একটি সম্পূর্ণ অন্তর্ভুক্ত / আমদানি নির্ভরতা ফাইল গ্রাফ তৈরি করা। বিল্ড পার্সিংয়ের বিপরীতে যা একটি ডিএজি গঠন করে, গ্রাফটি পুনর্নির্দেশ করা উচিত যেহেতু এটি যে কোনও ফাইলের সাথে আগ্রহী যে কোড রয়েছে যা পরোক্ষভাবে কার্যকর করা যেতে পারে * পরিবর্তন করে। আগ্রহের ইন্টিগ্রেশন পরীক্ষার জন্য গ্রাফের এই ফাইলগুলির মধ্যে কোনওটি পরিবর্তিত হলে কেবলমাত্র ইন্টিগ্রেশন পরীক্ষাটি পুনরায় চালান। এমনকি কয়েক লক্ষ লাইনের কোডের জন্য, এক মিনিটেরও কম সময়ে এই পার্সিং করা সহজ হয়েছিল। আপনার যদি সোর্স কোড ব্যতীত অন্য ফাইলগুলি রয়েছে যা সামগ্রীর ফাইলগুলির মতো কোনও ইন্টিগ্রেশন টেস্টকে প্রভাবিত করতে পারে তবে সম্ভবত আপনি সংহত পরীক্ষার সেই নির্ভরশীলতাগুলি নির্দেশ করে উত্স কোডের একটি মন্তব্যে मेटाটাটা লিখতে পারেন, যাতে সেই বাহ্যিক ফাইলগুলিও পরিবর্তন করা উচিত, পরীক্ষাগুলিও পুনরায় রান পেতে।

* উদাহরণ হিসাবে, যদি টেস্ট.কে foo.h অন্তর্ভুক্ত করা হয় যা foo.c দ্বারা অন্তর্ভুক্ত থাকে, তবে টেস্ট.সি, foo.h, বা foo.c হয় যে কোনও পরিবর্তনকে একটি নতুন রান প্রয়োজন হিসাবে চিহ্নিত করা উচিত।

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


3

আপনার মতো মনে হচ্ছে অনেকগুলি ইন্টিগ্রেশন টেস্ট রয়েছে। রিকল টেস্ট পিরামিড । ইন্টিগ্রেশন টেস্টগুলি মাঝখানে অন্তর্ভুক্ত।

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

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

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

নির্ভরতার জন্য স্ট্যাবড / মক্কেল / নকল / ইন-মেম-বাস্তবায়নের সাথে প্রায় সমস্ত কিছুর ইউনিট পরীক্ষা করা যেতে পারে।


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

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

আমি আপনার মন্তব্যের প্রতিক্রিয়া হিসাবে আমার উত্তর আপডেট।
এসবেন স্কভ পেদারসেন 21

2

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

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

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

এই নিবন্ধটি এন্টারপ্রাইজে কীভাবে ইন্টিগ্রেশন টেস্টিং করবেন সে সম্পর্কে আরও বুঝতে দরকারী হতে পারে


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

1

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

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

সুতরাং এর অর্থ হ'ল আপনাকে পুনর্নির্মাণ এবং পুনরায় প্যাকেজ করতে হবে এবং প্রতি প্রতিশ্রুতিবদ্ধ সমস্ত কিছু পুনরায় প্রচার করতে হবে না। আপনি ঠিকঠাক হয়ে উঠবেন এমন বিশ্বাস করে একটি সাশ্রয়ী সাশ্রয়ী মোতায়েন সম্পাদনের জন্য দেব পরিবেশে আপনার সেটআপটি व्यवस्थित করতে পারেন। একটি সম্পূর্ণ ভিএম কাটানো, এবং পুরো পণ্যটি মোতায়েনের পরিবর্তে, ভিএমটি পুরানো সংস্করণটি জায়গায় রেখে দিন এবং নতুন বাইনারিগুলি অনুলিপি করুন, উদাহরণস্বরূপ (আপনার যা করতে হবে তা নির্ভর করে ওয়াইএমএমভি)।

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

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


1

কিছু সময়ে, সম্পূর্ণ সংহত পরীক্ষাগুলি ব্যয় করতে বেশ কয়েক ঘন্টা সময় নিতে পারে এমনকি ব্যয়বহুল হার্ডওয়্যারগুলিতেও। বিকল্পগুলির মধ্যে একটি হ'ল প্রতিটি প্রতিশ্রুতিতে tests পরীক্ষাগুলির সিংহভাগ চালানো না, এবং পরিবর্তে প্রতি রাতে এগুলি চালানো, বা একটানা ব্যাচ মোডে (একবারে একাধিক কমিট)।

এটি যাইহোক, এটি একটি নতুন সমস্যা তৈরি করে - বিকাশকারীরা তাত্ক্ষণিক প্রতিক্রিয়া পান না এবং ভাঙা বিল্ডগুলি নজরে নাও যেতে পারে। এটি ঠিক করার জন্য, এটি গুরুত্বপূর্ণ যে তারা জানে যে কোনও কিছু সর্বদা ভাঙা। ক্যাটলাইট বা টিমসিটির ট্রে নোটিফায়ারের মতো নোটিফিকেশন সরঞ্জামগুলি বেশ কার্যকর হতে পারে।

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

যে কারণে, এই দুটি সরঞ্জামের একটি "বিল্ড ইনভেস্টিগেশন" বৈশিষ্ট্য রয়েছে। এটি বলবে যে ডেভলপমেন্ট টিমের কেউ আসলে ভাঙ্গা বিল্ডটি চেক করে ফিক্স করছে কিনা। বিকাশকারীরা বিল্ডটি যাচাই করতে স্বেচ্ছাসেবক করতে পারেন এবং যতক্ষণ না ঘটে ততক্ষণ দলের প্রত্যেককে ঘড়ির কাছাকাছি একটি লাল আইকন দ্বারা বিরক্ত করা হবে।


0

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

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

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


ধন্যবাদ, তবে আমি মনে করি আমাদের এই প্রসঙ্গে ইন্টিগ্রেশন টেস্টিংয়ের উদ্দেশ্য এবং প্রয়োগ সম্পর্কে একই ধারণা নেই। আপনি ইউনিট পরীক্ষার সাথে সংহতকরণ পরীক্ষার বিবাদ করছেন।
জেজ সান্টোস 21

0

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

সরাসরি শাখা বিকাশকারীদের মধ্যে তাদের পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করার পরিবর্তে এগুলি কেন্দ্রীয়ীকৃত স্বয়ংক্রিয় যাচাইকরণ সিস্টেমে জমা দিন যা যাচাইকরণ সম্পাদন করে এবং:

  • যদি এটি সফল হয় তবে এটি স্বয়ংক্রিয়ভাবে শাখায় পরিবর্তনগুলি সম্পাদন করে
  • যদি ব্যর্থ হয় তবে এটি সংশ্লিষ্ট সাবমিটারদের তাদের পরিবর্তনগুলি পুনর্নির্মাণের জন্য অবহিত করে

এই জাতীয় পদ্ধতির সাহায্যে একাধিক জমা দেওয়া পরিবর্তনগুলি একত্রিত করা ও পরীক্ষার অনুমতি দেওয়া হয়, কার্যকর সিআই যাচাইয়ের গতি বহুগুণ বৃদ্ধি পায়।

এরকম একটি উদাহরণ ওপেনস্ট্যাক দ্বারা ব্যবহৃত জেরিট / জুউল ভিত্তিক গেটিং সিস্টেম

আর একটি হ'ল অ্যাপার্টমেন্টসিআই ( অস্বীকৃতি - আমি এর স্রষ্টা এবং এটি সরবরাহকারী সংস্থার প্রতিষ্ঠাতা)।

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