پرچم گذاری ویژگی تکنیکی است که می تواند برای طیف وسیعی از اهداف مورد استفاده قرار گیرد. شاید به خاطر همین, تعریف یک پرچم از ویژگی های می تواند بسیار کمی متفاوت است, بسته به نوع که از شما درخواست. با این اوصاف, هر کس از شما درخواست, مفهوم اصلی پرچم ویژگی های اساسی یکسان باقی می ماند:
پرچم ویژگی مکانیزمی است که به شما امکان می دهد در زمان اجرا بین مسیرهای مختلف کد در سیستم خود یکی را انتخاب کنید.
در این راهنما خواهید دید که این مفهوم به ظاهر ساده می تواند پیشرفت های مختلفی را در روند توسعه محصول شما فراهم کند. شما همچنین می خواهید کشف چه نوع قابلیت یک سیستم ویژگی ضعیف جامع باید, فراتر از این قابلیت بنیادی تنظیم رفتار نرم افزار خود را در پرواز.
قبل از اینکه ما به هر بیشتر, اجازه دهید یک نگاه چه پرچم ویژگی ممکن است مانند در کد نگاه. اغلب به عنوان ساده به عنوان متفکرانه قرار بیانیه اگر/دیگری است:
در اینجا می توانید ببینید که ما فقط "یک شبه" را در لیست گزینه های حمل و نقل موجود قرار می دهیم اگر متغیر پرچم "اف اف اف اف اف اف اف اف اف اف" درست باشد. خواننده دانا ممکن است خود را بدانم چه چیزی باعث می شود که متغیر پرچم درست یا غلط پیدا کنید. سوال خوب! نحوه اتخاذ این تصمیم پرچم گذاری بسته به نوع پرچم ویژگی متفاوت خواهد بود و جنبه مهمی از سیستم پرچم گذاری ویژگی است. با این حال, صرف نظر از اینکه چگونه تصمیم ضعیف ساخته شده است, مفهوم اساسی انتخاب یک مسیر کد در زمان اجرا یکسان برای همه استفاده از ویژگی های ضعیف باقی مانده است.
موارد استفاده
ما می توانیم این انواع مختلف پرچم های ویژگی را با بررسی روش های مختلفی که یک تیم می تواند از پرچم گذاری ویژگی استفاده کند درک کنیم. یک تیم تحویل محصول را تصور کنید که در یک شرکت تجارت الکترونیک کار می کند. این تیم صاحب صفحه مشخصات محصول است و قصد دارد یک ویژگی جدید بزرگ – چرخ فلک "محصولات مرتبط" را اضافه کند که امیدوارند به خریداران کمک کند تا محصول دقیق را برای نیازهای خود پیدا کنند.
استقرار جدا از انتشار
این یک ویژگی بزرگ جدید است و نیاز به تیم های مختلف دیگر برای ایجاد و انتشار تغییرات پشتیبانی قبل از اینکه مولفه چرخ فلک بتواند زندگی کند. هرچند تیم مشخصات محصول می خواهد از گره زدن استقرار خود با تیم های دیگر جلوگیری کند – نمی خواهند مجبور شوند انتشار کارهای دیگر در صفحه را متوقف کنند فقط به این دلیل که تیم دیگری تغییراتی را که برای چرخ فلک محصولات مرتبط نیاز دارند به پایان نرسانده است.
انها می توانند این مشکل را با توسعه ویژگی های محصولات مرتبط در یک شاخه حل کنند اما از طریق تجربه تلخ یاد گرفته اند که شاخه های طولانی مدت می توانند درد و رنج زیادی ایجاد کنند.
بجای, انتخاب کردن به استفاده از یک پرچم ویژگی به جای, قرار دادن یک تصمیم ضعیف در نقطه ای که چرخ فلک می شود برای صفحه فعلی تولید:
هنگامی که پرچم` مربوط _ محصولات ' فعال نیست, ما به سادگی گذشته کد چرخ فلک رندر جست و خیز به طور کامل. این اجازه می دهد تا تیم اطلاعات محصول به استقرار تغییرات هر زمان که می خواهید – تا زمانی که پرچم که `مربوط _ محصولات` غیر فعال است, مهم نیست که کار حمایت از تیم های دیگر مستقر شده است هنوز از چرخ فلک پنهان خواهد شد. پیاده سازی چرخ فلک در صفحه مشخصات محصول به خودی خود نیازی به تست یا حتی کاربردی ندارد تا زمانی که این پرچم غیرفعال بماند.
این دسته از پرچم ویژگی را ضامن انتشار می نامند. این اجازه می دهد تا یک تیم برای جدا کردن استقرار کد از انتشار یک ویژگی. همانطور که دیدیم این یک قابلیت قدرتمند است. این به یک تیم کمک می کند تا از شاخه های طولانی مدت جلوگیری کند و تغییرات را در سیستم های مختلف جدا کند و نیاز به اجرای همزمان کد "بیگ بنگ" را کاهش دهد.
اجرای کنترل شده
تیم پس از مدتی حاضر به راه اندازی چرخ فلک محصولات مرتبط است. تمام تغییرات وابسته از تیم های دیگر تکمیل شده و مستقر شده اند و این ویژگی را به طور کامل تست کرده اند. اما این یک تغییر بزرگ است و شامل بسیاری از بخش های متحرک است. تیم به یک شبکه ایمنی اضافی اهمیتی نمی دهد. خوشبختانه هنوز هم پرچم ویژگی `محصولات مرتبط` را در جای خود دارند. در حالی که در ابتدا در محل برای مخفی کردن کار نیمه تمام قرار داده شد, تیم هم اکنون می توانید استفاده کنید که پرچم به اجرای کنترل از چرخ فلک محصولات مرتبط نیز انجام.
به جای انتشار چرخ فلک به همه, این تیم در ابتدا افشای چرخ فلک به تنها 5% از کاربران. اونها میبینند که با اون مجموعه کوچکی از درخواستها به صفحه جزییات محصول چه اتفاقی میافته و اگه همه چیز خوب پیش بره به انتشار کامل میرسن. این نسخه قناری نامیده می شود-5 درصد اولیه کاربران "قناری های موجود در معدن زغال سنگ" هستند که به تشخیص هرگونه مشکل در تولید کمک می کنند بدون اینکه کل پایگاه کاربر ما را در معرض دید خود قرار دهند.
با این نسخه قناری, ما می خواهیم به سازگار که کاربران دیدن چرخ فلک-این امر می تواند یک تجربه کاربری بسیار گیج کننده اگر ما به طور تصادفی تبدیل از ویژگی های برای 5% از بازدید از صفحه. برای اینکه این کار, از ویژگی های ما تصمیم ضعیف خواهد شد که به کاربر فعلی ساخت درخواست را در نظر به طوری که سیستم ضعیف می توانید اطمینان حاصل شود که همان 5% از کاربران پرچم را فعال کنید:
این توانایی در نظر گرفتن زمینه مانند کاربر فعلی هنگام تصمیم گیری در مورد پرچم گذاری برای هر سیستم پرچم گذاری ویژگی جدی بسیار مهم است. ما این را در یک لحظه بیشتر بررسی خواهیم کرد.
پس از روشن کردن ویژگی برای درصد کمی از کاربران, تیم به تماشای معیارهای سیستم خود را برای هر موضوع – افزایش قابل توجه در نرخ خطا, و یا یک سنبله مشخص شده در زمان تاخیر درخواست, مثلا. هیچ چیز نگران کننده ای نمی بینند و احساس اطمینان می کنند که ویژگی جدیدشان هیچ مشکل جدی ندارد. با این حال, با وجود اعتماد به نفس خود را در اجرای فنی مربوط به چرخ فلک محصول, این تیم هنوز هم در حال رفتن به رول از ویژگی های به همه. در عوض میخواهند یک تجربه (به طور خاص تست الف/ب ) را انجام دهند تا بتوانند درک کنند که چرخ فلک محصولات مرتبط جدید چگونه بر رفتار کاربران تاثیر میگذارد.
فرضیه تیم این است که نمایش محصولات مرتبط این احتمال را افزایش می دهد که مصرف کنندگان محصول کامل خود را پیدا کرده و خرید کنند. تنها راه اعتبارسنجی واقعی این فرضیه تست چرخ فلک در برابر کاربران واقعی است.
تیم این کار را با انجام تست الف/ب انجام خواهد داد. ویژگی های سیستم ضعیف خود را به صورت تصادفی کاربران خود را به دو گروه گروه درمان و گروه کنترل تقسیم می شود. گروه درمان در معرض ویژگی جدید قرار خواهد گرفت-پرچم ویژگی برای این کاربران روشن خواهد بود. گروه کنترل در معرض دید قرار نمی گیرد – پرچم ویژگی برایشان خاموش خواهد بود. سپس تیم بررسی خواهد کرد که رفتار گروه درمان متفاوت از گروه کنترل است یا خیر. در این مورد خاص تیم بررسی خواهد کرد تا ببیند که گروه درمان احتمال بیشتری برای خرید دارد (و بنابراین قرار گرفتن در معرض محصولات مرتبط چرخ فلک باعث می شود کاربران بیشتر خرید کنند). پرچمی که به این روش استفاده می شود را ضامن تجربی می نامند .
به منظور به درستی اندازه گیری تاثیر پرچم ویژگی در رفتار کاربر, شما باید یک راه برای ارتباط دولت پرچم با رفتار کاربر. بعدا در راهنما در مورد این موضوع عمیق تر بحث خواهیم کرد.
اما هنوز هم نمی خواهند این پرچم ویژگی های مرتبط را حذف کنند! این یک کار گذشته را به انجام.
کشتن کلید
به نظر می رسد که سیستم اصلی که قدرت جدید مربوط به قابلیت های محصول کمی داد و بیداد کن است. چند بار در طول تست به نظر می رسید به نمایشگاه نوعی از نشت حافظه, و در زمان های دیگر به نظر می رسد به علت خوشه در استفاده از پردازنده. تیم عملیاتی در مورد این موضوع کمی عصبی است و می خواهد راهی برای تخریب سیستم به طرز شگفت انگیزی داشته باشد اگر شروع به دیدن چیزهایی کند که به سمت پایین حرکت می کنند. پرچم ویژگی ما در صورت استفاده مجدد برای استفاده در مواقع اضطراری می تواند در اینجا کمک کند. پرچم ویژگی به عنوان یک کلید کشتن در جای خود باقی مانده است – راهی برای کسی که به سرعت عملکرد محصولات مرتبط را در تولید خاموش کند (بدون نیاز به استقرار کد).
ویژگی تصویب پرچم یک سفر است
رسیدن به پایان سفر برای این پرچم خاص, ما در حال حاضر درک کنند که پرچم ویژگی می تواند طیف گسترده ای از اهداف خدمت. این سفر از طریق موارد استفاده مختلف نیز نماینده مسیر پذیرش برای پرچم های ویژگی در اکثر سازمان ها است. اینها در ابتدا برای یک مورد استفاده در نظر گرفته شده اند – شاید مدیریت انتشار یا تجربه – اما با گذشت زمان برای الگوهای استفاده بیشتر و بیشتر توسط ذینفعان مختلف اتخاذ می شوند.
موارد استفاده اضافی
موارد استفاده از ویژگی های پرچم حتی بیشتر وجود دارد که ما تاکنون در سفر خود پوشش نداده ایم:
تست در تولید
پرچم های ویژگی به ما امکان می دهند یک ویژگی را در تولید مستقر کنیم اما فقط این ویژگی را در معرض تسترهای داخلی قرار می دهیم. این به ما اجازه می دهد تا یک ویژگی را در همان محیط تست کنیم کاربران ما فناوری اطلاعات را تجربه خواهند کرد – تولید – از بین بردن بسیاری از مشکلات مرتبط با تست در محیط های پیش تولید-داده های تست, مشکلات ثبات, عدم تطابق نسخه, رانش زیست محیطی, و غیره.
مجوز
برخی از سازمان ها از پرچم های ویژگی به عنوان راهی برای اجرای حقوق استفاده می کنند – فقط به کلاس های خاصی از کاربران امکان دسترسی به یک ویژگی را می دهد. مثلا, یکی از ویژگی های ممکن است تنها به مدیران در معرض, و یا به کاربرانی که یک اشتراک حق بیمه. پرچم استفاده می شود در این راه گاهی اوقات به عنوان مجوز پستی اشاره.
احتیاط باید در استفاده از ویژگی های ضعیف برای این نوع سیستم حقوق اعمال. این سیستم ها اغلب نیاز به قابلیت های که همیشه در دسترس نیست در یک ویژگی ضعیف سیستم-ادغام با صدور صورت حساب, پیچیده مدیریت گروه, ممیزی مسیرهای پیاده روی برای تغییرات اجازه, و غیره. اغلب یک رویکرد بهتر است به استفاده از یک سیستم حقوق جداگانه, اما ایجاد یک الگوی دسترسی به اشتراک گذاشته, به طوری که تصمیم به فعال کردن یک ویژگی را می توان از هر دو سیستم از ویژگی های ضعیف خود و یا سیستم حقوق خود را رانده, بدون کد خود را نیاز به دانستن تفاوت.
تکامل معماری
از پرچم های ویژگی می توان برای مدیریت ایمن مهاجرت های معماری در مقیاس بزرگ استفاده کرد-به عنوان مثال استخراج بخشی از عملکرد از یک یکپارچه و به یک میکروسرویس. در این نوع سناریوها می توانیم از تکنیک های انتزاع شاخه ای برای ایجاد تدریجی یک اجرای جدید استفاده کنیم و از یک پرچم ویژگی برای مدیریت ایمن انتقال استفاده کنیم. این رویکرد به طور مفصل در مجموعه وبلاگ ما در مورد مدیریت یکپارچه پوشش داده شده است.
دسته بندی پرچم های ویژگی
به دلیل این طیف گسترده ای از موارد استفاده, منطقی نیست که با همه پرچم های ویژگی یکسان رفتار کنیم. روشی که ما ضامن انتشار را اجرا و مدیریت می کنیم باید با روشی که با کلید کشتن کار می کنیم متفاوت باشد.
مفید است که به صراحت پرچم های ویژگی خود را در چند بعد دسته بندی کنیم و سپس رویکرد خود را برای پیاده سازی و مدیریت بر اساس این طبقه بندی تغییر دهیم.
طول عمر
طول عمر یک پرچم به این معنی است که منطق تصمیم گیری برای این پرچم تا چه مدت در یک پایگاه کد زنده خواهد بود. برخی از انواع پرچم ها مانند ضامن های انتشار کوتاه مدت هستند-هر پرچم فقط باید برای چند هفته در یک پایگاه کد مورد نیاز باشد. در مقابل کلیدهای کشتن و ضامنهای مجوز عمر طولانی دارند و اغلب سالها در پایگاه کد باقی میمانند.
مهم است که هنگام اجرای منطق تصمیم گیری برای این پرچم از طول عمر یک پرچم مطلع شوید. اگر این منطق برای یک پرچم کوتاه مدت و در نتیجه موقت باشد ممکن است منطق تصمیم گیری با استفاده از یک بیانیه ساده اگر/دیگری قابل قبول باشد. با این حال, اگر پرچم در حال رفتن به در محل برای یک دوره طولانی از زمان و سپس ما باید برای گزینه های نگهداری بیشتر نگاه, مانند یک الگوی استراتژی. این ایده را بعدا در راهنما مرور خواهیم کرد.
پویایی
پیکربندی برخی از انواع پرچم ها باید پویاتر از انواع دیگر باشد. زمان چرخش برای چرخاندن ضامن انتشار از خاموش به روشن می تواند نسبتا طولانی باشد. مهندس تداوم تا قرار گرفتن در معرض اجرای کنترل یک حلقه بازخورد منطقی سریع قدردانی میکنیم. یک اپراتور می خواهد یک کلید کشتن را به اثر با بیشترین سرعت ممکن.
این پویایی الزامات مورد نیاز برای چگونه پیکربندی پرچم تبلیغ شده است را تحت تاثیر قرار, چیزی است که ما در بعد در این راهنما نگاه کنید زمانی که ما بحث در مورد نیاز برای سیستم های ضعیف از ویژگی های به قابلیت به روز رسانی زنده.
مالکیت
انواع مختلف پرچم توسط افراد مختلف اداره می شود. ضامن های انتشار معمولا توسط مهندس پیاده سازی این ویژگی یا شاید یک مدیر مهندسی مدیریت می شوند. ضامن های تجربی معمولا توسط مدیران محصول مدیریت می شوند. کلیدهای کشتن توسط مردم عملیات مدیریت می شوند.
عوامل مالکیت پرچم را به چگونه پیکربندی یک پرچم مدیریت می شود. یک مهندس ممکن است کاملا خوشحال باشد که پیکربندی پرچم را از طریق یک فایل یامل کنترل شده با منبع مدیریت کند در حالی که یک مدیر محصول ممکن است یک رابط کاربری مبتنی بر وب را ترجیح دهد.
ارزش پرچم های ویژگی
ما در حال حاضر دیده می شود که پرچم را می توان در طیف گسترده ای از راه های استفاده می شود. بیایید یک قدم به عقب برداریم و مقدار فراهم شده توسط این سناریوهای مختلف استفاده را خلاصه کنیم.
پرچم های ویژگی تحویل مداوم را فعال می کنند
پرچم های ویژگی بخشی جدایی ناپذیر از تحویل مداوم هستند. این به مهندسان اجازه می دهد تا استقرار را از انتشار جدا کنند و همچنین کنترل انتشار ویژگی را در دست مدیریت محصول قرار دهند. همچنین به تیمها اجازه میدهند تا با خیال راحت توسعه مبتنی بر صندوق عقب را تمرین کنند و با ادغام مکرر تغییرات کد از شاخههای ویژگیهای طولانی مدت و مشکلات ادغام دردناک اجتناب کنند.
تجربه مداوم
پرچم ویژگی به شما اجازه علمی اعتبار ایده های محصول خود را. یک سیستم پرچم گذاری خوب به مدیر محصول اجازه می دهد تا پایگاه کاربری خود را برش داده و تکه تکه کند و گروه های درمانی و کنترل را برای یک ویژگی بر اساس جمعیت های مختلف ایجاد کند. سپس با همبستگی رفتار کاربر با قرار گرفتن در معرض ویژگی, ما قادر به درک تاثیر واقعی یک ویژگی هستیم.
کنترل عملیاتی
پرچم های ویژگی مکانیسم کنترل بسیار مفیدی را برای افرادی که سیستم را در تولید کار می کنند فراهم می کند. افزودن کلیدهای کشتن سفارشی در اعماق یک سیستم به اپراتورها این امکان را می دهد تا در صورت مواجهه با مشکلاتی مانند بار زیاد یا قطعی های حزب 3 سیستم را با ظرافت تخریب کنند.
نسخه های ایمن تر
ما می توانیم خطرات مرتبط با نورد از ویژگی های جدید با استفاده از پرچم ویژگی را کاهش دهد. ما می توانیم در تولید تست کنیم و پیاده سازی یک ویژگی را در تولید اعمال کنیم اما در ابتدا فقط برای کاربران داخلی روشن می شود. این اجازه می دهد تا تست به اعتبار از ویژگی های در همان محیط به عنوان کاربران ما, با داده ها و نرم افزار دقیق همان. پس از تست داخلی, پرچم ویژگی همچنان به تامین ایمنی بیشتر را قادر می سازد اجرای کنترل از این ویژگی. ما میتوانیم ان را در مجموعهی کوچکی از کاربران – یک نسخه قناری – منتشر کنیم تا اعتماد به نفس پیدا کنیم و سپس به تدریج به کاربران بیشتری عرضه کنیم. اگر هر چیزی را اشتباه می رود در طول این روند اجرای, پرچم ویژگی فراهم سریع, استراتژی کاهش موثر-به سادگی به نوبه خود پرچم ویژگی خاموش در تولید!
قابلیت های یک سیستم پرچم گذاری ویژگی
ما در ابتدای این راهنما دیدیم که پرچم گذاری ویژگی بر اساس یک مفهوم مرکزی است-توانایی انتخاب بین مسیرهای مختلف کد در سیستم شما در زمان اجرا. در حالی که ما می توانیم این قابلیت هسته ای با استفاده از کمی بیش از یک متغیر محیطی و اگر/بیانیه دیگری پیاده سازی, ما پیچیدگی بیشتری نیاز اگر ما می خواهیم از ویژگی های سیستم ضعیف ما برای حمایت از موارد استفاده با ارزش است که ما در حال حاضر دیده ام. بیایید ببینیم یک سیستم پرچم گذاری ویژگی خوب چه قابلیت های اضافی را فراهم می کند و چرا ارزشمند هستند.
تصمیمات پرچم گذاری پویا و خاص زمینه
بسیاری از ویژگی های ضعیف موارد استفاده ما در نگاه نیاز به نوعی از زمینه به منظور اتخاذ یک تصمیم ضعیف. شما نمی توانید فقط بپرسید که پرچم روشن یا خاموش است, شما باید بپرسید که در متن فعلی روشن است – پرچم برای کاربر در حال حاضر وارد شده است, یا برای نمونه سرور خاصی که به درخواست سرویس می دهد.
زمینه غنی
یک سیستم پرچم گذاری ویژگی خوب مکانیسم هایی را برای در نظر گرفتن زمینه اضافی هنگام تصمیم گیری در مورد پرچم گذاری فراهم می کند. حداقل این زمینه شامل کاربر فعلی است (زیرا تصمیمات پرچم گذاری اغلب بر اساس هویت کاربر است) اما همچنین می تواند شامل ویژگی های اضافی در مورد کاربر باشد – مواردی مانند اینکه کاربر به چه سازمانی تعلق دارد یا در چه برنامه پرداختی قرار دارد. علاوه بر زمینه کاربر, ما همچنین ممکن است بخواهید را به زمینه حساب مانند چه به عنوان مثال سرور است دست زدن به یک درخواست, و یا چه بازار جغرافیایی درخواست مربوط به.
قوانین تصمیم گیری قدرتمند
هنگامی که این اطلاعات متنی غنی در دسترس است, یک سیستم پرچم گذاری ویژگی می تواند راه های قدرتمندتری برای پیکربندی یک تصمیم پرچم گذاری فراهم کند. به جای گفتن "من می خواهم به افشای این ویژگی به 5% از پایه مشتری ما", من به جای ممکن می گویند "من می خواهم به افشای این ویژگی به 100% از کاربران داخلی ما, 50% از گروه کاربران بتا ما, اما نه به هر کاربر دیگر", یا "من می خواهم به یک/ب تست این ویژگی با 50% از بازار اتلانتا".
بدون این توانایی برای ایجاد دقیق, متن خاص ضعیف تصمیم گیری شما واقعا نمی توانید با استفاده از ویژگی های سیستم ضعیف خود را برای هر یک از موارد استفاده پیشرفته تر – /تست ب, اجرای کنترل, مجوز, و غیره.
جریان به روز رسانی
هر سیستم پرچم گذاری غیر پیش پا افتاده ای نیاز به مدیریت پیکربندی پرچم دارد – خواه یک پرچم فعال یا غیرفعال باشد یا برای 5 درصد از کاربران فعال باشد یا جمعیتی خاص یا شما. یک سیستم پرچم گذاری ویژگی خوب از به روزرسانی های جریانی در این پیکربندی پشتیبانی می کند – توانایی هرگونه تغییر پیکربندی برای انتشار سریع فرایندهای در حال اجرا که تصمیمات پرچم گذاری گرفته می شود بدون نیاز به بارگیری مجدد یا راه اندازی مجدد هر چیزی.
این قابلیت ارتباط نزدیکی با چگونگی پویایی پرچم های ویژگی شما دارد و همانطور که قبلا بحث کردیم این بسته به نوع پرچمی که مدیریت می کنید متفاوت است.
برای پرچم های بسیار ایستا – به عنوان مثال یک ضامن انتشار – ممکن است بتوانید با مدیریت پیکربندی پرچم در یک فایل یاملدر پایگاه کد خود کنار بیایید, و انتشار تغییرات پیکربندی پرچم از طریق استقرار کد (با فرض اینکه شما یک خط لوله تحویل بالغ دارید که می تواند به موقع تغییراتی در این پیکربندی ایجاد کند).
با این حال, بسیار بعید است که پیکربندی پرچم مبتنی بر کد می تواند یک راه حل قابل قبول برای چیزی شبیه به یک کلید کشتن-برای این نوع از پرچم شما می خواهم تغییرات پیکربندی به انتشار به عنوان به سرعت به عنوان امکان پذیر است.
سیستم مدیریت پرچم شما اجازه می دهد تا تغییرات پیکربندی در عرض چند ثانیه منتشر شود و حتی نیازی به فرایندهای موجود در یک محیط برای شروع تغییر نیست.
دولت پرچم غنی
رایج ترین نوع پرچم ویژگی دارای حالت بولی است – یا غیرفعال است یا فعال است. با این وجود داشتن پرچم هایی با ایالت ثروتمندتر می تواند مفید باشد. مدل سازی تست الف / ب / ن بسیار ساده تر است, جایی که چندین درمان تجربی به علاوه یک کنترل وجود دارد, اگر پرچم ویژگی شما یک شمارش است تا یک بولی, دارای ارزش "درمان", "درمان _ ب", یا "کنترل" (به عنوان مثال).
گرفته شده به افراطی, شما می توانید یک سیستم ضعیف ویژگی به عنوان یک مکانیزم کلی تر برای مشخص پیکربندی پویا بر اساس برخی از زمینه استفاده. شما ممکن است بخواهید برای پیاده سازی یک تجربه که شما نشان می دهد 5% تخفیف به کاربران در اتلانتا, 7% تخفیف به کاربران در دالاس, و هیچ تخفیف در جای دیگر. اگر سیستم پرچم گذاری شما مبلغ تخفیف را به عنوان یک مقدار پیکربندی در اختیار شما قرار می دهد می توانید از قوانین زمینه و تصمیم گیری استفاده کنید که در حال حاضر برای اجرای این تجربه وجود دارد. در اینجا احتیاط توصیه می شود-این یک مکانیسم قدرتمند است که اساسا به مردم اجازه می دهد تغییرات زنده را در پیکربندی سیستم های تولید ایجاد کنند. این قدرت بزرگ با مسوولیت زیادی همراه است و باید با احترام رفتار شود!
ویژگی مدیریت پیکربندی پرچم
به عنوان یک سیستم از ویژگی های ضعیف می بیند بیشتر و بیشتر انواع استفاده از طیف گسترده ای از ترکیبات, مدیریت پیکربندی پرچم بسیار مهم می شود.
مالکیت و فراداده
تعداد پرچم های ویژگی تحت مدیریت تمایل به رشد در طول زمان دارد و منجر به "نفخ پرچم" می شود – چالشی که بعدا در این راهنما بحث خواهیم کرد. بهترین راه برای نگه داشتن این در چک مدیریت فعال است, بخش بزرگی از است که ردیابی ابرداده برای هر پرچم, مانند که برای پرچم است, زمانی که پرچم ایجاد شد, زمانی که باید انتظار بازنشسته شود, و غیره.
پیکربندی محیط زیست
تغییر پیکربندی پرچم کوچک می تواند تاثیر بزرگی بر روی یک سیستم تولید داشته باشد. یک خطر واقعی در ارتباط با فعال کردن یک ویژگی برای کاربران قبل از تست وجود دارد. به همین دلیل منطقی است که یک تغییر پیکربندی پرچم را به طور مشابه با تغییر کد – با فرایندهای مناسب برای کنترل تغییر و اعتبار سنجی تغییر دهید. با پیکربندی پرچم مبتنی بر کد, شما این فرایندها را به صورت رایگان دریافت می کنید-یک تغییر پیکربندی پرچم از طریق همان خط لوله تحویل به عنوان یک تغییر کد جریان می یابد. هنگامی که پیکربندی پرچم به صورت پویا تر مدیریت, خارج از کد منبع, سپس که سیستم باید برخی از کسانی که مفاهیم خط لوله تحویل تکرار.
سیستم مدیریت پرچم شما باید یک مفهوم درجه یک از محیط های استقرار داشته باشد و از ترویج تغییر پیکربندی پرچم از یک محیط به محیط دیگر پشتیبانی کند. این امر نیاز به همگام سازی "صندلی گردان" تغییر پیکربندی در محیط ها (با خطر خطای انسانی مرتبط) را کاهش می دهد و می تواند به طور کلی رانش پیکربندی بین محیط ها را کاهش دهد.
کنترل و شنود را تغییر دهید
زیرا تغییرات پیکربندی پرچم خطر را به همراه دارد, سازمان های سازمانی اغلب نیاز به محدود کردن افرادی دارند که توانایی ایجاد این تغییرات را دارند. پیروی از مقررات نیز ممکن است نیاز به یک دنباله حسابرسی از تغییرات حفظ شود. این امر به ویژه هنگامی صادق است که یک سیستم مدیریت پرچم توسط حوزه انتخابیه متنوعی از کاربران از بخشهای مختلف شرکت استفاده شود یا زمانی که از پرچمها در یک محیط تنظیم شده مانند امور مالی یا مراقبت های بهداشتی استفاده می شود.
کنترل تغییر یکی دیگر از دلایلی است که برای یک سیستم مدیریت پرچم ارزشمند است که از محیط های استقرار درجه یک مطلع باشد. محدودیت های شدیدتری را می توان در اطراف تغییرات در محیط های تولید اعمال کرد و در عین حال امکان دسترسی شل تر در محیط های پایین تر و پیش تولید را فراهم می کند.
برخی از سیستم های مدیریت پرچم حتی می توانند جریان های کنترل تغییر را مستقیما مدل کنند. تغییرات پیکربندی در حالت پیش نویس ایجاد می شود و سپس برای تصویب توسط ذینفعان مناسب ارسال می شود. پس از تایید این تغییرات سپس جریان به محیط های مناسب.
ادغام حلقه – تجزیه و تحلیل را ببندید
چندین مورد استفاده از پرچم گذاری ویژگی نیاز به توانایی درک تاثیر یک ویژگی پرچم دار دارد. نرخ تبدیل را افزایش می دهد? افزایش نرخ خطا? افزایش تاخیر درخواست? برای پاسخ به این پرسش ها ما نیاز به برخی از راه بسته شدن دولت پرچم حلقه همبستگی با معیارهای ما در مورد مراقبت. این امر به ویژه برای ضامنهای تجربی مهم است – هدف کل این پرچمها اندازهگیری تاثیر یک پرچم ویژگی است – اما این توانایی برای ارتباط حالت پرچم با معیارها برای سایر موارد استفاده مانند اجرای کنترل شده و تست در تولید نیز بسیار مفید است.
دو روش اصلی برای ارتباط حالت پرچم با معیارها وجود دارد. ما می توانیم فراداده های مربوط به حالت پرچم را به معیارهایی که در یک سیستم تجزیه و تحلیل اختصاصی ضبط می کنیم اضافه کنیم و به ما اجازه می دهیم ببینیم که چگونه حالت پرچم بر این معیارها تاثیر می گذارد. متناوبا, ما می توانیم معیارهای کلیدی به سیستم ویژگی های ضعیف خود فشار, انجام همبستگی و تجزیه و تحلیل علی وجود دارد. هر رویکرد مزایا و معایب خود را دارد – بهترین انتخاب بستگی به قابلیت های هر سیستم دارد که چه نوع ابزار دقیق در حال حاضر وجود دارد و ذینفعان از هر سیستم استفاده می کنند.
چالش با پرچم ویژگی
در حالی که پرچم گذاری ویژگی ها ارزش زیادی را به همراه دارد اما بدون چالش های خود حاصل نمی شود. اجرای نقاط تصمیم گیری پرچم گذاری می تواند مقداری کاردستی را به یک پایگاه کد وارد کند که در صورت مجاز بودن تجمع می تواند کاملا ناخوشایند شود. به طور کلی یک سیستم پرچم گذاری ویژگی های مفید می تواند تا حدودی قربانی موفقیت خود شود. مدیریت پرچم می تواند با افزایش تعداد پرچم های درون سیستم همراه با حوزه انتخابیه کاربران سنگین شود.
بیایید این چالش ها را به همراه چند روش برای کاهش این چالش ها به تفصیل بررسی کنیم.
کد کثیف
اجرای نقاط تصمیم گیری برای یک پرچم ویژگی می تواند منجر به کد نامرتب شود. عبارات شرطی پراکنده در سراسر پایگاه کد شما درک جریان برنامه را دشوارتر می کند و چندین مسیر کد زمان اجرا می تواند بازسازی علت یک مشکل را هنگام اشکال زدایی دشوارتر کند.
کلید غلبه بر این چالش درک این نکته است که کد پرچم گذاری ویژگی هنوز کد تولید است – شما برای ایجاد جریان کنترل بیزانس پاس رایگان دریافت نمی کنید فقط به این دلیل که برای یک پرچم ویژگی است. این برای پرچم هایی که طول عمر دارند دوچندان مهم است – منطق کنترل کلید کشتن یا ضامن مجوز احتمالا برای همیشه در پایگاه کد شما باقی می ماند, بنابراین بهتر است این کد را به راحتی نگهداری کنید.
درخواست طراحی نرم افزار خوب
برای پرچم های طولانی مدت استفاده از الگوهای طراحی نرم افزاری را در نظر بگیرید که منطق شرطی را با چند شکلی جایگزین می کند. به عنوان مثال الگوی استراتژی برای بسیاری از پرچم های طولانی مدت مناسب است. تا جایی که می توانید از سیستم نوع زبان خود استفاده کنید. شناسایی پرچم های ویژگی از طریق یک مجموعه متمرکز از شمارش های قوی تایپ شده به جای شناسه جادویی" رشته ای " باعث می شود که شما بتوانید استفاده از این پرچم را هنگام زمان حذف پیدا کنید.
نقاط تصمیم گیری را از قوانین تصمیم جدا کنید
به طور گسترده تر, شما باید سعی کنید برای جلوگیری از مفاهیم ویژگی ضعیف نفوذ کدهای خود را. شما نمی توانید از نیاز به چندین مسیر کد اجتناب کنید اگر می خواهید در زمان اجرا بین این مسیرها جابجا شوید اما این بدان معنا نیست که هر نقطه تصمیم گیری باید در مورد این تصمیمات از نظر پرچم ویژگی ها فکر کند. برای عمر طولانی پرچم ویژگی, اغلب بهتر است به تمایز بین سوال خاص شما درخواست در کد و پرچم ویژگی است که این تصمیم رانندگی. مثلا, را از ویژگی های زیر-منطق پرچم:
این به نظر می رسد مانند یک رویکرد منطقی, اما دلیلی زوج سوال در حال خواسته – می توانید کاربر فعلی صادرات همه چیز – از منطق پشت تصمیم – انجام یک پرچم از ویژگی های خاص, یا یک مدیر هستند. این که منطق سخت تر به ریفکتور و سخت تر برای تست و منجر به کشت از مراجع به ویژگی های سیستم ضعیف خود را پراکنده در سراسر کد را. در اینجا یک رویکرد بهتر است:
روش صادرات ما همچنان با استفاده از پرچم ویژگی اجرا خواهد شد اما اکنون این یک جزییات پیاده سازی است. ما ارجاع مستقیم به سیستم پرچم گذاری ویژگی های خود را حذف کرده ایم, خواندن کد را راحت تر می کند, تست کردن, و برای تغییر بیشتر باز است. اگر این نوع از چک اجازه در سیستم ما بسیار رایج است, ما می تواند این را بیشتر و ایجاد یک شی مجوز که کپسوله مجوز های مختلف که ممکن است یک کاربر. این شی مجوز ممکن است توسط سیستم پرچم گذاری ویژگی های ما طراحی شده باشد یا شاید به برخی از پیاده سازی های دیگر تغییر کند. کدی که استفاده می کند اهمیتی نخواهد داد و نیازی به تغییر نخواهد داشت. این رویکرد کلی انتزاع بیش از ویژگی های پرچم گذاری سود سهام را پرداخت می کند. یک لایه سبک وزن که باعث می شود تصمیمات پرچم گذاری در چارچوب هایی که استفاده می شوند طبیعی به نظر برسند می تواند لبه های ناهموار را صاف کند و اضافه کردن پرچم ها را ساده تر کند.
قابلیت مشاهده پرچم
با تعریف, بیش از یک مسیر اعدام از طریق یک پایگاه کد ویژگی پرچم وجود دارد. این می تواند اشکال زدایی را دشوارتر کند زیرا درک اینکه دقیقا چه کدی سیستم را به وضعیت فعلی خود رسانده است دشوارتر است.
یک رویکرد مفید این است که اطمینان حاصل شود که حالت پرچم ویژگی قابل مشاهده است: ثبت دولت پرچم مربوطه در سیاهههای مربوط, و یا شامل ابرداده دولت پرچم در ابزار دقیق. این اجازه می دهد تا ما را به بازسازی که مسیر کد در نیایش که ما در حال اشکال زدایی طولانی پس از تصمیم گیری ضعیف شده اند درگیر شدند.
بدهی پرچم
حتی پس از کاهش هزینه های جاری از ویژگی های کد ضعیف با استفاده از تکنیک های من فقط توضیح, که هزینه هنوز هم غیر صفر. علاوه بر این, ویژگی کلی مدیریت پرچم سربار تحمیل. پرچم از ویژگی های بیشتر ما تجمع می یابد, بالاتر از این هزینه ها تبدیل.
تمیز کردن پرچم هایی که دیگر نیازی ندارید بهترین راه برای کنترل این هزینه ها است – ارزان ترین پرچم پرچمی است که از سیستم خود حذف کرده اید. با این حال, شناسایی و از بین بردن پرچم کهنه یک مشکل شگفت انگیزی خاردار است. با رشد پرچم بسیاری از سازمان ها درک اینکه کدام پرچم ها هنوز فعال هستند چالش برانگیز است. همچنین اختصاص زمان کافی برای از بین بردن پرچم های کهنه می تواند مشکل باشد. بیایید راه های غلبه بر این دو چالش را بررسی کنیم.
پرچم های کهنه را شناسایی کنید
هنگامی که تعدادی از تیم ها از یک سیستم پرچم گذاری واحد برای مدیریت انواع پرچم ها استفاده می کنند, شناسایی اینکه کدام یک از پرچم های موجود در سیستم قابل بازنشستگی و حذف است می تواند چالش برانگیز باشد.
ابرداده در مورد هر پرچم – اطلاعات مانند مالکیت, نوع پرچم, تاریخ انقضا انتظار می رود, و به همین ترتیب – می توانید مقدار زیادی در اینجا کمک. به جای درخواست مردم به ممیزی کل مجموعه ای از پرچم در سیستم, ما می توانیم پرچم گروه توسط مالک, و سپس هر صاحب بخواهید برای ارزیابی فقط پرچم خود را – یک کار بسیار کمتر ارعاب. ما همچنین می توانیم روی پرچم هایی از نوعی تمرکز کنیم که باید کوتاه مدت باشند-به عنوان مثال ضامن های انتشار – اما برای مدت طولانی در سیستم وجود داشته است. نیاز به پرچم های کوتاه مدت برای افزودن تاریخ انقضا مورد انتظار به پرچم هنگام ایجاد می تواند این تجزیه و تحلیل را حتی ساده تر کند.
فرض کنید سیستم پرچم گذاری ویژگی شما قابلیت حسابرسی نیز دارد. در این صورت می توان برای شناسایی پرچم هایی که در مدت زمان طولانی اصلاح نشده اند استفاده کرد زیرا این پرچم ها به طور بالقوه پرچم هایی هستند که دیگر تحت مدیریت فعال نیستند. به طور مشابه, اگر شما حلقه با تجزیه و تحلیل ترافیک پرچم ویژگی های خوب بسته اند و سپس این را می توان مورد استفاده برای شناسایی کشورهای پرچم "مرده". با این حال, این همچنین نشان می دهد که چرا ابرداده در اطراف نوع پرچم مهم است – حتی اگر یک کلید کشتن شده است برای استفاده نمی شود 9 ماه ها, ما هنوز هم نمی خواهید به حذف!
اطمینان از حذف پرچم ها
بسیاری از تیم ها با شناسایی پرچم های کهنه هنوز به سختی می توانند وقت خود را برای حذف واقعی این پرچم ها به همراه پیاده سازی در پایگاه کد خود اختصاص دهند. مانند بسیاری از وظایف بدهی های فناوری, به راحتی می توان تسلیم وسوسه به تعویق انداختن کار شد. در حالی که همه موافقند که این مهم است, فوری نیست, و در نتیجه وسوسه انگیز به د اولویت بندی.
در اینجا چند ترفند وجود دارد که می توانید برای اطمینان از تمیز شدن پرچم ها استفاده کنید:
- قرار دادن یک کار پاک کردن به جمع خود را در زمانی که شما پرچم ایجاد کنید .
- هنگام ایجاد پرچم تاریخ انقضا را مشخص کنید. سپس می توانید از ابرداده برای یافتن پرچم های کهنه استفاده کنید (همانطور که قبلا توضیح داده شد). شما همچنین می توانید تهاجمی تر, و منتشر می کنند ورود به سیستم, حوادث خطای حریق, و یا حتی حاضر به بوت نرم افزار خود را اگر یک پرچم منقضی شده شناسایی شده است.
- بدهی پرچم را با ردیابی تعداد پرچم هایی که هر تیم به عنوان شاخص تورم مصرف کننده در اختیار دارد قابل مشاهده کنید و تیم ها را تشویق کنید که این تعداد را زیر حد مجاز نگه دارند.
- اندازه گیری شاخص تورم مصرف کننده را بیشتر انجام دهید و محدودیت پیشرفت را در مورد تعداد پرچم های کوتاه مدت تیم خود در هر زمان مدیریت کنید. اگر شما حد خود رسیده ام, شما نیاز به حذف یک پرچم موجود قبل از اینکه شما مجاز به ایجاد یک پرچم جدید.
- رویدادهای منظم "پرچم باش" را برگزار کنید – یک روز کاری که مهندسان برای تمرکز بر روی پاره کردن پرچم های کهنه اختصاص داده اند.
کد پرچم دار ویژگی خود را تست کنید
تست یک سیستم پرچم گذاری ویژگی می تواند یک چشم انداز ترسناک به نظر برسد. ما باید همه چیز را دو بار تست کنیم-یک بار با پرچم خاموش, و سپس دوباره با روشن? چه در مورد پرچم های متعدد? ما احتمالا نمی تواند تست هر ترکیبی از کشورهای پرچم! سیستم های پرچم گذاری ویژگی یک بردار اضافی برای تغییرات تولید فراهم می کنند که ممکن است کنترل های تغییر مشابه با تغییر کد نداشته باشد. چگونه ما اطمینان حاصل کنید که این تغییرات تولید تست شده و امن?
سربار تست به همان اندازه بد نیست که ممکن است صدا باشد. بله برای پرچم های فعال باید رفتار سیستم را با پرچم خاموش و روشن تست کنید اما این تفاوت چندانی با تست سیستم قبل و بعد از تغییر کد ندارد. وقتی صحبت از ترکیب پرچم های متعدد می شود, تا زمانی که رفتار پرچم های مختلف با هم تعامل نداشته باشد, نیازی به تست ترکیبات مختلف این پرچم ها نیست. مثلا, اگر شما یک پرچم ویژگی است که صفحه ورود به سیستم شما تاثیر می گذارد و دیگری که روی صفحه نمایش مشخصات کاربر خود را تحت تاثیر قرار, سپس شما به احتمال زیاد می توانید این پرچم به عنوان مستقل در نظر و لازم نیست برای تست تمام چهار ترکیب از دو پرچم.
بار تست پرچم ویژگی را می توان در چک با داشتن یک استراتژی برای شناسایی کشورهای پرچم که در حال حاضر نیاز به تست نگه داشته. مفهوم پرچم های "فعال" در اینجا ضروری است – یعنی مجموعه پرچم هایی که به طور عملی می توانند در هر دو حالت فعال و معلول در حال تولید باشند. مثالها یک ضامن انتشار برای چیزی است که به زودی زنده خواهد ماند, یک ضامن تجربی فعال, و هر نوع ضامن مجوز طولانی مدت یا کلیدهای کشتن. شما همچنین می توانید سیاست هایی را در سیستم مدیریت پرچم خود ایجاد کنید که خطر تغییرات بد تولید را کاهش می دهد. برای مثال برای هر پرچمی که در تولید فعال باشد ابتدا باید کسی این پرچم را در محیط پیش تولید به طور مناسب تست کرده باشد.
فرض کنید شما پرچم هایی دارید که در هم تنیده شده اند. در این صورت منطقی است که تجزیه و تحلیل کنید کدام ترکیب احتمالی پرچم ها را در تولید می بینید و این ترکیب ها را امتحان کنید – این هزینه گران اما اجتناب ناپذیر برای پرچم های وابسته است. هزینه های بیشتری برای این نوع وابستگی های پرچم فراتر از بار تست وجود دارد – همچنین منجر به الگوهای کدگذاری گیج کننده و پیچیده می شود. همینطور, بهتر است برای حفظ این نوع از پرچم وابسته به حداقل مطلق. اگر شما باید به صراحت تعریف یک زیر مجموعه کوچک از کشورهای است که چنین پرچم مجاز به.
یک نکته نهایی در مورد تست: ارزش دارد که برخی از تلاش های مهندسی را برای "شناخت پرچم" تست های خود سرمایه گذاری کنید. مثلا, شما می توانید پسوند به چارچوب تست خود را که به شما اجازه تست با اعلامیه که کشورهای پرچم باید تایید حاشیه نویسی ایجاد. چارچوب تست شما می تواند از تنظیم حالت پرچم برای مدت زمان تست مراقبت کند و در صورت لزوم چندین اجرا را با حالت های مختلف پرچم انجام دهد. شما می توانید امکانات مشابهی را برای تست دستی نیز فراهم کنید – به عنوان مثال ابزاری که فقط در معرض توسعه تمدن است که به تستر اجازه می دهد تا وضعیت پرچم را نادیده بگیرد تا یک سناریوی خاص را تست کند.
پراکندگی مدیریت پرچم
مهم است که توجه داشته باشید که پرچم های ویژگی این طیف گسترده ای از قابلیت های ارزشمند را فراهم می کنند و برای طیف گسترده ای از مردم مفید هستند. مهندسان ارزش تحویل مبتنی بر تنه. مدیران محصول ارزش تجربه و کنترل زمانی که ویژگی های زندگی می کنند. اپراتورهای ارزش کشتن کلید. مردمی تضمین کیفیت ارزش توانایی تست در تولید و انجام اجرای برنامه کنترل می شود.
این تنوع موارد استفاده و ذینفعان می تواند منجر به "پراکندگی مدیریت پرچم" شود, جایی که یک سازمان دارای چندین سیستم پرچم گذاری ویژگی در حال استفاده است, هر کدام بر یک گروه ذینفعان مختلف متمرکز شده اند. مثلا, یک سیستم ممکن است برای پستی انتشار و اجرای کنترل استفاده, دیگر برای تجربه, و یک سوم برای کشتن کلید. در این سناریو ما باید تاثیر پراکندگی را محدود کنیم. سیستم های مدیریت چندگانه بد هستند اما حتی بدتر یک پایگاه کد است که تمام تصمیمات پرچم گذاری باید پیکربندی هر سیستم را در نظر بگیرند. اگر شما خود را با سیستم های پرچم گذاری چندگانه پیدا کنید ارزش معرفی یک انتزاع متحد در سطح کد را دارد.
پرچم گذاری ویژگی باید ساده باشد و کارایی درایو داشته باشد
در این راهنما ما کشف کرده ایم که پرچم گذاری ویژگی ها یک مفهوم ساده را می گیرد – انتخاب بین مسیرهای مختلف کد در زمان اجرا – و از این روش برای ایجاد طیف گسترده ای از مزایا استفاده می کند. پرچم گذاری ویژگی ها مهندسان را قادر می سازد تا با تمرین تحویل مستمر کار موثرتری انجام دهند و مدیران محصول را قادر می سازد تا رویکردی دقیق و مبتنی بر داده را بر اساس تجربه اتخاذ کنند و با فراهم کردن قابلیت هایی مانند تست در تولید, اجرای کنترل شده, و کشتن کلیدها ریسک را کاهش می دهد.
با این وجود پرچم های ویژگی سواری رایگان نیستند – مزایایی که تحویل می دهند با مجموعه ای از هزینه ها همراه است. مدیریت پرچم فعال و تکنیک های پیاده سازی متفکرانه می تواند این هزینه ها را کنترل کند.
تیم می تواند با ویژگی های ضعیف کاملا به سادگی شروع, اما یک سیستم مدیریت پرچم ویژگی های جامع به منظور به حداکثر رساندن مزایای این روش قدرتمند در حالی که به حداقل رساندن هزینه مورد نیاز است.