যেকোন সফটওয়্যার ইঞ্জিনিয়ারকে প্রোডাকশন কোডের মূল অংশগুলি পর্যালোচনা করতে বলুন, এবং অনিবার্যভাবে, তারা তিনটি জিনিস নির্দেশ করবে যেগুলি রিফ্যাক্টর করা দরকার। তাহলে কেন এত খারাপ, ভঙ্গুর, বা ভুল বোঝাবুঝি কোড উৎপাদনে চলছে?
উত্তরটি সহজ:প্রকৌশলীরা এটি স্পর্শ করতে ভয় পান। রিফ্যাক্টরিং কাজগুলি চিহ্নিত করা হয় এবং ব্যাকলগে যুক্ত করা হয়, কিন্তু খুব কমই এটি বর্তমান স্প্রিন্টে পরিণত হয়৷
এর অসংখ্য কারণ রয়েছে। কোডটি হয়তো একজন প্রকৌশলী লিখেছিলেন যিনি কয়েক বছর আগে দল ছেড়েছিলেন এবং কেউই এটি পুরোপুরি বুঝতে পারে না। অন্যান্য ক্ষেত্রে, সক্ষমতা ব্যবসার জন্য গুরুত্বপূর্ণ। সম্ভাব্য বিভ্রাট বা রাজস্ব ক্ষতির জন্য কেউ দায়ী হতে চায় না।
এই পোস্টে, আমরা পরীক্ষা করব কিভাবে আপনি সাইন্টিস্টকে মাইগ্রেট করতে, রিফ্যাক্টর করতে এবং আত্মবিশ্বাসের সাথে সমালোচনামূলক রুবি প্রোডাকশন কোড পরিবর্তন করতে পারেন।
তবে প্রথমে, আপনি জিজ্ঞাসা করতে পারেন — আমরা কি কোড সমস্যাগুলি খনন করতে পরীক্ষাগুলি ব্যবহার করতে পারি না?
এই হল রেল টেস্টিং এর জন্য, তাই না?
হ্যাঁ, এবং না। মোতায়েন করার আগে কোড পরিবর্তনের উপর সম্পূর্ণ আস্থা অর্জন করা প্রায়ই কঠিন। ইউনিট এবং সিস্টেম পরীক্ষা পাস। যাওয়া ভালো, তাই না?
বাস্তবতা হল বাস্তব জগতের কোন বিকল্প নেই, অর্থাৎ উৎপাদন। ডেটার মান খারাপ হলে বা পরীক্ষা অনুপস্থিত হলে কী হবে? নতুন সফ্টওয়্যারটি উত্পাদন থ্রুপুট পরিচালনা করার জন্য যথেষ্ট ভাল পারফর্ম করবে কিনা তা আপনি কীভাবে জানতে পারবেন?
সরকারী পরিষেবা সহ দলগুলি কখনও কখনও দেখতে পায় যে তাদের "বাগওয়ার্ড সামঞ্জস্য" সমস্যাগুলি মোকাবেলা করতে হবে। যখন একটি বাগ কিছু সময়ের জন্য উত্পাদনে বিদ্যমান থাকে, তখন ক্লায়েন্টরা এমনভাবে কোড করতে পারে যা ধারাবাহিকভাবে ভুল আচরণের উপর নির্ভর করে। গ্রাহকরা প্রায়ই অপ্রত্যাশিত উপায়ে সফ্টওয়্যার ব্যবহার করে৷
৷বিজ্ঞানীর সাথে রুবি এবং রেলের উত্পাদন পরিবর্তনগুলি পর্যবেক্ষণ করুন
যদি কোনো পরিবর্তনে আস্থা অর্জনের জন্য উৎপাদনই সেরা জায়গা হয়, তাহলে কোড সেখানে কীভাবে আচরণ করে তা পর্যবেক্ষণ করুন। এটি প্রথমে ভীতিকর মনে হতে পারে, কারণ "উৎপাদনে পরীক্ষা" ধারণাটি ক্লাসিক সফ্টওয়্যার ইঞ্জিনিয়ারিং অনুশীলনের বিরোধিতা করে৷
যাইহোক, সুসংবাদ হল যে রুবি এবং রেইলে বিজ্ঞানী রত্ন ব্যবহার করে এটি করা সহজ এবং নিরাপদ। বিজ্ঞানীর নাম একটি প্রদত্ত হাইপোথিসিস যাচাই করার জন্য পরীক্ষা চালানোর বৈজ্ঞানিক পদ্ধতির উপর ভিত্তি করে। এই ক্ষেত্রে, আমাদের অনুমান হল যে নতুন কোড কাজ করে৷
৷আমরা নিরাপদে এই পদ্ধতিটি গ্রহণ করার কারণটি এই সত্য থেকে উদ্ভূত যে পরীক্ষাগুলি এখনও বিদ্যমান কোডের ফলাফল ব্যবহার করে। নতুন কোড শুধুমাত্র নির্ভুলতা এবং কর্মক্ষমতা উভয়ের জন্য পর্যবেক্ষণ এবং তুলনা উদ্দেশ্যে মূল্যায়ন করা হয়। আমরা বাস্তব-বিশ্বের ডেটা এবং পরামিতি ব্যবহার করে কর্মক্ষমতা মূল্যায়ন করে আগে আলোচনা করা পরীক্ষার কভারেজ উদ্বেগগুলি প্রশমিত করি। পরীক্ষাগুলি সাধারণত উত্পাদনের উপর প্রভাব কমানোর জন্য অনুরোধের একটি নির্বাচিত নমুনা হার মূল্যায়ন করে। যাইহোক, আপনি চাইলে প্রতিটি অনুরোধ মূল্যায়ন করতে পারেন।
আসুন এখন দেখে নেওয়া যাক বিজ্ঞানী কীভাবে বিমূর্ত পদ্ধতিতে একটি শাখায় কাজ করে৷
রুবি'স সায়েন্টিস্টের বিমূর্তকরণ প্যাটার্ন দ্বারা শাখা
বিজ্ঞানীর দৃষ্টিভঙ্গি শুরু হয় ব্রাঞ্চ বাই অ্যাবস্ট্রাকশন প্যাটার্ন দিয়ে যা মার্টিন ফাউলারের দ্বারা বর্ণনা করা হয়েছে "একটি সফ্টওয়্যার সিস্টেমে ধীরে ধীরে একটি বড় আকারের পরিবর্তন।"
আপডেট হওয়া কোডটিকে আলাদা করার জন্য আমরা একটি বিমূর্ততা স্তর প্রবর্তন করি। এই স্তরটি সিদ্ধান্ত নেয় কোন বাস্তবায়ন ব্যবহার করতে হবে যাতে পরীক্ষাটি সিস্টেমের বাকি অংশে স্বচ্ছ হয়। কৌশলটি একটি বৈশিষ্ট্য পতাকা ব্যবহার করার সাথে সম্পর্কিত যা কোড পথ নির্ধারণ করে।
বিজ্ঞানী রত্ন, যা Github থেকে উদ্ভূত, একটি পরীক্ষা ব্যবহার করে এই প্যাটার্ন প্রয়োগ করে। বিদ্যমান কোডটিকে নিয়ন্ত্রণ হিসাবে উল্লেখ করা হয় এবং নতুন বাস্তবায়ন প্রার্থী। উভয় কোড পাথ এলোমেলো ক্রমে চালানো হয়, কিন্তু শুধুমাত্র নিয়ন্ত্রণ ফলাফল ক্লায়েন্টকে ফেরত দেওয়া হয়।
রুবি পরিষেবাকে রিফ্যাক্ট করতে বিজ্ঞানী ব্যবহার করা
একটি রুবি পরিষেবা বিবেচনা করুন যা একটি প্রদত্ত সংখ্যার জন্য বৃহত্তম মৌলিক গুণক প্রদান করে। অনুমান করুন যে আমরা প্রার্থীদের প্রয়োজনীয় সেট ছাঁটাই করার জন্য অপ্টিমাইজেশানগুলি চিহ্নিত করেছি, পরিষেবার গতি বাড়ানো।
যাইহোক, পরিষেবা মালিকরা নিশ্চিত হতে চান যে কোনও বাগ চালু হয়নি। তারা কোন কর্মক্ষমতা উন্নতি পর্যবেক্ষণ করতে চান. এই পদ্ধতিতে কল করার জন্য ক্লায়েন্টদের পরিবর্তন করে নিম্নলিখিত কোডটি প্রবর্তন করুন:
এই মুহুর্তে, শুধুমাত্র use (নিয়ন্ত্রণ) অভিব্যক্তি আহ্বান করা হয়। পরীক্ষাটিকে সার্থক করতে, একটি কাস্টম Experiment সংজ্ঞায়িত করুন ক্লাস এটি সক্ষম করতে (নীচের 100% সময়) এবং ফলাফল প্রকাশ করুন (এই ক্ষেত্রে, শুধু লগিং)। বিজ্ঞানী চমত্কার ডেটা তৈরি করে তবে এটি ডিফল্টরূপে এটির সাথে কিছুই করে না। সেই অংশটি আপনার উপর ছেড়ে দেওয়া হয়েছে।
পরীক্ষার ফলাফলগুলি লগ করা হবে, এবং আমরা প্রতিক্রিয়ার উপর ভিত্তি করে সময়ের সাথে উন্নতি করতে পারি৷ একবার নতুন কোড প্রয়োজনীয়তা পূরণ করে এবং আত্মবিশ্বাস বেশি হলে, নতুন বাস্তবায়নের জন্য একটি প্রতিনিধি দল দিয়ে বিজ্ঞান কোড প্রতিস্থাপন করে নতুন বাস্তবায়নের কাটওভার সম্পন্ন করুন।
ল্যাবটেক রুবি অন রেলে বিজ্ঞানীদের পরীক্ষাকে সহজ করে তোলে
আপনি সহজেই বিজ্ঞানী কনফিগার করতে এবং ফলাফলগুলি পরিচালনা করতে আপনার Rails অ্যাপ্লিকেশনে LabTech রত্ন ব্যবহার করতে পারেন৷
যে অ্যাপ্লিকেশনগুলি AppSignal ব্যবহার করে সেগুলি Appsignal.instrument ব্যবহার করতে পারে৷ বৈজ্ঞানিক ইভেন্টগুলি সম্পূর্ণ হতে কতক্ষণ সময় নেয় তা ট্র্যাক করতে কাস্টম ইন্সট্রুমেন্টেশন সহায়ক। পারফরম্যান্স টাইমলাইনে ইভেন্টগুলি উপস্থিত দেখতে এটিকে বিভিন্ন পরীক্ষার কোড ব্লকের চারপাশে মোড়ানো।
এখন, LabTech-এ ফিরে যাওয়া — নীচের ওয়েব পৃষ্ঠাটি সহজভাবে ফ্যাক্টরের জন্য একটি সংখ্যা গ্রহণ করে।

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

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

বিজ্ঞানীর কেস এবং সীমাবদ্ধতা ব্যবহার করুন
বিজ্ঞানীদের জন্য সর্বোত্তম ব্যবহারের ক্ষেত্রে অনুসন্ধান, গণনা এবং কোড অন্তর্ভুক্ত থাকে যার কোন পার্শ্ব প্রতিক্রিয়া নেই। কোড যেটিতে লেনদেন সংক্রান্ত আপডেট বা বহিরাগত ইন্টিগ্রেশন রয়েছে যেমন ইমেল মডেলের সাথে পরিষ্কারভাবে ফিট করে না কারণ ক্ষমতাটি দুইবার চালানো হয় (পুরানো এবং নতুন উভয়ই বাস্তবায়ন)।
এটি একটি তুচ্ছ সীমাবদ্ধতা নয়, কারণ এটি বেশ কয়েকটি ব্যবহারের ক্ষেত্রে নির্মূল করে। যাইহোক, কিছু সমাধান আছে যদি পরীক্ষাটি আপনার সাফল্যের জন্য গুরুত্বপূর্ণ হয়। পার্শ্ব প্রতিক্রিয়াগুলি প্রাসঙ্গিক কিনা বা অনুলিপি একটি সমস্যা কিনা তা বিবেচনা করুন। উদাহরণস্বরূপ, মূল্যায়নের সময় দুটি ইমেল পাঠানো হয়েছে কিনা তা কিছু ক্ষেত্রে ব্যাপার নাও হতে পারে। আরেকটি বিকল্প হল নতুন কোডটি ফলাফল নির্ধারণ করে তবে এটি চালিয়ে যাওয়া নয়। এটি কোনো অর্থপূর্ণ কর্মক্ষমতা তুলনা প্রতিরোধ করবে। যাইহোক, এটি আপনাকে নির্ভুলতা যাচাই করার অনুমতি দেবে।
অন্যান্য সীমাবদ্ধতা রিটার্ন মানগুলিতে বিজ্ঞানীর ফোকাস থেকে উদ্ভূত হয়। কিছু ক্ষেত্রে, বৈধ ফলাফলগুলি সময়ের সাথে সাথে পার্থক্য প্রদর্শন করতে পারে, সেগুলি কেবল প্রতিক্রিয়াতে টাইমস্ট্যাম্প অন্তর্ভুক্ত করে বা নির্দিষ্ট কারণগুলি পরিবর্তিত হয়। অনেক ক্ষেত্রে, আমরা মৌলিক স্ট্রিং তুলনার বাইরে নির্ভুলতা যাচাই করতে পরীক্ষায় কাস্টম তুলনা যুক্তি লিখতে পারি।
অবশেষে, ল্যাবটেকের একটি সীমাবদ্ধতা হল যে এটি লেখার সময় পর্যন্ত রেল 7 এ পোর্ট করা হয়নি।
রেলে কার্যকরী বিজ্ঞানী পরীক্ষার জন্য সর্বোত্তম অনুশীলন
আপনার পরীক্ষাগুলি বাস্তবায়ন করার সময় এই আইটেমগুলি বিবেচনা করুন:
- রেল প্রকল্পগুলিতে, বিজ্ঞানীকে হয় একটি ইনিশিয়ালাইজার বা রেল ল্যাবটেক মণির মতো একটি মোড়কে কনফিগার করা যেতে পারে। বেশিরভাগ রেল অ্যাপ্লিকেশনের ইতিমধ্যেই একটি ডাটাবেস রয়েছে, তাই ল্যাবটেক ফলাফল সংরক্ষণ করতে ActiveRecord ব্যবহার করে।
- উন্নয়ন এবং পরীক্ষাকে ধীরগতি এড়াতে, শুধুমাত্র স্টেজিং এবং উত্পাদন পরিবেশে আপনার পরীক্ষা সক্ষম করুন৷
- উৎপাদনের উপর কোন সম্ভাব্য প্রভাব কমাতে, শুধুমাত্র কয়েক শতাংশ অনুরোধের উপর পরীক্ষা চালান। ল্যাবটেক এটিকে একটি ঐচ্ছিক প্যারামিটার হিসাবে সমর্থন করে যখন আপনি পরীক্ষাটি সক্ষম করেন (এটি প্রাথমিকভাবে ডিফল্টরূপে অক্ষম থাকে)। বিশুদ্ধ বিজ্ঞানী ব্যবহার করে, এই যুক্তিটি পরীক্ষার
enabled?কোড করা সহজ পদ্ধতি। - কিছু যুক্তি সম্পদ-নিবিড়, তাই একটি কম নমুনা হার শুরু করার জন্য একটি ভাল জায়গা হতে পারে। আপনি ফলাফলের সাথে আস্থা অর্জন করার সাথে সাথে মূল্যায়ন করা অনুরোধের শতাংশ বৃদ্ধি করুন৷
- আপনার ফলাফল থেকে সর্বাধিক পেতে আপনি প্রসঙ্গ বৈশিষ্ট্য যোগ করতে পারেন। পরীক্ষার প্রসঙ্গটি ডেটার একটি প্রতীক-কীড হ্যাশে সেট করা যেতে পারে যা তারপর প্রকাশিত ফলাফলগুলিতে উপলব্ধ করা হয়, যেমন:
র্যাপ-আপ:বিজ্ঞানীর সাথে আপনার রুবি অ্যাপটি পর্যবেক্ষণ করুন এবং নিরীক্ষণ করুন
এই পোস্টে, আমরা আবিষ্কার করেছি কিভাবে সায়েন্টিস্ট রত্ন ব্যবহার করতে হয়, পরিবর্তন করতে, মাইগ্রেট করতে এবং রিফ্যাক্টর রুবি কোড উৎপাদনে।
আমরা বিমূর্তকরণ প্যাটার্ন দ্বারা শাখায় বিজ্ঞানীর উৎপত্তি পরীক্ষা করেছি, তারপর রিফ্যাক্টরিংয়ে ডুব দিয়েছি। এর পরে, আমরা দেখেছি কিভাবে ল্যাবটেক ফলাফল সংগ্রহ এবং আপনার সায়েন্টিস্ট কনফিগারেশনে সাহায্য করতে পারে৷
আমরা শেষ পর্যন্ত কয়েকটি সেরা অনুশীলনের রূপরেখা দেওয়ার আগে বিজ্ঞানীর কিছু সীমাবদ্ধতাকে স্পর্শ করেছি।
আপনার সিস্টেমে কী ঘটছে তা আপনাকে অবশ্যই পর্যবেক্ষণ এবং নিরীক্ষণ করতে হবে। বৃহত্তর আত্মবিশ্বাসের সাথে আপনার রুবি কোডে গুরুত্বপূর্ণ পরিবর্তন করতে আপনার বিকাশ প্রক্রিয়ায় বিজ্ঞানীকে সংহত করুন৷
শুভ কোডিং!
পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!
ড্যারেন ব্রোমার
ড্যারেন লিখিত শব্দের মাধ্যমে অনুপ্রাণিত করা এবং জটিল জিনিসগুলিকে বোঝা সহজ করে তোলে। তার আগ্রহের মধ্যে রয়েছে বিজ্ঞান এবং পদার্থবিদ্যা, এবং তাদের উভয়কে বোঝার জন্য যথেষ্ট গণিত। তিনি উচ্চ-মানের সামগ্রী এবং প্রযুক্তি সমাধান তৈরি করেন এবং এটি সম্পর্কে মাঝে মাঝে টুইট করেন।
ড্যারেন ব্রোমারের সমস্ত নিবন্ধ