Análisis de requerimientos
Indice
z
Elementos de un sistema.
z
Sistemas de información más comunes.
Situación de la Industria de Software
• Mas del 30% de todos los proyectos de software son cancelados antes de su
finalización.
• Mas del 70% de los proyectos restantes
fallan al entregar y evaluar las características esperadas.
• Un proyecto promedio ejecuta 189% sobre el presupuesto aprobado y extiende sus
actividades sobre el 222%.
Porqué los Proyectos de Software son exitosos ?
–
Involucra a Usuarios 15.9%
–
Soporte Administración 13.9%
–
Clara definición de Requerimientos 13.0%
–
Apropiado Planeamiento 9.6%
–
Expectativas Realistas 8.2%
–
Hitos no Extensos 7.7%
–
Staff Competente de profesionales 7.2%
–
Propietario 5.3%
Porqué los Proyectos de Software fallan ?
• Requerimientos Incompletos 13.1%
• Falta de Requerimientos 12.4%
• Falta de Recursos 10.6%
• Expectativas no Realistas 9.9%
• Cambio Requerimientos/Especificaciones 8.7%
• Falta de Planeamiento 8.1%
• No se especifico el tiempo adecuado 7.5%
Qué es un Requerimiento ?
• Un requerimiento es una condición o capacidad a la que el sistema (siendo construido) debe conformar [ Rational ].
• Un requerimiento de software puede ser definido como : – Una capacidad del software necesaria por el usuario para resolver un problema o alcanzar un objetivo.
– Una capacidad del software que debe ser reunida o poseída por un sistema o componente del sistema para satisfacer un contrato, especificación, estándar, u otra documentación formal.
Qué son Requerimientos ?
• Los requerimientos de usuario representan el conjunto completo de resultados a ser obtenidos utilizando el sistema.
• Los requerimientos de sistemas deben mostrar todo lo que el sistema debe hacer mas todas las restricciones sobre la
funcionalidad.
• Los requerimientos forman un modelo completo,
representando el sistema total a algún nivel de abstracción.
Necesidad de una metodología
z
El proceso de construcción del software requiere, identificar las tareas que se han de realizar sobre el software y aplicar esas tareas de una forma
ordenada y efectiva.
z
El desarrollo del software se debe realizar por un
conjunto coordinado de personas simultáneamente,
y por lo tanto sus esfuerzos deben estar dirigidos
por una misma metodología que permita estructurar
las diferentes fases del desarrollo.
Sistemas
z
El sistema es un conjunto de elementos que cooperan entre sí para proporcionar una
funcionalidad. En el caso de un sistema informático hay dos tipos de elementos: Hardware y Software.
z
Un sistema puede estar formado por subsistemas de
diferentes tipos.
Sistemas
z
La Ingeniería del Software trata, del
establecimiento de los principios y métodos de la ingeniería, orientados a obtener
software económico, que sea fiable y
funcione de manera eficiente sobre
máquinas reales.
Sistemas ejemplos.
z
un sistema termodinámico
z
un sistema de ríos
z
un sistema telefónico
z
un sistema de autopistas
z
el sistema newtoniano de la mecánica
z
el sistema de mecanografía al tacto
z
un sistema taxonómico
z
el sistema decimal, etcétera.
Sistemas
z
James Grier Miller en su libro Living System
destaca 19 subsistemas críticos de todos los
sistemas vivientes, se pueden categorizar de
la manera siguiente:
Categorías:
z El reproductor, que es capaz de dar origen a otros sistemas similares aquel en el cual se encuentra. En una organización de negocios, pudiera ser una división de planeación de
instalaciones que hace nuevas plantas y construye oficinas regionales nuevas.
z La frontera, que mantiene unidos a los componentes que conforman el sistema, los protege de tensiones ambientales y excluye o permite la entrada de diversos tipos de materia-
energía e información. En una organización de negocios, esto pudiera constituir la planta misma y los guardias u otro
personal de seguridad que evitan el ingreso de intrusos indeseables.
Categorías:
z El inyector, que transporta la materia-energía a través de la frontera del sistema desde el medio ambiente. En una organización de
negocios, este pudiera ser el departamento de compras o recepción, que introduce la materia prima, los materiales de oficina, etc.
z El distribuidor, que trae material desde el exterior del sistema y lo reparte desde sus subsistemas a cada componente. En una
organización de negocios, pudiera estar conformado por las líneas telefónicas, correo electrónico, mensajeros, bandas, etc.
z El convertidor, que cambia ciertos materiales que ingresan al sistema a formas más útiles para los procesos especiales de dicho sistema particular.
Categorias:
z El productor, que forma asociaciones estables durables por períodos significativos con la materia-energía que ingresa al sistema o que egresa de su convertidor. Estos materiales sintetizados pueden servir para crecimiento o reparación de daños o reposición de componentes del sistema.
z El subsistema de almacenamiento de materia-energía, que retiene en el sistema, durante diferentes períodos, depósitos de diversos tipos de materia-energía.
z El expulsor, que transmite materia-energía hacia el exterior del sistema en forma de desechos o de productos.
Categorías:
z El motor, que mueve el sistema o a sus partes en relación con todo o parte del medio ambiente, o bien que mueve a los
componentes del ambiente.
z El soporte, que mantiene las relaciones espaciales
apropiadas entre los componentes del sistema, de manera que pueden interactuar sin ser un lastre o estorbo entre ellos.
z El transductor de entrada, que traen señales portadoras de información al sistema, transformándolas en otras formas de materia-energía adecuadas para su transmisión al interior.
Categorías:
z El transductor interno, que recibe de otros subsistemas o componentes del sistema señales que portan información acerca de alteraciones significativas en dichos subsistemas o componentes, transformándolos en otras formas de materia- energía transmisibles en su interior.
z El canal y la red, que están compuestos por una sola ruta en el espacio físico, o bien por múltiples rutas interconectadas, mediante las cuales las señales portadoras de información se transmiten a todas partes del sistema.
Categorías:
z El decodificador, que altera las claves de información que le es introducida por medio del transductor de entrada o del
transductor interno, para dejar una clave privada que pueda ser utilizada internamente por el sistema.
z El asociador, que lleva a cabo la primera etapa del proceso de aprendizaje, formando asociaciones duraderas entre
elementos de información dentro del sistema.
z La memoria, que lleva a cabo la segunda etapa del
aprendizaje, almacenando diversos tipos de información en el sistema durante diferentes períodos.
Categorías:
z
El que decide, que recibe información de los demás subsistemas y les transmite información que sirve para controlar al sistema completo.
z
El codificador, que altera la clave de información que se le introduce desde otros subsistemas
procesadores de información, convirtiéndola, de una
clave privada utilizada internamente por el sistema,
en una clave pública que pueden ser interpretada
por otros sistemas en su medio ambiente.
Categorías:
z
El transductor de salida, que emite señales portadoras de información desde el sistema, transformando los marcadores dentro del
sistema en otras formas de materia-energía
que pueden ser transmitidas por medio de
canales en el medio ambiente del sistema.
Sistemas de información más comunes.
Existen dos categorías básicas en la clasificación de sistemas:
z
Sistemas naturales.
z
Sistemas hechos por el hombre.
Sistemas naturales.
z
Es conveniente dividir los sistemas naturales en dos subcategorías básicas:
Sistemas físicos.
Sistemas vivientes.
z
Los sistemas físicos incluyen:
Sistemas estelares: galaxias, sistemas solares, etcétera.
Sistemas geológicos: ríos, cordilleras, etcétera.
Sistemas moleculares: organizaciones complejas
de átomos.
Sistemas hechos por el hombre.
Sistemas construidos, organizados y mantenidos por humanos, tales como:
z
Sistemas sociales, Sistemas de transporte, Sistemas de comunicación, Sistemas de manufactura, Sistemas financieros.
z
La mayoría de estos sistemas incluyen ordenadores pero es importante señalar que dichos sistemas
existían antes.
Sistemas hechos por el hombre.
z
Los sistemas automatizados son sistemas hechos por el hombre que interactúan con o son controlados por un o más ordenador. Aunque hay diferentes
tipos de sistemas automatizados, todos tienden a tener componentes en común:
z
El hardware de un ordenador: los procesadores, los discos, terminales, impresora, unidades de cinta
magnética, etcétera.
Sistemas hechos por el hombre.
z El software : Los programas de sistemas tales como sistemas operativos, sistemas de base de datos, programas de control de telecomunicaciones, etcétera.
z Las personas: los que operan el sistema, los que proveen su material de entrada y consumen su material de salida, y los que proveen actividades de procesamiento manual en un sistema.
z Los datos: la información que el sistema recuerda
z Los procedimientos: las políticas formales e instrucciones de operación del sistema.
Sistemas Automatizados
División categórica de los sistemas automatizados es la siguiente:
–
Sistemas en línea.
–
Sistemas de tiempo real.
–
Sistemas de apoyo a decisiones.
–
Sistemas basados en el conocimiento.
Sistema en línea
z
Es aquel que acepta material de entrada directamente del área donde se creo.
z
También es sistema en el que el material de
salida, o resultado, se devuelve directamente
a donde es requerido.
Sistemas de tiempo real
z
Puede definirse como aquel que controla un ambiente recibiendo datos, procesándolos y devolviéndolos con la suficiente rapidez
como para influir en dicho ambiente en ese
momento.
Sistemas de apoyo a decisiones
z
Estos sistemas no toman decisiones por si mismos, sino ayudan a los administradores, y a otros profesionistas "trabajadores del
conocimiento" de una organización a tomar decisiones inteligentes y documentadas
acerca de los diversos aspectos de la
operación.
Sistemas basados en el conocimiento
z
Estos sistemas contienen grandes
cantidades de diversos conocimientos que emplean en el desempeño de una tarea dada.
z
Los sistemas expertos son una especie de sistemas basados en el conocimiento,
aunque ambos términos a menudo se
utilizan indistintamente.
Sistemas basados en el conocimiento
Principios generales de interés particular para quienes crean sistemas automatizados de información:
z Entre más especializado sea el sistema, menos capaz es de adaptarse a circunstancias diferentes.
z Cuanto mayor sea el sistema, mayor es el número de sus recursos que deben dedicarse a su mantenimiento diario.
z Los sistemas siempre forman parte de sistemas mayores y siempre pueden dividirse en sistemas menores.
z Los sistemas crecen.
La crisis del software
z
Desde el momento en el que se introdujeron Los ordenadores con capacidad para soportar
aplicaciones de tamaño considerable (años 60)
empezó a ocurrir que las técnicas de desarrollo para los hasta entonces pequeños sistemas dejaron
progresivamente de ser válidas.
z
Estas técnicas consistían básicamente en codificar y
corregir (code-and-fix) que consiste en lo siguiente:
La crisis del software
z
“ No existe necesariamente una
especificación del producto final, en su lugar se tienen algunas anotaciones
sobre las características generales del programa. Inmediatamente se empieza la codificación y simultáneamente se va
depurando. Cuando el programa cumple
con las especificaciones y parece que no
tiene errores se entrega. “
La crisis del software
z
Ventajas: no se gasta tiempo en
planificación, gestión de los recursos, documentación, etc.
z
Si el proyecto es de pequeño tamaño y lo realiza una sola persona no es un mal
sistema para producir un resultado pronto.
z
Hoy en día es un método de desarrollo aún
muy en boga, las consecuencias fueron:
La crisis del software
Consecuencias:
z
El costo era mucho mayor de lo originalmente previsto.
z
El tiempo de desarrollo también excedía lo proyectado.
z
La calidad del código producido era
imprevisible y en promedio baja.
La crisis del software
z
Aunque se han desarrollado técnicas para paliar estos problemas, hoy en día aún se considera normal que una aplicación rebase sus proyecciones iniciales de tiempo y dinero y que se descubran bugs (errores
informáticos) en su ejecución.
z
Esto se debe a que todavía no se aplica de un modo sistemático la ingeniería del
software durante el desarrollo.
Definición de metodología
Existen muchas definiciones sobre lo que es una metodología.
Más o menos todas ellas coinciden en que debería tener al menos las siguientes características:
z Define como se divide un proyecto en fases y las tareas a realizar en cada una.
z Para cada una de las fases está especificado cuales son las entradas que reciben y las salidas que producen.
z Tienen alguna forma de gestionar el proyecto.
z Teniendo esto en cuenta establecemos la siguiente definición:
Metodología es un modo sistemático de producir software.
Finalidad de una metodología
Atributos deseables en el producto final son:
z Adecuación: El sistema satisface las expectativas del usuario.
z Mantenibilidad: Facilidad para realizar cambios una vez que el sistema está funcionando en la empresa del cliente.
z Usabilidad: Es el grado de dificultad en aprender a manejar el sistema por parte de un usuario que no tiene por que ser
programador. Irónicamente se puede decir que este atributo es inversamente proporcional a la resistencia al cambio.
Finalidad de una metodología
z Fiabilidad: Es la capacidad de un sistema de funcionar correctamente durante un tiempo dado. La diferencia con la corrección es que aquí interesa el tiempo, es decir, no se trata del número absoluto de
defectos en el sistema sino de los que se manifiestan en un intervalo de tiempo. Interesan sobre todo:
– MTBF: Mean Time Between Failures (Tiempo medio entre fallos)
– Disponibilidad: Probabilidad de que el sistema esté funcionando en un instante dado.
z Corrección: Densidad de defectos mínima.
z Eficiencia: El sistema es capaz de realizar su tarea con el mínimo consumo de recursos necesario.
Taxonomía de las metodologías
Grupos de metodologías en función de la mentalidad con la que se aborda el
problema:
z
Metodología estructurada
z
Metodología orientada a objetos.
Metodología estructurada
Es la primera aproximación al problema. Está orientada a
procesos, es decir, se centra en especificar y descomponer la funcionalidad del sistema.
Herramientas utilizadas:
z Diagramas de flujo de datos (DFD): Representan la forma en la que los datos se mueven y se transforman. Incluye:
– Procesos
– Flujos de datos
– Almacenes de datos
z Los procesos individuales se pueden a su vez descomponer en otros DFD de nivel superior.
Metodología estructurada
z
Especificaciones de procesos: Es lo que se escribe para uno de los procesos
definidos en el DFD cuando no se puede descomponer más. Puede hacerse en
pseudocódigo, con tablas de decisión o en un lenguaje de programación.
z
Diccionario de datos: Son los nombres de todos los tipos de datos y almacenes de
datos junto con sus definiciones.
Metodología estructurada
z
Diagramas de transición de estados:
Modelan procesos que dependen del tiempo
z
Diagramas entidad-relación: Los
elementos del modelo E/R se corresponden
con almacenes de datos en el DFD. En este
diagrama se muestran las relaciones entre
dichos elementos
Metodología estructurada
z
Los lenguajes de programación también reflejan esta dicotomía que existe entre la metodologías, así existen lenguajes para la programación estructurada. Los más
famosos son: Cobol, Fortran, C, Pascal y Modula 2.
z
Metodología orientada a objetos
La orientación a objetos es la más reciente.
ventajas:
z Está basada en componentes, lo que significa que es más fácil reutilizar código hecho por terceras personas.
z Es fácil de mantener debido a que los cambios están más localizados.
z Diseño estructurado : ¿Cómo se puede dividir el sistema en partes más pequeñas que puedan ser resueltas por algoritmos sencillos y qué
información se intercambian?.
z En el diseño orientado a objetos la idea es sin embargo: ¿Cuales son los tipos de datos que hay que utilizar, que características tienen y como se relacionan?.
Metodología orientada a objetos
z
La orientación a objetos supone un paradigma distinto del tradicional (no
necesariamente mejor o peor) que supone focalizar la atención en las estructuras de datos.
z
El concepto de objetos tuvo sus orígenes en la inteligencia artificial como un modo de
representación del conocimiento.
Metodología orientada a objetos
z El primer lenguaje orientado a objetos fue Simula67,
desarrollado por Kristen Nggaard y Ole-Johan Dahl en el
centro de cálculo noruego, pero el que se considera el primer lenguaje orientado a objetos puro fue Smaltalk, donde todos los elementos del lenguaje son objetos.
z El lenguaje C++ fue una ampliación de C para que soportara objetos, resultó muy eficiente y también muy complejo.
z Java es otro lenguaje orientado a objetos derivado de C++
pero con la idea de ser más sencillo.
Objetos y clases
z
Un objeto consta de una estructura de datos y de una colección de métodos (antes
llamados procedimientos o funciones) que manipulan esos datos.
z
Los datos definidos dentro de un objeto son sus atributos. Un objeto solo puede ser
manipulado a través de su interfaz, esto es,
una colección de funciones que implementa
y que son visibles al exterior.
Objetos y clases
Las clases y objetos tienen muchas características:
z Herencia: Es una relación de generalización, cuando varias clases comparten características comunes, estas se ponen en una clase antecesora.
z Polimorfismo: Es la capacidad de un objeto de presentar varios comportamientos diferentes en función de como se utilice, por ejemplo, se pueden definir varios métodos con el mismo nombre pero diferentes argumentos.
z Durante la etapa de análisis se identifican los objetos del
dominio del problema. En el diseño se definen cuales son las características de los objetos.