আমাকে 65.000.000.000 টেস্টের স্যুটটি কীভাবে চালানো হবে সে সম্পর্কে জিজ্ঞাসা করা হয়েছিল এবং এত বড় পরীক্ষা দিয়ে কোনও প্রকল্প নেওয়া স্বাভাবিক কিনা তা অবাক করেছিলাম।
আপনি কি এই বৈশিষ্ট্যযুক্ত প্রকল্পগুলিতে কাজ করেছেন?
আমাকে 65.000.000.000 টেস্টের স্যুটটি কীভাবে চালানো হবে সে সম্পর্কে জিজ্ঞাসা করা হয়েছিল এবং এত বড় পরীক্ষা দিয়ে কোনও প্রকল্প নেওয়া স্বাভাবিক কিনা তা অবাক করেছিলাম।
আপনি কি এই বৈশিষ্ট্যযুক্ত প্রকল্পগুলিতে কাজ করেছেন?
উত্তর:
65 বিলিয়ন পরীক্ষা দিয়ে মনে হচ্ছে আপনাকে সমস্ত সম্ভাব্য ইনপুট পরীক্ষা করতে বলা হচ্ছে। এটি কার্যকর নয় - আপনি প্রয়োজনীয়ভাবে পরীক্ষা করে নিচ্ছেন যে আপনার প্রসেসরটি সঠিকভাবে কাজ করে, আপনার কোডটি সঠিক নয়।
পরিবর্তে আপনার সমতুল্য ক্লাস পরীক্ষা করা উচিত । এটি আপনার পরীক্ষার ইনপুটগুলির পরিসীমা মারাত্মকভাবে হ্রাস করবে।
আপনি নিজের সিস্টেমে আরও ছোট ছোট টুকরো করে বিভক্ত করতে পারেন কিনা তাও বিবেচনা করুন। প্রতিটি টুকরা বিচ্ছিন্নতাতে পরীক্ষা করা আরও সহজ হবে এবং তারপরে আপনি কিছু সংহতকরণ পরীক্ষা করতে পারেন যা সমস্ত টুকরো একসাথে নিয়ে আসে।
যদি আপনি এখনও এই আশ্বাস চান যে এই ইনপুট সংমিশ্রণের কয়েকটি কাজ করে তবে সম্ভবত আপনি ফাজ পরীক্ষার চেষ্টা করতে পারেন । প্রচুর বিভিন্ন ইনপুট পরীক্ষা করার কিছু সুবিধা পাবেন তবে এগুলির সমস্ত 65 বিলিয়ন না চালিয়েই।
যদি এটি একটি আসল পরীক্ষার স্যুট হয় তবে আপনি এটির সাথে কাজ করার কাছাকাছি কোথাও যেতে চান না।
পরীক্ষকের পুরো কাজটি পুরোপুরি পরীক্ষার মধ্যে একটি ভারসাম্য হ'ল আত্মবিশ্বাসের জন্য আপনি "সঠিক" ফলাফল পেয়েছেন এবং কয়েকটি পর্যাপ্ত পরীক্ষা লিখেছেন যে এগুলি যথাসময়ে চালানো যেতে পারে।
অনেক পরীক্ষা "সমতুল্য ক্লাস" এ বিমুগ্ধ করা যেতে পারে, যার অর্থ 3 বিলিয়ন পরীক্ষা চালানোর পরিবর্তে আপনি 1 চালান যা আপনাকে একটি যুক্তিসঙ্গত স্তরের আত্মবিশ্বাস দেয় যে এই সমতা শ্রেণীর অন্যান্য সমস্ত পরীক্ষা সফলভাবে চলবে, যদি আপনি সিদ্ধান্ত নষ্ট করার সিদ্ধান্ত নেন সময় তাদের চালানো।
আপনার উচিত যারা 65 বিলিয়ন পরীক্ষা চালানোর কথা ভাবছেন তাদের বলুন যে তাদের সমতুল্য শ্রেণিতে বিমূর্ত পরীক্ষার জন্য আরও ভাল কাজ করা দরকার।
সম্ভবত আরও বেশি, আপনি পরীক্ষার অধীনে সিস্টেমে সমস্ত ইনপুটগুলির সংমিশ্রণের গণনা করে, বা চক্রবৃত্তীয় জটিলতা গণনা করে এবং এই অনন্য মৃত্যদণ্ডের প্রতিটি পথের জন্য একটি পরীক্ষা অবশ্যই লিখতে হবে বলে ধরে নিয়ে আপনি 65 বিলিয়ন টেস্টের আকারে এসে পৌঁছেছেন।
এটি বাস্তব পরীক্ষাগুলি কীভাবে লেখা হয় তা নয়, কারণ অন্যান্য পোস্টার এবং মন্তব্যকারীরা ইঙ্গিত দিয়েছে যে, billion৫ বিলিয়ন টেকনিক্যাল পাওয়ার কার্যকর করার প্রয়োজনপরীক্ষা বিস্ময়কর হয়। এটি একটি পরীক্ষা লেখার মতো হবে যা দুটি 32-বিট মানগুলির প্রতিটি সম্ভাব্য অনুক্রমের প্লাগ ইন করে ফলাফলটি পরীক্ষা করে দুটি পূর্ণসংখ্যা যোগ করার জন্য একটি পদ্ধতি প্রয়োগ করে। এটা সম্পূর্ণ উন্মাদনা। আপনাকে লাইনটি আঁকতে হবে এবং সম্ভাব্য সমস্ত পরীক্ষার কেসগুলির একটি উপসেট সনাক্ত করতে হবে, যা তাদের মধ্যে নিশ্চিত করে যে সিস্টেমগুলি ইনপুটগুলির পরিসীমা জুড়ে প্রত্যাশা অনুযায়ী আচরণ করবে। এই ক্ষেত্রে. আপনি কয়েকটি "সাধারণ" সংখ্যা যুক্ত করার পরীক্ষা করেন, আপনি কয়েকটি নেতিবাচক-সংখ্যার দৃশ্যের পরীক্ষা করেন, আপনি ওভারফ্লো পরিস্থিতিগুলির মতো প্রযুক্তিগত সীমা পরীক্ষা করেন এবং ত্রুটি হওয়ার ফলস্বরূপ এমন কোনও পরিস্থিতিতে আপনি পরীক্ষা করেন। যেমন উল্লেখ করা হয়েছিল, এই বিভিন্ন ধরণের পরীক্ষা "সমতুল্য ক্লাস" অনুশীলন করে; তারা আপনাকে কোনও পরিচিত "আউটলিয়ার" সহ সম্ভাব্য ইনপুটগুলির একটি প্রতিনিধি নমুনা নেওয়ার অনুমতি দেয়,
রোমান সংখ্যার জেনারেটর, বেসিক কোড কাটাসের একটি বিবেচনা করুন। টিডিডি কৌশলগুলি একটি "ডোজো" স্টাইলে ব্যবহার করার জন্য, একটি ফাংশন লিখুন যা 1 থেকে 3000 পর্যন্ত যে কোনও সংখ্যা গ্রহণ করতে পারে এবং সেই সংখ্যার মানটির জন্য সঠিক রোমান অঙ্ক তৈরি করতে পারে।
আপনি একবারে 3000 ইউনিট পরীক্ষাগুলি লিখে এবং পরিবর্তে সেগুলি দিয়ে এই সমস্যার সমাধান করেন না। এটাই পাগলতা; অনুশীলনটি সাধারণত এক থেকে দুই ঘন্টা সময় নেয় এবং প্রতিটি স্বতন্ত্র মান পরীক্ষা করার জন্য আপনি সেখানে কয়েক দিন থাকতেন। পরিবর্তে, আপনি স্মার্ট পেতে। আপনি সবচেয়ে সহজ বেস কেস (1 == "আমি") দিয়ে শুরু করুন, এটি "ন্যূনতম-কোড" কৌশল ( return "I";
) ব্যবহার করে প্রয়োগ করুন এবং তারপরে আপনার কোডটি অন্য প্রত্যাশিত দৃশ্যে কীভাবে ভুল আচরণ করবে তা সন্ধান করুন (2 == " দ্বিতীয় ")। পাখলান পুনরাবৃত্তি; সম্ভাব্যতার চেয়েও বেশি, আপনি আপনার প্রাথমিক প্রয়োগটিকে এমন কিছু দিয়ে প্রতিস্থাপন করেছেন যা "আমি" চরিত্রটি যতবার প্রয়োজন ততবার পুনরাবৃত্তি করে (পছন্দ করে return new String('I',number);
)। এটি অবশ্যই তৃতীয়টির জন্য একটি পরীক্ষায় উত্তীর্ণ হবে, সুতরাং আপনি বিরক্ত করবেন না; পরিবর্তে, আপনি 4 == "IV" এর জন্য পরীক্ষা লিখেন, যা আপনি জানেন যে বর্তমান বাস্তবায়ন জিতেছে '
অথবা, আরও বিশ্লেষণাত্মক শৈলীতে, আপনি কোড (বা হওয়া দরকার) দ্বারা তৈরি প্রতিটি শর্তাধীন সিদ্ধান্ত পরীক্ষা করে দেখুন এবং প্রতিটি সিদ্ধান্তের প্রতিটি সম্ভাব্য ফলাফলের জন্য কোড প্রবেশের জন্য ডিজাইন করা একটি পরীক্ষা লিখুন। আপনার যদি 5 টি স্টেটমেন্ট থাকে (প্রত্যেকটির সত্য এবং মিথ্যা শাখা রয়েছে), তাদের প্রত্যেকটি একে অপরের থেকে সম্পূর্ণ স্বতন্ত্র, আপনি 10 টি পরীক্ষা কোড করেন, 32 নয়। প্রতিটি পরীক্ষা একটি নির্দিষ্ট সম্ভাব্য সিদ্ধান্ত সম্পর্কে দুটি বিষয় জোর দেওয়ার জন্য ডিজাইন করা হবে; প্রথমে সঠিক সিদ্ধান্তটি নেওয়া হয়েছে এবং তারপরে কোডটি প্রবেশ করানো শর্তটি সঠিক হওয়াতে। আপনি স্বাধীন সিদ্ধান্তের প্রতিটি সম্ভাব্য অনুক্রমের জন্য কোনও পরীক্ষা কোড করেন না । যদি সিদ্ধান্তগুলি নির্ভরশীল হয়, তবে আপনাকে সেগুলির আরও সংমিশ্রণে পরীক্ষা করতে হবে, তবে এরকম সংমিশ্রণ কম রয়েছে কারণ কিছু সিদ্ধান্ত কেবল তখনই নেওয়া হয় যখন অন্য কোনও সিদ্ধান্তের কোনও নির্দিষ্ট ফলাফল হয়েছিল।
এটি কি "সাধারণ" ?, না। যেখানে "সাধারণ" গড় বা সাধারণ অভিজ্ঞতা হিসাবে সংজ্ঞায়িত হয়। বলতে পারি না আমাকে এর আগেও এমন প্রকল্পে কাজ করতে হয়েছিল তবে আমি এমন একটি প্রকল্পে এসেছি যেখানে প্রতি কয়েক মিলিয়ন বিটের মধ্যে একটি ফ্লিপ হয়ে যায়। এটি পরীক্ষা করা ছিল ... একটি চ্যালেঞ্জ।
এটি কি সম্ভাব্য প্রয়োজন? ঠিক আছে, এটি গ্যারান্টি এবং প্রকল্পের নির্দিষ্টকরণের উপর নির্ভর করে। প্রথমে বুঝতে এটি কিছুটা অবিশ্বাস্য তবে আপনার প্রশ্নটি নির্দিষ্ট ক্ষেত্রে হালকা।
অন্যরা (মাইকেলটি) যেমন উল্লেখ করেছে, সিরিয়াল পরীক্ষার মাধ্যমে এই কাজটি সম্পন্ন করার সময়টি এটি অযৌক্তিক করে তোলে। সুতরাং সমান্তরালতা আপনার প্রথম বিবেচনায় পরিণত হয়। আপনি এই সমস্যায় কয়টি পরীক্ষা ব্যবস্থা নিক্ষেপ করতে পারেন এবং এই একাধিক সিস্টেমের ফলাফলের জন্য সহযোগিতা করার জন্য আপনার কী সমর্থন রয়েছে?
আপনি যে ডিভাইসটি বা অ্যালগরিদম পরীক্ষা করছেন তা নির্ভরযোগ্যভাবে প্রতিলিপি করা হচ্ছে তার কোন গ্যারান্টি রয়েছে? সফ্টওয়্যারটির প্রতিরূপে বেশ নির্ভরযোগ্য, তবে হার্ডওয়্যার ডিভাইসগুলিতে (বিশেষত প্রথম প্রজন্মের) উত্পাদন সংক্রান্ত সমস্যা থাকতে পারে। সেক্ষেত্রে একটি মিথ্যা পরীক্ষায় ব্যর্থতা হয় কোনও খারাপ অ্যালগরিদমকে নির্দেশ করতে পারে বা ডিভাইসটি সঠিকভাবে একত্রিত হয়নি। আপনি কি এই দুটি ক্ষেত্রে পার্থক্য করার প্রয়োজন?
আপনি কীভাবে টেস্টিং সিস্টেমগুলি বৈধ করতে চলেছেন তাও আপনাকে বিবেচনা করতে হবে। যে অনেক পরীক্ষার ক্ষেত্রে একটি বৈধ কারণ অনুমান করে আপনার অনেক বেশি অটোমেশন প্রয়োজন need আপনার পরীক্ষার কেস তৈরির ক্ষেত্রে এটি ভুলভ্রান্ত হয় না তা নিশ্চিত করার জন্য সেই অটোমেশনটি পরীক্ষা করা দরকার। ত্রুটিগুলির জন্য স্পট চেকগুলি সত্যই খড়ের খড়ের একটি সূঁচ সন্ধানের সমতুল্য হবে।
এই আর্স্টেকনিকা লিঙ্কটি আপনার পরীক্ষার বিবেচনার উপর কিছুটা অন্তর্দৃষ্টি বা নাও পারে। জিপিইউ ক্লাস্টারগুলি সাধারণত ব্রুট ফোর্স ক্র্যাকিং পাসওয়ার্ডগুলির জন্য ব্যবহৃত হয়। নিবন্ধে উদ্ধৃত এক ব্যক্তি এটি করতে পারে can cycle through as many as 350 billion guesses per second
, যাতে এই ধরণের আপনার 65 বি পরীক্ষাগুলি দৃষ্টিকোণে রাখে। এটি সম্ভবত একটি ভিন্ন ডোমেন, তবে এটি দেখায় যে কীভাবে বিভিন্ন কোণ থেকে কার্যটির কাছে আসা একটি কার্যকর সমাধান পেতে পারে।
আমি মনে করি না এটা সম্ভবপর হয় বজায় রাখা 6.5e আবহাওয়া 10 এটা পরীক্ষার প্রথম স্থানে, তাই তাদের তর্ক করা হতে পারে চলছে। এমনকি সমস্ত বড় প্যাকেজগুলির সাথে ডিবিয়ানের মতো বৃহত্তম প্রকল্পগুলিতে মোট কয়েকশ মিলিয়ন এসএলওসি রয়েছে।
তবে আপনাকে যদি যাইহোক বিপুল সংখ্যক পরীক্ষা চালাতে হয় তবে কয়েকটি কৌশল রয়েছে।
তাদের সব চালাবেন না। সম্ভবত প্রতিটি পরীক্ষা প্রতিটি কোড পাথের উপর নির্ভর করে না। সাবসিস্টেম এবং তাদের পরীক্ষাগুলির মধ্যে এবং টেস্ট স্যুটগুলির মধ্যে নির্ভরতা নির্ধারণ করে এবং আপনি কেবলমাত্র একটি নির্দিষ্ট পরিবর্তনের সাথে সম্পর্কিত ইউনিট পরীক্ষা চালাতে সক্ষম হবেন, কেবল এই ইউনিট পরীক্ষার উপর নির্ভর করে ইন্টিগ্রেশন টেস্ট ইত্যাদি।
সমান্তরালে এগুলি চালান। কোড বেস যে বিশাল, আপনার সম্ভবত একটি বৃহত বিল্ড ফার্ম (ফিরে জেটব্রেইনস, অপেক্ষাকৃত ছোট অপারেশন, আমাদের একা আইডিইএর ধারাবাহিক বিল্ড / ইন্টিগ্রেশন ফার্মে চলত 40-50 বিল্ড এজেন্ট)। যেহেতু ইউনিট পরীক্ষাগুলি স্বাধীন, এবং ইন্টিগ্রেশন টেস্টগুলি ইতিমধ্যে নির্মিত কোডগুলি পুনরায় ব্যবহার করতে পারে, তাই পরীক্ষাগুলি তুলনামূলকভাবে তুলনামূলকভাবে সহজ।
তাড়াতাড়ি দৌড়ানো বন্ধ করুন। আপনি যদি জানেন যে কোনও নির্দিষ্ট টেস্ট স্যুট অন্য টেস্ট স্যুটটির যথার্থতার জন্য তার যুক্তিসঙ্গত কার্যকারিতার জন্য নির্ভর করে, আপনি একবারে একটি লিঙ্ক ব্যর্থ হতে দেখে পুরো চেইনটি কেটে ফেলতে পারেন।
দাবি অস্বীকার: আমি পেশাদার পরীক্ষার প্রকৌশলী নই। উপরের নুনের দানা দিয়ে নিন।
যদিও কম পরীক্ষা দিয়ে কীভাবে ছিঁচকে দেখার চেষ্টা করা যায় সে সম্পর্কে এখানে বেশ কয়েকটি ভাল পরামর্শ দেওয়া হয়েছে, তবে আপনার সিস্টেমটিতে কেবল 65 বিলিয়ন ইনপুট সংমিশ্রণ রয়েছে তা আমি গুরুত্ব সহকারে সন্দেহ করি। এটি ইনপুট 36 বিট কম। আসুন ধরে নেওয়া যাক আপনি উপরে বর্ণিত সমস্ত পরামর্শ ইতিমধ্যে গ্রহণ করেছেন।
যদি প্রতিটি পরীক্ষা চালাতে প্রায় এক মিলি সেকেন্ড সময় নেয় এবং আপনি কেবল 10 টি প্রসেসরের (একটি সাধারণ পিসি) পরীক্ষাগুলি বিতরণ করেন, তবে পরীক্ষাটি 69 দিনের বেশি চলবে। এটি একটি সময়, কিন্তু সম্পূর্ণ অযৌক্তিক নয়। ১০০ টি প্রসেসরের (এক ডজন সাধারণ পিসি বা একটি যুক্তিসঙ্গত সার্ভার পিসি) জুড়ে বিতরণ করুন এবং পরীক্ষাগুলি under দিনের নীচে শেষ হবে। আপনি প্রতি সপ্তাহে প্রতিরোধগুলি পরীক্ষা করতে এটি চালাতে পারেন।