สลับคุณสมบัติ
ฟีเจอร์ท็อกเกิลในการพัฒนาซอฟต์แวร์เป็นทางเลือกแทนการดูแลรักษาฟีเจอร์แบรนช์ หลายรายการ ในซอร์สโค้ดเงื่อนไขภายในโค้ดจะเปิดใช้งานหรือปิดใช้งานฟีเจอร์ในระหว่างการทำงาน ในสภาพแวดล้อมแบบ Agile ฟีเจอร์ท็อกเกิลจะถูกใช้ในการผลิต เพื่อเปิดใช้งานฟีเจอร์ตามความต้องการ สำหรับผู้ใช้บางส่วนหรือทั้งหมด ดังนั้น ฟีเจอร์ท็อกเกิลจึงทำให้การปล่อยเวอร์ชันใหม่บ่อยขึ้นทำได้ง่ายขึ้น กลยุทธ์การเปิดตัวขั้นสูง เช่น การเปิดตัวแบบ Canary และการทดสอบ A/Bก็จัดการได้ง่ายขึ้น[ 1 ] [ 2 ]
การส่งมอบอย่างต่อเนื่องได้รับการสนับสนุนโดยฟีเจอร์ท็อกเกิล แม้ว่าการเผยแพร่ใหม่จะไม่ได้ถูกนำไปใช้งานจริงอย่างต่อเนื่องก็ตาม ฟีเจอร์นี้จะถูกรวมเข้ากับสาขาหลักแม้กระทั่งก่อนที่จะเสร็จสมบูรณ์เวอร์ชันจะถูกนำไปใช้งานในสภาพแวดล้อมการทดสอบเพียงครั้งเดียว ท็อกเกิลช่วยให้สามารถเปิดใช้งานฟีเจอร์และทดสอบได้ วงจรการรวมซอฟต์แวร์จะสั้นลง และสามารถจัดเตรียมเวอร์ชันที่พร้อมใช้งานจริงได้[ 3 ]
การใช้เทคนิคประการที่สามคือการอนุญาตให้นักพัฒนาปล่อยเวอร์ชันของผลิตภัณฑ์ที่มีคุณสมบัติที่ยังไม่เสร็จสมบูรณ์ คุณสมบัติที่ยังไม่เสร็จสมบูรณ์เหล่านี้จะถูกซ่อน (สลับ) เพื่อไม่ให้ปรากฏในอินเทอร์เฟซผู้ใช้ การรวม คุณสมบัติเข้าและออกจากสาขาการผลิต นั้นใช้ความพยายามน้อยลง จึงทำให้สามารถ สร้างซอฟต์แวร์เวอร์ชันเพิ่มขึ้นทีละน้อยได้หลายเวอร์ชัน[ 4 ]
Feature toggle เรียกอีกอย่างว่าfeature switch , feature flag , feature gate , feature flipperหรือconditional feature
การดำเนินการ
Feature toggle คือตัวแปรที่ใช้ภายในคำสั่งเงื่อนไขดังนั้นบล็อกโค้ดภายในคำสั่งเงื่อนไขเหล่านี้สามารถเปิดหรือปิดได้ขึ้นอยู่กับค่าของ feature toggle วิธีนี้ช่วยให้นักพัฒนาสามารถควบคุมการทำงานของซอฟต์แวร์และข้ามฟีเจอร์ที่ยังไม่พร้อมใช้งานได้ บล็อกโค้ดที่อยู่เบื้องหลังตัวแปรรันไทม์มักจะยังคงอยู่และสามารถเรียกใช้งานได้ตามเงื่อนไข บางครั้งภายในวงจรชีวิตของแอปพลิเคชันเดียวกัน ในขณะที่บล็อกโค้ดที่อยู่เบื้องหลังคำสั่งพรีโปรเซสเซอร์หรือถูกคอมเมนต์ไว้จะไม่สามารถเรียกใช้งานได้ วิธีการใช้ feature flag สามารถใช้วิธีใดวิธีหนึ่งเหล่านี้เพื่อแยกเส้นทางการทำงานของโค้ดในขั้นตอนต่างๆ ของการพัฒนาได้
การใช้งานหลักของฟีเจอร์ท็อกเกิลคือการหลีกเลี่ยงความขัดแย้งที่อาจเกิดขึ้นเมื่อรวมการเปลี่ยนแปลงในซอฟต์แวร์ในช่วงเวลาสุดท้ายก่อนการปล่อยเวอร์ชันใหม่ แม้ว่าสิ่งนี้อาจนำไปสู่ " หนี้ท็อกเกิล"ได้ก็ตาม หนี้ท็อกเกิลเกิดขึ้นจากโค้ดที่ไม่ได้ใช้งานในซอฟต์แวร์หลังจากที่ฟีเจอร์ถูกเปิดใช้งานอย่างถาวร และทำให้เกิดภาระเพิ่มเติม โค้ดส่วนนี้จะต้องถูกลบออกอย่างระมัดระวังเพื่อไม่ให้รบกวนส่วนอื่นๆ ของโค้ด
การจัดการและการบำรุงรักษา
โดยทั่วไปแล้ว Feature toggles จำเป็นต้องมีการจัดการวงจรชีวิตที่นอกเหนือจากคำสั่งเงื่อนไขที่ใช้ในการใช้งาน จากการศึกษาเอกสารของผู้ปฏิบัติงานและนักพัฒนาจาก 38 บริษัท พบว่ามีแนวทางปฏิบัติ 17 ประการสำหรับการใช้งาน feature toggle โดยแบ่งเป็นกลุ่มการจัดการ การเริ่มต้น การใช้งาน และการล้างข้อมูล แนวทางปฏิบัติที่รายงานกันโดยทั่วไป ได้แก่ การบันทึกข้อมูลเมตาสำหรับ toggle แต่ละตัว การกำหนดค่าเริ่มต้น การบันทึกการเปลี่ยนแปลงที่เกิดขึ้นกับ toggle และการใช้เครื่องมือเฉพาะในการจัดการ[ 5 ]
งานวิจัยเกี่ยวกับ Google Chrome พบว่าฟีเจอร์ท็อกเกิลสามารถรองรับการเผยแพร่ที่รวดเร็ว การพัฒนาแบบอิงตาม trunk และการทดสอบ A/B แต่ยังต้องการการบำรุงรักษาเพิ่มเติมเมื่อท็อกเกิลยังคงอยู่ในโค้ดเบสเป็นเวลานาน[ 6 ]งานวิจัยในภายหลังเกี่ยวกับโครงสร้างฟีเจอร์ท็อกเกิลได้ตั้งข้อสังเกตในทำนองเดียวกันว่าท็อกเกิลอาจเพิ่มความซับซ้อนของโค้ด ทำให้เกิดโค้ดที่ไม่ได้ใช้งาน และลดความสามารถในการบำรุงรักษาหากไม่ได้ลบออกหรือจัดระเบียบหลังจากที่วัตถุประสงค์สิ้นสุดลง[ 7 ]
มีฟีเจอร์ท็อกเกิลหลักๆ สองประเภท ประเภทแรกคือ ฟีเจอร์ท็อกเกิลสำหรับเวอร์ชันที่จะวางจำหน่าย ซึ่งนักพัฒนาจะเป็นผู้ตัดสินใจว่าจะคงไว้หรือลบออกก่อนการวางจำหน่ายผลิตภัณฑ์ โดยขึ้นอยู่กับการทำงานของมัน ส่วนอีกประเภทคือ ฟีเจอร์ท็อกเกิลสำหรับด้านธุรกิจ ซึ่งจะถูกคงไว้เพราะมันตอบสนองการใช้งานที่แตกต่างจากโค้ดเวอร์ชันเก่า
สามารถใช้ Feature toggles ในสถานการณ์ต่อไปนี้: [ 1 ]
- การเพิ่มฟีเจอร์ใหม่ให้กับแอปพลิเคชัน
- ปรับปรุงฟีเจอร์ที่มีอยู่แล้วในแอปพลิเคชัน
- การซ่อนหรือปิดใช้งานฟีเจอร์
- การขยายอินเทอร์เฟซ
สามารถจัดเก็บการสลับคุณสมบัติได้ดังนี้: [ 8 ]
- รายการแถวในฐานข้อมูล
- คุณสมบัติในไฟล์การกำหนดค่า
- รายการในบริการฟีเจอร์แฟล็กภายนอก
กลุ่มคุณลักษณะ
กลุ่มฟีเจอร์ประกอบด้วยตัวสลับฟีเจอร์ที่ทำงานร่วมกัน ซึ่งช่วยให้นักพัฒนาสามารถจัดการชุดตัวสลับที่เกี่ยวข้องได้อย่างง่ายดาย[ 9 ]
การปล่อยนกคานารี
การเปิดตัวแบบแคนารี (หรือการเปิดตัวแบบแคนารี หรือการปรับใช้แบบแคนารี) ช่วยให้นักพัฒนาสามารถทดสอบฟีเจอร์ต่างๆ ทีละน้อยโดยใช้กลุ่มผู้ใช้ขนาดเล็ก แฟล็กฟีเจอร์เป็นอีกวิธีหนึ่งในการเปิดตัวแบบแคนารี[ 10 ]และอนุญาตให้กำหนดเป้าหมายตามตำแหน่งทางภูมิศาสตร์หรือแม้แต่คุณลักษณะของผู้ใช้[ 11 ]หากประสิทธิภาพของฟีเจอร์ไม่เป็นที่น่าพอใจ ก็สามารถย้อนกลับได้โดยไม่มีผลเสียใดๆ[ 12 ] ชื่อนี้มาจากการใช้แคนารีเพื่อเตือนคนงานเหมืองเกี่ยวกับก๊าซพิษ
การรับเลี้ยงบุตรบุญธรรม
Martin Fowlerระบุว่า release toggle ซึ่งเป็น feature toggle ประเภทหนึ่งโดยเฉพาะ "ควรเป็นตัวเลือกสุดท้ายของคุณเมื่อคุณกำลังจัดการกับการนำฟีเจอร์ไปใช้ในการผลิต" แทนที่จะเป็นเช่นนั้น ควรแบ่งฟีเจอร์ออกเป็นส่วนย่อยๆ ที่แต่ละส่วนสามารถนำไปใช้งานและแนะนำเข้าสู่ผลิตภัณฑ์ที่วางจำหน่ายได้อย่างปลอดภัยโดยไม่ก่อให้เกิดปัญหาอื่นๆ[ 2 ]
การสลับฟีเจอร์ถูกใช้โดยเว็บไซต์ขนาดใหญ่หลายแห่ง รวมถึง Flickr [ 13 ] Disqus [ 14 ] Etsy [ 15 ] Reddit [ 16 ] Gmail [ 17 ]และ Netflix [ 18 ]ตลอดจนซอฟต์แวร์เช่นGoogle Chrome Canaryหรือ Microsoft Office [ 19 ]