Fundamentos de la Ingeniería de
Software para la fase del Diseño
¿Qué es Software?
¿Programas de computador?
• Conjunto de instrucciones lógicas que le permite al
usuario interactuar con el computador a través de una
interfaz: programas del computador!
– capaz de producir en las maquinas el comportamiento deseado,
de forma eficaz y eficiente,
– que los usuarios puedan utilizar el sistema de forma eficiente.
– Al que los desarrolladores puedan dar mantenimiento de forma
eficaz y eficiente.
• No sólo programas!!!
• Todos los documentos asociados, configuración de
datos que se necesitan para hacer que estos programas
operen de la forma correcta:
– Programas independientes
– Archivos configuración
– Sistema de documentación que describe estructura de sistema.
– Documentacion de usuario
– Sitios web de descarga (info, productos, actualizaciones , etc)
• El término “Ingeniería de Software” surge a final de los
años 60 dentro de una conferencia dedicada a “la crisis
del software”.
• La Ingeniería de Software se define cómo la disciplina
tecnológica relacionada con la producción sistemática y
el mantenimiento de productos de software que son
desarrollados y modificados en el tiempo previsto y
dentro de los costos estimados (desde la especificación
del sistema hasta la mantención de éste).
• El objetivo de la Ingeniería de Software es producir
productos de software.
• Los productos de software caen en dos categorías:
• Productos genéricos: Desarrollados para un mercado o
tipo de clientes (p.ej. Office, Macromedia).
• Productos a medida: Encargados por un cliente de
acuerdo a sus necesidades específicas (p.ej. Un sistema
gestión para un médico).
• Productos de software: sistemas de software junto a la
documentación que describe cómo instalarlo y usarlo.
• Documentación de requerimientos.
• Documentación de diseño.
• Código fuente.
• Planes de pruebas del sistema.
• Principios de operación.
• Instrucciones de instalación.
• Procedimientos de mantenimiento.
• Manuales de usuario.
Software: Creación intelectual que comprende los
programas, los procedimientos, las reglas y cualquier
documentación perteneciente a la operación del sistema de
procesamiento de datos (ISO 9000-3: 1991,3.1)
Set completo de programas, procedimientos y,
documentación y datos asociadas, diseñados para
entregar al usuario. (ISO 9000-3: 1991,3.2)
¿Qué atributos tiene un buen
Software?
• El software debería entregar la funcionalidad y
desempeño requeridos por el usuario y debería ser
mantenible, confiable y usable.
• Mantenibilidad
– El software debe evolucionar para cubrir necesidades cambiantes.
• Confiabilidad
– El software debe ser confiable.
• Eficiencia
– El software no debe malgastar los recursos del sistema.
• Usabilidad
– El software debe ser usable por los usuarios para quienes se diseñó.
Factores de calidad de Software
• La calidad del software es una noción que puede ser
descrita mediante una serie de factores, que pueden
ser:
• Externos: observables por los usuarios del producto.
• Internos: observables por profesionales de la
computación.
Factores de calidad externos
• Corrección: Capacidad de los productos software de
ejecutar exactamente sus tareas tal cómo están
definidas en su especificación de requerimientos.
• Robustez: Capacidad de un sistema software para
funcionar en situaciones anormales.
• Modificabilidad: Facilidad de un producto para
adaptarse al cambio de especificaciones.
• Reusabilidad: Facilidad para ser reutilizado en todo o
en parte para nuevas aplicaciones.
• Compatibilidad: Facilidad de los productos software
para combinarse unos con otros.
• Eficiencia: Buen uso de los recursos Software y
Hardware disponibles.
• Portabilidad: Facilidad para adaptarse a otros entornos
software o hardware.
• Verificabilidad: Facilidad para preparar procedimientos
de aceptación, en particular datos de prueba, para
detectar fallos durante las fases de validación y
operación.
• Integridad: Capacidad de un sistema para proteger sus
documentos (programas, datos) contra accesos y
modificaciones no autorizados.
• Facilidad de uso: Capacidad de aprender a manejar un
sistema software, operar con el, preparar datos de
entrada, interpretar resultados, etc.
Factores de calidad internos
• Modularidad: Independencia funcional de los
componentes del programa.
• Legibilidad: Facilidad de lectura e interpretación del
código del programa
Retos a los que se enfrenta la Ing. De
Sw.
• Reto de lo Heredado: la mayoría de los sw grandes
que actualmente están en uso fueron desarrollados hace
muchos años y aún llevan a cabo funciones criticas de
negocio. El reto de lo heredado es mantener y actualizar
este sw de tal forma que se eviten los costos excesivos
y que los servicios esenciales del negocio continúen
funcionando.
• Reto de la heterogeneidad: cada vez más se requiere
que los sistemas operen como sistemas distribuidos en
redes que incluyen diferentes tipos de computadoras y
con diferentes clases de sistemas de soporte. El reto es
desarrollar técnicas para construir sw confiable que sea
lo suficientemente flexible para adecuarse.
• Sistema distribuido: una colección de computadoras separadas físicamente y
conectadas entre sí por una red; cada máquina posee sus componentes de hardware
y software que el usuario percibe como un solo sistema (no necesita saber qué
cosas están en qué máquinas). El usuario accede a los recursos remotos de la
misma manera en que accede a recursos locales.
• Reto de la entrega: muchas técnicas tradicionales de la
Ingeniería de sw consumen tiempo. El reto de la entrega
es reducir los tiempos de entrega para sistemas grandes
y complejos sin comprometer la calidad del sistema.
• Producto y, al mismo tiempo el vehículo para entregarlo
(Pressman 2002)
Características
• El software se desarrolla o modifica con intelecto; no se
manufactura en el sentido clásico.
• El software no se “desgasta”.
• Aunque la industria se mueve hacia la construcción
basada en componentes, la mayor parte del software se
construye para un uso individualizado.
El software como una obra humana
• Algunos autores comparan el software a la escritura de
libros.
– Fruto del intelecto.
– Descripción de realidades y ficciones.
• Cuando el software es grande es como una novela de
varios tomos.
• El software ha sufrido cambios significativos:
• Rendimiento en el hardware
• Cambios en la arquitectura
• Aumento de memoria
• Capacidad de almacenamiento
• Variedad de opciones de entrada y salida
…aproximadamente cada dos años se duplica el número
de transistores en un microprocesador
Desarrollo
Desarrollo del
del hardware
hardware
Desde 1965 la Ley de Moore rige la evolución de los microprocesadores
100.000.000
Pentium IV
Pentium III
10.000.000
Pentium II
Pentium
Transistores
486 DX
1.000.000
386
286
100.000
8086
10.000
8080
4004
8008
1970 1975 1980 1985 1990 1995 2000
Factores que imprimen aceleración al ritmo de crecimiento del hardware:
•Incremento de la capacidad de operación.
Consecuencias de la ley de Moore •Incremento de la miniaturización.
•Reducción de costes en la producción.
Comunicaciones entre sistemas
Algo de Historia…
• Osborne:” Habla de una nueva revolución industrial”
(70’s y 80’s)
• Toffler : llamó a la llegada de componentes
microelectrónicos “La tercera ola del cambio” (80’s)
• Naisbitt: predijo la transformación de la sociedad
industrial a una “sociedad de información” (82’s)
• McCorduck: información y conocimiento por
computadora es el foco de poder del siglo XXI (83’s)
• Stoll: redes y software es la clave para la comunicación
alrededor del mundo (89’s)
• Stephen Talbot : A mdediados de los 90’s dicen que el
futuro no esta en una computadora
• Hoy la “computación omnipresente” ha producido una
generación de aplicaciones de información que tienen
conexión en banda ancha a la WEB para proporcionar una
capa de conexión sobre nuestras casas, oficinas y
autopistas.
• El programador solitario ha sido reemplazado.
Evolución Histórica del Software
La importancia del Software
La importancia del Software
• Nuestra sociedad depende en gran medida de la
informática.
– Parece impensable que los sistemas informáticos dejasen
de trabajar, ya que son soporte de muchos sistemas.
– Ejemplos de sistemas básicos son:
• el sistema para el control de semáforos ciudad,
• medios de transporte aéreo, los bancos,
• los sistemas de producción (fabricas), hospitales, etc..
Todo esto a pesar de que la informática es una ciencia muy
joven (50 años)
– Los primeros años se centraron en la construcción de maquinas
capaces de dar soporte a estos sistemas.
– En la actualidad el Software ha superado al Hardware como
clave del éxito de muchos sistemas informáticos.
¿Está todo hecho?
• Empresas de todo tipo, plantean nuevos problemas a
ser resueltos.
– Problemas inabordables hace unos años por el coste de los
computadores.
– Por otra parte la ciencia sigue evolucionando, con lo que
problemas mas sofisticados pueden ser abordados con las
técnicas de la Inteligencia Artificial, comunicaciones,
multimedia, etc.
Nueve Áreas Temáticas de la Informática
Formas de Pensar
sobre las Areas
Abstracción Diseño
Teoría contexto Social
Comunicación
Inteligencia Artificial y Hombre-Maquina
Robótica
Algoritmos y
Estructuras de Datos
Lenguajes de Cálculo
Sistemas Arquitectura
Programación.. Numérico y
Operativos
Simbólico
Metodología e Ingeniería
del Software
Bases de Datos y Recuperación
de Información
Dominios de aplicación del software
• Software de sistemas: conjunto de programas escritos para
dar servicio a otros programas.
• Determinado software de sistemas (por ejemplo,
compiladores, editores y herramientas para administrar
archivos) procesa estructuras de información complejas pero
deterministas.
• Otras aplicaciones de sistemas (por ejemplo, componentes
de sistemas operativos, manejadores, software de redes,
procesadores de telecomunicaciones) procesan sobre todo
datos indeterminados. En cualquier caso, el área de software
de sistemas se caracteriza por: gran interacción con el
hardware de la computadora, uso intensivo por parte de
usuarios múltiples, operación concurrente que requiere la
secuenciación, recursos compartidos y administración de un
proceso sofisticado, estructuras complejas de datos e
interfaces externas múltiples.
• Software de aplicación: programas aislados que
resuelven una necesidad específica de negocios. Las
aplicaciones en esta área procesan datos comerciales o
técnicos en una forma que facilita las operaciones de
negocios o la toma de decisiones administrativas o
técnicas. Además de las aplicaciones convencionales de
procesamiento de datos, el software de aplicación se
usa para controlar funciones de negocios en tiempo real
(por ejemplo, procesamiento de transacciones en punto
de venta, control de procesos de manufactura en tiempo
real).
• Software de ingeniería y ciencias: se ha caracterizado
por algoritmos “devoradores de números”. Las
aplicaciones van de la astronomía a la vulcanología, del
análisis de tensiones en automóviles a la dinámica
orbital del transbordador espacial, y de la biología
molecular a la manufactura automatizada. Sin embargo,
las aplicaciones modernas dentro del área de la
ingeniería y las ciencias están abandonando los
algoritmos numéricos convencionales.
• El diseño asistido por computadora, la simulación de
sistemas y otras aplicaciones interactivas, han
comenzado a hacerse en tiempo real e incluso han
tomado características del software de sistemas.
• Software incrustado: reside dentro de un producto o
sistema y se usa para implementar y controlar
características y funciones para el usuario final y para el
sistema en sí. El software incrustado ejecuta funciones
limitadas y particulares (por ejemplo, control del tablero
de un horno de microondas) o provee una capacidad
significativa de funcionamiento y control (funciones
digitales en un automóvil, como el control del
combustible, del tablero de control y de los sistemas de
frenado).
• Software de línea de productos: es diseñado para
proporcionar una capacidad específica para uso de
muchos consumidores diferentes. El software de línea
de productos se centra en algún mercado limitado y
particular (por ejemplo, control del inventario de
productos) o se dirige a mercados masivos de
consumidores (procesamiento de textos, hojas de
cálculo, gráficas por computadora, multimedios,
entretenimiento, administración de base de datos y
aplicaciones para finanzas personales o de negocios).
• Aplicaciones web: llamadas “webapps”, esta categoría
de software centrado en redes agrupa una amplia gama
de aplicaciones. En su forma más sencilla, las webapps
son poco más que un conjunto de archivos de hipertexto
vinculados que presentan información con uso de texto y
gráficas limitadas. Sin embargo, desde que surgió Web
2.0, las webapps están evolucionando hacia ambientes
de cómputo sofisticados que no sólo proveen
características aisladas, funciones de cómputo y
contenido para el usuario final, sino que también están
integradas con bases de datos corporativas y
aplicaciones de negocios.
• Software de inteligencia artificial: hace uso de
algoritmos no numéricos para resolver problemas
complejos que no son fáciles de tratar
computacionalmente o con el análisis directo.
• Las aplicaciones en esta área incluyen robótica,
sistemas expertos, reconocimiento de patrones (imagen
y voz), redes neurales artificiales, demostración de
teoremas y juegos.
Dato v/s Información?
• Un sistema de información es un conjunto de datos
que interactúan entre sí con un fin común. En
informática, los sistemas de información ayudan a
administrar, recolectar, recuperar, procesar, almacenar y
distribuir información relevante para los procesos
fundamentales y las particularidades de cada
organización.
• Se desarrollaron con diferentes propósitos, los cuales
dependen de las necesidades de la empresa. Los
sistemas de procesamiento de datos, los sistemas de
información para la administración (MIS, Management
Information Systems), y los sistemas de apoyo para la
toma de decisiones (DSS, Decisión Support Systems),
diferentes tipos de sistemas de información
computarizados que se analizan y diseñan mediante la
aplicación de los conceptos y las técnicas del diseño y
del análisis de sistemas. En cierto grado, esto también
se aplica a los sistemas expertos.
Sistemas de procesamiento de datos
• Sistemas de información computarizados que se
desarrollaron para procesar grandes volúmenes de
información generada en las funciones administrativas,
tales como la nomina o el control de inventarios. Los
sistemas de procesamientos de datos liberan del tedio y
la rutina a las tareas que se realizan manualmente: sin
embargo, el elemento humano sigue participando, al
llevar a cabo la captura de la información requerida.
• Tales sistemas ejecutan periódicamente los programas
de manera automática. Una vez preparados,
escasamente se requiera tomar decisiones. En términos
generales, los sistemas de procesamiento de datos
ejecutan las actividades de carácter rutinario de las
empresas.
Sistemas de información para la
administración (MIS)
• Los MIS son sistemas en la relación que surge entre las personas y
los computadores. Los MIS requieren para su operación de: las
personas, del software (programas de computo) y del hardware
(computadores, impresoras, etc.). Estos sistemas de información
para la administración soportan un amplio espectro de tareas de las
organizaciones, mas aun que los sistemas de procesamiento de
datos, incluyendo el análisis, decisiones y toma de decisiones.
• Los usuarios de los sistemas de información para la administración,
utilizan una base de datos compartida para tener acceso a la
información. Dicha base de datos, almacena, tanto datos como
modelos que ayudan al usuario en la interpretación y el uso de la
información. Los sistemas de informacion para la administración
generan la información que eventualmente se utiliza para la toma
de decisiones.
Sistema de apoyo para la toma de
decisiones
• DSS; Decisión Support Systems. El sistema de apoyo para
la toma de decisiones es similar a los sistemas de
información tradicionales para la administración, en el
sentido de que ambos dependen de una base de datos
como fuente de información; pero se distingue del sistema
de información para la administración, al hacer énfasis en
el soporte en cada una de las etapas de la toma de
decisiones. Sin embargo, la decisión en si, depende de la
persona responsable de la misma. Los sistemas de apoyo
para la toma de decisiones se diseñan con una orientación
hacia la persona o el grupo que la utilizara, y no como los
sistemas de información tradicionales para la
administración.
Sistemas expertos
• Puede considerarse a la inteligencia artificial (IA) como el campo principal
de los sistemas expertos. La idea central de la inteligencia artificial es llegar
a desarrollar maquinas que cuenten con un desempeño inteligente. Dos
áreas de investigación de la inteligencia artificial son la comprensión del
lenguaje natural y la habilidad para interiorizarse racionalmente en los
problemas hasta alcanzar su conclusión lógica. Los sistemas expertos
utilizan los enfoques del razonamiento de la inteligencia artificial para
resolver aquellos problemas que el sector de los negocios (u otros
usuarios) le proponen.
• Los sistemas expertos son en si, un tipo muy especial de sistemas de
información, que tienen un uso practico en los negocios debido a la reciente
y amplia disponibilidad de hardware y de software, como las
microcomputadoras y los ambientes de sistemas expertos. Un sistema
experto (también llamado basado en el conocimiento ) captura; y en efecto
utiliza, el conocimiento de un experto, para la solución de un problema
particular de la organización. Percátese de que, a diferencia del sistema de
apoyo para la toma de decisiones, que finalmente deja al responsable que
tome las decisiones, un sistema experto selecciona la mejor solución al
problema o al tipo especifico de problema.
• Los elementos básico de un sistema experto son: la base de
conocimiento y una maquina de inferencia que liga al usuario con el
sistema; procesando sus solicitudes mediante lenguajes como el
del PROLOG o el LISP y la interfaz con el usuario.
Mitos del Software
• Propagaron confusión e información errónea.
Del administrador del proyecto
Mitos del SW Del usuario final o cliente
Del desarrollador
Mitos del Administrador
• Los estándares y procedimientos son toda la guía que los
Ing. de Software necesitan.
• Si contamos con la última generación de computadoras
tenemos todas las herramientas necesarias.
• Si fallamos en la planificación, podemos añadir más
programadores y adelantar el tiempo perdido.
• La calidad cuesta dinero: es un gasto.
Mitos del Cliente
• Una declaración general de los objetivos del cliente es
todo lo necesario para empezar a programar.
• Los requisitos cambian continuamente, pero los
cambios pueden acomodarse fácilmente porque el
software es flexible.
60 – 100x
C
o
s
t
1,5 – 6x
e 1x
Definición Desarrollo Después de
la
Entrega
Mitos del Desarrollador
• Una vez que se escribió el programa y se lo hizo
funcionar, el trabajo del Ing. de Software está
terminado.
• No hay forma de comprobar la calidad del software
hasta no poder ejecutarlo en alguna máquina.
• Lo único que se entrega al terminar el proyecto es el
programa funcionando.
La 4 P en Desarrollo de Software
Personas: Principales autores de un proyecto SW son los
arquitectos, desarrolladores, ingenieros de prueba y el
personal de gestión (los que trabajan).
Proyecto: Elemento organizativo a través del cual se
gestiona el desarrollo del software (la pauta a seguir para
desarrollar un producto).
Producto: Artefactos que se crean durante la vida del
proyecto (lo que se obtiene) .
Proceso: Un proceso de ingeniería de software es una
definición del conjunto completo de actividades necesarias
para transformar los requisitos de usuario en un producto
(la pauta a seguir para desarrollar un proyecto).
Personas
–Arquitectos, desarrolladores, ingenieros de prueba,
personal de gestión, usuarios, clientes
–El proceso de desarrollo afecta a las personas (viabilidad,
gestión del riesgo, estructura de los equipos, planificación,
comprensión, cumplimiento)
–Formación, entrenamiento y experiencia
–De recurso a trabajador (puestos que asumen las
personas)
–Cada trabajador tiene un conjunto de responsabilidades y
lleva a cabo un conjunto de actividades
Proyecto
–Elemento organizativo de gestión
–El proyecto construye el producto
–Secuencia de cambio. El sistema evoluciona
–Serie de iteraciones. Cada iteración implementa un
conjunto de casos de uso o atenúa algunos riesgos.
Mini-proyecto
–Patrón organizativo. Tipos de trabajadores y artefactos
a conseguir
Producto
–Artefactos que se crean durante la vida del proyecto
–Artefactos: Modelos, código, ejecutables,
documentación, diagramas UML, bocetos de la interfaz de
usuario, prototipos, componentes, planes de prueba
–Artefactos de ingeniería y de gestión
–Colección de modelos
Proceso
–Conjunto de actividades para crear el producto
–Es una plantilla para crear proyectos (Instancia del
proceso)
–Se define en términos de flujos de trabajo (conjunto
de actividades)
–Se identifican trabajadores y artefactos
–Adaptación o especialización del proceso
–Se utilizan diagramas de actividad de UML para
describir los flujos de trabajo
Otros…
Principales
Principales organizaciones
organizaciones de
de estandarización
estandarización
ISO
ISO
SEI
SEI
IEEE
IEEE Computer
Computer Society
Society
IEEE Es el Instituto de Ingenieros en electricidad y electrónica (Institute
of Electrical and Electronics Engineers).
¿Qué es Software de Calidad?
Definición oficial (IEEE Std. 610-1990) Es el grado con el
que un sistema, componente o proceso cumple:
–Los requisitos especificados.
Relación de la
calidad con el
Software
–Las necesidades o expectativas del cliente o usuario.
Concordancia del software producido con los requisitos funcionales y de rendimiento
explícitamente establecidos, con los estándares de desarrollo explícitamente
documentados y con las características implícitas que se espera de todo software
desarrollado profesionalmente.
Existen dos aspectos que no se deben perder de vista
•Mantenibilidad
•Que sea usable