Ingeniería del Software

LA EVOLUCIÓN EN EL PROCESO DE DESARROLLO DE SOFTWARE.

El desarrollo del software ha ido en paralelo con la evolución de los sistemas informáticos, los cuales han ido mejorando notablemente debido al aumento de la potencia del hardware, a la reducción de su tamaño y la disminución de su coste económico.

Podemos distinguir (Pressman) las siguientes etapas en la evolución del software:

  • 1ª Etapa: Primeros años de la informática (1950-1965). El hardware sufrió numerosos cambios. Se desarrollaba software sin planificación y sin metodologías sistemáticas. En casi todos los sistemas se utilizaba programación por lotes. La mayoría del software era desarrollado y utilizado por la misma persona.
  • 2ª Etapa: (1965-1980). Aparición de la multiprogramación y de los sistemas multiusuario. Como consecuencia de la interactividad de los sistemas aparecen nuevos tipos de aplicaciones. Surgen, asimismo, los sistemas en tiempo real. También los primeros gestores de bases de datos.
  • 3ª Etapa: (1975-1985). Aparecen los sistemas distribuidos, redes de área local LAN y de área global WAN. Hay una fuerte presión sobre los desarrolladores de software. Los ordenadores personales impulsan el crecimiento de muchas compañías de software.
  • 4ª Etapa: (1985- ). Tecnologías de cuarta generación. Tecnologías orientadas a objetos.

CARACTERÍSTICAS ESPECIALES DEL SOFTWARE

Existen características propias del software que lo diferencian de otros productos:

  • El software no se fabrica en un sentido clásico, sino que se desarrolla: Si bien existen similitudes con la fabricación del hardware, se trata de actividades fundamentalmente diferentes. Tanto en una como en otra la buena calidad se adquiere mediante un buen diseño pero la fabricación del hardware es muy diferente de la del software y puede introducir problemas de calidad que no existen o son fácilmente corregibles en el software. Ambas actividades requieren la construcción de un producto pero con métodos muy diferentes. Los costes del desarrollo del software están en la ingeniería por lo que no se pueden gestionar como si fueran clásicos proyectos de fabricación.

El software no se fabrica, sino que se desarrolla. El mayor volumen del coste de su proceso de fabricación se encuentra en la fase de ingeniería, no en los propios costes de fabricación (entendienco como tal el empaquetado y distribución).

  • El software no se “estropea”: El hardware se deteriora con el paso del tiempo y con el uso. Los errores no detectados del software provocarán fallos al principio de su vida. Sin embargo, una vez corregidos deberían desaparecer los fallos y no aparecer nuevos. No obstante la realidad suele ser diferente. El software sufre a lo largo de su vida modificaciones y al introducir estos cambios suelen producirse nuevos fallos que, a su vez, tienen que ser corregidos y así sucesivamente.

El software no se estropea con el paso del tiempo ni con el uso, pero sí se degrada como consecuencia de su mantenimiento. La corrección de errores suelen introducir nuevos errores, y empeora la mantenibilidad del código, hasta llegar a puntos en los que llega al final de su ciclo de vida.

  • La mayor parte del software se construye a medida, en lugar de ensamblar componentes como hace la industria: En la fabricación del hardware, la reutilización de componentes es una parte natural del proceso de ingeniería. En el mundo del software la reutilización es uno de los grandes caballos de batalla, y aunque la irrupción de las tecnologías OOP (orientación a objetos) y SOA (orientación a servicios), junto con la programación modular y el uso librería tienden a mejorar la reutilización, ésta todavía es manifiestamente mejorable.

Problemas derivados de la naturaleza especial del software.

Debido a sus características especiales, existen una serie de problemas derivados del proceso de desarrollo de software, relacionados tanto con su estimación y planificación como con la propia construcción:

  • Al ser intangible, es difícil estimar los costes de su desarrollo. En otras ramas de la ingeniería, como por ejemplo en la construcción, las técnicas de estimación son mucho más precisas porque se trabaja sobre aspectos tangibles: número de metros cúbicos de tierra a retirar para allanar un terreno, número de metros cúbicos de cemento necesarios para hacer un kilometro de carretera, etc. En el caso de la estimación del software es mucho más complejo estimar los costes de desarrollo pues al ser mucho más intangible, y dada la flexibilidad que permite, las desviaciones en las estimaciones son mucho mayores. En las primeras fases del desarrollo de un proyecto software resulta difícil estimar cuales son los trabajos a realizar, pues los requisitos del sistema no están claros todavía y éstos pueden hacer que se produzcan grandes cambios en el esfuerzo que requiere el desarrollo del sistema.

En el desarrollo de software se han intentado crear técnicas para la estimación de esfuerzo como por ejemplo COCOMO (Constructive Cost Model). Estas técnicas hacen una estimación general, lo que le hace más imprecisa, basada en el conocimiento obtenido de proyectos anteriores, a partir del cálculo de la funcionalidad a realizar.

  • El software es dependiente, de la tecnología. El software que se desarrolla se hace para una tecnología en especial, lo que hace que si dicha tecnología cambia se deba volver a desarrollar, o cuanto menos, modificar para adaptarlo a la nueva.
  • Los requisitos que debe satisfacer el software son difíciles de extraer, comprender y de reflejar en la documentación. Uno de los puntos más críticos y difíciles de un proyecto es entender las necesidades del usuario, para así poder crear una aplicación que cubra dichas necesidades. Esta dificultad entraña que cualquier malentendido entre desarrolladores y usuarios puede hacer que se construya un sistema que no responda completamente a las necesidades de los usuarios, lo que dará lugar a modificaciones del mismo, retrabajo y esfuerzo de desarrollo extra no contemplado inicialmente. Tras haberse entendido las necesidades de los usuarios, éstas se plasman en una serie de documentos, que van usándose para generar nuevos documentos (especificación de requisitos, modelos de procesos, modelos de datos, diseño funcional, diseño detallado, etc.). Con cada confección de estos documentos hay que asegurarse de que no se introduzcan errores, indefiniciones o se pierda información. Cualquier error que se introduzca, sea de la índole que sea, dará lugar a modificaciones posteriores y más trabajo y esfuerzo de desarrollo.
  • El proceso de desarrollo de software es difícil de automatizar. Hoy en día existen múltiples herramientas que permiten simplificar el trabajo de desarrollo de software. Existen multitud de herramientas CASE que permiten ayudar en las diferentes fases de desarrollo del software, aunque ninguna de ellas, hoy por hoy, permiten el desarrollo automatizado de aplicaciones. Pese a que se hayan conseguido automatizar diversos aspectos de generación de modelos físicos (de datos, de procesos, etc.) a partir de modelos lógicos, existe una gran parte de trabajo, relacionada con la concepción, análisis y diseño del software a nivel lógico que se sigue realizando de forma manual.
  • El software es difícil de probar. Dada la complejidad de las aplicaciones, y de la elevada combinación de posibilidades que se pueden presentar, el proceso de pruebas exhaustivas es en la mayoría de los casos muy complicado o sencillamente imposible. Si bien es cierto que existen herramientas en el mercado que permiten automatizar en parte el proceso de pruebas, las pruebas siguen siendo una de las fases que más tiempo consumen.
  • Difícil de modificar. Cambios sin comprender su alcance e impacto. Modificar una aplicación por personal que no ha participado en el desarrollo de la misma es una tarea complicada, más si no se dispone de documentación o si ésta existe y no es buena.

LA CRISIS DEL SOFTWARE

Desde que se empezó a desarrollar software a gran escala empezaron a ser comunes una serie de problemas:

  • La planificación resultaba ser muy imprecisa. Los plazos de entrega eran superados en la mayoría de los casos.
  • El coste final de los proyectos era frecuentemente mucho mayor que el previsto.
  • La productividad era muy baja.
  • La calidad del producto entregado era, asimismo, muy baja.
  • El cliente solía quedar insatisfecho del producto.
  • El software era difícil de mantener.

Hay que añadir que el conjunto de problemas encontrados en el desarrollo del software no se limitan al software que “no funciona correctamente”. La llamada crisis abarca los problemas asociados a cómo desarrollar software, como mantener el volumen cada vez mayor de software existente y cómo poder mantenernos al corriente de la demanda creciente de software. Para resolver todos los problemas planteados a raíz de la crisis del software surge el concepto de Ingeniería del Software.

EL PROCESO DE DESARROLLO DE SOFTWARE O INGENIERÍA DEL SOFTWARE

La Ingeniería del Software surge de la necesidad de sistematizar el desarrollo del software afectado por la llamada “crisis del software”, aplicando principios de ingeniería para poder obtener software de calidad. Este término fue utilizado por primera vez en la Conferencia Internacional sobre Ingeniería de Software de la OTAN, en el año 1968.

La ingeniería del sofware es una disciplina dedicada a la construcción de software de una mayor calidad, más mantenible, y de una forma más rápida.

Puesto que la Ingeniería del Software es una disciplina relativamente joven, comparada con el resto de las Ingenierías, todavía existen muchas discrepancias y falta de consenso sobre lo que la Ingeniería del Software realmente. es, o incluso de si realmente se trata de una ingeniería (prefiriendo algunos autores el término "Desarrollo" en vez de "Ingeniería".

Concepto de calidad del software perseguido por la Ingeniería del Software.

¿Qué es software de calidad? Si asumimos que el software cumple con la funcionalidad requerida, para que sea de calidad deberá tener las características siguientes:

  • El software debe ser mantenible. Deberá estar escrito y documentado de forma tal que las modificaciones se puedan realizar con el menor coste posible. Esto es fundamental ya que la mayor parte del coste asociado del software se produce después de su puesta en funcionamiento.
  • El software debe ser fiable. Es decir, debe comportarse como esperan los usuarios y no debe fallar más de lo permitido por la especificación.
  • El software debe ser eficiente.
  • Debe ofrecer una interfaz de usuario apropiada.

Concepto de ciclo de vida del software.

El concepto de ciclo de vida del software es un concepto estrechamente ligado a la Ingeniería o Proceso de Desarrollo de Software. El ciclo de vida indentifica y especifica el conjunto de etapas que se suceden desde que se inicia la concepción de un proceso software hasta que éste es retirado del funcionamiento. La Ingeniería del Software se encarga de estudiar este ciclo de vida, que no es uniforme y admite diferentes interpretaciones, junto con un conjunto de técnicas y metodologías para asegurar la calidad y la consecución de los resultados buscados a lo largo de todo el proceso.

La Ingeniería del Software estudia modelos de ciclo de vida, técnicas y metodologías.

La norma ISO/IEC 121207 considera que el ciclo de vida de un proyecto software comprende tres tipos básicos de procesos:

  • Procesos primarios.
  • Procesos de soporte.
  • Procesos organizacionales.

Accede a un estudio más detallado del ciclo de vida de los sistemas de información

Concepto de Metodología de Desarrollo de Software.

Tal y como hemos visto en el apartado anterior, la Ingeniería del Software estudia el ciclo de vida del software, para identificar qué procesos realizar para el desarrollo de un sistema de Información, desde su concepción hasta su retirada (EL QUÉ) . Las metodologías estudian cómo realizar este desarrollo. Las actividades y tareas a desarrollar, junto con las técnicas y enfoques a aplicar. Al igual que existen diversos modelos de ciclo de vida, también existen múltiples metodologías, sin que exista ninguna predominante.

Accede a un estudio más detallado sobre las metodologías de desarrollo de software

BIBLIOGRAFÍA.

  • Pressman, R. "Ingeniería del software. Un enfoque práctico". McGran Hill.

  • Mario G. Piattini y otros. Análisis y diseño detallado de Aplicaciones Informáticas de Gestión. Editorial RAMA. Año 1996.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License