প্রথমে একটি নতুন এপিআই তৈরি করুন, এটি আপনার নতুন এপিআই আচরণটি চান তা করে। যদি এটি ঘটে থাকে যে এই নতুন এপিআইটির ওল্ড এপিআইয়ের মতো একই নাম রয়েছে, তবে আমি _NEW নামটি নতুন এপিআই নামের সাথে যুক্ত করব।
int DoSomethingInterestingAPI ();
হয়ে:
ইন্ট ডোসোমিংথিং ইন্টারেস্টিং এপিআই_উইউ (ইন্টি টু_মোর_আরগমেন্টস); int DoSomethingInterestingAPI_OLD (); ইন্ট ডোসোমিংথিং ইন্টারেস্টিংএপিআই () {ডোসোমিংথিং ইন্টারেস্টিং এপিআই_এনইউ (যাইহোক_ডিফাল্ট_মিমিক্স_এই_ল্ড_এপিআই); ঠিক আছে - এই পর্যায়ে - আপনার সমস্ত রিগ্রেশন টেস্ট সিল পাস - ডোসোমিংথিং ইন্টারেস্টিংএপিআই () নামটি ব্যবহার করে।
নেক্সট, আপনার কোডের মধ্য দিয়ে যান এবং ডলসোমিংথিং ইন্টারেস্টিংএপিআই () এর সমস্ত কলগুলি ডসোমিংথিং ইন্টারেস্টিংএপিআই_এনইউ () এর যথাযথ ভেরিয়েন্টে পরিবর্তন করুন। এর মধ্যে নতুন এপিআই ব্যবহার করতে আপনার রিগ্রেশন টেস্টের যে কোনও অংশ পরিবর্তন করার দরকার রয়েছে তা আপডেট / পুনর্লিখন অন্তর্ভুক্ত রয়েছে।
নেক্সট, ডসোমিংথিং ইন্টারেস্টিং এপিআই_োল্ড () ([অবনমিত ())] হিসাবে চিহ্নিত করুন। আপনি যতক্ষণ না চান অবমুক্ত এপিআই এর আশেপাশে রাখুন (যতক্ষণ না আপনি তার উপর নির্ভরশীল সমস্ত কোড নিরাপদে আপডেট করেছেন)।
এই পদ্ধতির সাথে, আপনার রিগ্রেশন পরীক্ষার কোনও ব্যর্থতা কেবল সেই রিগ্রেশন পরীক্ষার বাগগুলি বা আপনার কোডের বাগগুলি চিহ্নিত করতে পারে - ঠিক যেমন আপনি চান want এপিআই এর স্পষ্টভাবে _NEW এবং _OLD সংস্করণ তৈরি করে একটি এপিআই সংশোধন করার এই পর্যায়ের প্রক্রিয়াটি আপনাকে নতুন এবং পুরাতন কোডের বিটগুলিকে কিছু সময়ের জন্য সহাবস্থান করতে দেয়।
বাস্তবে এই পদ্ধতির একটি ভাল (কঠোর) উদাহরণ রয়েছে। আমার বিটসবস্ট্রিং () ফাংশন ছিল - যেখানে আমি তৃতীয় প্যারামিটারটি স্ট্রিংগুলিতে বিটের COUNT হিসাবে থাকার পদ্ধতির ব্যবহার করেছি। সি ++ তে অন্যান্য এপিআই এবং প্যাটার্নগুলির সাথে সামঞ্জস্য রাখতে আমি ফাংশনটিতে আর্গুমেন্ট হিসাবে শুরু / শেষ করতে স্যুইচ করতে চেয়েছিলাম।
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
আমি নতুন এপিআই দিয়ে বিটসবস্ট্রিং_নউই একটি ফাংশন তৈরি করেছি এবং এটি ব্যবহার করার জন্য আমার সমস্ত কোড আপডেট করেছে (বিটসবস্ট্রিংয়ে আরও কিছু কল নেই)। তবে আমি বেশ কয়েকটি রিলিজ (মাস) এর জন্য বাস্তবায়নে রেখে গিয়েছিলাম - এবং এটি অবমূল্যায়িত হিসাবে চিহ্নিত করেছি - যাতে প্রত্যেকে বিটসবস্ট্রিং_এনইউতে স্যুইচ করতে পারে (এবং সেই সময় একটি গণনা থেকে শুরু / শেষ শৈলীতে যুক্তিটি পরিবর্তন করতে পারে)।
তারপরে - যখন এই রূপান্তরটি সম্পন্ন হয়, আমি বিটসবস্ট্রিং () মুছে ফেলার এবং বিটসবস্ট্রিং_নাইউ-> বিটসবস্ট্রিং () নাম পরিবর্তন করে (এবং বিটসবস্ট্রিং_নউ নামটি বাতিল করে) আরও একটি প্রতিশ্রুতিবদ্ধ করেছি।