Una palanca característica (también interruptor característica , indicador de la función , puerta característica , flipper característica , función condicional , etc.) es una técnica en el desarrollo de software que los intentos para proporcionar una alternativa al mantenimiento de múltiples ramas en código fuente (conocido como ramas de función), tal que una función de software se puede probar incluso antes de que se complete y esté lista para su lanzamiento . Se utiliza un interruptor de función para ocultar, habilitar o deshabilitar la función durante el tiempo de ejecución.. Por ejemplo, durante el proceso de desarrollo, un desarrollador puede habilitar la función para probarla y deshabilitarla para otros usuarios. [1]
El lanzamiento continuo y la implementación continua brindan a los desarrolladores comentarios rápidos sobre su código. Esto requiere la integración de sus cambios de código lo antes posible. Las ramas de características introducen un desvío a este proceso. [2] Los cambios de funciones son una técnica importante para la entrega continua .
La técnica permite a los desarrolladores lanzar una versión de un producto que tiene características sin terminar. Estas funciones sin terminar se ocultan (alternan) para que no aparezcan en la interfaz de usuario . Esto permite que se entreguen muchas pequeñas versiones incrementales de software sin el costo de ramificaciones y fusiones constantes . La alternancia de funciones puede permitir ciclos de integración de software más cortos. [3] Un equipo que trabaja en un proyecto puede utilizar funciones alternas para acelerar el proceso de desarrollo, que también puede incluir el código incompleto.
Implementación
Los cambios de características son esencialmente variables que se utilizan dentro de declaraciones condicionales . Por lo tanto, los bloques dentro de estas declaraciones condicionales se pueden activar o desactivar según el valor de la función de alternar. Un bloque de código que ha sido desactivado es similar a que está comentado . Esto permite a los desarrolladores controlar el flujo de su software y omitir funciones que no están listas para su implementación.
El uso principal de la alternancia de funciones es evitar conflictos que pueden surgir al fusionar cambios en el software en el último momento antes del lanzamiento, aunque esto puede llevar a la alternancia de la deuda . La deuda de alternancia surge debido al código muerto presente en el software después de que una función se ha activado permanentemente y produce gastos generales. Esta parte del código debe eliminarse con cuidado para no perturbar otras partes del código.
Hay dos tipos principales de alternancia de funciones. Una es una palanca de lanzamiento, que el desarrollador determina mantener o eliminar antes del lanzamiento de un producto dependiendo de su funcionamiento. El otro es un conmutador comercial, que se mantiene porque satisface un uso diferente en comparación con el del código anterior.
Los conmutadores de funciones se pueden utilizar en los siguientes escenarios: [1]
- Agregar una nueva función a una aplicación.
- Mejora de una función existente en una aplicación.
- Ocultar o deshabilitar una función.
- Ampliación de una interfaz.
Los cambios de funciones se pueden almacenar como: [4]
- Entradas de fila en una base de datos.
- Una propiedad en un archivo de configuración.
- Una entrada en un servicio de marca de característica externa.
Grupos de funciones
Los grupos de funciones consisten en conmutadores de funciones que funcionan en conjunto. Esto permite al desarrollador administrar fácilmente un conjunto de conmutadores relacionados. [5]
Lanzamiento canario
Otro beneficio de las banderas de funciones son los lanzamientos canarios. Una versión canary (o un lanzamiento canario o una implementación canary) permite a los desarrolladores tener características probadas gradualmente por un pequeño grupo de usuarios. Si el rendimiento de una función no es satisfactorio, se puede revertir sin efectos adversos. [6]
Martin Fowler afirma que un cambio de función "debería ser su última opción cuando se trata de poner funciones en producción". En cambio, es mejor dividir la función en partes más pequeñas para que cada una pueda implementarse e introducirse de manera segura en el producto comercializado sin causar otros problemas. [7]
La alternancia de funciones es utilizada por muchos sitios web grandes, incluidos Flickr, [8] Disqus, [9] Etsy, [10] reddit, [11] Gmail [12] y Netflix, [13] así como software como Google Chrome Canary .
Ver también
Referencias
- ^ a b "ALM Rangers - Desarrollo de software con alternancia de funciones" . msdn.microsoft.com .
- ^ "Banderas de funciones para aplicaciones móviles - Apptimize" . apptimize.com . Archivado desde el original el 18 de septiembre de 2016 . Consultado el 9 de enero de 2017 .
- ^ Programación de aplicaciones JavaScript . Archivado desde el original el 15 de septiembre de 2016 . Consultado el 14 de septiembre de 2016 .
- ^ Echagüe, Pato (2014). Gestión de indicadores de funciones . O'Reilly Media. ISBN 9781492028598- a través de https://www.oreilly.com/library/view/managing-feature-flags/9781492028598 .
- ^ Elliot, Eric (2018). Programación de aplicaciones JavaScript . O'Reilly Media.
- ^ "Lanzamientos canarios - cómo y por qué lanzar canarios" . launchdarkly.com . 7 de abril de 2015 . Consultado el 9 de enero de 2017 .
- ^ Martin Fowler 29 de octubre de 2010 (2010-10-29). "FeatureToggle" . Martinfowler.com . Consultado el 27 de septiembre de 2013 .
- ^ Harmes, Ross. "Flipping Out - code.flickr.com" . flickr.net . Consultado el 9 de enero de 2017 .
- ^ dcramer (9 de julio de 2010). "Implementación parcial con cambios de funciones" . Archivado desde el original el 5 de noviembre de 2013 . Consultado el 10 de octubre de 2013 .
- ^ "¿Cómo gestiona Etsy el desarrollo y las operaciones?" . codeascraft.com . 4 de febrero de 2011 . Consultado el 9 de enero de 2017 .
- ^ "reddit / reddit" . github.com . Consultado el 9 de enero de 2017 .
- ^ "Desarrollando la nueva apariencia de Gmail" . googleblog.com . Consultado el 9 de enero de 2017 .
- ^ "Preparación de la API de Netflix para la implementación" . netflix.com . Consultado el 9 de enero de 2017 .