এই সমস্ত পয়েন্ট মোবাইল ডেভেলপমেন্ট, ওয়েব ফ্রন্টএন্ড এবং ব্যাকএন্ডে প্রয়োগ করা যেতে পারে। আমি এই অনুশীলনগুলি বিভিন্ন দল থেকে সংগ্রহ করেছি এবং গত 6 বছরে আমি যে সমস্যার মুখোমুখি হয়েছি তার মাধ্যমে। আপনি স্ক্র্যাচ থেকে একটি প্রকল্প তৈরি করার সময় এই অনুশীলনগুলি বিশেষভাবে সহায়ক হতে পারে। তাদের মধ্যে কিছু আপনাকে পুরোপুরি উপযুক্ত হতে পারে, অন্যরা নাও হতে পারে। যদি আপনার নিজস্ব দৃষ্টিভঙ্গি এবং বিভিন্ন অভিজ্ঞতা থাকে, আপনি সেগুলি এখানে শেয়ার করলে আমি খুশি হব। যাইহোক, আপনি যদি একজন মধ্যম বা জুনিয়র ডেভেলপার হয়ে থাকেন, তাহলে আপনার দলে এই অনুশীলনগুলি প্রয়োগ করা সত্যিই সাহায্য করতে পারে। চলো যাই!
একটি স্ট্যান্ডার্ড সফ্টওয়্যার ডেভেলপমেন্ট প্রক্রিয়ায়, যখন ব্যবসা থেকে একটি নতুন বৈশিষ্ট্যের অনুরোধ আসে, তখন এটি বিভিন্ন দলের মধ্যে বিতরণ করা হয়: ফ্রন্ট-এন্ড, ব্যাক-এন্ড এবং মোবাইল অ্যাপ ডেভেলপমেন্ট।
তারপরে, প্রতিটি দল পরিকল্পনা এবং টাস্ক পচন দিয়ে এগিয়ে যায়। কিন্তু ব্যাক-এন্ড টিমের যদি তাদের অংশ বিকাশের জন্য উল্লেখযোগ্যভাবে আরও বেশি সময় লাগে? যদি তারা সপ্তাহে একবার শেষ পয়েন্ট সরবরাহ করতে পারে?
ব্যাকএন্ড একটি বাধা হয়ে দাঁড়ায়।
মোবাইল এবং ফ্রন্ট-এন্ড ডেভেলপমেন্ট দলগুলি এভাবে কাজ করে: "ওহ, ব্যাক-এন্ড ইতিমধ্যেই এটি বাস্তবায়ন করেছে। আমাকে এই কাজটি নিতে দিন।" তারপর, তারা একটি বিরতি নেয়, তাদের প্রসঙ্গটি অন্য বৈশিষ্ট্যে স্যুইচ করে এবং চক্রটি চলতে থাকে। এটি ক্লান্তি, গতি হ্রাস এবং গুণমান হ্রাসের দিকে পরিচালিত করে।
সমাধান: ব্যাক-এন্ড দলের সাথে একটি চুক্তিতে সম্মত হন এবং সমস্ত অনুরোধ উপহাস করুন।
1. এন্ডপয়েন্ট এবং এন্টিটিগুলিতে ব্যাক-এন্ড দলের সাথে সমন্বয় করুন।
2A. স্টাব প্রতিক্রিয়া সহ ব্যাকএন্ড API প্রয়োগ করুন। ফেকার লাইব্রেরি নমুনা ডেটা তৈরিতে সাহায্য করতে পারে।
2B. অথবা ফ্রন্টএন্ডে স্টাব বাস্তবায়ন করুন। এটি কোডে সরাসরি ডেটা সহ একটি বস্তু হতে পারে। উদাহরণস্বরূপ, Node.js-এ, আপনি গতিশীল আমদানি ব্যবহার করে দক্ষতার সাথে এটি বাস্তবায়ন করতে পারেন এবং বান্ডেলের আকার বৃদ্ধি এড়াতে পারেন:
getUser() { return import('../../assets/mocks/users') .then(data => data.userById) .then(deserializeUser); };
এটি একটি মক HTTP পরিষেবাও হতে পারে যা প্রকৃত অনুরোধ করার পরিবর্তে সম্পদ থেকে JSON ফাইল আনে।
একটি বৈশিষ্ট্য পতাকা পিছনে বৈশিষ্ট্য লুকান.
ব্যাকএন্ড প্রস্তুত হলে, আপনি যদি ফ্রন্ট-এন্ড স্টাব পদ্ধতি ব্যবহার করেন তবে প্রকৃত API-এ স্যুইচ করুন এবং যাচাই করুন যে সবকিছু প্রত্যাশিতভাবে কাজ করে। এবং এই বৈশিষ্ট্যটি চালু করুন।
এখন, আপনি সম্ভবত লক্ষ্য করেছেন, পূর্ববর্তী বিভাগে, আমি বৈশিষ্ট্য পতাকা উল্লেখ করেছি। সংক্ষেপে, ফিচার ফ্ল্যাগ ওরফে ফিচার টগল ডেভেলপারদের লাইভ পরিবেশে ফিচার চালু বা বন্ধ করতে দেয়। এছাড়াও কয়েকটি ক্ষেত্রে রয়েছে যখন সেগুলি উপযোগী হয়: নতুন বৈশিষ্ট্যগুলিকে ধীরে ধীরে রোল আউট করা, A/B পরীক্ষা করা, বিটা বৈশিষ্ট্যগুলি সক্ষম করা এবং হটফিক্সগুলি প্রয়োগ করা৷
আমরা ফিচার পতাকা সংরক্ষণের জন্য গিটল্যাব ব্যবহার করি। এটি একটি ডেডিকেটেড রিপোজিটরি যা ব্যাকএন্ড এবং ফ্রন্টএন্ড উভয় প্রকল্পই ব্যবহার করে। দুর্দান্ত খবর হল এটির একটি ব্যবহারকারী-বান্ধব UI রয়েছে, এইভাবে পণ্য পরিচালকরা নিজেরাই বৈশিষ্ট্যগুলি পরিচালনা করতে পারেন। পূর্বে, আমরা প্রতিটি প্রকল্প সংগ্রহস্থলের জন্য আলাদাভাবে বৈশিষ্ট্য ফ্ল্যাগ ব্যবহার করতাম। যাইহোক, এই পদ্ধতিটি একবারে পুরো পণ্যের জন্য বৈশিষ্ট্যগুলি অক্ষম করার ক্ষমতা প্রদান করেনি। তাই আমরা সবকিছুকে একক সংগ্রহস্থলে নিয়ে যাই।
কোডে, এটি বেশ সহজ দেখায়:
if features.YOUR_FEATURE
লিখুন যা লুকানো দরকার।
যখন আমাদের পণ্যটি MVP পর্যায় থেকে একটি উত্পাদন অ্যাপ্লিকেশনে রূপান্তরিত হয়, তখন আমরা উদ্বিগ্ন ছিলাম যে ব্যবহারকারীরা এমন ত্রুটিগুলি পাবেন যা আমরা পুনরুত্পাদন করতে পারি না এবং এমনকি সচেতনও হতে পারি না। ত্রুটি-ট্র্যাকিং সরঞ্জামগুলি নিয়ে গবেষণা করার পরে, আমরা সেন্ট্রিতে স্থির হয়েছি। অভিজ্ঞতা ইতিবাচক ছিল. এবং এখন, আসুন কিছু গুরুত্বপূর্ণ সূক্ষ্মতার মধ্য দিয়ে যাওয়া যাক।
হুড অধীনে, কোনো ধরা পড়া ব্যতিক্রম ট্র্যাক করা হবে. অ্যাপ্লিকেশন এবং ব্যবহারকারীর সংখ্যা বাড়ার সাথে সাথে ত্রুটির সংখ্যা এতটাই অপ্রতিরোধ্য হয়ে উঠতে পারে যে সত্যিকারের গুরুত্বপূর্ণ কিছু লক্ষ্য করা প্রায় অসম্ভব হয়ে উঠছে। আপনি যদি অপ্রয়োজনীয় জিনিসগুলি ফিল্টার না করেন তবে সেন্ট্রি একটি ডাম্পস্টারে পরিণত হতে পারে। উদাহরণস্বরূপ, বাতিল অনুরোধ, সংযোগ ত্রুটি, এবং সংযুক্ত স্ক্রিপ্ট থেকে ত্রুটির মত ঘটনাগুলি সম্পূর্ণরূপে অকেজো এবং শুধুমাত্র বিজ্ঞপ্তি সহ আপনার কাজের ইমেল স্প্যাম করবে৷ একটি সমাধান হিসাবে, আপনি কনফিগারেশনে ফিল্টার যোগ করতে পারেন। এটি করার জন্য, একটি beforeSend
কলব্যাক সংজ্ঞায়িত করুন এবং এটি আপনার sentryPackage.init
এ রাখুন। এই কলব্যাকে, আপনি প্রতিটি ধরা ত্রুটি বিশ্লেষণ করতে পারেন এবং তারপরে এটি বাতিল করে দিতে পারেন (নাল রিটার্ন করে) যদি এটি অকেজো হয়। এখানে একটি ফিল্টারের একটি উদাহরণ যা অপ্রয়োজনীয় ত্রুটিগুলি বাদ দেয়:
function beforeSend(event, hint) { const error = hint.originalException; const externalScripts = [ 'gtm.js', // Google Tag Manager 'watch.js', // X Analytics ].join('|'); const errorsToIgnore = [ AxiosError.ERR_NETWORK, AxiosError.ECONNABORTED, AxiosError.ETIMEDOUT ]; if (axios.isCancel(error) || errorsToIgnore.includes(error.code) || error.stack?.match(externalScripts)) { return null; } return event; }
ডিফল্টরূপে, সেন্ট্রি ত্রুটি প্রতিবেদনে অনুরোধ এবং প্রতিক্রিয়ার বিষয়বস্তু অন্তর্ভুক্ত নাও করতে পারে। এই তথ্য ছাড়া, সঠিক ডিবাগিং অসম্ভব। সৌভাগ্যবশত, beforeSend
হ্যান্ডলারে, আমরা এই তথ্যটি অন্তর্ভুক্ত করতে পারি।
function beforeSend(event, hint) { const error = hint.originalException; if (error.isAxiosError) { const url = error.request?.responseURL; const response = error.response?.data; const request = error.config?.data; event.extra = { ...(event.extra || {}), url, response, request }; } return event; }
পাসওয়ার্ড, ইমেল ঠিকানা এবং কীগুলির মতো ডেটা ত্রুটি সামগ্রীতে অন্তর্ভুক্ত করা উচিত নয়। সেন্ট্রির এই ধরনের তথ্য লুকানোর জন্য একটি অন্তর্নির্মিত প্রক্রিয়া রয়েছে। আপনি নিরাপত্তা সেটিংসে এটি কনফিগার করতে পারেন। তাছাড়া, আপনি beforeSend
এ ইভেন্ট অবজেক্টের কিছু মুছে ফেলতে পারেন
যদি আপনার ব্যবসার প্রকৃতি অন্য কোথাও একটি সার্ভারে এই ধরনের ডেটা সংরক্ষণ করা নিষিদ্ধ করে, সেন্ট্রি আপনার নিজের সার্ভারে এটি ব্যবহার করার ক্ষমতা প্রদান করে।
এমন একটি পরিস্থিতি কল্পনা করুন যেখানে আপনি সেন্ট্রিতে একটি ত্রুটি সফলভাবে ক্যাপচার করেছেন, কিন্তু বিবরণে তথ্য অপর্যাপ্ত। আপনি লগগুলিতে ফিরে যান, কিন্তু হাজার হাজার অনুরোধ এবং প্রতি সেকেন্ডে আরও বেশি লগ লাইনের মধ্যে আপনি কীভাবে নির্দিষ্ট ত্রুটি সনাক্ত করতে পারেন? আপনি কীভাবে সঠিকগুলিকে আলাদা করতে পারেন, অনুরোধের চেইন তৈরি করতে পারেন এবং সঠিক ত্রুটিটি চিহ্নিত করতে পারেন, বিশেষ করে যখন আপনার ব্যবসার একাধিক দল থাকে এবং অন্যান্য পরিষেবার সাথে একীভূত হয়? এখানেই ট্রেসিং খেলায় আসে।
আমাদের নির্দিষ্ট বাস্তবায়নে, আমরা Jaeger ব্যবহার করেছি, যা OpenTracing API-এর উপর ভিত্তি করে।
সংক্ষেপে, প্রতিটি অনুরোধ এবং এর সমস্ত পদ্ধতি কল একটি অনন্য লেবেল দিয়ে ট্যাগ করা হয়। প্রতিটি লেবেলে তার অভিভাবক এবং কিছু মেটাডেটার একটি রেফারেন্স রয়েছে৷ এই সংখ্যার গঠনটি বাস্তবায়নের উপর নির্ভর করে কিন্তু OpenTracing-এর জন্য আপনি এটি কীভাবে কাজ করে তা পড়তে পারেন এবং স্প্যান, রেফারেন্স, চাইল্ড, প্যারেন্ট, এবং অফিসিয়াল রিপোজিটরি পৃষ্ঠার মতো পদগুলির সাথে পরিচিত হতে পারেন। বাস্তব জীবনে, ভাগ্যক্রমে ট্রেসিং খুব কমই ব্যবহার করা হবে। যাইহোক, এই বিরল দুর্ঘটনায়, এটি আপনার সময় বাঁচাতে পারে।
যখন আমরা ফিনটেক অ্যাপের এমভিপি প্রয়োগ করি, তখন আমাদের বেশ জটিল ফর্ম ছিল। সেই সময়ে, আমি এখনও তরুণ এবং অনভিজ্ঞ ছিলাম। এবং অবশেষে, আমরা বুঝতে পেরেছি যে আমাদের প্রকল্পটি ধীর হয়ে যাচ্ছে। কারণ খুঁজে বের করতে আমাদের অতিরিক্ত ঘন্টা ব্যয় করতে হয়েছিল। আমাদের অনেক অপ্রয়োজনীয় রি-রেন্ডার ছিল কারণ আমরা রিঅ্যাক্ট-এ প্রপস সম্পর্কিত প্রাথমিক নিয়মগুলি উপেক্ষা করেছি। আমি ভবিষ্যতে এই ধরনের পরিস্থিতি এড়াতে সম্ভাব্য সবকিছু করতে চেয়েছিলাম।
সুতরাং, আমি এইরকম প্রজেক্ট লিন্টারে যুক্ত করেছি এবং একটি অতিরিক্ত প্রারম্ভিক কনফিগারেশন package.json-এ রান করার জন্য Why-did-you-render । সংক্ষেপে, এই প্লাগইনটি একটি সতর্কতা জারি করে যদি কিছু অপ্রয়োজনীয়ভাবে পুনরায় রেন্ডার করা হয় এবং এটি কীভাবে এড়ানো যায় তা পরামর্শ দেয়। এছাড়াও, আমরা হেডলেস মোডে লাইটহাউস চালানো অন্তর্ভুক্ত করেছি। কিছু লোক বলে যে অকাল অপ্টিমাইজেশন খারাপ, কিন্তু আমার জন্য, এটি একটি নীতি: এটি শুরু থেকেই করুন ।
আপনি সম্ভবত ভাঙা উইন্ডো তত্ত্ব শুনেছেন. যদি একটি ভবনে একটি ভাঙা জানালা থাকে এবং কেউ এটি প্রতিস্থাপন না করে, তবে শেষ পর্যন্ত সেই বিল্ডিংটিতে একটি অক্ষত জানালা অবশিষ্ট থাকবে না।
একটি প্রকল্পে যত কম নিয়ম ও নিয়ন্ত্রণ থাকবে, নিম্নমানের কোড লেখার বা সম্পূর্ণ ভিন্ন স্টাইলে লেখার প্রলোভন তত বেশি। অসামঞ্জস্যপূর্ণ কোড এটি বুঝতে সময় বাড়ায়, যখন পরিষ্কার, পরিচিত, এবং সংক্ষিপ্ত কোড দ্রুত পড়ার জন্য অনুমতি দেয়। আমাদের একটি দলে, আমরা এক জায়গায় কোডিং শৈলী বর্ণনা করেছি। একটি দুর্দান্ত সূচনা পয়েন্ট হিসাবে, আপনি প্রেটিয়ার বা এয়ারবিএনবি কোড স্টাইল নিতে পারেন।
বিভিন্ন ধরণের পরীক্ষা, পদ্ধতি এবং কীভাবে সেগুলি সঠিকভাবে লিখতে হয় সে সম্পর্কে ইতিমধ্যে উল্লেখযোগ্য পরিমাণ সাহিত্য লেখা হয়েছে। এখানে উল্লেখ করার মতো একমাত্র জিনিস হল যে কোনও উত্পাদন অ্যাপ্লিকেশন রিগ্রেশন পরীক্ষা ছাড়া টিকে থাকতে পারে না। এই কারণেই আমরা আমাদের সমস্ত প্রচেষ্টাকে একটি বিস্তৃত এন্ড-টু-এন্ড টেস্টিং ফ্রেমওয়ার্ক তৈরি করার উপর ফোকাস করেছি এবং এর উপর ভিত্তি করে আমরা পরীক্ষা লিখেছি যেগুলি BDD পরিস্থিতি এবং ব্যবহারকারীর গল্পগুলির সাথে যুক্ত। আমরা ব্রাউজারের সাথে ইন্টারঅ্যাক্ট করার জন্য আমাদের কোড এবং নাট্যকার ফ্রেমওয়ার্ক সংগঠিত করতে পেজ অবজেক্ট প্যাটার্ন ব্যবহার করেছি। Safari সহ বিভিন্ন ব্রাউজারে পরীক্ষা করতে, আপনি Moon নামক একটি সমাধান ব্যবহার করতে পারেন। এটি আপনার সার্ভারগুলির একটিতে স্থাপন করা যেতে পারে।
এই নিবন্ধটি পড়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ! উপসংহারে, এই নিবন্ধটি মূল সফ্টওয়্যার ইঞ্জিনিয়ারিং অনুশীলনগুলিকে হাইলাইট করে যা উন্নয়ন প্রক্রিয়া এবং কোডের গুণমানকে উন্নত করে। ব্যাকএন্ড রেসপন্স মকিং, ফিচার ফ্ল্যাগ, এরর মনিটরিং, পারফরম্যান্স অপ্টিমাইজেশান, কোড স্টাইল স্ট্যান্ডার্ড, রিগ্রেশন টেস্ট এবং ট্রেসিংয়ের মতো কৌশলগুলি গ্রহণ করে আপনি আরও দক্ষ এবং নির্ভরযোগ্য সফ্টওয়্যার তৈরি করতে পারেন। আসুন আমাদের সফ্টওয়্যার উন্নত করতে এবং যোগাযোগে থাকুন! :)
এই নিবন্ধটির প্রধান চিত্রটি হ্যাকারনুনেরএআই ইমেজ জেনারেটর প্রম্পট "গতি" এর মাধ্যমে তৈরি করেছে।