Conceptos Generales de la Ingeniería de Software – Parte I

Tema interesante es la ingeniería de software, debe ser porque transversalmente abarca muchas de las cosas con las que día a día me cruzo. Y como siempre digo, nunca está de más refrescar conceptos.

¿Qué es el software?

El software no son solo los programas, sino todos los documentos asociados y la configuración de datos que se necesitan para hacer que estos programas operen de manera correcta.

El software se desarrolla, no se fabrica como otros productos, por consiguiente trae un mayor costo en la ingeniería que en la producción. El software no se desgasta, no sigue una curva clásica de envejecimiento. Es inmune a los males que desgastan al hardware, debido a que el problema no está en el tiempo de operación, sino en los cambios.

 

¿Qué es la ingeniería de software?

La ingeniería de software es una disciplina de ingeniería que comprende todos los aspectos de la producción de software desde las etapas iniciales de la especificación del sistema, hasta el mantenimiento de éste después de que se utiliza. La misma se encarga de asegurar la producción de productos correctos, utilizables, de alta calidad y costo-efectivos.

La noción de ingeniería de software fue propuesta inicialmente en 1968 en una conferencia para discutir lo que en ese entonces se llamo la “crisis del software”. Esta crisis del software fue el resultado de la introducción de las nuevas computadoras hardware basadas en circuitos integrados. Su poder hizo que las aplicaciones hasta ese entonces irrealizables fueran una propuesta factible. El software resultante fue de ordenes de magnitud mas grande y mas complejo que los sistemas de software previos.

 

Evolución

En las décadas del 50-60 el hardware era de propósito general, con continuos cambios. El software se construía “a medida”, por lo cual el desarrollo era sin planificación. DOCUMENTACION INEXISTENTE. En los años 60, con la sofisticación creciente de los sistemas de software aparecen los conceptos de  Multiprogramación Multiusuario Minicomputadoras, los sistemas en tiempo real y las bases de datos. Surge una diversidad de lenguajes de programación. Nace el producto software. “MANTENIMIENTO DE SOFT”. Crecieron también las dificultades para desarrollarlos o adaptarlos. Las dificultades desbordaban los recursos técnicos de una heterogénea clase profesional. “CRISIS DEL SOFTWARE”. Aquí es cuando la expresión “Ingeniería de software” se utilizo por primera vez, en la conferencia de la OTAN.

  • (1970-90) Complejidad. Microprocesadores. Redes. Procesos distribuidos. PC. Software de aplicación en todas las áreas. Baja espectacular del costo del hardware. PRODUCTIVIDAD
  • (1990-2000) Tecnologías O.O. Procesamiento paralelo. Recurso de procesamiento ilimitado. Capacidad de aprendizaje del usuario es un límite.“INGENIERÍA”.
  • (2000-act) Aplicaciones WEB. Sistemas Expertos. Reconocimiento de Patrones. Redes Neuronales. Computación Ubicua. Código abierto. COMUNICACIÓN Y DISTRIBUCIÓN

 La ingeniería de software surgió como reacción a las dificultades de desarrollar software sobre la base de habilidad, experiencia o intuición individuales. La aplicación de “métodos sistemáticos” y repetibles permite la producción y evolución de software por organizaciones distribuidas geográficamente y en el tiempo. La aplicación de estándares facilita la integración, reusabilidad y mantenimiento de los productos.

 

Proceso de software

Es el conjunto de métodos, técnicas y practicas que guían a los ingenieros de software en el desarrollo y evolución del software.

El proceso de software es también llamado ciclo de vida del software, porque describe la vida de un producto de software desde su concepción hasta su implementación, entrega, utilización y mantenimiento.

Un proceso de desarrollo de software debe describirse de manera flexible que permita a los que diseñan y construyen el software utilizar las herramientas y técnicas preferidas; el proceso en si ayuda a mantener la consistencia y calidad en los productos que son producidos por muchas personas diferentes. El conjunto de procedimientos debe estar organizado de tal modo que los productos se construyan para satisfacer un conjunto de metas o estándares.

Consta de cuatro pasos genéricos para llevarse a cabo:

  • Especificación del software: donde los ingenieros de sistema hablan con los usuarios finales, clientes (stakeholders) y toda persona relacionada con el sistema para ver cual es el propósito del mismo, las metas que se proponen y las restricciones.
  • Desarrollo del software: en esta etapa los ingenieros diseñan y programan el sistema.
  • Validación del software: aquí el sistema se valida para asegurar que se hizo lo que el cliente requería.
  • Evolución del software: donde el software se va modificando para adaptarse a los cambios requeridos por el cliente y los cambios del mercado.

 

Modelo de proceso de software

Es una representación abstracta de un proceso de software. Existen varios modelos de proceso de software y cada uno representa una descripción, desde una perspectiva particular, de la manera en que el desarrollo del software se hace en la realidad. Los modelos de proceso también nos prescriben la manera en que sebe avanzar el desarrollo del software. Existen 3 tipos genéricos:

  • Modelo en cascada: aquí se consideran las actividades fundamentales del proceso, tales como la especificación, el desarrollo, la validación y la evolución y se las representa como fases separadas. No se puede avanzar de etapa hasta no haber terminado la anterior, se documenta cada fase.
  • Desarrollo evolutivo: se basa en la idea de desarrollar una implementación inicial, exponiéndola a los comentarios del usuario y refinándola a través de las diferentes versiones hasta que se desarrolla un sistema adecuado. Las actividades de especificación, desarrollo y validación se entrelazan, en vez de separarse, con una retroalimentación entre ellas.

Existen dos tipos de desarrollo evolutivo:

  • Desarrollo exploratorio: el objetivo es trabajar con el cliente para explorar sus requerimientos y entregar un sistema final; se empieza con las partes del sistema que se comprenden mejor,
  • Prototipos desechables: el objetivo es comprender los requerimientos del cliente y desarrollar una definición mejorada de los requerimientos para el sistema; se centra en experimentar con los requerimientos del cliente que no se comprenden del todo.
  • Ingeniería de software basada en componentes: este enfoque se basa en la existencia de un numero significativo de componentes reutilizables. El proceso de desarrollo del sistema se basa en integrar estos componentes en el sistema más que en desarrollarlos desde cero.

Para sistemas grandes, se recomienda un proceso mixto que incorpore las mejores características del modelo en cascada y del desarrollo evolutivo. Esto puede implicar desarrollar un prototipo desechable utilizando un enfoque evolutivo para resolver incertidumbres en la especificación del sistema. Puede entonces re-implementarse utilizando un enfoque mas estructurado. Las partes del sistema bien comprendidas se pueden especificar y desarrollar utilizando un proceso basado en el modelo en cascada. Las otras partes del sistema, como la interfaz del usuario, que son difíciles de especificar por adelantado, se deben desarrollar siempre utilizando un enfoque de programación exploratoria.

Dejá un comentario