Digamos que trabajas en un proyecto grande con múltiples características dirigidas en cada lanzamiento. Es posible que tengamos diferentes ramas de características (en el VCS) para cada desarrollo de características. Pero después de que toda la rama de características se fusiona y la integración se realiza, digamos que una de las funciones se descarta (esto ocurre con más frecuencia en nuestra organización de lo que se podría imaginar). ¿Hay alguna manera de deshacer una característica en este punto? Lo que solemos hacer es descubrir todos los cambios de código y deshacer manualmente. ¿Tiene algún proceso/mejores prácticas que ayudarán a reducir este esfuerzo? Para el registro, tenemos un proyecto de Java con subversión como el VCS.¿Qué debe hacer si una característica se descarta en el último momento?
Respuesta
Depende del motivo por el que se ha caído.
Si "en el último momento" es durante las pruebas del sistema, y no desea repetirlo, entonces diría que simplemente deshabilita la función y la envía de todos modos.
Hemos hecho esto en el pasado; eliminar la característica puede ser demasiado arriesgado en términos de crear errores adicionales. Si ya no desea la función (por ejemplo, el requisito se ha eliminado o se ha decidido que la implementación es incorrecta), probablemente sea mejor en términos de riesgo simplemente desactivarlo con un mínimo de cambios de código.
Es decir, eliminar u ocultar los elementos de la interfaz de usuario que habilitan la función, y los usuarios no sabrán que está allí (siempre que esté desactivada de manera predeterminada).
Afortunadamente, durante una futura versión, habrá una oportunidad para refactorizar esa parte del código y eliminar la característica o reintroducirla correctamente.
Casi a la derecha (pero aún +1). Deshabilitar, * RE-TEST *, luego enviar. Desactivar con el mínimo cambio necesario para desactivar la función. En un sistema basado en GUI, esto podría ser tan simple como deshabilitar o eliminar un elemento del menú. En otros sistemas, necesita averiguar el cambio mínimo ... – Mawg
Bueno, aún tendrá que hacer algunas pruebas adicionales del sistema después de que la característica esté deshabilitada, principalmente para verificar las regresiones introducidas al deshabilitar la función (por ejemplo, ¿Deshabilitó accidentalmente? alguna otra característica) y para asegurarse de que la función esté realmente desactivada. – MarkR
Si está utilizando TortoiseSVN como cliente, tiene un "cambio de versión desde esta revisión" en el menú contextual.
Simplemente muestre el registro en la copia de trabajo y elija la revisión que desea fusionar de forma inversa (en el caso, la revisión que representa dónde se fusionó en la rama de características).
alt text http://img64.imageshack.us/img64/9053/svnreversemerge.png
De lo contrario, se puede hacer un reverso de fusión desde la línea de comandos. La fusión inversa crea una nueva revisión que es la revisión HEAD menos los cambios de la revisión que fusionó en reversa, por lo que siempre se puede "revertir el reverso". SVN es genial de esa manera.
El problema con esto es que habrás realizado cambios como resultado de QA/UAT después de haber integrado la función, por lo que tendrás una reversión muy desordenada. Es mucho más seguro desactivar la función, si es posible, y especialmente si tiene dudas sobre si la característica volverá más adelante (honestamente, si sus clientes asignan el tiempo de codificación a una función y luego cambian de opinión en esta fecha tardía, es probable que cambien de opinión la próxima semana). –
- 1. ¿Por qué los sub repositorios mercuriales se consideran una característica de último recurso?
- 2. ¿Cómo se ejecuta una acción personalizada en WiX solo si se desinstala una característica instalada?
- 3. ¿Por qué os.path.join descarta argumentos?
- 4. ¿En qué momento exacto se almacena una variable local asignada?
- 5. ¿Qué hacer cuando una nueva característica causa que las pruebas de unidades existentes se vuelvan inválidas?
- 6. ¿Qué se debe incluir en la estrategia de manejo de excepciones y errores de último modelo?
- 7. Regex: cómo hacer coincidir el último punto en una cadena
- 8. ¿Qué se supone que debe hacer esta sintaxis?
- 9. ¿Qué debo hacer si se lanza una IOException?
- 10. Zend_Form: Elemento solo debe requerirse si se marca una casilla
- 11. ¿Qué se debe usar document.implementation.createHTMLDocument?
- 12. QSettings - El selector de archivos debe recordar el último directorio
- 13. si se debe usar "SET nombres"
- 14. ¿Por qué los símbolos de una biblioteca compartida no se resuelven en el momento del enlace?
- 15. ¿Qué es mejor: enviar una característica con errores o no enviar la característica en absoluto?
- 16. ¿Qué se debe hacer para crear una aplicación completa de iOS en idioma tamil?
- 17. Cómo iPhone 5 + iOS6 decidirá si una aplicación se debe ejecutar en modo de buzón
- 18. ¿Por qué std :: forward descarta la consistencia?
- 19. ¿En qué momento el uso de un StringBuilder se vuelve insignificante o una sobrecarga?
- 20. ¿Se debe instanciar una clase en C#?
- 21. ¿Qué se debe colocar en AssemblyTrademarkAttribute?
- 22. ¿Cómo compruebo programáticamente si el menú de mi actividad se muestra en un momento determinado?
- 23. Implementación IDisposable: qué debe ir en 'si (eliminación)'
- 24. Alternativa al "último" en hacer bucles
- 25. ¿Por qué se debe modelar una función de reenvío perfecta?
- 26. ¿Qué hacer cuando se usa Contract.Assert (true) y el método debe devolver algo?
- 27. ResignFirstResponder no descarta el teclado (iPhone)
- 28. ¿Cómo verificar si una característica ha sido activada?
- 29. std :: string ¿se borra el último carácter?
- 30. ¿Por qué no funciona std :: noskipws, o qué se supone que debe hacer?
Combinar una característica a la vez no es una opción. – rerun