You are on page 1of 39

Introducción a la Ingeniería de Software.

Profesor Adán Zepeda Gorostiza. ver1@unam.mx http://profesores.fi-b.unam.mx/adanzg

Ingeniería de Software

Introducción

Página 0

Objetivos.
• • • Introducir la Ingeniería de Software y explicar su importancia. Contestar las preguntas claves acerca de la Ingeniería de Software. Introducir consideraciones éticas y profesionales y explicar por qué son importantes para los Ingenieros de Software.

Ingeniería de Software

Introducción

Página 1

Ingeniería de Software.
• Las economías de las naciones desarrolladas dependen del software. Más y más sistemas se controlan mediante software. La Ingeniería de Software estudia las teorías, métodos y herramientas para el desarrollo profesional del software. Los gastos en software representan una fracción significativa del PNB de todos los países desarrollados.

• •

Ingeniería de Software

Introducción

Página 2

• • Ingeniería de Software Introducción Página 3 . Cuesta más mantener que desarrollar el software. En sistemas de larga vida. • Los costos del software a menudo dominan el costo de los sistemas de cómputo. La Ingeniería de Software tiene que ver con el desarrollo del software de manera eficiente respecto al costo. los costos de mantenimiento pueden exceder varias veces el costo del desarrollo. El costo del software en una PC frecuentemente es mayor que el costo del hardware.Costos del Software.

Los Costos del Software • Costo directo. entre otros. incluye aspectos como la capacitación. Utilización del software. Son difíciles de prever y afectan principalmente a los sistemas conocidos como de misión crítica. instalación. Adquisición o desarrollo de un sistema de Software. soporte técnico. Costo indirecto. Costo oculto. Ocasionado principalmente por las fallas del software. • • Ingeniería de Software Introducción Página 4 .

Perjuicios posteriores a la caída de los sistemas. Es difícil predecir el costo real del software a mediano y largo plazo. Consecuencias a mediano y largo plazo y efectos indirectos. 1. desde la restauración de los datos. Son relativamente predecibles dado que dependen directamente del tiempo que dure la interrupción en la operación. servicios de emergencia. 2. Consecuencias inmediatas y efectos directos. Perjuicios ocasionados mientras dura la caída del sistema.Costos ocultos y consecuencias por fallas del Software. Ingeniería de Software Introducción Página 5 . hasta posibles accidentes y juicios en contra. Varían.

Ocasionado por un contador de 16 bits que se activó provocando un desbordamiento (overflow) del contador que nunca fue verificado. • • Ingeniería de Software Introducción Página 6 . El banco no pudo procesar nuevas transferencias por lo que la Reserva Federal de USA le hizo un traspaso de 24.Fallas en sistemas de software. Tuvo que pagar 5 millones de dls. Sobregiro del Bank of New York (1985): • Tuvo accidentalmente un sobregiro de 32.000 millones de dls. de intereses mientras se arreglaba el software.000 millones de dls.

Fallas en sistemas de software (2). para la cual no habia instrucción “else” por considerarse innecesaria. lo que originó una excepción fuera de control del programa. Ingeniería de Software Introducción Página 7 . Accidente de un F-18 (1986): • Un avión de combate F-18 se estrelló a causa de un giro descontrolado (unrecoverable spin) atribuido a una expresión “if-then”.

Falla del software de AT&T (1990): • American Telegraph and Telephone tuvo una falla masiva en su sistema de comunicaciones. El problema se originó en uno de los programas de ruteo escritos en lenguaje C.Fallas en sistemas de software (3). durando alrededor de nueve horas e interrumpiendo millones de llamadas internacionales. • Ingeniería de Software Introducción Página 8 .

Ingeniería de Software Introducción Página 9 . Se controló rápidamente causando únicamente la pérdida de dinero y tiempo.Fallas en sistemas de software (4). manteniendo la estación fuera de operación por varias semanas. Falla de software en la Estación Nuclear Bruce. Canadá (1990): • Un error de software en la estación nuclear de Bruce ocasionó la liberación de miles de litros de agua radioactiva.

Fallas en sistemas de software (5). El procesador Pentium III de 1 GHz. Ingeniería de Software Introducción Página 10 . tuvo que ser retirado del mercado. de un servicio de programación de una gran compañía de televisión por satélite. Error del sistema de cobranza lleva a una compañía a la quiebra (1996): • El intento por cambiar un nuevo sistema de software de cobranza. Error de procesador Pentium de Intel (1994): • • Un error de punto flotante en el procesador Pentium le costó a Intel 475 millones de dls. causó la quiebra de la compañía.

dejando fuera de servicio miles de cajeros automáticos y lectores de tarjetas de crédito. Introducción Página 11 Ingeniería de Software . Según el Grupo Gartner.000 millones de dls. Error del milenio “Y2K” (2000): • Cuando los programadores adoptaron la conversación de representar el año con dos dígitos. en lugar de cuatro: a los dos dígitos se concatenaba la constante 19 al inicio para generar la fecha completa. Error en equipo de Cisco (1998): • Un error en un equipo de ruteo (“switch”) de Cisco en uso por AT&T se propagó por cientos de equipos de ruteo en su red de alta velocidad. los costos de conversión de los programas fueron de alrededor de 600.Fallas en sistemas de software (6).

• • • • • • ¿Qué es software? ¿Qué es Ingeniería de Software? ¿Cuál es la diferencia entre Ingeniería de Software y Ciencia de Cómputo? ¿Cuál es la diferencia entre Ingeniería de Software e Ingeniería de Sistemas? ¿Qué es un proceso de software? ¿Qué es un modelo de un proceso de software? Introducción Página 12 Ingeniería de Software .Preguntas frecuentes respecto a la Ingeniería de Software.

• • • • • ¿Cuál es el costo de la Ingeniería de Software? ¿Cuáles son los métodos de la Ingeniería de Software? ¿Qué es CASE (Computer-Aided Software Engineering)? ¿Cuáles son los atributos del buen software? ¿Cuáles son los retos fundamentales de la Ingeniería de Software? Introducción Página 13 Ingeniería de Software .Preguntas frecuentes respecto a la Ingeniería de Software (2).

• • • • Se puede crear nuevo software desarrollando nuevos programas. El producto de software puede ser desarrollado para un cliente en particular o para el mercado en general. Introducción Página 14 Ingeniería de Software . e.desarrollados para ser vendidos a un rango general de diferentes clientes. como requerimientos. modelos de diseño y manuales de usuario. A la medida – desarrollados para un solo cliente de acuerdo a sus especificaciones. software de PC como Excel o Word. Los productos de software pueden ser: • Genéricos .g.¿Qué es Software? • Programas de computadora y su documentación asociada. configurando sistemas de software genéricos o reutilizando software existente.

Los Ingenieros de Software deben adoptar un enfoque sistemático y organizado en su trabajo y utilizar herramientas y técnicas apropiadas dependiendo del problema a resolver. • Ingeniería de Software Introducción Página 15 . las restricciones del desarrollo y los recursos disponibles.¿Qué es la Ingeniería de Software? • La Ingeniería de Software es una disciplina ingenieril que trata con todos los aspectos de la producción de software.

¿Cuál es la diferencia entre Ingeniería de Software y Ciencia de Cómputo? • La Ciencia de Cómputo trata de la teoría y los fundamentos. • Ingeniería de Software Introducción Página 16 . la Ingeniería de Software trata con las cuestiones prácticas de desarrollo e implantación de software útil. por ejemplo de la Física o la Ingeniería Eléctrica). Las teorías de la Ciencia de Cómputo son todavía insuficientes para actuar como material de soporte completo para la Ingeniería de Software (a diferencia.

Introducción Página 17 • Ingeniería de Software . su control y las bases de datos del sistema. el software y la ingeniería de los procesos. su integración y su instalación. Los Ingenieros de Sistemas se involucran en la especificación del sistema. su diseño arquitectónico. La Ingeniería de Software es parte de este proceso y se concentra en el desarrollo de la infraestructura de software.¿Cuál es la diferencia entre Ingeniería de Software e Ingeniería de Sistemas? • La Ingeniería de Sistemas trata todos los aspectos del desarrollo de sistemas basados en computadoras. incluyendo el hardware.

Validación – verificar que el software es lo que el cliente desea. Desarrollo – producción del sistema de software. Evolución – cambios en el software en respuesta a demandas de cambios. Las actividades genéricas en todos los procesos de software son: • • • • Especificación – qué debe hacer el sistema y cuales son las restricciones para su desarrollo.¿Qué es un proceso de software? • Un conjunto de actividades cuyo propósito es el desarrollo o la evolución de software. • Ingeniería de Software Introducción Página 18 .

¿Qué es un modelo de un proceso de software? • • Una representación simplificada de un proceso de software. • • • Ingeniería de Software Introducción Página 19 . Algunos ejemplos de perspectivas de procesos: • • • Perspectiva de flujo de trabajo – secuencia de actividades. Desarrollo iterativo. Cascada. Perspectiva de rol/acción – quien hace que. presentada desde una perspectiva específica. Perspectiva de flujo de datos – flujo de información. Ingeniería de Software basada en componentes. • Modelos genéricos de procesos.

40% pruebas. como rendimiento y confiabilidad. La distribución del costo depende del modelo de desarrollo utilizado. el costo de evolución a menudo excede el costo de desarrollo.¿Cuál es el costo de la Ingeniería de Software? • Aproximadamente el 60% del costo es desarrollo. Para software a la medida. • • Ingeniería de Software Introducción Página 20 . El costo varía dependiendo del tipo de sistema que se desarrolla y los requerimientos de atributos del sistema.

Distribución de costo por actividad. Ingeniería de Software Introducción Página 21 .

Costo de desarrollo del producto. Ingeniería de Software Introducción Página 22 .

• Ingeniería de Software Introducción Página 23 . mayor será el tamaño del sistema.Complejidad del software • Complejidad del problema: cuanto mayor sea el número de requerimientos o funcionalidad ofrecida por una aplicación. Complejidad de la solución: cuando la complejidad del problema es muy grande y difícil de reducir. creando sistemas más difíciles de comprender y desarrollar. es muy importante reducir la otra fuente de complejidad: el de la solución (el software).

Complejidad del software (2). • Factor dinámico Corresponde a la funcionalidad que varía con el tiempo. “todo programa que se use se modificará y cuando un programa se modifica su complejidad aumenta”. • Factor estático. Según la Ley de Lehman. Ingeniería de Software Introducción Página 24 . Corresponde a la funcionalidad que un sistema de software debe ofrecer al ser inicialmente desarrollado.

Confiabilidad del software • La confiabilidad (reliability) de un sistema de software describe que tan correcto y a prueba de fallas es un sistema. • Ingeniería de Software Introducción Página 25 . la cual describe que tan bien el sistema responde ante circunstancias anormales. La robustez (robustness) del software. Depende de la cantidad de errores que tiene un sistema.

reglas. • • • • Reglas. prácticas de diseño y guías de procesos. • • • Recomendaciones. • Descripciones de modelos gráficos que deben producirse. Descripciones de los Modelos. que incluyen modelos del sistema. Restricciones aplicadas a los modelos. Guías de procesos. notaciones. Consejos en buenas prácticas de diseño.¿Cuáles son los métodos de la Ingeniería de Software? • Enfoques estructurados en desarrollo de software. Qué actividades seguir. Ingeniería de Software Introducción Página 26 .

las actividades iniciales de • • • CASE inferior (Lower-CASE).¿Qué es CASE (Computer-Aided Software Engineering)? • Sistemas de Software que intentan proprocionar soporte automatizado de las actividades de los procesos de software. Los sistemas CASE se usan frecuentemente como soporte a los métodos. • Herramientas que soportan requerimientos y diseño. posteriores como Ingeniería de Software Introducción Página 27 . depuración y pruebas. • Herramientas que soportan actividades programación. CASE superior (Upper-CASE).

• • • El software debe ser confiable. Aceptabilidad. usable y compatible con otros sistemas.¿Cuáles son los atributos del buen software? • El software debe proporcionar la funcionalidad y rendimiento requeridos por el usuario y debe ser mantenible. El software debe ser aceptado por los usuarios para los que se diseñó. confiable eficiente y aceptable. • El software demandados. Mantenibilidad. Esto significa que debe ser entendible. Ingeniería de Software . El software no debe desperdiciar recursos del sistema. Introducción Página 28 Eficiencia. debe evolucionar para incluir cambios • • • • Dependabilidad.

¿Cuáles son los retos fundamentales de la Ingeniería de Software? • Heterogeneidad. Desarrollo de técnicas que permitan la entrega rápida del software. Ingeniería de Software Introducción Página 29 . • Tiempo de entrega. • Confianza. Desarrollo de técnicas para construir software que soporte plataformas y ambientes de ejecución hetereógeneos. Desarrollo de técnicas que demuestren que los usuarios pueden confiar en el software.

Los Ingenieros de Software deben comportarse de manera honesta y éticamente responsable. para ser respetados como profesionales. La conducta ética va más allá del simple respeto de la legalidad. • La Ingeniería de Software implica responsabilidades más amplias que simplemente la aplicación de habilidades técnicas.Responsabilidad ética y profesional. • • Ingeniería de Software Introducción Página 30 .

No deben aceptar trabajo que no son capaces de realizar. • Competencia. • Los Ingenieros de Software deben por norma respetar la confidencialidad de sus empleadores o clientes independientemente de que se haya o no firmado un acuerdo de confidencialidad. • Confidencialidad. Ingeniería de Software Introducción Página 31 .Consideraciones de responsabilidad profesional. • Los Ingenieros de Software no deben aparentar niveles de competencia que no tienen.

• Los Ingenieros de Software deben conocer las leyes locales que regulan el uso de la propiedad intelectual. como patentes. • Derechos de propiedad intelectual. Los ingenieros de software no deben usar sus habilidades técnicas para hacer mal uso de computadoras de otras personas. etc. Deben tener cuidado de asegurarse que la propiedad intelectual de sus empleadores o clientes esté protegida. • Mal uso de computadoras. El mal uso de computadoras abarca desde cuestiones relativamente triviales (como jugar juegos en la máquina de un empleador) hasta cosas muy serias (como diseminación de virus). copyrights.Consideraciones de responsabilidad profesional. • Ingeniería de Software Introducción Página 32 .

• • Ingeniería de Software Introducción Página 33 . • Estas sociedades profesionales de Estados Unidos han cooperado para producir un código de práctica ética. gerentes. El código contiene ocho principios relativos a la conducta y las decisiones hechas por Ingenieros de Software profesionales. supervisores y directivos. Los miembros de estas organizaciones firman el código de práctica cuando ingresan a ellas. así como estudiantes y becarios. incluyendo profesionales en sí. educadores.Código de Ética de la ACM/IEEE.

sin los detalles. especificación. los Ingenieros de Software deben adherirse a los siguientes Ocho Principios: Introducción Página 34 • Ingeniería de Software . • Preámbulo. pruebas y mantenimiento de software. • La versión corta del código sumariza sus aspiraciones en un nivel de abstracción muy alto. seguridad y bienestar del público. juntos. diseño. Los Ingenieros de Software deben comprometerse consigo mismos para hacer del análisis. De acuerdo a sus compromisos con la salud. una profesión benéfica y respetable. desarrollo. Sin estas aspiraciones los detalles pueden parecer legalistas y tediosos. las claúsulas incluidas en la versión completa incluyen ejemplos y detalles de como estas aspiraciones afectan la manera como actuamos como Ingenieros de Software profesionales. las aspiraciones pueden parecer altisonantes pero vacías. las aspiraciones y los detalles forman un código coherente.Código de Ética – preámbulo.

• PÚBLICO. consistente con el interés público. Los Ingenieros de Software deben actuar de la mejor manera de acuerdo a los intereses de su cliente y empleador. • Ingeniería de Software Introducción Página 35 . • • PRODUCTO.Código de Ética – principios. • CLIENTE Y EMPLEADOR. Los Ingenieros de Software deben asegurarse de que sus productos y las modificaciones relacionadas cumplan con los estándares profesionales más altos posibles. • Los Ingenieros de Software deben actuar consistentemente con el interés público.

• Ingeniería de Software Introducción Página 36 . • • PROFESIÓN. • JUICIO. consistente con el interés público. • GERENCIA. Los gerentes y líderes de Ingeniería de Software deben adoptar y promover un enfoque ético del manejo del desarrollo y mantenimiento del software. Los Ingenieros de Software deben avanzar en la integridad y reputación de la profesión. • Los Ingenieros de Software deben mantener integridad e independencia en su juicio profesional.Código de Ética – principios.

• COLEGAS. • Los Ingenieros de Software deben ser justos con y apoyar a sus colegas. PERSONALES. • Los Ingenieros de Software deben continuar aprendiendo de por vida lo concerniente a la práctica de su profesión y deben promover un enfoque ético de la misma. • Ingeniería de Software Introducción Página 37 .Código de Ética – principios.

Participación en el desarrollo de armas militares o sistemas nucleares. El empleador actúa de forma no ética y libera un sistema crítico en seguridad sin haber terminado las pruebas del mismo. • Ingeniería de Software Introducción Página 38 .Dilemas éticos. • • Desacuerdo con las política de la gerencia superior.