lunes, 12 de diciembre de 2011

MODELO UNIFICADO

El modelo de proceso unificado.
Existen dos categorías básicas en la clasificación de sistemas:
  • Sistemas naturales.
  • Sistemas hechos por el hombre.
Es conveniente dividir los sistemas naturales en dos subcategorías básicas:
· Sistemas físicos.
· Sistemas vivientes.
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.

Los sistemas vivientes 

comprenden toda gama de animales y plantas que nos rodean, al igual que la raza humana.
En lo que respecta a los sistemas hechos por el hombre existen una gran diversidad de sistemas construidos, organizados y mantenidos por humanos, tales como: sistemas sociales, sistemas de transporte, sistemas de comunicación, Sistemas de manufactura, sistemas financieros.
En la actualidad, la mayoría de estos sistemas incluyen las computadoras pero es importante señalar que dichos sistemas existían antes de que hubiera computadoras; de hecho, algunos sistemas continúan por completo sin computarizar y podrían permanecer así durante muchas décadas más. Otros contienen a la computadora como componente, pero también incluyen uno o más componentes no computarizados (o manuales).

Los sistemas automatizados son sistemas hechos por el hombre que interactúan con o son controlados por una o más computadoras. Aunque hay diferentes tipos de sistemas automatizados, todos tienden a tener componentes en común:

•  El hardware de la computadora: 

los procesadores, los discos, terminales, impresora, unidades de cinta magnética, etcétera.

•  El software de la computadora: 

Los programas de sistemas tales como sistemas operativos, sistemas de base de datos, programas de control de telecomunicaciones, etcétera.
•  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.

•  Los datos: 

la información que el sistema recuerda

•  Los procedimientos: 

las políticas formales e instrucciones de operación del sistema.
Una 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.

Sistemas en línea 

es aquel que acepta material de entrada directamente del área donde se creo. También es sistema en el que el material de salida, o resultado de la computación, se devuelve directamente a donde es requerido.

Sistemas de tiempo real :

 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 : 

Estos sistemas computacionales 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 :

 Estos sistemas contienen grandes cantidades de diversos conocimientos que emplean en el desempeño de una tarea dada. Los sistemas expertos son una especie de sistemas basados en el conocimiento, aunque ambos términos a menudo se utilizan indistintamente.
Existen algunos principios generales que son de interés particular para quienes crean sistemas automatizados de información, e incluyen los siguientes:
  • Entre más especializado sea el sistema, menos capaz es de adaptarse a circunstancias diferentes.
  • Cuanto mayor sea el sistema mayor es el número de sus recursos que deben dedicarse a su mantenimiento diario.
  • Los sistemas siempre forman parte de sistemas mayores y siempre pueden dividirse en sistemas menores.

domingo, 4 de diciembre de 2011

EL MODELO DESARROLLO CONCURRENTE

El modelo desarrollo concurrente.

Los gestores de proyectos que siguen los pasos del estado del proyecto en lo que se refiere a las fases importantes [del ciclo de vida clásico]no tiene idea del estado de sus proyectos. Estos son ejemplos de un intento por seguir los pasos extremadamente complejos de actividades mediante modelos demasiado simples. Tenga en cuenta que aunque un proyecto [grande] esté en la fase de codificación, hay personal de ese proyecto implicado en actividades asociadas generalmente a muchas fases de desarrollo simultáneamente.

El modelo de proceso concurrente se puede sentar en forma de esquema como una serie de actividades técnicas importantes, tareas y estados asociados a ellas. Por ejemplo, la actividad de ingeniería definida para el modelo en espiral, se lleva acabo invocando las tareas siguientes: modelado de construcción de prototipos y/o análisis, especificación de requisitos y diseño.

MODELO DE ESPIRAL

El Modelo en Espiral.
El modelo espiral para la ingeniería de software ha sido desarrollado para cubrir las mejores características tanto del ciclo de vida clásico, como de la creación de prototipos, añadiendo al mismo tiempo un nuevo elemento: el análisis de riesgo. El modelo representado.

Define cuatro actividades principales:
  1. Planificación: determinación de objetivos, alternativas y restricciones.
  2. Análisis de riesgo : análisis de alternativas e identificación/resolución de riesgos.
  3. Ingeniería : desarrollo del producto del "siguiente nivel",
  4. Evaluación del cliente : Valorización de los resultados de la ingeniería.

Modelo Espiral

Durante la primera vuelta alrededor de la espiral se definen los objetivos, las alternativas y las restricciones, y se analizan e identifican los riesgos. Si el análisis de riesgo indica que hay una incertidumbre en los requisitos, se puede usar la creación de prototipos en el cuadrante de ingeniería para dar asistencia tanto al encargado de desarrollo como al cliente.
El cliente evalúa el trabajo de ingeniería (cuadrante de evaluación de cliente) y sugiere modificaciones. Sobre la base de los comentarios del cliente se produce la siguiente fase de planificación y de análisis de riesgo. En cada bucle alrededor de la espiral, la culminación del análisis de riesgo resulta en una decisión de "seguir o no seguir".
Con cada iteración alrededor de la espiral (comenzando en el centro y siguiendo hacia el exterior), se construyen sucesivas versiones del software, cada vez más completa y, al final, al propio sistema operacional.
El paradigma del modelo en espiral para la ingeniería de software es actualmente el enfoque más realista para el desarrollo de software y de sistemas a gran escala. Utiliza un enfoque evolutivo para la ingeniería de software, permitiendo al desarrollador y al cliente entender y reaccionar a los riesgos en cada nivel evolutivo. Utiliza la creación de prototipos como un mecanismo de reducción de riesgo, pero, lo que es más importante permite a quien lo desarrolla aplicar el enfoque de creación de prototipos en cualquier etapa de la evolución de prototipos.

EL MODELO INCREMENTAL.

El modelo incremental.
Cambian los elementos del modo lineal secuencial (aplicados repetidamente) con la filosofía interactiva de construcción de prototipos.
El modelo incremental aplica secuencias lineales de forma escalonada mientras progresa el tiempo en el calendario. Cada secuencia lineal produce un incremento del software.
Por ejemplo, el software de tratamiento de textos desarrollando con el paradigma i8ncremental podría extraer funciones de gestión de archivos básicos y de produccion de documentos en el primer incremento; funciones de edición más sofisticadas y de produccion de documentos en el segundo incremento; corrección ortográfica y gramatical en tercero; y una función avanzada de esquema de pagina en el cuarto. Se deberían tener en cuenta que el flujo del proceso de cualquier incremento puede incorporar el paradigma de construcción de prototipos.
Cuando se utiliza un modelo incremental el primer incremento es un producto esencial. Es decir se afrontan requisitos básicos pero muchas funciones suplementarias (algunas conocidas otras no). Como un resultado de utilización y/o de evaluación, se desarrolla un plan para el incremento.
El plan afronta la modificación del producto central a fin de cumplir mejor las necesidades del cliente y la entrega de funciones, y características adicionales. Este proceso se repite siguiendo la entrega de cada incremento, hasta que se elabore el producto completo.
El desarrollo incremental es particularmente útil cuando la dotación de personal no esta disponible para una implementación completa en la fecha limitada que se haya establecido para el proyecto.

MODELOS DE PROCESOS EVOLUTIVOS

Se reconoce que el software, al igual que todos los sistemas complejos, evoluciona con el tiempo.

Los requisitos de gestión y de productos a menudo cambian conforme a que el desarrollo proceda haciendo que el cambian conforme a que el desarrollo proceda haciendo que el camino que lleva al producto final no sea real; las estrictas fechas tope del mercado hacen que sea imposible finalizar un producto completo, por lo que se debe introducir una versión limitada para cumplir la presión competitiva y de gestión; se comprende perfectamente el conjunto de requisitos de productos centrales o del sistema, pero todavía se tiene que definir los detalles de extensiones del producto o sistema.


El modelo Lineal secuencial se diseña para el desarrollo en línea recta. En escénica, este enfoque en cascada asume que se va entregar un sistema completo una vez que la secuencia lineal se haya finalizado.

El modelo de construcción de prototipos se diseña para ayudar al cliente (o al que desarrolla) a comprender los requisitos. En general, no se diseña parta entregar un sistema de producción. En ninguno de los paradigmas de ingeniería del software se tiene en cuenta la naturaleza evolutiva del software.
Los modelos evolutivos son interactivos. Se caracterizan por la forma en que permiten los ingenieros del software desarrollar versiones cada vez más completas del software.


jueves, 1 de diciembre de 2011

MODELO DE PROTOTIPOS

Este modelo también denominado modelo de desarrollo evolutivo



Los modelos evolutivos son iterativos; los caracteriza la forma en que permiten que los ingenieros de software desarrollen versiones cada vez más completas del software.

El diseño rápido se basa en una representación de aquellos aspectos del software que serán visibles para el cliente o el usuario final (por ejemplo, la configuración de la interfaz con el usuario y el formato de los despliegues de salida). El diseño rápido conduce a la construcción de un prototipo, el cual es evaluado por el cliente o el usuario para una retroalimentación; gracias a ésta se refinan los requisitos del software que se desarrollará. La iteración ocurre cuando el prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo el desarrollador entienda mejor lo que se debe hacer y el cliente vea resultados a corto plazo.

CONSTRUCCION DE PROTOTIPOS

A menudo un cliente define un conjunto de objetivos generales para el software, pero no identifica los requisitos detallados de entrada, procesamiento o salida. El responsable del desarrollo del software está inseguro de la eficacia de un algoritmo, de la adaptabilidad de un sistema operativo o de la forma que debería tomar la interacción humana – máquina, entonces en este caso cuando utilizamos la construcción de prototipos.

 El paradigma de construcción de prototipos se inicia con la comunicación. El ingeniero de software y el cliente encuentran y definen los objetivos globales para el software, identifican los requisitos conocidos y las áreas del esquema en donde es necesaria más definición. Entonces se plantea con rapidez una iteración de construcción de prototipos y se presenta el modelado (en la forma de un diseño rápido). El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles para el usuario final. El diseño rápido conduce a la construcción de un prototipo. Después, el prototipo lo evalúa el usuario y con la retroalimentación se refinan los requisitos del software que se desarrollará. La iteración ocurre cuando el prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo se desarrollador entienda mejor lo que se debe hacer.

VENTAJAS:

Ø      No modifica el flujo del ciclo de vida.
Ø      Reduce el riesgo de construir productos que no satisfagan las necesidades de los usuarios.
Ø      Reduce costos y aumenta la probabilidad de éxito.
Ø      Exige disponer de las herramientas adecuadas.
Ø      No presenta calidad ni robustez.
Ø      Una vez identificados todos los requisitos mediante el prototipo, se construye el producto de ingeniería.

DESVENTAJAS

A los usuarios les gusta el sistema real y a los desarrolladores les gusta construir algo de inmediato. Sin embargo, la construcción de prototipos se torna problemática por las siguientes razones:
Ø      El cliente ve funcionando lo que para el es la primera versión del prototipo que ha sido construido con “chicle y cable para embalaje”, y puede decepcionarse al indicarle que el sistema aun no ha sido construido.
Ø      El desarrollador puede caer en la tentación de aumentar el prototipo para construir el sistema final sin tener en cuenta los obligaciones de calidad y de mantenimiento que tiene con el cliente.

MODELOS DE CASCADA O CICLO DE VIDA.

En Ingeniería de software el desarrollo en cascada, también llamado modelo en cascada, es el enfoque metodológico que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la etapa anterior.

Un ejemplo de una metodología de desarrollo en cascada es:
  • Análisis de requisitos
  • Diseño del Sistema
  • Diseño del Programa
  • Codificación
  • Pruebas
  • Implantación
  • Mantenimiento 
De esta forma, cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costes del desarrollo. La palabra cascada sugiere, mediante la metáfora de la fuerza de la gravedad, el esfuerzo necesario para introducir un cambio en las fases más avanzadas de un proyecto.

FASES DEL MODELO.
ANÁLISIS DE REQUISITOS:


En esta fase se analizan las necesidades de los usuarios finales del software para determinar qué objetivos debe cubrir. De esta fase surge una memoria llamada SRD (documento de especificación de requisitos), que contiene la especificación completa de lo que debe hacer el sistema sin entrar en detalles internos.
Es importante señalar que en esta etapa se debe consensuar todo lo que se requiere del sistema y será aquello lo que seguirá en las siguientes etapas, no pudiéndose requerir nuevos resultados a mitad del proceso de elaboración del software.

Diseño del Sistema


Se descompone y organiza el sistema en elementos que puedan elaborarse por separado, aprovechando las ventajas del desarrollo en equipo. Como resultado surge el SDD (Documento de Diseño del Software), que contiene la descripción de la estructura relacional global del sistema y la especificación de lo que debe hacer cada una de sus partes, así como la manera en que se combinan unas con otras.
Es conveniente distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El primero de ellos tiene como objetivo definir la estructura de la solución (una vez que la fase de análisis ha descrito el problema) identificando grandes módulos (conjuntos de funciones que van a estar asociadas) y sus relaciones. Con ello se define la arquitectura de la solución elegida. El segundo define los algoritmos empleados y la organización del código para comenzar la implementación.

Diseño del Programa

Es la fase en donde se realizan los algoritmos necesarios para el cumplimiento de los requerimientos del usuario así como también los análisis necesarios para saber que herramientas usar en la etapa de Codificación.

Codificación

Es la fase en donde se implementa el código fuente, haciendo uso de prototipos así como de pruebas y ensayos para corregir errores.

Dependiendo del lenguaje de programación y su versión se crean las bibliotecas y componentes reutilizables dentro del mismo proyecto para hacer que la programación sea un proceso mucho más rápido.

Pruebas

Los elementos, ya programados, se ensamblan para componer el sistema y se comprueba que funciona correctamente y que cumple con los requisitos, antes de ser entregado al usuario final.

Verificación

Es la fase en donde el usuario final ejecuta el sistema, para ello el o los programadores ya realizaron exhaustivas pruebas para comprobar que el sistema no falle.

Mantenimiento

Una de las etapas mas criticas, ya que se destina un 75% de los recursos, es el mantenimiento del Software ya que al utilizarlo como usuario final puede ser que no cumpla con todas nuestras expectativas.

DESVENTAJAS
Un proyecto rara vez sigue una secuencia lineal, esto crea una mala implementación del modelo, lo cual hace que lo lleve al fracaso.
El proceso de creación del software tarda mucho tiempo ya que debe pasar por el proceso de prueba y hasta que el software no esté completo no se opera. Esto es la base para que funcione bien.
Cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costos del desarrollo.



MODELOS DE SOFTWARE

Concepto de Modelo

Puede considerarse que los campos de la ingeniería desarrollan sus aplicaciones basados en modelos, al igual que muchas acciones de la vida diaria. Los modelos se usan para explicar y controlar fenómenos a nuestro alrededor y pueden predecir eventos que están por ocurrir.

Se define un modelo como un ente que representa de forma precisa algo que será realizado o que ya existe. Para los efectos de simulación de sistemas, se considera un modelo a una descripción matemática de un sistema físico que puede obtenerse a partir de la evaluación de su conducta basado en mediciones estimadas, observadas o realizadas directamente sobre el sistema que se pretende modelar. 

Concepto de Software.

El software es un ingrediente indispensable para el funcionamiento del computador. Está formado por una serie de instrucciones y datos, que permiten aprovechar todos los recursos que el computador tiene, de manera que pueda resolver gran cantidad de problemas. Un computador en si, es sólo un conglomerado de componentes electrónicos; el software le da vida al computador, haciendo que sus componentes funcionen de forma ordenada.
El software es un conjunto de instrucciones detalladas que controlan la operación de un sistema computacional.

Funciones del software:
  • Administrar los recursos de computacionales
  • Proporcionar las herramientas para optimizar estos recursos.
  • Actuar como intermediario entre el usuario y la información almacenada.

Programas de Software

Programa: conjunto de argumentos o instrucciones para la computadora, almacenado en la memoria primaria de la computadora junto con los datos requeridos para ser ejecutado, en otras palabras hacer que las instrucciones sean realizadas por la computadora.

Tipos de Software
  • Software del sistema: Es un conjunto de programas que administran los recursos de la computadora. Ejemplos: Unidad central de proceso, dispositivos de comunicaciones y dispositivos periféricos, el software del sistema administra y controla al acceso del hardware.
 
  • Software de aplicaciones: Programas que son escritos para o por los usuarios para realizar una tarea especifica en la computadora. Ejemplo: software para procesar un texto, para generar una hoja de calculo, el software de aplicación debe estar sobre el software del sistema para poder operar.
 
  • Software de usuario final: Es el software que permiten el desarrollo de algunas aplicaciones directamente por los usuarios finales, el software del usuario final con frecuencia tiene que trabajar a través del software de aplicación y finalmente a través del software del sistema

miércoles, 16 de noviembre de 2011

MITOS DE SOFTWARE
Los mitos del software

Creencias acerca del software y de los procesos empleados para construirlo- se pueden rastrear hasta los primeros días de la computación. Los mitos tienen ciertos atributos que los convierten en insidiosos.
Mitos de la administración
Los gestores con responsabilidad sobre el software, como los gestores en la mayoría de las disciplinas, están normalmente bajo la presión de cumplir las propuestas, hacer que no se retrase el proyecto y mejorar la calidad. Un gestor de software se agarra frecuentemente a un mito del software.
Mito:
 Si se falla en la planificación, se puede añadir mas programadores y adelantar el tiempo perdido.
Mitos del cliente
En muchos casos, el cliente cree en los mitos que existen sobre el software, debido a que los gestores y desarrolladores de software hacen muy poco para corregir la mala información. Los mitos conducen a que el cliente se cree una falsa expectativa y, finalmente, quede insatisfecho con el desarrollador del software.
Mito:
Si los requisitos del proyecto cambian continuamente, los cambios pueden acomodarse fácilmente, ya que el software es flexible.
Mitos de los desarrolladores
Los mitos en los que aun creen muchos desarrolladores se han ido fomentando durante 50 años de cultura informática. Durante los primeros días del desarrollo del software, la programación se veía como un arte. Las viejas formas y actitudes tardan en morir.
Mito:
 Una vez que escribimos el programa y hacemos que funcione, nuestro trabajo ha terminado.
Enfoque de la Ingeniería de software dentro de la informática
Es el área de la ingeniería que ofrece métodos y técnicas para desarrollar y mantener software.
Esta ingeniería trata con áreas muy diversas de la informática y de las ciencias de la computación, tales como construcción de compiladores, sistemas operativos, o desarrollos Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a infinidad de áreas: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, etc.
Se dice también que es la profesión que consiste en la aplicación de los fundamentos de la ciencia de la computación, la electrónica y la ingeniería de software, para el desarrollo de soluciones integrales de cómputo
La ingeniería informática es la profesión que consiste en la aplicación de los fundamentos de la ciencia de la computación, la electrónica y la ingeniería de software, para el desarrollo de soluciones integrales de cómputo y comunicaciones, capaces de procesar información de manera automática.
Por lo que se refiere al soporte físico, la ingeniería informática se fundamenta en la tecnología electrónica, lo que le permite a los ordenadores interactuar con sistemas físicos, así como desarrollar interfaces de comunicación y control entre el ordenador y diversos dispositivos mecánicos y eléctricos, tales como sistemas de adquisición de datos, instrumentación virtual, control de robots, sistemas de iluminación, etc.
En el aspecto lógico y formal, la ingeniería informática se fundamenta en la teoría de autómatas, los lenguajes formales, la teoría de la información, el diseño de algoritmos, el reconocimiento de patrones, la inteligencia artificial y la ingeniería del conocimiento.
La informática es la disciplina que estudia el tratamiento automático de la información utilizando dispositivos electrónicos y sistemas computacionales. También es definida como el procesamiento de la información en forma automática. Para esto los sistemas informáticos deben realizar las siguientes tres tareas básicas:
Entrada: Captación de la información digital.
• Proceso: Tratamiento de la información.
• Salida: Transmisión de resultados binarios.
en el software se necesita un avance en:
    *Complejidad
    *Capacidad de diseño
    *Flexibilidad
    *Rapidez de desarrollo
    *Facilidad de modificación
    *Confiabilidad

TENDENCIAS DE LA INGENIERIA DE SOFTWARE
INTRODUCCIÓN
Una de las preocupaciones actuales más urgentes de la industria del software es crear sistemas confiables y de mayor calidad con menor inversión de tiempo y costo, que resuelvan problemas cada vez más complejos. Es preciso utilizar técnicas avanzadas de la ingeniería de software que ayuden a aliviar el esfuerzo en las diferentes etapas del ciclo de vida.

La Tecnologia Orientada a Objetos ha demostrado ser una excelente herramienta para resolver problemas de gran envergadura y complejidad, permitiendo obtener sistemas interoperables, modulares, evolutivos y con alto índice de reusabilidad. La reutilización conduce a un desarrollo más rápido y programas de mejor calidad.
Las técnicas orientadas a objetos combinadas con otras herramientas como las CASE (ingeniería de software asistida por coputadora), programación visual, generadores de código, metodologías basadas en depositos, bases de datos, bibliotecas de clases que maximicen la reutilización, tecnología cliente servidor, etc.; pueden proporcionar la magnitud de cambio necesario para lograr ese salto anteriormente mencionado.
En este capítulo se describen los principales factores que determinan la calidad del software y se introducen los principios y conceptos y conceptos básicos en que se basa para producir software de alta calidad y confiabilidad
Ingeniería de software es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener software de calidad.