E-Clases

Ingenieria de Software I

Home
SIA: Definiciones
SIA: Centros de Cómputo
SIA: Areas de Administracion de un CC
SIA: Técnicas y sistemas de gestión de la innovación
Matematicas
SIA II - Proyecto
Códigos para Programadores
Bases de Datos I
Diseño Páginas Web
Curso de Ingles Diciembre 2003
Ingles Tecnico
CENAFOM - Computación 02076
Ingenieria de Software I
Ingenieria de Software II
Ingenieria de Software III
Ingenieria de Software IV
Ingenieria de Software V
Ingenieria de Software VI
Ingenieria de Software VII
Ingenieria de Software VIII
Ingenieria de Software IX
Ingenieria de Software X
Ingenieria de Software XI
Encuestas y Libro de Visitas
Sitios Web
De todo Un Poco
Servicio Tecnico
Nuestros Clientes
Trabajos
Introducción a la Programación

clases2.jpg

Temario Ingenieria de Software:
 

Indice

  1. Introducción a la ingeniería de software
  2. El proceso del software y modelos de vida
  3. Conceptos de administración de proyectos
  4. Métricas de software
  5. Estimación de proyectos de software
  6. Administración del riesgo
  7. Planeación temporal y seguimiento
  8. Conceptos de calidad del software
  9. Análisis
  10. Diseño
  11. Pruebas de software

Software

Definición

  1. Instrucciones (programas de computadoras) que cuando se ejecutan proporcionan la función y el rendimiento deseados.
  2. Estructuras de datos que permiten a los programas manipular adecuadamente la información.
  3. Documentos que describen la operación y el uso de programas.

Características del Software

  1. El software se desarrolla - no se manufactura
  2. El software no se "descompone"

Continuación Caracteristicas del Software:

inge2.gif

inge3.gif

inge3.gif

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.

inge4.gif

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:
    • 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.

  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?.
    • 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.
  2. Desarrollo. Intenta responder a la pregunta ¿Como lo hace?.
    • Algoritmos.
    • Estructuras de datos.
    • Arquitectura de software.
    • 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:
    • 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.