055.2 Lección 1
Certificación: |
Open Source Essentials |
Versión: |
1.0 |
Tema: |
055 Gestión de Proyectos |
Objectivo: |
055.2 Gestión de Productos / Gestión de Lanzamientos |
Lección: |
1 of 1 |
Introducción
La mayoría del software evoluciona de muchas maneras con el tiempo. De hecho, esa es una de las cosas maravillosas del software: es fácil de cambiar y solo requiere una transferencia de red para actualizar a todos los que usan el producto. Por eso, los desarrolladores agregan nuevas funciones, corrigen errores y fallas de seguridad, trasladan el software a nuevo hardware y agregan interfaces a programas y servicios populares. A medida que el software cambia, se lanzan nuevas versiones o revisiones.
Esta lección cubre la logística para planificar y realizar cambios en el software, cómo los equipos hacen malabarismos con múltiples versiones, convenciones para nombrar las versiones y otros aspectos organizacionales del desarrollo que son un subconjunto de las actividades involucradas en la gestión de proyectos. La logística que se aplica específicamente al momento, la denominación y el control de los lanzamientos se conoce como gestión de lanzamientos.
Características de las versiones (Releases)
Las versiones varían en términos de estabilidad, compatibilidad con versiones anteriores y soporte. Examinaremos cada uno de esos conceptos en las siguientes secciones.
Versiones estables e inestables
La estabilidad es una característica clave que los usuarios esperan del software. La primera pregunta que muchos hacen al enterarse de una nueva versión es: “¿Qué tan estable es?”. En otras palabras, ¿Funcionará de manera confiable o fallará, dañará los datos o producirá resultados incorrectos?
La estabilidad se puede medir en un espectro y muchas personas están felices de utilizar el software incluso cuando todavía hay algunos errores. Pero los equipos de desarrollo tienden a mantener las cosas simples y hablan de forma binaria sobre versiones estable e inestable.
La estabilidad se refiere tanto a los errores del software como a su probabilidad de cambiar de manera visible para los externos. Los desarrolladores podrían considerar inestable una versión de una biblioteca de software porque han cambiado las funciones que llaman los programadores (es decir, porque es posible que los programadores tengan que reescribir su software para la próxima versión). O el software puede ser inestable desde el punto de vista del usuario porque los desarrolladores han eliminado una función.
¿Hay alguna razón para lanzar una versión inestable? Sí: son valiosos para permitir a los usuarios probar nuevas funciones al principio del proyecto y detectar errores.
La mayoría de los proyectos lanzan revisiones muy tempranas de software para que las prueben los clientes clave; estas se denominan versiones alfa. Nadie debería utilizar estas versiones para un trabajo real; son sólo para pruebas. De hecho, los evaluadores deberían ejecutar las versiones alfa en computadoras que no estén realizando ningún trabajo importante, porque los errores en esas versiones podrían dañar los datos almacenados en la computadora.
Cuando el software está cerca de considerarse estable, el proyecto generalmente lanza otra revisión de prueba llamada versión beta. Estos aún no deben usarse para trabajos de producción, sólo para pruebas.
Tanto para las versiones alfa como para las beta, los desarrolladores tienen un proceso para informar errores y realizar un seguimiento del progreso hacia la corrección de estos.
Algunos proyectos incluyen otra etapa entre las versiones beta y estable, cuando los desarrolladores han corregido todos los errores que pueden y piensan que el producto está listo. Llaman a la versión candidato de lanzamiento y se la muestran a clientes o partes interesadas clave para que estas partes interesadas puedan planificar cómo utilizar las nuevas funciones.
Finalmente, algunos proyectos incluyen características que no son del todo estables, porque los usuarios importantes las han solicitado. Los desarrolladores tienen la intención de que los usuarios prueben estas funciones y digan si les gustan, antes de finalizar las interfaces e invertir el esfuerzo para estabilizar las funciones.
Compatibilidad con versiones anteriores
La mayoría de los proyectos buscan compatibilidad con versiones anteriores, lo que significa que intentan no eliminar características o funciones que existían en versiones anteriores. La compatibilidad puede existir en varios niveles. Por ejemplo, si los desarrolladores mantienen la compatibilidad con versiones anteriores de la interfaz de programación de aplicaciones (API), prometen que el código fuente antiguo puede seguir funcionando, pero es posible que sea necesario volver a compilarlo. Si los proveedores de hardware o los desarrolladores de sistemas operativos mantienen la compatibilidad con versiones anteriores de la interfaz binaria de la aplicación (ABI), prometen que, los archivos ejecutables antiguos pueden ejecutarse en nuevas versiones del hardware.
Más adelante veremos las formas en que los proyectos manejan la falta de compatibilidad con versiones anteriores, cuando deciden que la interfaz antigua realmente no funciona para las nuevas características o entornos que necesitan soportar.
Soporte y fin de vida (EOL)
Idealmente, el software mejoraría cada vez más a medida que los desarrolladores descubran y solucionen sus problemas. Pero con el tiempo, las funciones pueden dejar de funcionar debido a cambios en el entorno del software. Además, se descubren nuevos errores que antes estaban ocultos.
Las nuevas versiones suelen combinar seguridad y corrección de errores con nuevas funciones. Es posible que no desee las nuevas funciones (de hecho, es posible que prefiera alguna función antigua que los desarrolladores eliminaron para dar paso a otras nuevas), pero las personas generalmente actualizan a la nueva versión para obtener las correcciones de seguridad que los protegerán contra ataques de malware.
Algunas personas siguen usando versiones antiguas de software y se niegan a actualizarlas. Normalmente, esto se debe a que la nueva versión rompe algo que funcionaba en su entorno. Cuando las empresas cobran dinero por las actualizaciones, algunos clientes se niegan a actualizar porque no quieren pagar dinero extra, pero pagar por las actualizaciones es poco común en el código abierto.
Los desarrolladores se adaptan a los usuarios de versiones antiguas, si es posible, corrigiendo errores en las versiones antiguas sin agregar características que rompan el software. Naturalmente, los desarrolladores no pueden hacer esto para siempre porque consume tiempo y energía del nuevo trabajo. Llegará un momento en el que se negarán a reparar una versión antigua y les dirán a los usuarios que actualicen o que hagan sus propias correcciones.
La reparación de errores y fallas de seguridad se denomina soporte para el software. Esto es diferente del soporte que ofrecen los servicios de asistencia técnica y otras personas que guían a los usuarios para que comprendan el software. En lo que respecta a la gestión de versiones, una versión compatible es aquella en la que los desarrolladores prometen corregir errores, mientras que una versión no compatible es aquella en la que no lo hacen.
Tenga en cuenta que la noción de “soporte” se aplica principalmente al software creado por empresas u grandes organizaciones. Los proyectos de código abierto más pequeños, que dependen en gran medida de voluntarios, a menudo prometen simplemente hacer lo mejor que puedan para corregir errores y publicar nuevas versiones. No ven la necesidad de arreglar las versiones antiguas. Debido a que el código es abierto, por ende los usuarios que no quieran actualizar pueden pagarle a alguien para que arregle una versión anterior.
Cuando existe soporte, los desarrolladores publican un cronograma que indica durante cuánto tiempo brindarán soporte para cada versión. La fecha en la que finaliza el soporte se denomina fin de vida útil (EOL) del software. Los usuarios pueden mantener la versión anterior hasta el EOL y esperar que se solucionen los errores, pero después del EOL tienen que actualizar o arriesgarse.
Los proyectos importantes, como la distribución Debian de GNU/Linux, ofrecen versiones de soporte a largo plazo (LTS). Eso simplemente significa que los desarrolladores seguirán corrigiendo errores durante un cierto número de años. Los clientes que valoran mucho la estabilidad pueden tener miedo de instalar versiones de software que tengan muchos cambios, en caso de que los cambios rompan los procesos en los que confían los clientes. A estos clientes, en particular a las grandes instituciones, les gusta la seguridad de las versiones LTS.
Versiones de software: principales (Major), menores y parches
Hemos visto que el control de versiones es complicado, algunas versiones corrigen errores, mientras que otras agregan funciones y la estabilidad de las versiones puede variar. Los desarrolladores intentan indicar mediante etiquetas qué tan grande es el cambio en el software en cada versión. Las convenciones adoptadas por casi todos los proyectos para etiquetar versiones se denominan versionamiento semántico.
Tomemos como ejemplo la historia del kernel de Linux. Linus Torvalds etiquetó la primera versión estable como 1.0. A medida que mejoró el kernel, etiquetó las versiones posteriores 1.1, 1.2, etc. El 1 inicial era la versión principal y los números después del punto denotaban la versión menor. Se podría suponer que la versión 1.2 tenía más funciones y ofrecía más que la versión 1.1.
Pero también hubo innumerables versiones pequeñas, a veces sólo para corregir algunos errores. Para demostrar que los cambios tuvieron un impacto menor en el uso del kernel, Torvalds incluyó un tercer número llamado patch. Por lo tanto, 1.0 se actualizó a 1.0.1, luego a 1.0.2, y así sucesivamente.
Los números de parche comienzan desde 0 cuando se lanza una nueva versión secundaria, y los números de versión secundaria comienzan desde 0 cuando se lanza una nueva versión principal.
Los desarrolladores agrupan las versiones usando una “x” para indicar que están hablando de múltiples versiones, como 1.x para todas las versiones bajo la versión principal 1.
Pero, ¿cuál es la diferencia entre un cambio que conduce a una nueva versión menor y un cambio que merece desencadenar una nueva versión principal? Por lo general, pasan años antes de que se lance otra versión y ésta debe reflejar una actualización muy significativa.
Generalmente, los desarrolladores intentan mantener la compatibilidad con versiones anteriores a medida que cambian las versiones. Si no se puede preservar la compatibilidad con versiones anteriores, los desarrolladores deben incrementar la versión principal.
A veces ves un número de versión menor que cero, normalmente 0,9. El cero inicial indica una versión anterior del software que es inestable y no está lista para su uso en producción. No hay garantía de compatibilidad con versiones anteriores hasta que los desarrolladores publiquen versiones que comiencen con 1.
Las versiones alfa generalmente se indican agregando “a” o “alpha” después del número de versión, como 3.6alpha. De manera similar, las versiones beta agregan “b” o “beta” después del número de versión.
El ciclo de vida del producto de software
No creas que la vida de un desarrollador es fácil. Todo el mundo quiere algo de ellos. Quiero que este error en el diseño de la pantalla se solucione lo antes posible, mientras que alguien más dice que el error en el nombre de los archivos tiene prioridad. Los usuarios claman por nuevas características, y cuando diferentes desarrolladores trabajan en diferentes características en paralelo, descubren que los cambios de uno pueden pisotear los realizados por otro.
La gestión de proyectos y el subconjunto de estas tareas denominado gestión de versiones abordan estos problemas. Por lo general, un miembro senior del proyecto asume la responsabilidad de este trabajo de gestión.
Al igual que las personas, las versiones de software pasan por un ciclo de vida. Cada uno comienza con una discusión sobre las nuevas funciones y otros cambios necesarios, pasa por fases de desarrollo y prueba, y se implementa de manera planificada.
Planificación y hojas de ruta (Roadmaps)
Los desarrolladores intentan establecer, con mucha antelación, qué cambios quieren hacer en un producto. En las empresas comerciales, hablan con gente de marketing, quienes filtran y resumen lo que les dicen sus clientes. Los proyectos de código abierto dependen más de las ideas enviadas por los desarrolladores y usuarios, que se capturan en una base de datos llamada rastreador de problemas. Si necesita corregir un error o desea una nueva función, complete un problema. Luego, los desarrolladores priorizan los cambios y deciden quién se encargará de cada uno.
Entonces, ¿cómo se eligen y priorizan los cambios? Puede ser un proceso complicado. Pero los buenos directores de proyectos en proyectos de código abierto fomentan una amplia aportación y al mismo tiempo garantizan que se tomen decisiones. Algunos proyectos incluso celebran conferencias en las que los participantes debaten las prioridades.
Una hoja de ruta publicada establece los planes resultantes para mejoras y cambios. Puede extender muchos lanzamientos y muchos años en el futuro. Cada paso se denomina hito y puede o no estar asociado con una fecha objetivo.
Programación de lanzamiento
Hay dos formas básicas de programar lanzamientos: según el tiempo y las funciones. Un proyecto puede prometer un lanzamiento a intervalos regulares (cada seis meses, por ejemplo) e incluir todo lo que esté terminado en ese momento. Alternativamente, el proyecto puede prometer incluir ciertas funciones en una versión y dejar que los desarrolladores se tomen el tiempo necesario para finalizar esas funciones.
A medida que se acerca el momento del lanzamiento, el administrador de lanzamientos determina las fechas para las versiones alfa, beta y estable. Los miembros del equipo revisan periódicamente los informes de errores e intentan planificar su trabajo para cumplir con estos hitos.
Para finalizar un lanzamiento, un proyecto debe dejar de aceptar ideas para nuevas funciones y centrarse en hacer que las funciones existentes funcionen correctamente. Este momento se llama congelación de funciones.
Documentación para las versiones del producto
Las hojas de ruta, como se mencionó anteriormente, explican las características que los desarrolladores planean incluir en cada versión. El lanzamiento va acompañado de una lista de cambios denominada changelog. Generalmente, el registro de cambios enumera nuevas funciones, cambios, operaciones que se eliminaron, funciones que los desarrolladores pretenden eliminar en el futuro (conocidas como obsoletas) y correcciones de errores.
Por lo tanto, los registros de cambios pueden volverse bastante largos y detallados. Los usuarios deben prestar especial atención a las funciones que se eliminaron o que están en desuso, porque es posible que los usuarios tengan que cambiar sus programas o la forma de utilizar el producto. Obviamente, los desarrolladores intentan eliminar sólo aquellas funciones que ya nadie necesita.
Cada versión debe cambiar la documentación del producto para que coincida con los cambios en el producto. Esta tarea puede llevar mucho tiempo y es fácil para los desarrolladores pasar por alto un cambio o retrasarse en la producción de documentación.
Ejercicios guiados
-
¿Qué distingue una versión estable de una inestable?
-
¿Esperaría un cambio de funciones entre una versión denominada 2.6.14 y una versión denominada 2.6.15?
-
¿Esperaría un cambio de funciones entre una versión denominada 2.6.0beta y una versión denominada 2.6.0?
-
¿Por qué esperaría que la versión 1.0 no fuera compatible con la versión 0.9?
-
Si descubre una falla de seguridad en una versión después de una congelación de funciones pero antes de su lanzamiento, ¿puede solucionarla?
== Ejercicios exploratorios
-
Supongamos que desea seguir usando una versión de software de código abierto después del final de su vida útil, porque tiene una función que necesita. ¿Qué puedes hacer para mantenerlo utilizable?
-
¿Cuáles son algunos de los criterios que permiten elegir una corrección de error o una solicitud de función sobre otras?
Resumen
Esta lección describió las principales características que distinguen las versiones: estabilidad, compatibilidad con versiones anteriores y soporte. Discutimos el significado de los nombres y números de las versiones, y los aspectos clave de la gestión de versiones, incluida la documentación.
Respuestas a ejercicios guiados
-
¿Qué distingue una versión estable de una inestable?
Las versiones se consideran estables de dos maneras: funcionan bien sin fallar ni producir resultados incorrectos, y se espera que la interfaz presentada a los usuarios o programadores sea compatible con versiones anteriores.
-
¿Esperaría un cambio de funciones entre una versión denominada 2.6.14 y una versión denominada 2.6.15?
No. El tercer número en el control de versiones semántico indica un parche que se creó para corregir un error o realizar alguna otra tarea menor, como reformatear. Un cambio de función debería dar lugar a una versión menor o mayor.
-
¿Esperaría un cambio de funciones entre una versión denominada 2.6.0beta y una versión denominada 2.6.0?
No. La versión beta es una versión de prueba que contiene todas las funciones que se incluirán en la versión final.
-
¿Por qué esperaría que la versión 1.0 no fuera compatible con la versión 0.9?
El número 0.9 advierte explícitamente a los usuarios potenciales que el software aún se está diseñando y que muy probablemente podría tener una interfaz diferente cuando se estabilice como versión 1.0.
-
Si descubre una falla de seguridad en una versión después de una congelación de funciones pero antes de su lanzamiento, ¿puede solucionarla?
Sin duda. El período entre la congelación de una función y el lanzamiento es un momento para descubrir y corregir fallas, incluidas las de seguridad.
Respuestas a ejercicios exploratorios
-
Suponga que desea seguir usando una versión de software de código abierto después del final de su vida útil, porque tiene una función que necesita. ¿Qué puedes hacer para mantenerlo utilizable?
Después del EOL, los desarrolladores del proyecto no tienen ningún compromiso de corregir errores, incluidos los fallos de seguridad. Por lo tanto, debe seguir atentamente el rastreador de errores y las listas de correo del proyecto para descubrir qué errores aparecen. Como el código está disponible, puedes y debes corregir los errores que se encuentran en tu versión. En teoría, incluso podrías incorporar nuevas funciones a tu versión. Eso efectivamente haría que su versión sea una bifurcación del original.
-
¿Cuáles son algunos de los criterios que permiten elegir una corrección de error o una solicitud de función sobre otras?
Para las correcciones de errores, los criterios incluyen la gravedad (que se asigna al error después de que ingresa al rastreador de errores) y la cantidad de usuarios afectados por él. Para una función, los criterios incluyen la cantidad de usuarios que desean la función, la dificultad de codificarla y su impacto potencial en otras partes del programa.