Ingeniería del software

El concepto de Ingeniería del Software surge de la necesidad de sistematizar la producción de software, afectada por la llamada crisis del software, aplicando principios de ingeniería al desarrollo del software, con el objetivo de obtener software de calidad.

La denominada crisis se produjo al comenzar generarse software a gran escala. En etapas anteriores, hasta los años 70, el énfasis estaba puesto en el desarrollo del hardware, la parte correspondiente al software, generalmente consistía en aplicaciones hechas a medida.

Con la aparición del software comercial, se descubren los problemas que la Ingeniería del Software intenta solucionar, en base a una serie de síntomas evidentes:

Expectativas defraudadasLos usuarios no encuentran la respuesta a sus expectativas en el software recibido.
Falta de fiabilidad Los sistemas fallan con demasiada frecuencia.
Desviaciones en el esfuerzoLa realización de los sistemas de información supera las previsiones de coste y plazo de duración.
Difícil portabilidadNormalmente, el software no será válido en otra plataforma diferente a aquella para la que se creó.
IneficienciaEl software, en su ejecución, no utiliza los recursos disponibles del mejor modo posible.

Base de la ingeniería del software

La ingeniería del software se basa en una serie de métodos, herramientas y procedimientos.

Métodos

Se trata de las técnicas necesarias para la realización del software. Estas técnicas se refieren a varios grupos de actividades, como actividades de gestión, de desarrollo, de control y de operación de los sistemas de información.

Herramientas

La finalidad de las herramientas es dar soporte automático a las actividades descritas en los métodos. Las herramientas automáticas de soporte al desarrollo del software, utilizadas en Ingeniería del Software, se denominan herramientas CASE (Computer Aided Software Engineering).

Procedimientos

Los procedimientos definen la manera de usar los métodos y herramientas de un modo integrado, indicando la secuencia de operaciones y la manera de controlar dicha secuencia.

Nota:

Se trata del conjunto de métodos, técnicas y herramientas que controlan el proceso integral del desarrollo de software y suministra las bases para construir software ajustado a una calidad determinada de forma eficiente y en los plazos adecuados.

Ciclo de vida de sistemas y fases

El proyecto de realización de un sistema requiere la ejecución de varias actividades, que pueden agruparse en función de su contribución a la consecución de subproductos o productos intermedios. Estas agrupaciones se denominan etapas o fases.

Nota:

El ciclo de vida es el conjunto de etapas por las que atraviesa un sistema desde su concepción hasta su cambio o retirada de explotación.

Existen distintas formas de dividir los proyectos en fases. Un modelo de ciclo de vida es una forma de dividir la realización de un sistema en distintas fases, más concretamente, debe proporcionar información respecto a los siguientes puntos:

Descomposición en actividadesSe deben determinar cuáles son las actividades necesarias para llevar a cabo el proyecto, así como el orden en que se deben realizar.
Criterios de transición entre etapasDebe definir cómo y en qué condiciones puede comenzar una etapa.
Seguimiento y controlDebe definir los momentos en que se puedan realizar las actividades de gestión y seguimiento.
Garantía de integraciónDebe asegurar la consistencia del sistema con el resto de sistemas de información de la organización.

Modelo de ciclo de vida y metodología

No se deben confundir los conceptos de modelo ciclo de vida y de metodología.

  • El modelo de ciclo de vida describe el proceso de realización de un producto.
  • La metodología define las técnicas y procedimientos para avanzar en la construcción del producto.

Cualquier metodología puede servir para un modelo determinado de ciclo de vida, nos dicen cómo llevar a cabo cada una de las actividades que definen el ciclo de vida, es decir, proporciona los métodos, las herramientas.

El orden de las decisiones debe ser el siguiente:

  • Elegir el modelo de ciclo de vida, que es la manera de dividir la construcción del producto.
  • Elegir una metodología para determinar cómo hacer cada actividad.

Nota:

Es muy importante la elección del modelo de ciclo de vida. Si esta elección no se hace correctamente, la realización del producto irá por mal camino.

¡Aprovechate! Ahora puedes profundizar sobre el tema del artículo, con la promoción Kindle Unlimited de Amazon.

Podrás leer gratis todo lo que quieras, durante ¡30 días!.

Evolución de los modelos de ciclo de vida

A lo largo de la historia de las tecnologías de la información, se han utilizado distintos modelos de ciclo de vida. A continuación se muestra una breve reseña histórica de estos modelos.

Por orden de aparición, los modelos más utilizados son los expuestos en los siguientes apartados.

Modelo Code-and-fix

En este modelo, la construcción del software se realiza de una sola vez (CODE) y posteriormente se van arreglando los problemas que puedan aparecer (FIX). En otras palabras, se trata de ir parcheando el código. Este modelo fue el utilizado en las primeras etapas de la historia del software.

Al no existir ninguna fase previa a la codificación, se asume que, con toda seguridad, se encontrarán errores en el código.

Modelo por etapas

Fue el primer intento de dividir el proyecto en etapas (Stagewise en inglés). Es un modelo secuencial, en el que no se puede volver a una etapa anterior, no hay marcha atrás en la secuencia.

Modelo en cascada

Está basado en el modelo por etapas, pero admite marcha atrás, teóricamente, solo hasta la etapa anterior.

La primera formulación de este modelo de ciclo de vida se debe a Royce en 1970. Debido a su amplia utilización, también es llamado modelo clásico.

El principal inconveniente de este modelo es que, para ser eficaz, exige la congelación de requisitos al principio, es decir, los requisitos deben estar completos y permanecer invariables en el tiempo.

Modelo de prototipado

El problema mencionado antes, sobre los requisitos incompletos o variables en el tiempo, se pueden solucionar mediante la realización de prototipos, de modo que el usuario pueda tener una idea de lo que se puede hacer y lo que realmente requiere del sistema.

Los prototipos pueden proporcionar una idea de la interfaz hombre-máquina o bien proporcionar versiones reducidas de la funcionalidad final, de modo que el usuario pueda hacerse una idea de sus necesidades.

Puede haber dos tipos de prototipos: los que funcionan y prototipos en papel. En ambos casos, se necesitará su revisión por parte de los usuarios.

Modelo de transformación

Estos modelos se basan en la generación automática de los componentes del sistema de información a partir de una especificaciones formales. Estos modelos utilizan herramientas CASE, por lo que también se denominan modelos basados en herramientas.

Modelo de desarrollo evolutivo

En este modelo, el énfasis está en lograr un sistema flexible y expandible, de manera que se pueda realizar rápidamente un nuevo sistema cuando cambien los requisitos.

Se trata de una situación semejante a la que se da cuando se crea un nuevo prototipo para ajustarse a los cambios de requisitos.

La diferencia esencial entre la aproximación de prototipo y la evolutiva, estriba en lo siguiente:

  • En el primer caso se asume que existen una serie de requisitos reales y que para establecer lo que quiere realmente el usuario, puede ser necesario realizar varias iteraciones, pero finalmente los requisitos se estabilizarán.
  • En el segundo caso se asume que los requisitos cambian continuamente. Tal consideración no se realiza en el análisis con prototipos puesto que el proceso iterativo no terminaría nunca y no se podría construir el sistema real.

Modelo de desarrollo incremental

El desarrollo incremental es un concepto parecido a la aproximación evolutiva y que frecuentemente aparece englobado dentro de éste.

En esta aproximación la funcionalidad del sistema se le entrega al usuario en incrementos.

Se comienza desarrollando el sistema de modo que satisfaga un subconjunto de los requisitos especificados. Sucesivamente se irán creando versiones que incorporen los requisitos que faltan, siendo las últimas las que cumplirán todos ellos.

Para cada una de las versiones se aplicará la aproximación de fase del modelo en cascada.

Con esta aproximación se pretende disponer cuanto antes de un sistema que, aunque incompleto, sea utilizable y satisfaga alguna de las necesidades de información. De este modo también se evita el denominado efecto Big Bang, que se produce al sustituir de improviso un sistema en funcionamiento por otro nuevo y existiendo un periodo en el que realmente no se tiene nada.

Otra ventaja de este modelo es que el usuario está implicado en la evolución del sistema.

Esta aproximación se puede utilizar también para evitar la demanda de funcionalidades excesivas al sistema. Como a los usuarios les resulta difícil definir sus necesidades reales, normalmente tienden a pedir demasiado.

Al carecer del conocimiento necesario de la maleabilidad del software y su proceso de desarrollo, pueden creer que todo es posible y como consecuencia de todo ello, las características esenciales del sistema aparecen mezcladas con detalles innecesarios.

Los analistas no pueden distinguir unos elementos de otros, por lo que se corre el riesgo de emplear un esfuerzo considerable en implantar funcionalidades que realmente no son necesarias.

Con la aproximación incremental se fija la atención primero en las características esenciales y las posibles funcionalidades adicionales sólo se incluyen cuando sean necesarias.

Las sucesivas versiones de un sistema desarrollado con la aproximación evolutiva y la incremental difieren claramente.

  • En el primer caso, cada vez se desarrolla una nueva versión de todo el sistema.
  • En el segundo caso, cada versión parte de una versión previa sin cambios, añadiendo un cierto conjunto de nuevas funciones.

Para desarrollar algunos componentes particulares del sistema, es posible desarrollar en base a un sistema incrementalmente y al mismo tiempo seguir con una aproximación evolutiva.

El modelo incremental es especialmente adecuado para el desarrollo de portales de internet.

Modelo en espiral

Este modelo fue creado por Barry Boehm con el objetivo de solucionar los problemas de los modelos basados en documentos y que reúna todas las características de los demás modelos. Más adelante se describirá en detalle este modelo.

Artículos relacionados:

Deja un comentario

error: Content is protected !!