sábado, 23 de marzo de 2013

Ingeniería del software

La forma tradicional de llevar a cabo cualquier desarrollo de software en muchas empresas suele ser hablar con el cliente para tomar los requerimientos y luego ponerse a programar. En mi opinión eso es un error. Hacer un trabajo previo de ingeniería del software puede parecer una pérdida de tiempo, pero a la larga redunda siempre en beneficio para el proyecto. Da igual si se trata de un sistema nuevo, un nuevo módulo de un producto existente o una modificación de cierta importancia. Siempre hay beneficios y éstos son múltiples y variados:

  • Disponibilidad de una documentación de que hará el nuevo software y de como lo hará en fases muy tempranas del proyecto.

  • Permite la revisión y aceptación por parte del cliente o responsable antes de empezar la fase de programación; lo cual posibilita la realización de cambios en las especificaciones o el diseño antes de empezar a programar.

  • Mejora la gestión de proyectos y equipos de trabajo. Es más fácil asignar tareas concretas si se tienen preestablecidas.

  • Favorece la modularidad del software (su división en módulos manejables).

  • Facilita la sistematización del proceso de creación de software a pesar de que éste es un proceso intrínsecamente creativo.

  • Proporciona mayor control de las posibles desviaciones una vez realizada la programación.
Código fuente

¿Qué es ingeniería del software?

Según la Wikipedia:

Ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software, y el estudio de estos enfoques, es decir, la aplicación de la ingeniería al software

No quiero contradecir a la Wikipedia, pero en mi opinión se puede definir de forma más sencilla: Ingeniería del software es la división del proceso de desarrollo de software en fases predefinidas, aplicando metodologías conocidas y documentando el proceso.

Techado

Ciclo de vida del desarrollo de software

La ingeniería del software y el ciclo de vida del desarrollo de software son dos conceptos que están muy relacionados. Ya hemos dicho que la ingeniería del software consiste en dividir el proceso de creación de software en fases. Dichas fases son las que forman el ciclo de vida del desarrollo de software de forma que cada una de ellas tendrá sus propios objetivos y metodologías. Las que pongo a continuación son las más comunes. Eso no quiere decir que sean únicas, ni que sean las "mejores".

  1. Toma de requerimientos. Consiste en el análisis de las necesidades del usuario o cliente para responder a la pregunta: ¿Qué hay que hacer?. A través de reuniones, estudio de documentación, estudio de un sistema anterior o cualquier otra técnica, el analista determinará que debe hacer el nuevo software, obteniendo en el proceso un documento de especificaciones. En esta fase no es necesario entrar en aspectos técnicos de diseño.

  2. Diseño técnico. Esta fase debe servir para responder a la pregunta: ¿Cómo vamos a hacerlo? Estudiando el documento de especificaciones se determinará el diseño de bases de datos (modelo entidad-relación), la división en módulos, el diseño de clases, la tecnología a usar, el diseño de pantallas, el flujo de la aplicación, los formatos de salida, etc. Al final del proceso se obtiene un documento de diseño técnico que sería algo similar, salvando las distancias, a los planos de un edificio.

  3. Programación y pruebas. Consiste en la codificación usando el lenguaje de programación, base de datos y/o herramientas decididas durante las fases anteriores. De hecho si las fases de especificaciones y diseño están bien hechas, las decisiones a tomar por el programador durante esta fase serán mínimas. Esta fase puede dividirse en módulos a realizar por distintos grupos de programadores. Cada grupo tendrá que realizar pruebas individuales de su software.

  4. Pruebas integradas. Esta fase consiste en realizar pruebas complejas de los distintos módulos una vez se han integrado juntos.

  5. Puesta en marcha. A veces la puesta en marcha es tan sencilla como subir el código a un servidor web, pero otras veces puede ser muy complicado: Creación de bases de datos, migraciones de datos, distribución de ejecutables, etc. En esta fase se realizarán manuales de usuario, formaciones a los usuarios, demostraciones, ...

  6. Mantenimiento. Todo software, por bien que se haga, es susceptible de tener errores. Por lo tanto el proceso de desarrollo de software no termina con la puesta en marcha, sino que será necesario tener un equipo de programadores capaces de hacer modificaciones. Idealmente serán programadores provenientes de los equipos que hicieron la programación original, aunque esto no es obligatorio.

No hay comentarios:

Publicar un comentario