Ingeniería de Software
Definición
Estrategia para desarrollar software de alta calidad.
¿Software de alta calidad?
- Util (al cliente)
- Portable
- Mantenible
- Confiable
- Tenga integridad - resultados correctos con alto grado de exactitud
- Eficiente
- Consistencia de función
- Accesible (al usuario)
- Buena ingeniería humana - fácil de aprender y usar
El término "ingeniería de software" se acuñó en 1967 por un grupo de estudio de la OTAN (Organización del
Tratado del Atlántico Norte) para significar "el establecimiento y uso de principios establecidos de ingeniería con el objetivo
de obtener software económico que sea confiable y trabaje eficientemente en computadoras reales". Este punto de vista se opuso
a la "magia" de la programación en un esfuerzo de cambiar el desarrollo de software de "mágico" (que sólo unos pocos escogidos
pueden hacer) a "arte" (que los talentosos pueden hacer) a "ciencia" (que supuestamente cualquiera puede hacer).
Esta premisa fué avalada por la Conferencia de Ingeniería de Software de la OTAN en 1968, que concluyóo que
la ingeniería de software debería usar las filosofías y paradigmas de la ingeniería establecida para lo que aún entonces ya
era una crisis del software
¿Por qué surgió la ingeniería de software?
En pocas palabras, por la crisis del software
- Errores costosos por fallas en el software:
- Voyager
- Accidente nuclear de Chernobyl
- Accidente nuclear de Three Mile Island
- Tarjetas tragadas por los cajeros automáticos
- Problemas para estimar tiempo, esfuerzo y costos de los sistemas.
- Un estudio de 1979 sobre proyectos del gobierno de USA demostró que:
- 2% trabajaron
- 3% pudieron trabajar después de algunas correcciones
- 45% fueron entregados y nunca pudieron ser usados
- 20% se usaron despues de ser casi vueltos a hacer o fueron abandonados
- 30% fueron pagados y nunca entregados
¿ Por qué es importante la ingeniería de software?
- Altos costos en el software.
- Necesidad de incrementar la productividad.
- Los sistemas son cada vez más grandes y complejos:
- NASA
- Sistemas financieros
- Iniciativa de defensa estratégica: "Star Wars"
- Cambios en la relación de costos del software y hardware.
- Principios de los 60's: 80% hardware y 20% software
- Mediados de los 60's: 50%-60% hardware y 50%-40% software
- Finales de siglo: menos de 20% hardware y más del 80% software
- Importancia del mantenimiento. A veces cuesta el doble que el desarrollo.
La mayor parte del dinero gastado en software se gasta en actividades de mantenimiento. Hay una amplia variación
en la práctica de la ingeniería de software. Una distribución típica de uso de tiempo en la creación de un sistema de software,
muestra que el 40% del tiempo se gasta en las pruebas, 35% en el diseño, 20% en la implementación y 5% en el desarrollo conceptual
y análisis de requerimientos. Si tenemos en cuenta que la mayor parte de los errores típicos (60% a 70%) en un producto son
errores de especificación o de análisis, no es raro que los sistemas cuesten el doble del costo estimado y tarden en completarse
muchos años más de los planeados.
Wasserman lista siete factores que según él han alterado la práctica de la ingeniería de software.
- Tiempos reducidos y limitados para productos comerciales.
- Decremento de los costos de hardware e incremento en los costos de desarrollo y mantenimiento.
- Computación de escritorio.
- Redes de área local (LANs) y ancha (WANs).
- Tecnología de objetos.
- Interfaces gráficas de usuario (GUIs).
- Decremento de la viabilidad del modelo de la cascada (waterfall).
Luego sugiere ocho nociones fundamentales que forman la base de lo que el cree es una disciplina efectiva
de ingeniería de software.
- Abstracción.
- Métodos y notaciones de análisis y diseño.
- Hacer prototipos de la interface de usuario.
- Arquitectura del software.
- Proceso del software.
- Reutilización.
- Medidas de metas de mejoramiento.
- Herramientas y medio-ambientes integrados.
¿Cómo se construye el software?
Crear el software requiere que el sistema se divida de tal forma que las partes sean compatibles. La creación
de software se puede caracterizar por una serie de pasos que van desde los conceptos exploratorios hasta su retiro final;
esta serie de pasos se refieren generalmente como el ciclo de vida del software. En general, independientemente del
modelo de ciclo de vida, los pasos se puede agrupar en tres fases:
- Definición. Intenta responder a la pregunta ¿Qué hace el software?.
- Qué información será procesada.
- Qué función y rendimiento se desea.
- Qué interfaces serán establecidas.
- Qué restricciones de diseño existen.
- Qué criterios de validación se necesitan para definir un sistema correcto.
- Desarrollo. Intenta responder a la pregunta ¿Como lo hace?.
- Algoritmos.
- Estructuras de datos.
- Arquitectura de software.
- Interface de usuario.
- Mantenimiento. Se centra en el cambio asociado a la corrección de errores, adaptaciones y requisitos cambiantes.
Hay cuatro clases de cambios:
- Corrección. Corrige los errores (bugs) que se hayan colado a través del proceso.
- Adaptación. Modifica el software para adaptarlo a los cambios de su medio ambiente. Por ejemplo, nuevas reglas
de la empresa, nuevo CPU o sistema operativo.
- Mejora. Modifica el software agregándole nuevas funciones no especificadas en los requisitos originales.
- Prevención. Hace cambios en el programa para que se pueda corregir, adaptar y mejorar más fácilmente. También
se le conoce como reingeniería del software.