Está en la página 1de 7

INGENIERÍA DE SOFTWARE

1.1. Fundamentos de la Ingeniería de Software

Introducción

Fallas de la ingeniería de software

Con retraso y excedido en el presupuesto En 1995 los errores en el sistema de manejo de


equipaje automatizado del nuevo aeropuerto internacional de Denver causaron que se
dañaran las maletas. El aeropuerto abrió con 16 meses de retraso, con un exceso de gasto de
3.2 mil millones de dólares y con un sistema para el manejo de equipaje en su mayor parte
manual.

Entrega a tiempo Después de 18 meses de desarrollo, se entregó un sistema de 200 millones


de dólares a una compañía de seguros de salud en Wisconsin en 1984. Sin embargo, el sistema
no funcionó en forma correcta: se expidieron 60 millones de dólares de pagos extras. Se
necesitaron tres años para componer el sistema.

Complejidad innecesaria El avión de carga C-17 de McDonnell Douglas se excedió 500 millones
de dólares en el presupuesto a causa de problemas en su software de electrónica de aviación.
El C-17 incluía 19 computadoras a bordo, 80 microprocesadores y seis lenguajes de
programación diferentes.

Cada una de las fallas descritas antes se debió a un problema relacionado con software. En
algunos casos los desarrolladores no anticiparon situaciones que ocurren rara vez (una
persona que vive más de cien años, años bisiestos que tienen un impacto en las fechas de
caducidad). En otros casos los desarrolladores no anticiparon que el usuario haría mal uso del
sistema (la opresión de un botón, la exploración de las facilidades de depuración del envío de
correo). En otros casos las fallas del sistema resultaron por fallas de administración (entrega
tardía y con presupuesto excedido, entrega a tiempo de un sistema incorrecto, complejidad
innecesaria).

Los proyectos de desarrollo de software están sujetos a cambios constantes. Debido a que los
requerimientos son complejos, necesitan ser actualizados cuando se descubren errores y
cuando los desarrolladores tienen una mejor comprensión de la aplicación. Si el proyecto dura
muchos años, la rotación de personal es alta y requiere entrenamiento constante. El tiempo
entre los cambios tecnológicos con frecuencia es más corto que la duración del proyecto.
(Bern Bruegge, 2012)
INGENIERÍA DE SOFTWARE

Debido a lo anterior es importante que se conozcan todos los aspectos que involucran a
la Ingeniería de Software, comenzando con la definición y sus objetivos los cuales se
presentan a continuación.

1.1.1 Definición y objetivos

Definición Ingeniería de Software: es el área donde se desenvuelven los


profesionales utilizando matemáticas, física, química y conocimientos tecnológicos
para resolver problemas y / o generar productos. Sin embargo, de la misma manera que
los físicos contribuyen a una ciencia que sirve de soporte a la Ingeniería Eléctrica, la
ciencia de la computación debe servir de soporte a la Ingeniería de Software y no
mezclarse con ella. (PANTALEON, 2012)

El objetivo es formar a los ingenieros para que estén capacitados en la utilización de los
conocimientos tecnológicos generados por la ciencia de la computación para construir
productos de software.

La ingeniería de software es una actividad para la solución de problemas. Se usan los


modelos para buscar una solución aceptable. Esta búsqueda es conducida por la
experimentación. Los ingenieros de software no tienen recursos infinitos, y están
restringidos por presupuestos y tiempos de entrega. Dada la falta de una teoría
fundamental, con frecuencia tienen que apoyarse en métodos empíricos para evaluar
los beneficios de alternativas diferentes.

La ingeniería de software es una actividad para la adquisición de conocimiento. En el


modelado de los dominios de la aplicación y la solución, el ingeniero de software recopila
datos, los organiza en información y los formaliza en conocimiento. La adquisición de
conocimiento no es lineal, ya que un solo dato puede invalidar modelos completos.

La ingeniería de software es una actividad dirigida por una fundamentación. Cuando se


adquiere conocimiento y se toman decisiones acerca del sistema o sus dominios de
aplicación, los ingenieros de software también necesitan captar el contexto en el que se
tomaron las decisiones y las razones que hay tras las mismas.
La información de la fundamentación, representada como un conjunto de modelos de
problemas, permite que los ingenieros de software comprendan las implicaciones de un
cambio propuesto cuando revisan una decisión. (Bern Bruegge, 2012)

Objetivos de la ingeniería de software.- La definición que Fritz Bauer elaboró de


ingeniería de software en 1969, incluye una clara definición de los objetivos de la
disciplina:

“Ingeniería de Software es el establecimiento y uso de principios robustos de


Ingeniería, orientados a obtener software que sea fiable y funcione de manera
Eficiente sobre máquinas reales”.
INGENIERÍA DE SOFTWARE

Como elemento aclaratorio, es favorable observar algunos objetivos primordiales


definidos por James Martin, para la programación estructurada.

Tales objetivos pueden ser fácilmente atribuibles a la ingeniería de software. Según este
criterio, los objetivos primordiales de la ingeniería de software (por lo menos algunos)
son:

• Lograr programas de alta calidad de un comportamiento predecible


• Lograr programas que sean fácilmente modificables (y mantenibles)
• Simplificar los programas y el proceso de desarrollo de programas
• Lograr mejores predicciones y controles en el proceso de desarrollo
• Acelerar el desarrollo de sistemas
• Aminorar los costos del desarrollo de sistemas

Como puede observarse, los objetivos se centran en la obtención de mejores productos de


software. La única forma en que tal objetivo puede lograrse, es mediante el estudio y
mejoramiento de los procesos de desarrollo de software (Roa, 2015)

1.1.2 Características y tipos de aplicaciones del software

El software es una categoría amplia que incluye gran variedad de productos


informáticos, desde sistemas operativos hasta la parte intangible de juegos
electrónicos o los programas que permiten el funcionamiento de un avión.

Las características deseables en un producto de software son:

• Corrección. Que cumpla con su objetivo.


• Usabilidad. Que sea fácil de aprender.
• Seguridad. Que sea resistente a ataques externo.
• Flexibilidad. Que pueda ser modificado por los desarrolladores.
• Portabilidad. Que pueda ser utilizado en diversos equipos.

Sin embargo, no todos los productos de software cumplen con estos requisitos, ya
que priorizan uno u otro dependiendo del uso que se le dará. Por ejemplo, el software
de un lavarropas no requiere priorizar la seguridad, ya que no protege ningún tipo de
información importante. (Características del Software, 2019)
INGENIERÍA DE SOFTWARE

Otras Características

El software es un elemento del sistema que es lógico, en lugar de físico. Por tanto el
software tiene unas características considerablemente distintas a las del hardware:

1. El software se desarrolla, no se fabrica en un sentido clásico. Los costes del software


se encuentran en la ingeniería. Esto significa que los proyectos de software no se
pueden gestionar como si fueran proyecto de fabricación.
2. El software no se "estropea". El software no es susceptible a los males del entorno
que hacen que el hardware se estropee. Los defectos no detectados harán que falle
el programa durante las primeras etapas de su vida. El software no se estropea, ¡pero
si deteriora!
3. Aunque la industria tiende a ensamblar componentes, la mayoría del software se
construye a medida. El componente de software debería diseñarse e implementarse
para que pueda volver a ser reutilizado en muchos programas diferentes. Los
componentes reutilizables modernos encapsulan tanto datos como procesos que se
aplican a los datos, permitiendo al ingeniero del software crear nuevas aplicaciones a
partir de partes reutilizables. (Características del Software, 2018)

1.1.3 Evolución histórica del software


Evolución de la Ingeniería de Software A pesar de la “crisis” que parece padecer la
ingeniería de software al no entregar los resultados esperados, la verdad es que sólo en
los últimos años se han estado dando pasos firmes en pos de una nueva ingeniería, más
realista, más concreta y capaz de lograr mejores resultados en el proceso de desarrollo
de software. La historia de la informática ha estado llena de “modas” o “caprichos” en
materia de desarrollo de software. Cada vez que se lograba un avance tecnológico
importante, se creía que el nuevo paradigma de trabajo podría solucionar los problemas.

Cuando surgieron con fuerza las bases de datos, se le atribuyeron a ellas la solución a
todos los problemas del software. Lo mismo ocurrió con las tecnologías de lenguajes de
cuarta generación (4GL), la programación visual y la programación orientada a objeto.
Aunque los avances tecnológicos contribuyen a solucionar problemas del desarrollo de
software, es real que sólo pueden contribuir con una parte de la solución. La ingeniería
de software, y los desarrolladores, deben trabajar a un nivel más integral,
correlacionando métodos, técnicas y herramientas, y logrando soluciones globales a los
problemas del desarrollo. Los últimos años, los expertos se han dado cuenta que no
existen métodos o técnicas infalibles y que cada uno de los métodos sólo pueden ser
aplicados con alto grado de éxito en determinados tipos de problemas. Las nuevas
tendencias buscan aprovechar la experiencia que se ha obtenido y buscar nuevos tipos
de soluciones. Las nuevas soluciones implican, entre otros, nuevos criterios para la
selección de métodos, nuevas teorías de selección de requerimientos, mejores
mecanismos de control, mejores técnicas de detección y corrección de errores,
mecanismos de métricas y nuevas técnicas para el mejoramiento continuo de los
métodos y los departamentos de sistemas de las organizaciones.
INGENIERÍA DE SOFTWARE

Las técnicas requieren, cada vez más, de herramientas de apoyo cada vez más flexibles
y versátiles. Una nueva generación de herramientas CASE está gestándose paralela a la
nueva visión de ingeniería de software que se está difundiendo. La ingeniería de software
puede ofrecer ahora un entorno y una visión más global del proceso de desarrollo y los
problemas asociados a él. La ingeniería de software parece estar cada vez más cerca de
su cometido (Roa, 2015)

1.1.4 Fases de la ingeniería del software

Análisis de requisitos

Extraer los requisitos de un producto de software es la primera etapa para crearlo. Mientras
que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de
habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos,
ambiguos o contradictorios. El resultado del análisis de requisitos con el cliente se plasma en
el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir
definida por varios estándares, tales como CMM-I. Asimismo, se define un diagrama de
Entidad/Relación, en el que se plasman las principales entidades que participarán en el
desarrollo del software.

La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte


crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Se han ideado
modelos y diversos procesos de trabajo para estos fines. Aunque aún no está formalizada, ya
se habla de la Ingeniería de Requisitos. La IEEE Std. 830-1998 normaliza la creación de las
Especificaciones de Requisitos Software (Software Requirements Specification).

Diseño y arquitectura

Se refiere a determinar cómo funcionará de forma general sin entrar en detalles. Consiste en
incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc.
Se definen los Casos de Uso para cubrir las funciones que realizará el sistema, y se transforman
las entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo
cercano a la programación orientada a objetos.

Programación

Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software,
pero no es necesariamente la porción más larga. La complejidad y la duración de esta etapa
está íntimamente ligada al o a los lenguajes de programación utilizados.
INGENIERÍA DE SOFTWARE

Pruebas

Consiste en comprobar que el software realice correctamente las tareas indicadas en la


especificación. Una técnica de prueba es probar por separado cada módulo del software, y
luego probarlo de forma integral, para así llegar al objetivo. Se considera una buena práctica
el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó,
idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus
propias pruebas. En general hay dos grandes formas de organizar un área de pruebas, la
primera es que esté compuesta por personal inexperto y que desconozca el tema de pruebas,
de esta forma se evalúa que la documentación entregada sea de calidad, que los procesos
descritos son tan claros que cualquiera puede entenderlos y el software hace las cosas tal y
como están descritas. El segundo enfoque es tener un área de pruebas conformada por
programadores con experiencia, personas que saben sin mayores indicaciones en qué
condiciones puede fallar una aplicación y que pueden poner atención en detalles que personal
inexperto no consideraría.

Documentación

Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión


del proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario,
manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad,
mantenimiento futuro y ampliaciones al sistema.

Mantenimiento

Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto
puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de
toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de
este trabajo consiste en arreglar errores, o bugs. La mayor parte consiste en extender el
sistema para hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la ingeniería
civil, arquitectura y trabajo de construcción es dar mantenimiento.
INGENIERÍA DE SOFTWARE

Referencias:

• Bern Bruegge, A. H. (2012). Ingeniería de Software Orientado a Objetos. Prentice


Hall.

• Características del Software. (2018). Obtenido de


http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro17/113_caractersticas_co
mponentes_y_aplicaciones_del_software.html

• Características del Software. (2019). Obtenido de


https://www.caracteristicas.co/software/#ixzz6TWPK8ATj

• PANTALEON, G. L. (2012). Ingeniería de Software.

• Roa, O. L. (2015). Pontificia Universidad Javeriana. Obtenido de


http://cic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:is1:01_lectura_ingenie
ria_software.pdf

• Somerville, I. (2011). Ingeniería de Software. México, D.F.: Pearson. Obtenido de


Biblioteca Digital

También podría gustarte