সময় সংবেদনশীল এমন সফ্টওয়্যার আপনি কীভাবে পরীক্ষা করবেন?


9

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

সাম্প্রতিক এক উদাহরণে আমি প্রতি মাসে দ্বিতীয় থেকে শেষ দিন চালানোর জন্য ক্রোন জব স্থাপন করছিলাম। ক্রোনটির জন্য মাসের সঠিক দিনটি পেতে ক্রোন ট্যাব সহ শেল স্ক্রিপ্টটি ব্যবহার করা দরকার, এরকম কিছু:

1 0 [shell command] * * [my script]

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

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


3
আপনি এটি কোনও ভিএম-তে চালাতে পারেন এবং স্ক্রিপ্টটি চালুর আগের দিন ঠিক মধ্যরাতের মতোই সিস্টেমের সময়টি কোনও সুবিধাজনক হিসাবে সেট করতে পারেন or
পাই

2
ক্রন্টব নিয়মিত শেল স্ক্রিপ্টগুলি সম্পাদন করে, আপনি সহজেই স্ক্রিপ্টটি হাতে হাতে
চালিত

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

উত্তর:


7

ইউনিট পরীক্ষার পাশাপাশি ওএস-নির্দিষ্ট সমস্যার সাথে মোকাবিলা করার জন্য স্বয়ংক্রিয় পরীক্ষাগুলি স্থাপনের জন্য আরও দুটি কৌশল রয়েছে:

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

বা:

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

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

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

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


আমি মনে করি আপনার 'লাইব্রেরি ভার্চুয়ালাইজেশন' উপহাস হিসাবে পরিচিত, বা বরং একটি মক লাইব্রেরি ব্যবহার করে।
জাভেয়ের

10

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


1
যদি আপনার কাছে সীমিত সময়ের জন্য (এন মূল্যায়ন) লাইসেন্সের সাথে সফ্টওয়্যার ইনস্টল করা থাকে, তবে ঘড়ির সাথে ঝাঁকুনি দেওয়া তাদের কার্যকর করতে বাধা দিতে পারে।
মার্জন ভেনেমা

কিছু সংস্থায়, নেটওয়ার্কে লগ ইন করা সমস্ত ওয়ার্কস্টেশনটি "সার্ভার" সময় থেকে 5 মিনিটের মধ্যে বিচ্যুত হওয়া উচিত নয়, অন্যথায়, ওয়ার্কস্টেশনটি লক হয়ে যাবে। এটি আমার কাছে ঘটেছিল :-)
ওনেসিমাসউনবাউন্ড

1

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


1

আপনি যেহেতু ক্রন্টব উল্লেখ করেছেন, আমি ধরে নিয়েছি আপনি একটি নিক্স পরিবেশে চলছে। সেক্ষেত্রে, আমি মনে করি লাইবফেকটাইম পরীক্ষা করা আপনার জন্য উপযুক্ত হবে:
http://www.code-wizards.com/projects/libfaketime/

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


0

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

এর সাথে মোকাবিলা করার পছন্দের উপায়টি হল "ঘড়ির সাথে উপহাস করা", একটি প্রোগ্রামিং ট্রিক বা অন্যটি সময় নকল করার জন্য। শেল স্ক্রিপ্টগুলিতে আপনি পরিবেশের পরিবর্তনশীলতে একটি তারিখ সেট করতে ব্যবহার করতে $ {: -} বাক্য গঠন ব্যবহার করতে পারেন এবং জোর না করা হলে আসল সময়ে পিছিয়ে যান।

অন্যান্য ভাষায় আমরা মক গ্রন্থাগারগুলি ব্যবহার করি বা ঘড়ির উপরে বিমূর্ততা তৈরি করি।

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

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