Download - 1-Introduccion de Ing.de Software
L.I. Patricia Arieta MelgarejoM.S.I. Eloisa Ruíz González
Febrero 2005
Ingeniería de SoftwareIngeniería de Software
Unidad 1Unidad 1
Antecedentes del SoftwareAntecedentes del Software
Tema 1: introducción
ProgramaPrograma
IntroducciónProceso de software y modelos de desarrolloGestión de proyectos de softwareFases del desarrollo de softwareAseguramiento de calidad de softwareGestión de configuración de softwareEvolución del softwareMejoramiento de procesos
IntroducciónSoftware
Evolución del Software
1 9 5 0 1 9 6 0 1 9 7 0 1 9 8 0 1 9 9 0 2 0 0 0
- o r i e n t a c ió n b a t c h- d i s t r i b u c i ó n l i m i t a d a- s o f t w a r e " c u s t o m iz a d o "o " a l a m e d i d a "
- m u l t i - u s u a r i o- t i e m p o r e a l- b a s e s d e d a t o s- p r o d u c t o s ( c a s a sd e s o f t w a r e )
- s i s t e m a s d i s t r i b u i d o s- i n t e l i g e n c ia i n t e g r a d a- h a r d w a r e b a j o c o s t o- im p a c t o e n e lc o n s u m id o r
- p o d e r o s o s s i s t e m a s“ d e e s c r i t o r i o ”- t e c n o lo g í a s O O- s i s t e m a s e x p e r t o s- r e d e s n e u r o n a le s ( IA )- c o m p u t a c ió n p a r a l e l a
IntroducciónSoftware
Grandes problemas actuales Retraso respecto al potencial de hardware Insatisfacción de la demanda Mantención
Mala percepción de la disciplina Ineficiencia Altos costos Baja Confiabilidad Escasa Ingeniería
IntroducciónSoftware
Proceso de software Nuevo e inmaduro No ocurre aislado Transforma modelos: transforma
necesidades y requerimientos en sistemas
¿Qué es Software?
“Código fuente más todos aquellos productos de trabajo asociados que se han generado durante el desarrollo y mantenimiento”
Desde la perspectiva de negocios, es estratégico. Actúa como diferenciador.
Es diferente a cualquier otra cosa que se construya: captura información, produce información, y es información en sí mismo.
IntroducciónSoftware
Productos genéricos. Productos que son producidos por una organización para ser vendidos al
mercado.
Productos hechos a medida. Sistemas que son desarrollados bajo pedido a un desarrollador específico.
La mayor parte del gasto del software es en productos genéricos, pero hay más esfuerzo en el desarrollo de los sistemas hechos a medida.
IntroducciónProductos de Software
Mantenibles. Debe ser posible que el software evolucione y que siga
cumpliendo con sus especificaciones.
Confiabilidad. El software no debe causar danos físicos o económicos en el caso
de fallos.
Eficiencia. El software no debe desperdiciar los recursos del sistema.
Utilización adecuada. El software debe contar con una interfaz de usuario adecuada y su
documentación.
IntroducciónCaracterísticas de los Productos de Software
IntroducciónSoftware
Componentes del Software:
Programa Operativo
Plan Especificación de Requerimientos
Estructuras de Datos
Listados
Especificación de la Prueba
Diseño
La configuración del software
Introducción Crisis de Software
Síntomas Funcionalidad incorrecta Desarrollo y mantención inadecuadas Insatisfacción de la demanda
Problemas Carencia de información sobre que realizamos y como Insatisfacción de clientes y usuarios Calidad sospechosa Mantención difícil y costosa
Introducción Crisis de Software
Síntomas Funcionalidad incorrecta Desarrollo y mantención inadecuadas Insatisfacción de la demanda
Problemas Carencia de información sobre que realizamos y como Insatisfacción de clientes y usuarios Calidad sospechosa Mantención difícil y costosa
IntroducciónCrisis de Software
Potenciales causas Carácter lógico del software Formación profesional (falta de...?) Entrenamiento y actualización Resistencia al cambio
Solución Enfoque ingenieril – Enfoque formal de resolución
de problemas
Análisis Enfoque de sistemasImplementación Enfoque de ingeniería
Introducción Ingeniería de Software
Define un conjunto de técnicas y herramientas para la resolución de un problema e implementación de la solución
“Establecimiento y uso de principios con caracteres de ingeniería apropiados para obtener, eficientemente, software confiable, que opere eficaz y eficientemente en máquinas reales”
Fritz BauerAmbigüedades ¿Cuáles son los principios adecuados aplicables al desarrollo de sw? ¿Cómo desarrollar “económicamente” sw confiable? ¿Qué implica crear sw que opere eficientemente en máquinas reales?
Omisiones Calidad de software Satisfacción de las necesidades del cliente Mediciones y métricas Madurez del proceso de desarrollo
Introducción Ingeniería de Software
“Software engineering is a layered technology....”
Enfoque de calidadEnfoque de calidad
ProcesosProcesos
MetodosMetodos
HerramientasHerramientas
Introducción Ingeniería de Software
Objetivos Maximizar la calidad Maximizar productividad Minimizar riesgos
Introducción Ingeniería de Software
Dificultades De producción de software
Esenciales Complejidad Conformidad Necesidad de cambios Invisibilidad
Accidentales Metodologías No silver bullet?
Introducción Ingeniería de Software
Dificultades Mitos
Basta con tener estándares y procedimientos Basta con la tecnología de punta Si estoy atrasado, pongo más gente y me pongo
al día Hay que partir programando inmediatamente Los cambios se acomodan fácilmente El código es el único producto
Introducción Ingeniería de Software
Dificultades Contractuales
Time to market Cambio en la relación de costos entre el hardware y el
software Acceso a los computadores Redes Tecnología de Orientación a Objetos Interfaces gráficas “Resultados impredecibles” al usar el Modelo en cascada
Introducción Ingeniería de Software
Enfoque para una disciplina sólida Abstracción
Diferentes propósitos, diferentes niveles de generalización
Notación y métodos de análisis y diseño Facilita la comunicación, colaboración, consistencia y
corroboración Prototipos e Interfaces usuarias
Da soporte a la especificación de los requerimientos, a estudios de factibilidad y al diseño de IHM
Disminuye la brecha entre el dominio de la aplicación y el desarrollo
Introducción Ingeniería de Software
Arquitectura del sistemaClave para una fácil implementación y para la expansión del sistema
Proceso de desarrolloReusoMedicionesHerramientas y ambientes integrados
Introducción Ingeniería de Software
IntroducciónPrincipios de Ingeniería de Software
Rigor y formalidad Proceso de desarrollo es una actividad creativa que
necesita de rigurosidad para concretar resultados ¿Cuándo ser riguroso y cuando ser creativo? Impacto
Producto - confiabilidad, validación, mantención, reusabilidad, comprensión e interoperabilidad
Proceso - timeliness y productividad
IntroducciónPrincipios de Ingeniería de Software
Separación de aspectos Idea: Abarcar y “resolver” los diferentes aspectos de un problema
separadamente Cada aspecto involucra una decisión
Producto - funcionalidad, confiabilidad, eficiencia, interfaz usuaria, seguridad,...
Proceso - ambiente, organización, procedimientos, herramientas....... ¿Cómo separar?
Tiempo- planificación de actividades y recursos Atributos – eficiencia Visiones - interfaz, procedimientos, datos Partes - subproblemas
Desventaja: se pierde la posibilidad de optimizar
Modularidad Un sistema complejo puede ser divido en piezas denominadas
módulos. Un sistema particionado en módulos se denomina modular. La modularidad está asociado y facilita el principio anterior
Permite trabajar en módulos aisladamente Se preocupa, también, de las relaciones entre los módulos durante
su integración Objetivos
Descomposición de un sistema complejo Composición de un sistema a partir de módulos existentes Comprensión del sistema en piezas
Para alcanzar dichos objetivos es necesario contar con módulos con alta cohesión y bajo acoplamiento
IntroducciónPrincipios de Ingeniería de Software
Abstracción Identificar aspectos relevantes de un fenómeno ignorando los detalles
Es un tipo de separación de aspectos por nivel de importancia o detalle
¿Cuanto y qué ignorar? Cada abstracción debe entregar sólo la información útil a su propósito.
Permite abarcar la complejidad
IntroducciónPrincipios de Ingeniería de Software
Anticipación al cambio El software cambia constantemente. ¿Por qué?
Requerimientos ambiguos Nuevas necesidades Cambios por reparación o evolución
Impacto Evolución del software Reusabilidad
IntroducciónPrincipios de Ingeniería de Software
Generalidad Existen tareas que realiza comúnmente un cierto nicho
Generalizar una solución tiene alto costo. Debe ser evaluada cuidadosamente. Ejemplos:
Planillas de cálculo, procesadores de texto
Tendencia: Desarrollar paquetes para áreas de aplicación específicas
IntroducciónPrincipios de Ingeniería de Software
Incrementalidad Conseguir un objetivo a través de incrementos
Ventajas Clarificar objetivos y metas Feedback Anticipar cambios
IntroducciónPrincipios de Ingeniería de Software
Principios generales Hacer de la calidad primer
objetivo Software de alta calidad es
posible Entregar tempranamente
productos a los clientes Determinar el problema
antes de escribir los requerimientos
Evaluar alternativas de diseño
Usar un modelo (paradigma) apropiadoUsar lenguajes diferentes para fases diferentesMinimizar la distancia intelectualDecidir las técnicas antes que las herramientasHacerlo correcto antes de hacerlo rápido
IntroducciónPrincipios de Ingeniería de Software
Inspeccionar diseño y códigoGestión más importante que tecnologíaGente: clave del éxitoAdoptar técnicas y tecnologías con cuidadoAsumir responsabilidadComprender prioridades de los clientes
Clientes/usuarios: más ven, más necesitanPlanificar para desechar parcialmenteDiseñar para el cambioDiseño sin documentación no es diseñoUsar herramientas con realismoEvitar trucosEncapsular
IntroducciónPrincipios de Ingeniería de Software
Usar acoplamiento y cohesiónUsar mediciones de complejidadNo probar el software propioAnalizar causas de erroresAsumir que entropía del software aumentaGente y tiempo no son intercambiablesEsperar y demandar excelencia
IntroducciónPrincipios de Ingeniería de Software