Ingeniería de Software Introducción Página 0
Introducción a la Ingeniería
de Software.
Ingeniería de Software Introducción Página 1
• 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.
Objetivos.
Ingeniería de Software Introducción Página 2
Ingeniería de Software.
• Las economías de las naciones desarrolladas dependendel software.
• Más y más sistemas se controlan mediante software.
• La Ingeniería de Software estudia las teorías, métodos yherramientas para el desarrollo profesional del software.
• Los gastos en software representan una fracciónsignificativa del PNB de todos los países desarrollados.
Ingeniería de Software Introducción Página 3
Costos del Software.
• Los costos del software a menudo dominan el costo de
los sistemas de cómputo. El costo del software en una
PC frecuentemente es mayor que el costo del hardware.
• Cuesta más mantener que desarrollar el software. En
sistemas de larga vida, los costos de mantenimiento
pueden exceder varias veces el costo del desarrollo.
• La Ingeniería de Software tiene que ver con el desarrollo
del software de manera eficiente respecto al costo.
Ingeniería de Software Introducción Página 4
Los Costos del Software
• Costo directo. Adquisición o desarrollo de un sistema de Software.
• Costo indirecto. Utilización del software; incluye aspectos como la capacitación, instalación, soporte técnico, entre otros.
• Costo oculto. Ocasionado principalmente por las fallas del software. Son difíciles de prever y afectan principalmente a los sistemas conocidos como de misión crítica.
Ingeniería de Software Introducción Página 5
Costos ocultos y consecuencias por fallas del
Software.
1. Consecuencias inmediatas y efectos directos.
Perjuicios ocasionados mientras dura la caída del sistema.
Son relativamente predecibles dado que dependen
directamente del tiempo que dure la interrupción en la
operación.
2. Consecuencias a mediano y largo plazo y efectos
indirectos.
Perjuicios posteriores a la caída de los sistemas. Varían,
desde la restauración de los datos, servicios de emergencia,
hasta posibles accidentes y juicios en contra. Es difícil
predecir el costo real del costo indirecto a mediano y largo
plazo.
Ingeniería de Software Introducción Página 6
Fallas en sistemas de software.
Sobregiro del Bank of New York (1985):
• Tuvo accidentalmente un sobregiro de 32,000 millones de dls.
Ocasionado por un contador de 16 bits que se activó provocando
un desbordamiento (overflow) del contador que nunca fue
verificado.
• El banco no pudo procesar nuevas transferencias por lo que la
Reserva Federal de USA le hizo un traspaso de 24,000 millones
de dls.
• Tuvo que pagar 5 millones de dls. de intereses mientras se
arreglaba el software.
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”, para la cual no habia
instrucción “else” por considerarse innecesaria, lo
que originó una excepción fuera de control del
programa.
Fallas en sistemas de software (2).
Ingeniería de Software Introducción Página 8
Falla del software de AT&T (1990):
• American Telegraph and Telephone tuvo una fallamasiva en su sistema de comunicaciones, durandoalrededor de nueve horas e interrumpiendo millonesde llamadas internacionales.
• El problema se originó en uno de los programas de ruteo escritos en lenguaje C.
Fallas en sistemas de software (3).
Ingeniería de Software Introducción Página 9
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. Se controló rápidamente causando únicamente
la pérdida de dinero y tiempo, manteniendo la estación fuera
de operación por varias semanas.
Fallas en sistemas de software (4).
Ingeniería de Software Introducción Página 10
Error de procesador Pentium de Intel (1994):
• Un error de punto flotante en el procesador Pentium le costó a Intel 475 millones de dls.
• El procesador Pentium III de 1 GHz, tuvo que ser retirado del mercado.
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,de un servicio de programación de una gran compañía detelevisión por satélite, causó la quiebra de la compañía.
Fallas en sistemas de software (5).
Ingeniería de Software Introducción Página 11
Error en equipo de Cisco (1998):
• Un error en un equipo de ruteo (“switch”) de Cisco en uso por AT&Tse propagó por cientos de equipos de ruteo en su red de altavelocidad, dejando fuera de servicio miles de cajeros automáticos ylectores de tarjetas de crédito.
Error del milenio “Y2K” (2000):
• Cuando los programadores adoptaron la conversación de representarel año con dos dígitos, en lugar de cuatro: a los dos dígitos seconcatenaba la constante 19 al inicio para generar la fecha completa.Según el Grupo Gartner, los costos de conversión de los programasfueron de alrededor de 600,000 millones de dls.
Fallas en sistemas de software (6).
Ingeniería de Software Introducción Página 12
Obama Care (2015):
• Una mala arquitectura de la aplicación web para controlar laoperación del nuevo sistema de salud en Estados Unidos, llamadoObama Care, ocasionó que en los primeros días de su operación sesaturara de manera que los tiempos de respuesta fueroninaceptables.
• El sistema fue retirado durante varios meses mientras se corregíanlas fallas del diseño arquitectónico.
• Muchos usuarios llegaron a la conclusión de que el sistema de salud(no la aplicación Web) no era adecuado.
Fallas en sistemas de software (7).
Ingeniería de Software Introducción Página 13
Dos accidentes fatales del Boeing 737 Max:
• Una falla en el software de control del avión ocasionó que entrara enpicada y no se pudiera levantar aun con intervención manual.
• Dos accidentes fatales ocasionaron que toda la flota de este tipo deavión dejara de volar mientras se corrige la falla.
• A la fecha, la corrección del software continúa en etapa de prueba ylos aviones no están volando.
Fallas en sistemas de software (8).
Ingeniería de Software Introducción Página 14
Preguntas frecuentes respecto a la
Ingeniería de Software (1).
• ¿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?
Ingeniería de Software Introducción Página 15
Preguntas frecuentes respecto a la
Ingeniería de Software (2).
• ¿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?
Ingeniería de Software Introducción Página 16
¿Qué es Software?
• Programas de computadora y su documentaciónasociada, como requerimientos, modelos de diseño ymanuales de usuario.
• El producto de software puede ser desarrollado para uncliente en particular o para el mercado en general.
• Los productos de software pueden ser:• Genéricos - desarrollados para ser vendidos a un rango
general de diferentes clientes, e.g. software de PC como Excelo Word.
• A la medida – desarrollados para un solo cliente de acuerdo asus especificaciones.
• Se puede crear nuevo software desarrollando nuevosprogramas, configurando sistemas de software genéricoso reutilizando software existente.
Ingeniería de Software Introducción Página 17
¿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
útil.
• 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, las restricciones del desarrollo y los
recursos disponibles.
Ingeniería de Software Introducción Página 18
¿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; la Ingeniería de Software trata con las
cuestiones prácticas de desarrollo e implantación de
software útil.
• 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, por
ejemplo de la Física respecto a la Ingeniería Eléctrica).
Ingeniería de Software Introducción Página 19
¿Cuál es la diferencia entre Ingeniería de
Software e Ingeniería de Sistemas?
• La Ingeniería de Sistemas trata todos los aspectos deldesarrollo de sistemas basados en computadoras,incluyendo el hardware, el software y la ingeniería de losprocesos. La Ingeniería de Software es parte de esteproceso y se concentra en el desarrollo de lainfraestructura de software, su control y las bases dedatos del sistema.
• Los Ingenieros de Software se involucran en laespecificación del sistema, su diseño arquitectónico, suintegración y su instalación.
Ingeniería de Software Introducción Página 20
¿Qué es un proceso de software?
• Un conjunto de actividades cuyo propósito es el desarrolloo la evolución de software.
• Las actividades genéricas en todos los procesos desoftware son:
• Especificación – qué debe hacer el sistema y cuales son lasrestricciones para su desarrollo.
• Desarrollo – producción del sistema de software.
• Validación – verificar que el software es lo que el cliente desea.
• Evolución – cambios en el software en respuesta a demandas decambios.
Ingeniería de Software Introducción Página 21
¿Qué es un modelo de un proceso
de software?
• Una representación simplificada de un proceso de software,
presentada desde una perspectiva específica.
• Algunos ejemplos de perspectivas de procesos:
• Perspectiva de flujo de trabajo – secuencia de actividades.
• Perspectiva de flujo de datos – flujo de información.
• Perspectiva de rol/acción – quien hace que.
• Modelos genéricos de procesos.
• Cascada.
• Desarrollo iterativo.
• Ingeniería de Software basada en componentes.
Ingeniería de Software Introducción Página 22
¿Cuál es el costo de la Ingeniería
de Software?
• Aproximadamente el 60% del costo es desarrollo, 40%
pruebas. Para software a la medida, el costo de
evolución a menudo excede el costo de desarrollo.
• El costo varía dependiendo del tipo de sistema que se
desarrolla y los requerimientos de atributos del sistema,
como rendimiento y confiabilidad.
• La distribución del costo depende del modelo de
desarrollo utilizado.
Ingeniería de Software Introducción Página 23
Costo de desarrollo del producto.
Specification Development System testing
25 50 75 1000
Ingeniería de Software Introducción Página 24
Complejidad del software
• Complejidad del problema: cuanto mayor sea el número de
requerimientos o funcionalidad ofrecida por una aplicación,
mayor será el tamaño del sistema, creando sistemas más
difíciles de comprender y desarrollar.
• Complejidad de la solución: cuando la complejidad del
problema es muy grande y difícil de reducir, es muy
importante reducir la otra fuente de complejidad: la de la
solución (el software).
Ingeniería de Software Introducción Página 25
• Factor estático.
Corresponde a la funcionalidad que un sistema de
software debe ofrecer al ser inicialmente desarrollado.
• Factor dinámico
Corresponde a la funcionalidad que varía con el tiempo.
Según la “Ley de Lehman: todo programa que se use se
modificará y cuando un programa se modifica su
complejidad aumenta”.
Complejidad del software (2).
Ingeniería de Software Introducción Página 26
Confiabilidad del software
• La confiabilidad (reliability) de un sistema desoftware describe que tan correcto y a pruebade fallas es un sistema. Depende de la cantidadde errores que tiene un sistema.
• La robustez (robustness) del software, la cualdescribe que tan bien el sistema responde antecircunstancias anormales.
Ingeniería de Software Introducción Página 27
¿Cuáles son los métodos de la Ingeniería de
Software?
• Enfoques estructurados en desarrollo de software, queincluyen modelos del sistema, notaciones, reglas, prácticasde diseño y guías de procesos.
• Descripciones de los Modelos.• Descripciones de modelos gráficos que deben producirse.
• Reglas.• Restricciones aplicadas a los modelos.
• Recomendaciones.• Consejos en buenas prácticas de diseño (best practices).
• Guías de procesos.• Qué actividades seguir.
Ingeniería de Software Introducción Página 28
¿Qué es CASE (Computer-Aided Software
Engineering)?
• Sistemas de Software que intentan propocionar soporte
automatizado de las actividades de los procesos de
software.
• Los sistemas CASE se usan frecuentemente como soporte
a los métodos.
• CASE superior (Upper-CASE).
• Herramientas que soportan las actividades iniciales de
requerimientos y diseño.
• CASE inferior (Lower-CASE).
• Herramientas que soportan actividades posteriores como
programación, depuración y pruebas.
Ingeniería de Software Introducción Página 29
¿Cuáles son los atributos del buen software?
El software debe proporcionar la funcionalidad y rendimiento requeridospor el usuario y debe ser mantenible, eficiente, confiable aceptable.
• Mantenibilidad.
• El software debe evolucionar para incluir cambios demandados.
• Eficiencia.
• El software no debe desperdiciar recursos del sistema.
• Confiabilidad.
• El software debe ser confiable, i.e debe dar los resultados esperados.
• Aceptabilidad.
• El software debe ser aceptado por los usuarios para los que sediseñó. Esto significa que debe ser entendible, usable y compatiblecon otros sistemas.
Ingeniería de Software Introducción Página 30
¿Cuáles son los retos fundamentales de la
Ingeniería de Software?
• Heterogeneidad. Desarrollo de técnicas para construir software
que soporte plataformas y ambientes de ejecución hetereógeneos.
• Tiempo de entrega. Desarrollo de técnicas que permitan la
entrega rápida del software.
• Confianza. Desarrollo de técnicas que demuestren que los
usuarios pueden confiar en el software.
Ingeniería de Software Introducción Página 31
Responsabilidad ética y profesional.
• La Ingeniería de Software implica responsabilidades más
amplias que simplemente la aplicación de habilidades
técnicas.
• 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.
Ingeniería de Software Introducción Página 32
Consideraciones de responsabilidad
profesional.
• Confidencialidad. • Los Ingenieros de Software deben por norma respetar
la confidencialidad de sus empleadores o clientesindependientemente de que se haya o no firmado unacuerdo de confidencialidad.
• Competencia.• Los Ingenieros de Software no deben aparentar niveles
de competencia que no tienen. No deben aceptartrabajo que no son capaces de realizar.
Ingeniería de Software Introducción Página 33
Consideraciones de responsabilidad
profesional.
• Derechos de propiedad intelectual.
• Los Ingenieros de Software deben conocer las leyes locales que
regulan el uso de la propiedad intelectual, como patentes,
copyrights, etc. Deben tener cuidado de asegurarse que la
propiedad intelectual de sus empleadores o clientes esté
protegida.
• Mal uso de computadoras.
• Los ingenieros de software no deben usar sus habilidades
técnicas para hacer mal uso de computadoras de otras personas.
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).
Ingeniería de Software Introducción Página 34
Código de Ética de la ACM/IEEE.
• Estas sociedades profesionales de Estados Unidos han cooperado para producir un código de ética para los Ingenieros de Software.
• Los miembros de estas organizaciones firman el códigode ética cuando ingresan a ellas.
• El código contiene ocho principios relativos a la conducta y las decisiones hechas por Ingenieros de Software profesionales, incluyendo profesionales en sí, educadores, gerentes, supervisores y directivos, así como estudiantes y becarios.
ACM: American Computer Manufacturers. IEEE: Institute of Electric and Electronic Engineers.
Ingeniería de Software Introducción Página 35
Código de Ética – preámbulo.
• Preámbulo.• La versión corta del código sumariza sus aspiraciones en un nivel
de abstracción muy alto; las claúsulas incluidas en la versióncompleta incluyen ejemplos y detalles de como estas aspiracionesafectan la manera como actuamos como Ingenieros de Softwareprofesionales. Sin estas aspiraciones los detalles pueden parecerlegalistas y tediosos; sin los detalles, las aspiraciones puedenparecer altisonantes pero vacías; juntos, las aspiraciones y losdetalles forman un código coherente.
• Los Ingenieros de Software deben comprometerse consigomismos para hacer del análisis, especificación, diseño, desarrollo,pruebas y mantenimiento de software, una profesión benéfica yrespetable. De acuerdo a sus compromisos con la salud,seguridad y bienestar del público, los Ingenieros de Softwaredeben adherirse a los siguientes Ocho Principios:
Ingeniería de Software Introducción Página 36
Código de Ética – 8 principios.
1. Los Ingenieros de Software deben actuar
consistentemente con el interés público.
2. Los Ingenieros de Software deben actuar de la mejor
manera de acuerdo a los intereses de su cliente y
empleador, consistente con el interés público.
3. Los Ingenieros de Software deben asegurarse de que
sus productos y las modificaciones relacionadas
cumplan con los estándares profesionales más altos
posibles.
Ingeniería de Software Introducción Página 37
Código de Ética – principios.
4. Los Ingenieros de Software deben mantener integridad e
independencia en su juicio profesional.
5. 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.
6. Los Ingenieros de Software deben avanzar en la
integridad y reputación de la profesión, consistente con el
interés público.
Ingeniería de Software Introducción Página 38
Código de Ética – principios.
7. Los Ingenieros de Software deben ser justos con y
apoyar a sus colegas.
8. 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 39
Dilemas éticos.
• Desacuerdo con las política de la gerencia superior.
• El empleador actúa de forma no ética y libera un sistema
crítico en seguridad sin haber terminado las pruebas del
mismo.
• Participación en el desarrollo de armas militares o
sistemas nucleares.