Información general sobre desarrollo

El software moderno habitualmente consiste en una serie de componentes que interactúan entre sí para realizar las tareas que se requieren al implementar la aplicación. El desarrollo implica la creación de estos componentes mediante la escritura de código fuente en uno de los muchos lenguajes disponibles. Este código define las acciones individuales fundamentales que el equipo informático deberá llevar a cabo para alcanzar el resultado final especificado en el diseño de la aplicación. Estas acciones pueden ser tan sencillas como sumar números, configurar valores de los objetos dentro de los componentes o ejecutar diferentes partes del código según una comparación de los valores de las variables definidas en el código. Es posible que también implique cálculos matemáticos más complejos dentro del código y la aplicación de operaciones lógicas para generar los resultados requeridos. Otras actividades que implica el desarrollo incluyen depuración del código para ubicar y corregir errores; seguimiento del trabajo mediante metodologías formales; trabajo con repositorios de códigos compartidos; y participación en reuniones sobre diseño, planeación, comentarios y revisión de código.

Este documento describe el desarrollo de tareas en el contexto del ciclo de vida de la creación de software. Lo ayudará a comprender qué incluyen las responsabilidades de desarrollo, las metas amplias y los procesos que se llevan a cabo. En la figura 1 se muestra una descripción general del ciclo de vida típico para desarrollo de software.

El ciclo de vida de desarrollo de software

Figura 1: el ciclo de vida de desarrollo de software

El proceso de creación de software abarca una amplia gama de tareas; desde el diseño original hasta la implementación final y la aceptación del cliente. La labor principal durante el desarrollo consiste en convertir el diseño original en código de trabajo utilizando herramientas como Microsoft Visual Studio y lenguajes como Visual Basic, C# y JavaScript. Sin embargo, habitualmente incluye alguna participación durante el ciclo de vida completo de desarrollo de software, especialmente al trabajar solo o en un equipo muy pequeño (en cuyo caso realizará frecuentemente una combinación de tareas de desarrollo, pruebas y arquitectura). Las secciones siguientes describen las tareas principales del desarrollo dentro del ciclo de vida del software.

Revisión de información del cliente y los objetivos del proyecto

La primera tarea en la creación de una aplicación de software consiste en captar información y generar el diseño de alto nivel según los requisitos del cliente. A medida que el diseño de alto nivel se traduce en documentación más específica y más centrada técnicamente, se requiere información de implementación técnica para proporcionar comentarios sobre las capacidades del hardware y la implementación práctica del diseño. Esto puede ayudar a evitar sorpresas posteriores, y garantiza que el diseño final del software pueda implementarse en un tiempo razonable y en el hardware y la infraestructura disponibles.

Escribir código para componentes

Esta es la actividad central del desarrollo y la actividad que impulsa todo el proceso de creación de software. La persona que crea el código usará una especificación o lista de requisitos que describen lo que debe realizar un componente o sección de la aplicación, los resultados que debe generar y la forma en que se comunicará con otras partes de la aplicación. Esta especificación puede ser en una de muchas formas diferentes, como modelos escritos en un lenguaje de modelado estándar, descripciones de la funcionalidad o simplemente diagramas en una pizarra.

Durante el desarrollo, se usan las funciones del lenguaje de programación elegido para crear archivos de código fuente que contienen la serie requerida de instrucciones que ejecutará el equipo. Básicamente, este código asimilará un conjunto de valores de entrada, realizará algún procesamiento con estos valores y generará los resultados. Para lograr esto puede hacer uso de otros componentes y funciones dentro del software, y también puede hacer uso de bibliotecas de códigos y funciones que fueron escritos por el equipo u obtenidos de proveedores externos. Las herramientas y entornos de desarrollo que se usen, como Microsoft Visual Studio (en la figura 2), ayudan a facilitar la escritura de código al sugerir los nombres de objetos y variantes, al comprobar la sintaxis para garantizar que se compilará correctamente y al indicar errores.

Entorno de desarrollo de Visual Studio 2010

Figura 2: entorno de desarrollo de Microsoft Visual Studio 2010

Revisión de códigos con miembros del equipo

Para cualquier sección de código que los desarrolladores escriban, rara vez hay sólo una solución correcta única. Las habilidades de un desarrollador radican en utilizar las características y capacidades de los lenguajes de código para construir código que realice la tarea requerida, y puede haber muchas maneras distintas de lograrlo. Distintos desarrolladores pueden utilizar hábilmente diferentes enfoques y diferentes combinaciones de instrucciones de código.

Con una revisión del código por parte de pares y gerentes se realizan dos tareas vitales. En primer lugar, reúne los puntos de vista y las opiniones de varios desarrolladores que pueden ofrecer enfoques alternativos, señalar errores desapercibidos o sugerir mejoras al código. Esto ayuda a optimizar la eficiencia y el rendimiento de los códigos. En segundo lugar, ayuda a ampliar el conocimiento de todos los miembros del equipo al compartir experiencia, lo cual mejora el desempeño de todo el equipo con el tiempo.

Compilación y prueba del código

Según el lenguaje de código que se use, el desarrollo implica la compilación del código fuente para convertirlo en una forma que el equipo informático pueda ejecutar. Generalmente las herramientas y entornos de desarrollo realizarán esta tarea. Un miembro del equipo (habitualmente el creador inicial, luego los evaluadores) ejecuta después el código para garantizar que funcione como debería. Si el equipo utiliza un enfoque Test Driven Design (TDD), un miembro del equipo habrá escrito anteriormente pruebas unitarias que pueden ejecutarse para garantizar que el código se ejecuta correctamente y genera los resultados requeridos.

La compilación, ejecución y prueba del código es un proceso iterativo que se produce mientras el código se crea. Habitualmente, se crea primero el código mínimo básico para probar el concepto, asegurando que se compila y ejecuta, y luego se agrega o actualiza código progresivamente para maximizar el rendimiento y la eficiencia y, a la vez, confirmar que genera los resultados correctos.

Registro y actualización del repositorio de códigos

En la mayoría de los proyectos medianos y grandes se usa un sistema de información de equipo y repositorio de códigos como Team Foundation Server (TFS) para almacenar códigos, documentos e información sobre el proyecto. El desarrollador registra el código que creó para que forme parte del proyecto general y pueda compilarse en la solución completa durante las compilaciones regulares. Habitualmente estas compilaciones se realizan a diario, y el equipo de prueba trabaja con la nueva compilación cada día para confirmar que los errores informados existentes se hayan resuelto y para ubicar cualquier defecto nuevo.

El repositorio por lo general incluirá elementos de trabajo e informes. El desarrollador actualiza elementos de trabajo relevantes para el código creado, marca los elementos de trabajo para errores que se hayan resuelto y agrega otra información relevante para la tarea que resultará útil a otros miembros del equipo, incluidos el equipo de prueba y el equipo de documentación. El equipo puede ejecutar informes basados en estos elementos de trabajo para supervisar el progreso del proyecto y descubrir cualquier problema en curso. En la figura 3 se muestra Microsoft Visual Studio Team Foundation Server.

Generación de informes sobre códigos y elementos de trabajo en Team Foundation Server 

Figura 3: generación de informes sobre códigos y elementos de trabajo en Microsoft Team Foundation Server

Implementación de cambios y depuración y corrección de errores

Si las pruebas dan como resultado errores que se informan en el código, el desarrollador debe volver atrás, encontrar la causa de esos errores y luego cambiar el código para resolverlos. La depuración es la tarea de localizar el origen de los errores, que se puede producir en cualquier parte del código y que sólo puede surgir en el punto descubierto durante las pruebas. La depuración a veces se considera como un “arte secreto” porque requiere experiencia y también un enfoque lógico, especialmente si el error sólo aparece intermitentemente o es difícil de reproducir.

Sin embargo, las herramientas y entornos de desarrollo modernos como Visual Studio incluyen características que permiten a los miembros del equipo recorrer el código mirando los valores de las variables y observando cómo cambian. Esto hace que la localización de errores sea un proceso mucho más fácil y más lógico. Otras características y herramientas que proporcionan una lista de los procedimientos de código que se ejecutan y la forma en que el procesador del equipo informático los maneja, ayudan al equipo a localizar errores. Además, el equipo puede agregar instrumentación (como código para escribir eventos en archivos de registro) que supervisará el código mientras se ejecuta y ayudará a localizar errores.

También es común que durante las pruebas de aceptación el cliente solicite cambios en características de la aplicación a fin de ajustar el software exactamente a sus requisitos. El desarrollador implementará estos cambios, generalmente según una revisión de los requisitos y un estudio detallado del impacto que los cambios pueden tener sobre el resto del software. Un buen diseño original que separe correctamente las responsabilidades de cada componente facilitará la implementación de cambios sin afectar otras partes de la aplicación.

El ciclo de vida de desarrollo de software es un proceso iterativo, y muchas de las tareas descritas se repiten a medida que el desarrollo continúa. Por ejemplo, durante el desarrollo el equipo puede crear varias versiones completadas por partes del software o los componentes y luego mejorarlas o cambiarlas según los resultados de las pruebas y los comentarios del cliente.

Trabajar como parte de un equipo

Algunos desarrolladores trabajan solos o en grupos pequeños, mientras que otros trabajan en equipos organizados grandes. Como individuo o en un equipo pequeño, el desarrollador puede ser responsable de todas las tareas del ciclo de vida de desarrollo, incluidos diseño, pruebas, implementación y mantenimiento. En los equipos grandes normalmente hay grupos separados responsables del diseño, pruebas, implementación y mantenimiento, y así el desarrollador se centrará más en la tarea central de escribir código.

Los equipos más grandes por lo general operan de forma estructurada para poder administrar y supervisar el ciclo de vida de desarrollo y el proceso de desarrollo. Existen muchos enfoques distintos para administrar el desarrollo de software en un equipo, incluido el ciclo tradicional orientado al diseño que se basa en tareas planeadas previamente que se siguen una a otra (el enfoque de “cascada”) y el enfoque más orientado a comentarios donde la planeación se ejecuta en paralelo con tareas de desarrollo según la información regular del cliente (el enfoque “ágil”). En la figura 4 se muestran estos dos enfoques principales para el desarrollo de software.

procesos de desarrollo "en cascada" y "ágil" 

Figura 4: comparación de los procesos de desarrollo “en cascada” y “ágil”

Independientemente del enfoque de desarrollo que se use, es esencial la buena comunicación entre los miembros del equipo y los administradores de proyectos. Aunque muchos equipos se ubican en un solo lugar, cada vez es más común que estos incluyan miembros ubicados geográficamente en otro lugar y que en las reuniones se utilicen instalaciones para teléfono y videoconferencia. Las reuniones programadas en forma regular a las que asisten todos los miembros del equipo, incluidos desarrolladores, diseñadores de software (arquitectos), evaluadores y administración de proyectos, se usan para analizar el progreso, para planear actividades y para recibir comentarios de otros miembros del equipo y clientes. Esto garantiza que los desarrolladores estén bien informados sobre la evolución inevitable del diseño de software y que puedan actuar según los comentarios regulares que pueden afectar la implementación del software.

Resumen

Trabajar en desarrollo de software es una labor interesante y desafiante que puede ser enormemente gratificante. Requiere una mente lógica y un enfoque estructurado, e implica muchas tareas que no se relacionan directamente con sólo aprender lenguajes de código. Siempre hay algo nuevo que aprender, algún nuevo requisito que exige investigación y una nueva tecnología para experimentar. Las recompensas están en ver funcionando la aplicación de software final y en saber que usted cumplió un papel importante para lograrlo. El software es el que está dando forma a nuestro mundo actual y, como creador de software, usted puede influir en el futuro.