Upload
abi
View
51.240
Download
0
Embed Size (px)
DESCRIPTION
Este articulo habla sobre los mitos y realidades de los proyectos de software y la ingenieria de software.
Citation preview
Características del Software
1. El software se desarrolla - no se manufactura 2. El software no se "descompone"
La mayoría del software se hace a la medida. No se ensambla de componentes
Mitos del software
Mito: Si fallamos en la planificación podemos añadir más programadores y recuperar el tiempo perdido.Realidad: Ley de Brooks: "Agregar gente a un proyecto atrasado, lo atrasa aún mas".Razón: Crear software no es una tarea particionable, como dice el Principio de Brooks: "Gestar a un bebé tarda 9 meses, no importa cuántas mujeres sean asignadas a la tarea."
Mito: Una declaración general de los objetivos es suficiente para comenzar a escribir los programas; podemos dar los detalles más adelante.Realidad: Una mala definición inicial es la principal causa del trabajo en vano. Es esencial una descripción formal y detallada del ámbito de la información, funciones, rendimiento, interfaces y criterios de validación. Esto solo puede determinarse después de una exhaustiva comunicación entre el cliente y el analista. Ver siguiente mito.
Mito: Los requisitos del proyecto cambian continuamente pero los cambios pueden acomodarse fácilmente.Realidad: El impacto del cambio varía según el momento en el que se introduzca:
Etapa de desarrollo Costo del Cambio Definición $X Desarrollo $1.5X hasta $6X Después de la entrega $60X hasta $100X
Mito: Una vez que hicimos el programa y funciona, nuestro trabajo ha terminado.Realidad: Los datos industriales indican que entre el 50% y el 70% de todo el esfuerzo dedicado a un programa se realizará después de que se le haya entregado al cliente por primera vez.
Mito: No hay forma de comprobar la calidad del software hasta que esta corriendo.Realidad: Hay técnicas que se pueden aplicar desde el principio. Y ese es el objetivo de la ingeniería de software y del curso.
Ingeniería de Software
Definición
Estrategia para desarrollar software de alta calidad.
¿Software de alta calidad?
1. Util (al cliente) 2. Portable 3. Mantenible 4. Confiable 5. Tenga integridad - resultados correctos con alto grado de exactitud 6. Eficiente 7. Consistencia de función 8. Accesible (al usuario) 9. 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:o Voyager o Accidente nuclear de Chernobyl o Accidente nuclear de Three Mile Island o 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: o 2% trabajaron o 3% pudieron trabajar después de algunas correcciones o 45% fueron entregados y nunca pudieron ser usados o 20% se usaron despues de ser casi vueltos a hacer o fueron
abandonados o 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:
o NASA o Sistemas financieros o Iniciativa de defensa estratégica: "Star Wars"
Cambios en la relación de costos del software y hardware. o Principios de los 60's: 80% hardware y 20% software o Mediados de los 60's: 50%-60% hardware y 50%-40%
software o 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.
1. Tiempos reducidos y limitados para productos comerciales. 2. Decremento de los costos de hardware e incremento en los costos
de desarrollo y mantenimiento. 3. Computación de escritorio. 4. Redes de área local (LANs) y ancha (WANs). 5. Tecnología de objetos. 6. Interfaces gráficas de usuario (GUIs). 7. 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.
1. Abstracción. 2. Métodos y notaciones de análisis y diseño. 3. Hacer prototipos de la interface de usuario. 4. Arquitectura del software. 5. Proceso del software. 6. Reutilización. 7. Medidas de metas de mejoramiento. 8. 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:
1. Definición. Intenta responder a la pregunta ¿Qué hace el software?. o Qué información será procesada. o Qué función y rendimiento se desea. o Qué interfaces serán establecidas. o Qué restricciones de diseño existen. o Qué criterios de validación se necesitan para definir un
sistema correcto. 2. Desarrollo. Intenta responder a la pregunta ¿Como lo hace?.
o Algoritmos. o Estructuras de datos.
o Arquitectura de software. o Interface de usuario.
3. Mantenimiento. Se centra en el cambio asociado a la corrección de errores, adaptaciones y requisitos cambiantes. Hay cuatro clases de cambios:
o Corrección. Corrige los errores (bugs) que se hayan colado a través del proceso.
o 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.
o Mejora. Modifica el software agregándole nuevas funciones no especificadas en los requisitos originales.
o 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.