lunes, 12 de mayo de 2014

Proceso de Desarrollo de Software

FUNDAMENTOS DEL ENFOQUE ORIENTADO A OBJETOS.

Enfoque y Diseño Orientado a Objetos (ADOO)

Es un método de Enfoque que examina los requerimientos desde la perspectiva de clase y objetos encontrada en el vocabulario original del problema. Se fundamenta en un conjunto de cinco principios básicos:
— • Modelar el dominio de la información.
— • Describir la función del módulo.
— • Representar el comportamiento del modelo.
— • Dividir el modelo para mostrar más detalles.
En este tipo de análisis los modelos iniciales representan la esencia del problema, mientras que los últimos aportan detalles de la implementación.

  • Características, Aplicabilidad.

Características del Enfoque Orientado a Objetos
— • Identidad: Los datos están cuantificados en entidades discretas y distinguibles denominadas objetos. Estos pueden ser tangibles o intangibles. 
— • Clasificación: Los objetos con la misma estructura de datos (atributos) y comportamiento (operaciones) se agrupan para formar una misma clase, se dice que cada objeto es una instancia de su propia clase, y una clase es una abstracción que describe propiedades importantes para una aplicación y se olvida del resto. 
— • Polimorfismo: Significa que una misma operación puede comportarse de modos distintos en distintas clases, una operación es una acción o transformación que se aplica a un objeto.
— • Herencia: Comparte atributos y operaciones entre clases tomando como base una relación jerárquica, es decir que se puede definir una clase que después producirá subclases, sabiendo que todas las subclases adquirirán todas y cada una de las propiedades de su super-clase y le agrega además sus propiedades exclusivas.

  • Aplicaciones Orientadas a Objetos.

A lo largo de la historia de la programación, los lenguajes y las metodologías han pasado de una relativa simplicidad a una complejidad creciente. Los lenguajes de programación orientados a objetos pretenden aportar simplicidad a la tarea de programación de grandes aplicaciones.

Cuando se crearon las primeras computadoras todavía no existían los lenguajes de programación, tal como ahora los entendemos. El lenguaje ensamblador puede considerarse como el primer lenguaje de programación propiamente dicho. Permitía al usuario un diálogo más fluido con la máquina a través de instrucciones que tenían relación directa con el conjunto de operaciones que la máquina podía realizar.

A partir de este momento empezó la evolución de los lenguajes de programación. _cada uno tenía su entorno definido y aunque en realidad todos los lenguajes son polivalentes (en teoría, con cualquiera de ellos se puede desarrollar cualquier programa de gestión o científico). Pronto apareció la especialización funcional. Así, COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el diseño de aplicaciones de gestión.; FORTRAN (Formula Translator) para el diseño de aplicaciones científicas; APL (A Programming Language) para el cálculo matemático, etc.

A medida que el software tomaba importancia, aparecieron los primeros problemas relacionados con la programación. Al tiempo que aumenta elvolumen de un programa, disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento.

En un intento de solucionar estos problemas aparecen las metodologías de programación. Una metodología es un conjunto de reglas destinadas a simplificar las tareas de diseño, estimación de costes, desarrollo y mantenimiento de un sistema informático. A menudo se ven acompañadas con unas herramientas (CASE: Computer Aided Software Engeneering) que permiten la elaboración estructurada y documentada de los sistemas informáticos.


Componentes, Tipos, Características y Reusabilidad de componentes. 

Un componente de software es un elemento de un sistema software que ofrece un conjunto de servicios, o funcionalidades, a través de interfaces definidas.

Tipos de componentes y características.
Componentes de despliegue o distribución (Deployment)
Estos componentes se usan para formar un sistema ejecutable. Un ejemplo de tal componente es la librería de enlace dinámico y los archivos ejecutables. Otros ejemplos son los componentes COM+, Enterprise Java Beans, componentes CORBA y objetos de base de datos.

Componentes de Producto de Trabajo
Estos componentes son parte del proceso de desarrollo que es esencial para el sistema. Algunos ejemplos de componentes de producto de trabajo son los archivos fuente, archivos de datos y tablas. Ellos son los archivos fuente y archivos de datos que se usan para crear los componentes de distribución como AgenteAnalizado.Java y AnalizadorDatos.txt.

Componentes de Ejecución
Estos componentes son el resultado de un sistema que se está ejecutando. Cuando un DLL es instanciado como un componente COM+, es un ejemplo de un componente de ejecución.


Características
  1. La característica fundamental de un componente es la habilidad de definir interfaces.
  2. Es una unidad ejecutable que puede ser implantada independientemente.
  3. Puede ser sujeto de composición por terceras partes, es decir, una compañía o un desarrollador puede llegar y tomar el componente y agregarlo a lo que esté haciendo, o sea haría una composición de componentes.
  4. Un componente no tiene estado.
  5. Se puede tomar a los componentes de software como una analogía a los componentes electrónicos.

Reusabilidad de componentes.
Una vez que una clase ha sido escrita, creada y depurada, se puede distribuir a otros programadores para utilizar en sus propios programas. Esta propiedad se llama reusabilidad  o reutilización. Su concepto es similar a las funciones incluidas en las bibliotecas de funciones de un lenguaje procedimental como C que se pueden incorporar en diferentes programas. En C++, el concepto de herencia proporciona una extensión o ampliación al concepto de reusabilidad.

Un programador puede considerar una clase existente y sin modificarla, añadir competencias y propiedades adicionales a ella. Esto se consigue derivando una nueva clase de una ya existente. La nueva clase  heredará  las características de la clase  antigua, pero es libre de añadir nuevas características propias.

La facilidad de reutilizar o rehusar el software existente es uno de los grandes beneficios de la POO: muchas empresas consiguen con  la reutilización de clase en nuevos proyectos la reducción de los costes de inversión en sus presupuestos de programación. Las propiedades comunes de varias clases sólo necesitan ser implementadas una vez y sólo necesitan modificarse una vez si es necesario.

Estándares en el proceso de desarrollo de software

Para promover un nivel mayor en el área de ingeniería de software tenemos un conjunto de reglas que ya han usado otros como normas a seguir para que la programación sea mas fácil y eficiente para todos.

El estándar internacional que regula el método de selección, implementación ymonitoreo del ciclo de vida del software es ISO 12207.Durante décadas se ha perseguido la meta de encontrar procesos reproducibles ypredecibles que mejoren la productividad y la calidad. Algunas de estas solucionesintentan sistematizar o formalizar la aparentemente desorganizada tarea de desarrollar software.

 Otros aplican técnicas de gestión de proyectos para la creación del software.Sin una gestión del proyecto, los proyectos de software corren el riesgo de demorarse oconsumir un presupuesto mayor que el planeado. Dada la cantidad de proyectos desoftware que no cumplen sus metas en términos de funcionalidad, costes o tiempo deentrega, una gestión de proyectos efectiva es algo que a menudo falta. Planificación.

La importante tarea a la hora de crear un producto de software es obtener losrequisitos o el análisis de los requisitos. Los clientes suelen tener una idea más bienabstracta del resultado final, pero no sobre las funciones que debería cumplir elsoftware. 

Una vez que se hayan recopilado los requisitos del cliente, se debe realizar unanálisis del ámbito del desarrollo. Este documento se conoce como especificaciónfuncional.Implementación, pruebas y documentación.La implementación es parte del proceso en el que los ingenieros de software programanel código para el proyecto.

Las pruebas de software son parte esencial del proceso de desarrollo del software. Estaparte del proceso tiene la función de detectar los errores de software lo antes posible.La documentación del diseño interno del software con el objetivo de facilitar su mejora ysu mantenimiento se realiza a lo largo del proyecto. Esto puede incluir ladocumentación de un API, tanto interior como exterior.

Despliegue y mantenimiento.

El despliegue comienza cuando el código ha sido suficientemente probado, ha sidoaprobado para su liberación y ha sido distribuido en el entorno de producción.Entrenamiento y soporte para el software es de suma importancia y algo que muchosdesarrolladores de software descuidan. Los usuarios, por naturaleza, se oponen alcambio porque conlleva una cierta inseguridad, es por ello que es fundamental instruir de forma adecuada a los futuros usuarios del software.

El mantenimiento y mejora del software de un software con problemas recientementedesplegado puede requerir más tiempo que el desarrollo inicial del software. Es posibleque haya que incorporar código que no se ajusta al diseño original con el objetivo desolucionar un problema o ampliar la funcionalidad para un cliente. Si los costes demantenimiento son muy elevados puede que sea oportuno rediseñar el sistema parapoder contener los costes de mantenimiento.


Codificar y corregir.
Este es el modelo básico utilizado en los inicios del desarrollo de software. Contiene dos pasos:
Escribir código.
Corregir problemas en el código.
Se trata de primero implementar algo de código y luego pensar acerca de requisitos, diseño, validación, y mantenimiento.
Este modelo tiene tres problemas principales:

Después de un número de correcciones, el código puede tener una muy mala estructura, hace que los arreglos sean muy costosos.

Frecuentemente, aún el software bien diseñado, no se ajusta a las necesidades del usuario,  por lo que es rechazado o su reconstrucción es muy cara.

El código es difícil de reparar por su pobre preparación para probar y modificar.

Documentación y Artefactos. 
La documentación no es más que la debilidad más frecuente en productos e instalaciones informáticos. Cabe mencionar que los actores que intervienen en el ciclo de vida del software desempeñan diversos roles. Arquitectos, diseñadores, analistas, programadores, implementadores, administradores o auditores son quienes explicitan distintos aspectos de los productos y procesos.

Un artefacto es una pieza de información que es producida o utilizada por procesos. Los artefactos son los elementos son los elementos tangibles de un proyecto, elementos que el proyecto produce o usa mientras se trabaja en busca del producto final. Éstos, pueden tomar varias formas y formatos, como por ejemplo:

Un documento, tal como la visión o la lista de riesgos.
Un modelo, por ejemplo un diagrama de casos de uso o el modelo de diseño.
Un elemento dentro de un modelo, tal como una clase, un caso de uso o un subsistema.
Ejecutables, por ejemplo el ejecutable del prototipo.
Código fuente.

Las actividades tienen artefactos como entrada y salida. Los roles usan artefactos para ejecutar actividades y producen artefactos durante la ejecución de sus actividades. Los artefactos son la responsabilidad sencilla del rol, creando responsabilidades fáciles de identificar y entender, promoviendo la idea de que cada pieza de información producida en un proceso de desarrollo requiere un conjunto apropiado de habilidades. Aunque un rol puede ser el propietario de un artefacto, otros roles pueden hacer uso de éste, incluso podrían actualizar el artefacto si el rol que va a hacerlo, tiene permiso para hacerlo.

En RUP se encuentran conjuntos de artefactos que agrupan artefactos relacionados con el modelo de negocio, los requerimientos, el análisis y diseño, la implementación, las pruebas, la configuración y administración de cambios, el ambiente de desarrollo, entre otros.

Metodologías empleadas
La metodología de desarrollo de software orientada a objetos es cada día más usada, pues permite desarrollar software fácilmente extensible y reusable. Esto último es sólo posible si los desarrolladores conocen muy bien los fundamentos que esté basada esta metodología. Por eso, este curso revisa los conceptos más importantes que se encuentran en las distintas etapas del desarrollo de software orientado a objetos.


PROCESO UNIFICADO DE DESARROLLO (UP DEL INGLÉS UNIFIED PROCESS). FASES  DE DESARROLLO.  DISCIPLINAS.

El proceso unificado (UP, o Unified Development Process) es una versión libre y abierta (no propietaria) del proceso iterativo e incremental de ingeniería de software propuesto por Jacobson, Booch y Rumbaugh (los “tres amigos”) en su libro El proceso unificado de desarrollo de software, publicado por Addisson-Wesley en 1999. El lenguaje para especificar y diagramar en el UP es UML, por lo cual puede apoyarse en cualquier herramienta que soporte UML.

Sus características principales son:


  1. Está dirigido por casos de uso (véase la sección sobre UML).
  2. Está centrado en la arquitectura (es decir, en una solución de conjunto.
  3. Tiene un ciclo de vida iterativo incremental (véase más adelante).

Ventajas: Su uso es libre (como decir “barra libre”, sin condiciones).
Hay excelentes textos, que explican la aplicación de este proceso paso a paso, como UML y patrones, de Craig Larman, publicado por Pearson-Prentice Hall (Segunda Edición, Madrid, 2003).

Desventaja: Es necesario “aterrizar” los conceptos, lo cual puede resultar un poco difícil para quien no tenga experiencia en el uso de procesos de ingeniería de software.

Fases de Desarrollo


Cada fase representa un ciclo de desarrollo en la vida de un producto de software.


La fase de concepción o inicio tiene por finalidad definir la visión, los objetivos y el alcance del proyecto, tanto desde el punto de vista funcional como del técnico, obteniéndose como uno de los principales resultados una lista de los casos de uso y una lista de los factores de riesgo del proyecto. El principal esfuerzo está radicado en el Modelamiento del Negocio y el Análisis de Requerimientos. Es la única fase que no necesariamente culmina con una versión ejecutable.

La fase de elaboración tiene como principal finalidad completar el análisis de los casos de uso y definir la arquitectura del sistema, además se obtiene una aplicación ejecutable que responde a los casos de uso que la comprometen. A pesar de que se desarrolla a profundidad una parte del sistema, las decisiones sobre la arquitectura se hacen sobre la base de la comprensión del sistema completo y los requerimientos (funcionales y no funcionales) identificados de acuerdo al alcance definido.

La fase de construcción está compuesta por un ciclo de varias iteraciones, en las cuales se van incorporando sucesivamente los casos de uso, de acuerdo a los factores de riesgo del proyecto. Este enfoque permite por ejemplo contar en forma temprana con versiones el sistema que satisfacen los principales casos de uso. Los cambios en los requerimientos no se incorporan hasta el inicio de la próxima iteración.

La fase de transición se inicia con una versión “beta” del sistema y culmina con el sistema en fase de producción.

INTRODUCCIÓN AL MODELADO.
El lenguaje de modelado de objetos es un conjunto estandarizado de símbolos y de modos de disponerlos para modelar (parte de) un diseño de software orientado a objetos.
Características de los lenguajes de modelado. 
1. UML debe entenderse como:
- Un estándar para modelado de sistemas.
- No es un estándar para procesos de software.
- Debe aplicarse en el contexto de un proceso de software.

2. Es una notación, no es un proceso.

3. Establecido como estándar para documentar el proceso de ingeniería de software.

4. Combina lo mejor del modelado de procesos, objetos, datos y componentes.

UML se puede usar para modelar distintos tipos de sistemas: sistemas de software, sistemas de hardware,
y organizaciones del mundo real. UML ofrece nueve diagramas en los cuales modelar sistemas.

• Diagramas de Casos de Uso para modelar los procesos ’business’.
• Diagramas de Secuencia para modelar el paso de mensajes entre objetos.
• Diagramas de Colaboración para modelar interacciones entre objetos.
• Diagramas de Estado para modelar el comportamiento de los objetos en el sistema.
• Diagramas de Actividad para modelar el comportamiento de los Casos de Uso, objetos u operaciones.
• Diagramas de Clases para modelar la estructura estática de las clases en el sistema.
• Diagramas de Objetos para modelar la estructura estática de los objetos en el sistema.
• Diagramas de Componentes para modelar componentes.
• Diagramas de Implementación para modelar la distribución del sistema.


Diagramas, Símbolos y Notación.
Una de la metas principales de UML es avanzar en el estado de la integración institucional proporcionando herramientas de interoperabilidad para el modelado visual de objetos. Sin embargo para lograr un intercambio exitoso de modelos de información entre herramientas, se requirió definir a UML una semántica y una notación.

La notación es la parte gráfica que se ve en los modelos y representa la sintaxis del lenguaje de modelado. Por ejemplo, la notación del diagrama de clases define como se representan los elementos y conceptos como son: una clase, una asociación y una multiplicidad. ¿Y qué significa exactamente una asociación o multiplicidad en una clase?. Un metamodelo es la manera de definir esto (un diagrama, usualmente de clases, que define la notación).

Para que un proveedor diga que cumple con UML debe cubrir con la semántica y con la notación.

Una herramienta de UML debe mantener la consistencia entre los diagramas en un mismo modelo. Bajo esta definición una herramienta que solo dibuje, no puede cumplir con la notación de UML.

El lenguaje está dotado de múltiples herramientas para lograr la especificación determinante del modelo, pero en nuestro caso se trabaja en forma simplificada sobre:

Modelamiento de Clases (forman la vista lógica.)
Casos de Uso
Diagrama de Interacción (constituyen la vista de proceso.)
Diagrama_Insumo


La vista de desarrollo captura el software en su entorno de desarrollo.

 Los diagramas de despliegue integran la vista física .

Los escenarios: el modelo de casos de uso.

Herramientas CASE

Herramienta CASE según ...
Henry David Crockett (Portland State University), "Las herramientas CASE se ven simplemente como herramientas que cualquiera puede escoger y utilizar (como un martillo) para desarrollar un sistema de información, su selección e implementación casi siempre llevará a una reducida productividad y calidad. La selección e implementación de herramientas CASE son un proceso de múltiples etapas que permite errores fatales en cada etapa. Uno de los errores más comunes es escoger una herramienta CASE que apoye un método desconocido para los diseñadores".

Alan Chimura (CASE Associates), "Las herramientas CASE incluyen manejadores, métodos, técnicas, disciplina, e instrucciones, todos trabajando juntos. Definir CASE menos ampliamente y presentarlo sin un suficiente entorno de apoyo es un acto de negligencia".
Las herramientas CASE abarcan cada etapa del proceso de ingeniería y cada actividad que se desarrolla a lo largo del mismo. CASE está formado por un conjunto de bloques que comienzan en el nivel del hardware y del sistema operativo y acaban en cada una de las herramientas.

CASE se refiere a herramientas para el desarrollo de sistemas que constan de cinco componentes: herramientas de diagramación, depósito de información, generadores de interfaces, generadores de código y herramientas de administración. Las herramientas CASE hacen hincapié en las actividades de alto nivel, aunque el objetivo a largo plazo es abarcar las actividades de análisis, diseño y desarrollo.

En resumen, las herramientas CASE son un complemento de la caja de herramientas del ingeniero del software. CASE proporciona al ingeniero la posibilidad de automatizar actividades manuales y de mejorar su visión general de la ingeniería. Al igual que las herramientas de ingeniería y de diseño asistidos por computadora que utilizan los ingenieros de otras disciplinas. Las herramientas CASE ayudan a asegurar la calidad de un producto desde su diseño antes de construirlo.

Bloques básicos de CASE
La ingeniería del software asistida por computadora puede ser tan sencilla como una única herramienta que preste su apoyo para una única actividad de ingeniería del software, o bien puede ser tan compleja como todo un entorno que abarque herramientas, una base de datos, personas, hardware, una red, sistemas operativos, estándares, y otros muchos componentes más.

Los bloques de construcción de CASE
Cada bloque de construcción forma un fundamento para el siguiente, estando las herramientas situadas en la parte superior de la estructura de los niveles de Hardware y Software. Es interesante tener en cuenta que el fundamento de los entornos CASE efectivos tiene relativamente poco que ver con las herramientas de ingeniería del software en sí. Más bien, los entornos que tienen éxito para la ingeniería del software se construyen basándose en una arquitectura de entorno que abarca un hardware y un sistema software adecuado. Además, la arquitectura del entorno debe considerar patrones de trabajo humano que se aplican durante el proceso de ingeniería de software. La arquitectura del entorno debe de considerar los patrones de trabajo humano que se aplicaran durante el proceso de ingeniería del software. Las arquitecturas del entorno constan de una plataforma hardware y de un apoyo de sistema operativo (incluyendo el software de red y de gestión de la base de datos), constituyen los fundamentos de CASE. Aunque su entorno en si requiere de otros bloques de construcción, existe un conjunto de servicios de portabilidad que proporciona un puente entre las herramientas CASE y su marco de referencia de integración y la arquitectura del entorno.

El marco de referencia de integración es una colección de programas más especializados que capacitan a las herramientas CASE individuales para comunicarse entre sí, para crear una base de datos del proyecto, y para mostrar el mismo aspecto al usuario final (el ingeniero del software). Los servicios de portabilidad permiten que las herramientas CASE y su marco de referencia de integración, migren entre distintas plataformas del hardware y sistemas operativos sin un mantenimiento adaptativo que resulte significativo.

Los bloques de construcción representan un fundamento exhaustivo para la integración de herramientas CASE. Sin embargo, la mayor parte de las herramientas CASE utilizados actualmente no han sido construidas empleando todos los bloques de construcción que antes descritos. De hecho, algunas herramientas CASE siguen siendo soluciones puntuales. Esto es, se utiliza una herramienta para que preste apoyo en una actividad de ingeniería del software concreta (p. ej.: análisis y modelado), pero esta herramienta no se comunica directamente con otras. Es decir, no esta unida a una base de datos del proyecto y no forma parte de un entorno integrado CASE (I-CASE), aún cuando no es lo ideal, se puede utilizar una herramienta CASE lo suficientemente eficiente, aunque se trate de una solución puntual.
Ciclo de vida del desarrollo de un sistema con las herramientas CASE y los métodos tradicionales.

Utilizar herramientas CASE para el desarrollo de un sistema tiene una ligera ventaja sobre los sistemas tradicionales (ver Figuras a y b), y entre los beneficios ofrecidos por la tecnología CASE se encuentran los siguientes:
  1. Facilidad para llevar a cabo la tarea de revisión de especificaciones del sistema así como de representaciones gráficas (lo que aumenta la posibilidad de realizar la tarea).
  2. Facilidad para desarrollar prototipos de sistemas por medio de la capacidad para cambiar especificaciones y, por otro lado, para determinar el efecto que sobre el desempeño del sistema tendrían otras alternativas.
  3. Generación de código.
  4. Soporte para mantenimiento como resultado de haber guardado las especificaciones del sistema en un depósito central de información.
  5. Aumentar las posibilidades de satisfacer los requerimientos del usuario.


Clasificación de Herramientas CASE

Aunque no es fácil y no existe una forma única de clasificarlas, las herramientas CASE se pueden clasificar teniendo en cuenta los siguientes parámetros:

1. Las plataformas que soportan.
2. Las  fases del ciclo de vida del desarrollo de sistemas que cubren.
3. La arquitectura de las aplicaciones que producen.
4. Su funcionalidad.

La clasificación basada en las fases del ciclo de desarrollo cubre:

Upper CASE (U-CASE), herramientas que ayudan en las fases de planificación, análisis de requisitos y estrategia del desarrollo, usando, entre otros diagramas UML.

Middle CASE (M-CASE), herramientas para automatizar tareas en el análisis y diseño de la aplicación.

Lower CASE (L-CASE), herramientas que semi-automatizan la generación de código, crean programas de detección de errores, soportan la depuración de programas y pruebas. Además automatizan la documentación completa de la aplicación. Aquí pueden incluirse las herramientas de Desarrollo rápido de aplicaciones.

Existen otros nombres que se le dan a este tipo de herramientas, y que no es una clasificación excluyente entre sí, ni con la anterior:

Integrated CASE (I-CASE), herramientas que engloban todo el proceso de desarrollo software, desde análisis hasta implementación.

MetaCASE, herramientas que permiten la definición de nuestra propia técnica de modelado, los elementos permitidos del metamodelo generado se guardan en un repositorio y pueden ser usados por otros analistas, es decir, es como si definiéramos nuestro propio UML, con nuestros elementos, restricciones y relaciones posibles.

CAST (Computer-Aided Software Testing), herramientas de soporte a la prueba de software.

IPSE (Integrated Programming Support Environment), herramientas que soportan todo el ciclo de vida, incluyen componentes para la gestión de proyectos y gestión de la configuración.

Por funcionalidad podríamos diferenciar algunas como:

  1. Herramientas de generación semiautomática de código.
  2. Editores UML.
  3. Herramientas de Refactorización de código.
  4. Herramientas de mantenimiento como los sistemas de control de versiones.


Ejemplos de Herramientas Case más utilizadas.

ERwin: PLATINUM ERwin es una herramienta de diseño de base de datos. Brinda productividad en diseño, generación, y mantenimiento de aplicaciones. Desde un modelo lógico de los requerimientos de información, hasta el modelo físico perfeccionado para las características específicas de la base de datos diseñada, ERwin permite visualizar la estructura, los elementos importantes, y optimizar el diseño de la base de datos. Genera automáticamente las tablas y miles de líneas de stored procedure y triggers para los principales tipos de base de datos.


EasyCASE: EasyCASE Profesional, el centro de productos para procesos, modelamiento de datos y eventos, e Ingeniería de Base de Datos, es un producto para la generación de esquemas de base de datos e ingeniería reversa, trabaja para proveer una solución comprensible para el diseño, consistencia y documentación del sistema en conjunto.

Oracle Designer: Oracle Designer es un juego de herramientas para guardar las definiciones que necesita el usuario y automatizar la construcción rápida de aplicaciones cliente/servidor flexibles y gráficas. Integrado con Oracle Developer, Oracle Designer provee una solución para desarrollar sistemas empresariales cliente/servidor de segunda generación.

PowerDesigner: PowerDesigner es una suite de aplicaciones de Powersoft para la construcción, diseño y modelado de datos a través de diversas aplicaciones. Es la herramienta para el análisis, diseño inteligente y construcción sólida de una base de datos y un desarrollo orientado a modelos de datos a nivel físico y conceptual, que dan a los desarrolladores de aplicaciones Cliente/Servidor la más firme base para aplicaciones de alto rendimiento.

System Architect: System Architect posee un repositorio único que integra todas las herramientas, y metodologías usadas. En la elaboración de los diagramas, el System Architect conecta directamente al diccionario de datos, los elementos asociados, comentarios,reglas de validaciones, normalización, etc. Posee control automático de diagramas y datos, normalizaciones y balanceo entre diagramas "Padre e Hijo", además de balanceo horizontal, que trabaja integrado con el diccionario de datos, asegurando la compatibilidad entre el Modelo de Datos y el Modelo Funcional.

SNAP: SNAP es un CASE para el desarrollo de aplicaciones en Sistemas AS/400 de IBM. Proporciona el ambiente integral de trabajo, brindando la posibilidad de construir sistemas de inmejorable calidad, adheridos a los estándares S.A.A de IBM., totalmente documentados y ajustados a los requerimientos específicos de la organización, en una fracción del tiempo y coste del que se invertiría, si se utilizaran herramientas tradicionales.

Toad™ Data Modeler: ayuda a crear modelos de datos de alta calidad y aplicar fácilmente cambios exactos a las estructuras de datos, por una fracción del costo de muchas otras soluciones.

Con este software de modelado de datos de plataformas cruzadas, usted puede:

  1. Crear modelos de datos lógicos y físicos de alta calidad
  2. Comparar y sincronizar modelos
  3. Generar SQL/DDL complejos
  4. Crear y modificar scripts
  5. Aplicar ingeniería inversa y directa a bases de datos y sistemas de almacenamiento de datos
Microsoft Visio: es un software de dibujo vectorial para Microsoft Windows. Visio comenzó a formar parte de los productos de Microsoft cuando fue adquirida la compañía Visio en el año 2000.

Las herramientas que lo componen permiten realizar diagramas de oficinas, diagramas de bases de datos, diagramas de flujo de programas, UML, y más, que permiten iniciar al usuario en los lenguajes de programación.

El navegador Internet Explorer incluye un visor de diagramas Visio, cuya extensión es vsd, llamado Visio Viewer.


Umbrello: es una herramienta libre para crear y editar diagramas UML, que ayuda en el proceso del desarrollo de software. Fue desarrollada por Paul Hensgen, y está diseñado principalmente para KDE, aunque funciona en otros entornos de escritorio.

Umbrello maneja gran parte de los diagramas estándar UML pudiendo crearlos, además de manualmente, importándolos a partir de código en C++, Java, Python, IDL, Pascal/Delphi, Ada, o también Perl (haciendo uso de una aplicación externa). Así mismo, permite crear un diagrama y generar el código automáticamente en los lenguajes antes citados, entre otros. El formato de fichero que utiliza está basado en XMI.

StarUML: StarUML es una herramienta de programación escrita en código abierto y de distribución libre que genera los diagramas UML para tus aplicaciones o páginas Web. Puede generar todo tipo de diagramas compatibles con la plataforma de programas Microsoft Office. StarUML se maneja con facilidad. En un vistazo a la interfaz se ven las funciones principales del programa. Otra característica importante del programa es que su código es compatible con C++ y Java. 


sábado, 26 de abril de 2014

Visión general del Proceso de desarrollo de software.

El papel del usuario dentro del proceso de desarrollo de software. 
El rol que el usuario desempeña dentro del desarrollo de un Sistema de Información es de suma importancia, ya que los sistemas se construyen para satisfacer las necesidades particulares del usuario, en función de los objetivos estratégicos de la organización y ninguna otra persona, incluyendo al analista del sistema, conoce mejor que el usuario mismo, sus propios requerimientos; razón por la cual se dice que el usuario es el “Dueño del Sistema”. Sin embargo, éste no es su único papel, ya que existen una serie de funciones que el usuario debe asumir durante todo el desarrollo del proyecto, las cuales van exigiendo una determinada categorización del usuario de acuerdo a la responsabilidad que tendrá dentro del proyecto.


Responsabilidad ética y profesional en Ingeniería del software. 
La ingeniería del software se lleva a cabo dentro de un marco legal y social que limita la libertad de los ingenieros. Los ISW deben aceptar que su trabajo comprende responsabilidades más amplias que simplemente la aplicación de habilidades técnicas. Deben comportarse de una forma ética y moral responsable, no basta con poseer estándares normales de honestidad e integridad. No debería utilizar su capacidad y sus habilidades para comportarse de forma deshonesta o de forma que deshonre la profesión de la ingeniería del software.

Existen áreas donde los estándares de comportamiento aceptable no están acotados por las leyes, sino por la responsabilidad profesional, algunas de estas son:

  1. Confidencialidad. Respetar la confidencialidad de sus empleadores o clientes, independientemente de que se haya firmado un acuerdo formal de confidencialidad.
  2. Competencia. No debe falsificar su nivel de competencia, ni aceptar conscientemente trabajos que están fuera de su capacidad.
  3. Derechos de propiedad intelectual. Debe ser consciente de las leyes locales que gobiernan el uso de la propiedad intelectual, como las patentes el el copyright. Debe asegurarse de que la propiedad intelectual de los empleadores y clientes está protegida.

Uso inapropiado de las computadoras. No debe emplear sus habilidades técnicas para utilizar de forma inapropiada las computadoras de otras personas. Desde los relativamente triviales (utilizar juegos en las maquina de un empleado, por ejemplo) hasta los extremadamente serios (difusión de virus).

Ciclo de vida del software. 
Al igual que en otros sistemas de ingeniería, los sistemas de software requieren un tiempo y esfuerzo considerable para su desarrollo y deben permanecer en uso por un periodo mucho mayor. Durante este tiempo de desarrollo y uso, desde que se detecta la necesidad de construir un sistema de software hasta que este es retirado, se identifican varias etapas que en conjunto se denominan el ciclo de vida del software y en cada caso, en función de cuales sean las características del proyecto, se configurará el ciclo de vida de forma diferente. Usualmente se consideran las etapas: especificación y análisis de requisitos, diseño del sistema, implementación del software, aplicación y pruebas, entrega y mantenimiento. Un aspecto esencial dentro de las tareas del desarrollo del software es la documentación de todos los elementos y especificaciones en cada fase. Dado que esta tarea siempre estará influida por la fase del desarrollo en curso, se explicará de forma distribuida a lo largo de las diferentes fases como un apartado especial para recalcar su importancia en el conjunto del desarrollo del software.
Tal como ya hemos mencionado, las etapas principales a realizar en cualquier ciclo de vida son:

  1. Análisis: Construye un modelo de los requisitos
  2. Diseño: A partir del modelo de análisis se deducen las estructuras de datos, la estructura en la que descompone el sistema y la interfaz de usuario.
  3. Codificación: Construye el sistema. La salida de esta fase es código ejecutable.
  4. Pruebas: Se comprueba que se cumplen criterios de corrección y calidad.
  5. Validación: es el proceso de comprobar que lo que se ha especificado es lo que el usuario realmente quería.
  6. Mantenimiento: En esta fase, que tiene lugar después de la entrega se asegura que el sistema siga funcionando y adaptándose a nuevos requisitos.


Principios, modelos, métodos, metodologías técnicas, actividades y herramientas en el proceso de desarrollo de software.
MÉTODOS  EN EL PROCESO DE DESARROLLO DE UN SOFTWARE
Los métodos formales son soluciones matemáticas para resolver problemas de software y hardware a nivel de requisitos, especificación y diseño. Ejemplos de métodos formales incluyen el Método B, la red de Petri, la demostración automática de teoremas, RAISE y el VDM. Hay varias notaciones de especificaciones formales, tales como el lenguaje Z. Más generalmente, se puede utilizar la teoría de autómatas para aumentar y validar el comportamiento de la aplicación diseñando un sistema de autómata finito.
Las metodologías basadas en los autómatas finitos permiten especificación de software ejecutable y evitar la creación convencional de código.
Los métodos formales se suelen aplicar en software de aviación, especialmente si es software de seguridad crítico. Los estándares de aseguramiento del software de seguridad, tales como DO178B demandan métodos formales en el nivel más alto de categorización (Nivel A).
La formalización del desarrollo de software está ganando en fuerza poco a poco, en otros ámbitos, con la aplicación del lenguaje de especificación OCL2.0 (y especializaciones tales como Java Modeling Language) y particularmente con Model-driven Architecture, que permite la ejecución de diseños, incluso especificaciones.

Otra tendencia que está surgiendo en el desarrollo de software es la redacción de especificaciones en algún tipo de lógica (normalmente una variación de FOL), para acto seguido ejecutar esa lógica como si se tratase de un programa. El lenguaje OWL, basado en lógica descriptiva, es un buen ejemplo. También se está trabajando en enlazar un idioma natural de forma automática con lógica, lógica que puede ejecutarse. Ejemplo en este campo es el Attempto Controlled English, una lógica de negocios de Internet, que no busca controlar el vocabulario o la sintaxis. Una características de los sistemas que apoyan el vínculo bidireccional inglés-lógica y ejecución directa de la lógica es que pueden explicar sus resultados en inglés en un nivel de negocios o científico.

METODOLOGÍAS PARA EL DESARROLLO DEL SOFTWARE
Un proceso de software detallado y completo suele denominarse “Metodología”. Las metodologías se basan en una combinación de los modelos de proceso genéricos (cascada, evolutivo, incremental, etc.). Adicionalmente una metodología debería definir con precisión los artefactos, roles y actividades involucrados, junto con prácticas y técnicas recomendadas, guías de adaptación de la metodología al proyecto, guías para uso de herramientas de apoyo, etc. Habitualmente se utiliza el término “método” para referirse a técnicas, notaciones y guías asociadas, que son aplicables a una (o algunas) actividades del proceso de desarrollo, por ejemplo, suele hablarse de métodos de análisis y/o diseño.

La comparación y/o clasificación de metodologías no es una tarea sencilla debido a la diversidad de propuestas y diferencias en el grado de detalle, información disponible y alcance de cada una de ellas. A grandes rasgos, si tomamos como criterio las notaciones utilizadas para especificar artefactos producidos en actividades de análisis y diseño, podemos clasificar las metodologías en dos grupos: Metodologías Estructuradas y Metodologías Orientadas a Objetos. Por otra parte, considerando su filosofía de desarrollo, aquellas metodologías con mayor énfasis en la planificación y control del proyecto, en especificación precisa de requisitos y modelado, reciben el apelativo de Metodologías Tradicionales (o peyorativamente denominada Metodologías Pesadas, o Peso Pesado). Otras metodologías, denominadas Metodologías Ágiles, están más orientadas a la generación de código con ciclos muy cortos de desarrollo, se dirigen a equipos de desarrollo pequeños, hacen especial hincapié en aspectos humanos asociados al trabajo en equipo e involucran activamente al cliente en el proceso.
1395293257321-images_3_.jpg
ACTIVIDADES EN EL PROCESO DEL DESARROLLO DEL SOFTWARE

Planificación.
Implementación.
Pruebas del software.
Documentación.
Entrenamiento.
Despliegue
Mantenimiento del software.

HERRAMIENTAS PARA EL DESARROLLO DE SOFTWARE

Las Herramientas de Ayuda al Desarrollo de Sistemas de Información, surgieron para intentar dar solución a los problemas inherentes a los proyectos de generación de aplicaciones informáticas: plazos y presupuestos incumplidos, insatisfacción del usuario, escasa productividad y baja calidad de los desarrollos. Algunas de estas herramientas se dirigen principalmente a mejorar la calidad, como es el caso de las herramientas CASE (Computer Aided Software Engineering-Ingeniería de Software Asistida por Ordenador). Otras van dirigidas a mejorar la productividad durante la fase de construcción, como es el caso de los lenguajes de cuarta generación (4GL-Fourth Generation Language).

Herramientas para diseñar software

• Existe al menos 20 herramientas libres para diseñar software totalmente libres.
• Todas utilizan la notación UML
• El nivel de avance entre una y otra es notable, casi todas ofrecen como funcionalidad:
Diagramas de caso de uso.
Diagramas de clases.
Diagramas de secuencia.
• Generación de código en java, c++, python y php.
• Algunas entidad-relación (pero ninguna lo suficientemente avanzada)
• Pocas herramientas permiten ingeniería reversa, y si lo hacen solo es de lenguajes tipo java o c++.
1395293286185-image001.jpg

TÉCNICAS PARA EL DESARROLLO DE SOFTWARE
 La recolección de datos es una técnicas y herramientas que pueden ser utilizadas por el analista para desarrollar los sistemas de información, los cuales pueden ser la entrevistas, la encuesta, el cuestionario, la observación, el diagrama de flujo y el diccionario de datos.

El análisis de costo-beneficio es una técnica analítica que enumera y compara el costo neto de una intervención con los beneficios que surgen como consecuencia de aplicar dicha intervención. Para esta técnica, los costos y los beneficios de la intervención se expresan en unidades monetarias.

Selección del modelo apropiado según las características de los proyectos de software

Hay varios modelos a seguir para el establecimiento de un proceso para el desarrollo de software, cada uno de los cuales describe un enfoque diferente para diferentes actividades que tienen lugar durante el proceso. Algunos autores consideran un modelo de ciclo de vida un término más general que un determinado proceso para el desarrollo de software. Por ejemplo, hay varios procesos de desarrollo de software específicos que se ajustan a un modelo de ciclo de vida de espiral.

Modelos de Desarrollo de Software
Para el desarrollo de cualquier producto de software se realizan una serie de tareas entre la idea inicial y el producto final, un modelo de desarrollo establece el orden en el que se harán las cosas en el proyecto, provee de requisitos de entrada y de salida para cada una de las actividades, por ello es necesario el modelo de desarrollo.

Dado que cada proyecto es único, no existe un modelo que se aplique al 100% a todos los proyectos de una organización. Una organización puede contar con uno o más modelos de desarrollo para ser utilizados dependiendo del tipo de proyecto.

Los modelos de desarrollo de software son una representación abstracta de una manera en particular. Realmente no representa cómo se debe desarrollar el software, sino de un enfoque común. Puede ser modificado y adaptado de acuerdo a las necesidades del software en proceso de desarrollo. 1 Hay varios modelos para perfilar el proceso de desarrollo, cada uno de las cuales cuenta con pros y contras. El proyecto debería escoger el más apropiado para sus necesidades. En ocasiones puede que una combinación de varios modelos sea apropiado. Existen tres paradigmas de los modelos de desarrollo de software:

1. Paradigma Tradicional: Es uno de los paradigmas más antiguo, se inventó durante la creación del método estructurado. Si se elige un proyecto,el método varia en etapas.2 Como todo modelo, existen sus pros y contras al usar este paradigmas:

Si se aplica este paradigma, unos de los principales problemas , es que las etapas realizadas deben ser autónoma a la que le sigue, ya que con eso se atrasaría el proyecto. Se tiene que tener pautas bien definidas, y que no se incurra a modificación porque implicaría en que el software no cumpla con su ciclo de vida. Tener en cuenta que el cliente no se vea afectado por la impaciencia. 3

2. Paradigma Orientado a Objetos: Estos modelos se basan en la Programación orientada a objetos; por lo tanto, se refiere al concepto de clase, el análisis de requisitos y el diseño. El modelo o paradigma orientado a objetos posee dos características principales, las cuales son:
  • Permite la re-utilización de software.
  • Facilita el desarrollo de herramientas informáticas de apoyo al desarrollo, el cual es simple al implementarla en una notación orientado a objetos llamado UML.4
3. Paradigma de Desarrollo Ágil: Es un paradigma de las Metodologías De Desarrollo basado en procesos ágiles. Estos intentan evitar los tediosos caminos de las metodologías tradicionales enfocándose en las personas y los resultados. Usa un enfoque basado en el Valor para construir software, colaborando con el cliente e incorporando los cambios continuamente.

La ingeniería de software tiene varios modelos o paradigmas para el desarrollo de aplicaciones.

Ejemplos:
  1. Modelo en cascada
  2. Modelo en espiral (modelo evolutivo)
  3. Modelo de prototipos
  4. Desarrollo iterativo e incremental

Cada uno de estos modelos tiene ventajas y desventajas que se deben considerar a la hora de seleccionar un modelo.

El modelo en cascada

En Ingeniería de software el desarrollo en cascada, también llamado modelo en cascada (denominado así por la posición de las fases en el desarrollo de esta, que parecen caer en cascada “por gravedad” hacia las siguientes fases), 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.1 Al final de cada etapa, el modelo está diseñado para llevar a cabo una revisión final, que se encarga de determinar si el proyecto está listo para avanzar a la siguiente fase. Este modelo fue el primero en originarse y es la base de todos los demás modelos de ciclo de vida.

La versión original fue propuesta por Winston W. Royce en 1970 y posteriormente revisada por Barry Boehm en 1980 e Ian Sommerville en 1985.2

Un ejemplo de una metodología de desarrollo en cascada es la metodología de Kendall & Kendall:
  1. Análisis de requisitos.
  2. Diseño del Sistema.
  3. Diseño del Programa.
  4. Codificación.
  5. Pruebas.
  6. Implantación.
  7. Mantenimiento.

El modelo incremental

  1. Aplica elementos del modelo en cascada aplicados en forma iterativa.
  2. Se enfoca en la entrega de un producto operacional con cada incremento.
  3. Es útil cuando no se cuenta con todo el personal necesario para desarrollar el proyecto o para habilitar líneas paralelas de desarrollo.
El modelo en espiral
El Modelo en Espiral (Ian Sommerville, 2000), es un modelo de proceso de software evolutivo donde se conjuga la naturaleza de construcción de prototipos con los aspectos controlados y sistemáticos del modelo lineal y secuencial 

El modelo de prototipos

El Modelo de prototipos, en Ingeniería de software, pertenece a los modelos de desarrollo evolutivo. El prototipo debe ser construido en poco tiempo, usando los programas adecuados y no se debe utilizar muchos recursos.

El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles para el cliente o el usuario final. Este diseño conduce a la construcción de un prototipo, el cual es evaluado por el cliente para una retroalimentación; gracias a ésta se refinan los requisitos del software que se desarrollará. La interacció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.

lunes, 21 de abril de 2014

El software.

Conceptos:
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.

Ingeniería.
1. f. Estudio y aplicación, por especialistas, de las diversas ramas de la tecnología.



Cualidades del software.

Correctitud (Correctness):
Un programa es funcionalmente correcto si se comporta de acuerdo a la especificación de las funciones (especificación de requerimientos funcionales) que debería proveer. Esta definición de correctitud asume que existe una especificación de requerimientos funcionales del sistema y que es posible determinar en forma no ambigua si las cumple o no.

 Confiabilidad (Reliability):
Informalmente el software es confiable si el usuario puede tenerle confianza. Formalmente la confiabilidad
se define en términos del comportamiento estadístico: la probabilidad de que el software opere como es
esperado en un intervalo de tiempo especificado. Contrariamente a la correctitud que es una cualidad
absoluta, la confiabilidad es relativa. Cualquier desviación de los requerimientos hace que el sistema sea
incorrecto, por otro lado, si la consecuencia de un error en el software no es seria, el software incorrecto
aún puede ser confiable.

Robustez (Robustness):
Un progama es robusto si se comporta en forma razonable aún en circunstancias que no fueron anticipadas 
en la especificación de requerimientos; por ejemplo cuando encuentra datos de entrada incorrectos o algún 
malfuncionamiento del hardware como rotura de disco. Un programa que genere un error no recuperable en 
tiempo de ejecución tan pronto como el usuario ingrese inadvertidamente un comando incorrecto no será 
robusto, aunque podría ser correcto si en la especificación de requerimientos no se establece la acción a 
tomar si se ingresa un comando incorrecto.

Performance (también Eficciency):
En la Ingeniería de Software generalmente performance equivale a eficiencia. Un sistema de software es 
eficiente si utiliza los recursos computacionales en forma económica. La performance de un sistema es 
importante porque afecta su usabilidad, por ejemplo, si es muy lento reduce la productividad de los 
usuarios, si usa demasiado espacio de disco puede ser muy caro de ejecutar, si utiliza demasiada memoria 
puede afectar al resto de las aplicaciones que se están ejecutando o ejecutarse demasiado lentamente 
mientras el sistema operativo intenta balancear el uso de la memoria por parte de las distintas aplicaciones. 

Amigabilidad (Friendliness):
Un sistema de software es amigable si un usuario humano lo encuentra fácil de utilizar. Esta definición 
refleja la naturaleza subjetiva de la amigabilidad: una aplicación utilizada por usuarios no experientes califica 
como amigable por varias propiedades distintas a las de una aplicación utilizada por programadores 
expertos, por ejemplo, los primeros apreciarían el uso de menúes mientras los segundos se sentirían más 
cómodos ingresando comandos.

Verificabilidad (Verifiability):
Un sistema de software es verificable si sus propiedades pueden ser verificadas fácilmente. Por ejemplo, la 
correctitud o la performance de un sistema son propiedades que interesa verificar. El diseño modular, 
prácticas de codificación disciplinadas, y la utilización de lenguajes de programación adecuados contribuyen 
a la verificabilidad de un sistema. La verificabilidad es en general una cualidad interna pero a veces también puede ser externa, por ejemplo, en muchas aplicaciones de seguridad crítica, el cliente requiere la verificación de ciertas propiedades.

 Mantenibilidad (Maintainability):
El término mantenimiento del software es utilizado generalmente para referirse a las modificaciones que se
realizan a un sistema de software luego de su liberación inicial, siendo visto simplemente como “corrección
de bugs”. Algunos estudios han mostrado sin embargo, que la mayor parte del tiempo utilizado en
mantenimiento es para agregarle al producto características que no estaban en las especificaciones
originales o estaban definidas incorrectamente.

 Reparabilidad (Reparability):
Un sistema de software es reparable si permite la corrección de sus defectos con una carga limitada de
trabajo. En otros campos de la ingeniería puede ser más barato cambiar un producto entero o una buena
parte del mismo que repararlo, por ejemplo televisores, y una técnica muy utilizada para lograr reparabilidad
es usar partes estándares que puedan ser cambiadas fácilmente. Sin embargo, en el software las partes no
se deterioran, y aunque el uso de partes estándares puede reducir el costo de producción del software, el
concepto de partes reemplazables pareciera no aplicar a la reparabilidad del software. Otra diferencia es que el costo del software está determinado, no por partes tangibles sino por actividades humanas de diseño.

 Evolucionabilidad (Evolvability):
Un sistema es evolucionable si acepta cambios que le permitan satisfacer nuevos requerimientos. En otros
productos de ingeniería las modificaciones van precedidas de actividades como estudios de factibilidad,
diseño asociado, aprobaciones, evaluaciones y finalmente la introducción de la modificación. En el caso del
software, en general la implementación del cambio se comienza sin realizar ningún estudio de factibilidad,
dejando únicamente el diseño original y sin documentación a posteriori, esto es sin actualizar las
especificaciones para reflejarlo, lo que hace que cambios futuros sean cada vez más difíciles de aplicar.

Reusabilidad (Reusability):
La reusabilidad es similar a la evolucionabilidad: en la segunda se modifica un producto para construir una 
nueva versión del mismo producto, en la primera se utiliza un producto, posiblemente con modificaciones 
menores, para construir otro producto. Un ejemplo de un producto reusable es el shell de UNIX que además de aceptar comandos de usuario y ejecutarlos, puede ser iniciado mediante un archivo que contenga una lista de comandos del shell, lo que permite escribir programas (scripts) en el lenguaje de comandos del 
shell, por lo que puede verse el programa como un nuevo producto que utiliza el shell como componente. 
Puede parecer más apropiado aplicar este término a componentes del software que a productos completos, 
pero es ciertamente posible construir productos que sean reusables. Aunque es una herramienta importante 
para reducir los costos de producción del software, los ejemplos de reusabilidad son raros.

 Portabilidad (Portability):
El software es portable si puede ser ejecutado en distintos ambientes, refiriéndose este último tanto a
plataformas de hardware como a ambientes de software como puede ser determinado sistema operativo. Si
bien se ha transformado en un tema importante debido a la proliferación de procesadores y sistemas
operativos distintos, puede ser importante incluso en una misma familia de procesadores debido a las
variaciones de capacidad de memoria e instrucciones adicionales, por lo que una forma de lograr
portabilidad es asumir una configuración mínima y utilizar un subconjunto de las facilidades provistas que se
garantiza estarán disponibles en todos los modelos de la arquitectura, como instrucciones de máquina y
facilidades del sistema operativo. También es necesario utilizar técnicas que permitan al software determinar
las capacidades del hardware y adaptarse a éstas.

Comprensibilidad (Understandability):
Algunos sistemas de software son más fáciles de comprender que otros, algunas tareas son inherentemente 
más complejas que otras. Por ejemplo, un sistema que realiza predicción del clima, sin importar lo bien que 
esté escrito, será más difícil de comprender que uno que imprime una lista de correo. Dadas dos tareas con 
dificultad similar, se pueden seguir ciertas guías para producir diseños y escribir programas más 
comprensibles. 

Interoperabilidad (Interoperability):
La interoperabilidad se refiere a la habilidad de un sistema de coexistir y cooperar con otros sistemas, por 
ejemplo, la habilidad de un procesador de texto de incluir gráficas producidas por un paquete de gráficos. 
Aunque rara en los productos de software, la interoperabilidad abunda en otros productos de la ingeniería, 
por ejemplo, estéreos de distinta marca pueden conectarse juntos y también a televisiones y 
videograbadores, de hecho equipos producidos hace décadas se adaptan a nuevas tecnologías como discos 
compactos, mientras que casi todos los sistemas operativos tuvieron que ser modificados – en algunos casos significativamente – antes de que pudieran trabajar con los nuevos discos ópticos.

 Productividad (Productivity):
La productividad es una cualidad del proceso de producción de software, mide la eficiencia del proceso y
como se vio antes, es la cualidad de performance aplicada al proceso. Un proceso eficiente resulta en una
entrega más rápida del producto.

Oportunidad (Timeliness)
La oportunidad es una cualidad del proceso que se refiere a la habilidad de entregar un producto a tiempo.
Históricamente los procesos de producción de software no han tenido esta cualidad lo que llevó a la llamada “crisis del software” que a su vez trajo aparejada la necesidad y el nacimiento de la ingeniería de software.
Incluso actualmente muchos procesos fracasan en lograr sus resultados a tiempo.

Visibilidad (Visibility):
Un proceso de desarrollo de software es visible si todos sus pasos y su estado actual son claramente 
documentados. Otros términos utilizados son transparencia y apertura. La idea es que los pasos y el estado 
del proyecto están disponibles y fácilmente accesibles para ser examinados externamente.

A partir de: Fundamentals of Software Engineering – Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli.

Factores de calidad del software. 

En los factores que podemos nombrar para que el cliente sienta satisfacción en todas sus necesidades en la presencia del software ya desarrollado serian;

  1. Corrección.
  2. Fiabilidad
  3. Eficiencia
  4. Seguridad
  5. Facilidad


Ingeniería del software.


Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software o podemos citar a Zelkovitz, el cual dice que es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software. Pero en fin solo se busca el desarrollo de un software rentable y estable para coda uso en el área de trabajo.

lunes, 7 de abril de 2014

El Enfoque Sistemico

Sistemas y tecnologías de la información para la gestión.
Las tecnologías de la información permiten a las empresas obtener, procesar, almacenar e intercambiar información. En el contexto de la gestión del conocimiento, el rol de la tecnología de la información es extender la capacidad humana de creación de conocimiento a través de las facilidades de rapidez, extensión de la memoria y comunicacion


Planificación de la Información en la Gestión.

La planificación cumple dos propósitos principales en las organizaciones: el protector y el afirmativo. El propósito protector consiste en minimizar el riesgo reduciendo la incertidumbre que rodea al mundo de los negocios y definiendo las consecuencias de una acción administrativa determinada. El propósito afirmativo de la planificación consiste en elevar el nivel de éxito organizacional.

Leer más: http://www.monografias.com/trabajos34/planificacion/planificacion.shtml#ixzz2yCbLm96H

Una planificación de sistemas informáticos, también conocido como Plan Director de Sistemas, Plan de Sistemas de información o Plan Estratégico de Sistemas, facilita a una organización una correcta determinación del estado actual de los sistemas informáticos, de los requisitos que la organización les demanda para identificar un estado futuro de dichos sistemas alineados con los objetivos de la organización.

A partir de esta determinación del estado actual y futuro de los sistemas de la organización, se realiza un Gap Analysis (análisis de diferencias) que permite identificar las acciones a tomar para alcanzar dicho estado futuro, a nivel de organización, sistemas, procesos, personal y proyectos. Posteriormente los planes tácticos (p.e. de carácter anual) programarán dichas acciones.

http://es.wikipedia.org/wiki/Planificaci%C3%B3n_de_sistemas_inform%C3%A1ticos




lunes, 31 de marzo de 2014

Introduccion al ciclo de vida del desarrollo de Sistemas

El ciclo de vida de un sistema de información es un enfoque por fases del análisis y diseño que sostiene que los sistemas son desarrollados de mejor manera mediante el uso de un ciclo especifico de actividades del analista y del usuario.



Según James Senn, existen tres estrategias para el desarrollo de sistemas: el método clásico del ciclo de vida de desarrollo de sistemas, el método de desarrollo por análisis estructurado y el método de construcción de prototipos de sistemas. Cada una de estas estrategias tienen un uso amplio en cada una de los diversos tipos de empresas que existen, y resultan efectivas si son aplicadas de manera adecuada.


Metodologia Estructurada
  1. Se maneja como proyecto
  2. Gran volumen de datos y transacciones
  3. Abarca varias áreas organizativas de la empresa
  4. Tiempo de desarrollo largo
  5. Requiere que se cumplan todas las etapas, para poder cumplir las siguientes (progresión lineal y secuencial de una fase a la otra)



Evolutiva-Incremental
  1. Se deriva de la estructurada
  2. Permite seguir secuencias ascendentes o descendentes en las etapas del desarrollo
  3. Permite cumplir etapas o fases en paralelo, por lo que es más flexible que la estructurada




Leer más: http://www.monografias.com/trabajos29/ciclo-sistema/ciclo-sistema.shtml#ixzz2yCcNPCst

Faces del ciclo de vida del Software:
Ciclo de vida clásico 
 Este paradigma exige un enfoque secuencial del desarrollo de software. Abarca las siguientes actividades:

 Ingeniería y Análisis del Sistema.- El Software es siempre parte de un sistema mayor, por tanto se comienza  estableciendo las entidades, roles, funciones, etc de los que intevienen en el sistema, se identifican los requisitos del sistema y  luego se asigna un sub conjunto de estos requisitos al software.

 Análisis de Requisitos del Software.- Proceso de recopilación de los requisitos especificamente del software. El analista debe comprender el ámbito de la información, la función, el rendimiento y las interfaces del software.

 Diseño.- Traduce los requisitos en una representación de software que pueda ser codificada.

 Codificación.- Traducción del diseño en código fuente escrito en un lenguaje de programación.

 Prueba.- Verificación de que las funciones del software producen los resultados que realmente se requieren.

 Mantenimiento.- El mantenimiento aplica cada uno de los pasos precedentes para implementar los cambios que con el tiempo indudablemente sufrirá el software.

Paradigma, Técnicas y Herramientas:
Un paradigma es el resultado de los usos, y costumbres, de creencias establecidas de verdades a medias; un paradigma es ley, hasta que es desbancado por otro nuevo.

Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software.

Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.

Tipos de paradigmas de programación más comunes:
Imperativo o por procedimientos: es considerado el más común y está representado, por ejemplo, por C, BASIC o Pascal.
Funcional: está representado por Scheme o Haskell. Este es un caso del paradigma declarativo.
Lógico: está representado por Prolog. Este es otro caso del paradigma declarativo.
Declarativo: por ejemplo la programación funcional, la programación lógica, o la combinación lógico-funcional.
Orientado a objetos: está representado por Smalltalk, un lenguaje completamente orientado a objetos.
Programación dinámica: está definida como el proceso de romper problemas en partes pequeñas para analizarlos.

Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma.

Actualmente el paradigma de programación más usado es el de la programación orientada a objetos.

Herramientas CASE:
Se puede definir a las Herramientas CASE como un conjunto de programas y ayudas que dan asistencia a los analistas, ingenieros de software y desarrolladores, durante todos los pasos del Ciclo de Vida de desarrollo de un Software.

El desarrollo de Software es un proceso complejo y a menudo difícil que requiere la síntesis de muchos sistemas. Desde el modelado y diseño hasta el código, administración del proyecto, pruebas, despliegue, administración de cambios y etc.

Tablas de decisión
Tanto como los diagramas de flujo, las tablas de decisión son herramientas diseñadas para modelar el flujo lógico de un programa. Esto permite a los ingenieros de software detallar todos los comportamientos de un programa antes de escribirlo. Asegurándose de que todas las condiciones están cubiertas, los desarrolladores son capaces de minimizar los resultados inesperados.

Diagramas de UML
Los diagramas de UML (por sus siglas en inglés) se construyen utilizando el Lenguaje Unificado de Modelado. Éstos proporcionan una representación gráfica de los diversos aspectos de una pieza de software. Los diagramas UML pueden ser diagramas de casos de uso, los cuales describen cómo un usuario interactuará con tu software, diagramas de clase, lo cual modela las relaciones entre los objetos en el código y varios otros tipos de diagramas.

Sistemas de control de revisión
La complejidad de un proyecto tiende a aumentar durante el ciclo de desarrollo de software. Los sistemas de control de revisión son una herramienta utilizada en la ingeniería de software para contrarrestar problemas asociados con esto. Muchos proyectos implican que más de un desarrollador trabaje en el código al mismo tiempo. Estos desarrolladores pueden no saber cuando otros desarrolladores están trabajando en el mismo código que ellos. Un sistema de control de revisión puede ayudar a prevenirlos de la sobre escritura de código entre sí y puede resaltar los cambios que han hecho otros desarrolladores. Si se cometen errores durante el proceso de desarrollo, puedes fácilmente revertirlos.

Depuradores
Los depuradores son herramientas que se utilizan en ingeniería de software para realizar pruebas en un programa durante y después del desarrollo. Mediante la adición de puntos de "interrupción" al código, los ingenieros de software pueden causar que la ejecución de un programa se detenga en puntos específicos para que las variables puedan ser analizadas. Esto les permite determinar si se manipulan correctamente los datos. La colocación estratégica de los puntos de interrupción facilita reducir el origen de un problema.

Rol del Analista de Sistemas.

Principios deontologicos del Analista de sistemas

El analista de sistemas evalúa de manera sistemática el funcionamiento de un negocio mediante el examen de la entrada y el procesamiento de datos y su consiguiente producción de información, con el propósito de mejorar los procesos de una organización. Muchas mejoras incluyen un mayor apoyo a las funciones de negocios a través del uso de sistemas de información computarizados. Esta definición pone énfasis en un enfoque sistemático y metódico para analizar —y en consecuencia mejorar— lo que sucede en el contexto específico creado por un negocio.

Nuestra definición de analista de sistemas es amplia. El analista debe tener la capacidad de trabajar con todo tipo de gente y contar con suficiente experiencia en computadoras.

El analista de sistemas debe ser una persona autodisciplinada y automotivada, con la capacidad de administrar y coordinar los innumerables recursos de un proyecto, incluyendo a otras personas. La profesión de analista de sistemas es muy exigente; pero es una profesión en constante evolución que siempre trae nuevos retos.

pag 7, Kendall-Kendall - Analisis y Diseño de Sistemas Ed. 6.pdf

Principios Deontologicos.

1. Los Analistas actuarán en armonía con el interés público.

2. Los Analistas desarrollarán sus actividades de la mejor forma que les permita conseguir
que los intereses de sus Clientes, Empresas y Organizaciones que les emplean, estén en armonía con el interés público.

3. Los Analistas garantizarán que sus análisis y las modificaciones que precisen los llevan
a cabo utilizando los estándares de su profesión con la mayor amplitud.

4. Los Analistas mantendrán su integridad e independencia en sus juicios y dictámenes profesionales.

5. Los Analistas que además desempeñan actividades como gestores ó líderes, promoverán y
garantizarán que en la gestión del desarrollo y mantenimiento del software que lideran se
siguen criterios éticos.

6. Los Analistas mantendrán en todas sus actuaciones profesionales la integridad y reputación de la profesión, cumpliendo las normas de los acuerdos internacionales y leyes informáticas que afectan al ejercicio de su profesión y garantizan el interés público.

7. Los Analistas actuarán con lealtad y defenderán a sus compañeros profesionales.

8. Durante el desarrollo de su vida profesional, los Analistas se preocuparán por mantener
actualizados sus conocimientos y prácticas profesionales y promoverán la actuación ética en
la práctica de la profesión.


Sistemas de Información

Sistema
Conjunto de procesos, hardware, software, instalaciones y personas
necesarios para realizar un trabajo o cumplir un objetivo.

Información
La información está constituida por un grupo de datos ya supervisados y ordenados, que sirven para construir un mensaje basado en un cierto fenómeno o ente. La información permite resolver problemas y tomar decisiones, ya que su aprovechamiento racional es la base del conocimiento.


Conceptualizacion de los Sistemas de Información

Sistemas de información
Un sistema de información en un conjunto de componentes interrelacionados para recolectar manipular diseminar datos e información y para disponer de un mecanismo de retroalimentación útil en el cumplimiento de un objetivo. Todos interactuamos en forma cotidiana con sistemas de información, para fines tanto personales como profesionales; utilizamos cajeros automáticos, los empleados de las tiendas registran
nuestras compras sirviéndose de códigos de barras y escáneres u obtenemos información en módulos equipados con pantallas sensibles al tacto.

Actividades y Elementos de un Sistema de Información

Actividades de un sistema (Entrada, procesamiento, salida y retroalimentación).



-Entrada:
En sistemas de información, la entrada es la actividad que consiste en recopilar y capturar datos primarios. Cuando se elaboran cheques de pago, por ejemplo, antes de proceder a su cálculo o impresión debe recolectarse información sobre el número de horas trabajadas por cada empleado. En un sistema universitario de calificaciones, los profesores deben proporcionar las calificaciones de sus alumnos para que sea posible reunirlas en un reporte semestral o trimestral destinado a los estudiantes. La entrada puede adoptar muchas formas. En un sistema de información diseñado para la producción de cheques de pago, por ejemplo, la tarjeta de registro de llegada y salida de cada empleado podría ser la entrada inicial.

-Procesamiento:
el procesamiento supone la conversión o transformación de datos en salidas útiles. Esto puede implicar ejecutar cálculos, realizar comparaciones y adoptar acciones alternas, y el almacenamiento de datos para su uso posterior.

-Salida:
En sistemas de información, la salida implica producir información útil, por lo general en forma de ocumentos y/o reportes. Entre las salidas pueden contarse los cheques de pago de los empleados, reportes dirigidos a administradores y la información que debe suministrarse a accionista, bancos, organismos gubernamentales y otros grupos. En algunos casos, la salida de un sistema bien podría ser la entrada de otros.

-Retroalimentacion:
La retroalimentación es la salida que se utiliza para efectuar cambios en actividades de entrada o procesamiento. La presencia de errores o problemas, por ejemplo, podría imponer la necesidad de corregir datos de entrada o modificar un proceso.

Elementos de un Sistema de Información.
Los sistemas de información, según Peña (2006), tienen 5 elementos importantes, estos son:

  1. Financieros
  2. Administrativos
  3. Humanos
  4. Materiales
  5. Tecnológicos

En la bibliografía consultada, sin embargo otro autor (s/a, 2008a), que contradice lo planteado por Peña (2006), se refiere a que un sistema de información consiste en 3 elementos: humano, tecnología y organización.

Segun: Kenneth E. Kendall


Los componentes más importantes de un sistema de información son los siguientes:

  1. Financieros. Es el aspecto económico que permite la adquisición, contratación y mantenimientode los demás recursos que integran un sistema de información.
  2. Administrativos.Es la estructura orgánica de objetivos, lineamientos, funciones, procedimientos,departamentalización, dirección y control de las actividades; que sustenta la creación y uso de los sistemas.
  3. Humanos.Está compuesto por dos grupos:El técnico, que posee los conocimientos especializados en el desarrollo de sistemas, siendo estoslos: Administradores, Líderes de Proyecto, Analistas, Programadores, Operadores y Capturistas.El usuario, representado por las personas interesadas en el manejo de información vía cómputo.
  4. Materiales.Son aquellos elementos físicos que soportan el funcionamiento de un sistema deinformación, por ejemplo: local de trabajo, instalaciones eléctricas y de aire acondicionado,medios de comunicación, mobiliario, maquinaria, papelería, etc.Tecnológicos. Es el conjunto de conocimientos, experiencias, metodologías y técnicas; queorientan la creación, operación y mantenimiento de un sistema


Diferentes Tipos de Sistemas de Información.


-Sistema de Procesamiento de Transacciones (TPS, transaction processing system)
El objetivo de los sistemas de procesamiento de transacciones es capturar y procesar datos sobre las transacciones de negocios que se realizan, diariamente, en la empresa. Las transacciones son hechos o
actividades que se llevan a cabo en la empresa, y que le aportan nueva información. Algunos ejemplos de transacciones son los pedidos de un cliente, las fichas de tiempo, las reservas de entrada de un cine, los pagos de una empresa, etc.

En una organización se pueden encontrar distintos sistemas de procesamiento de transacciones en función del área funcional. En el área de ventas, existen los sistemas de seguimientos de pedidos y de procesamiento de pedidos, En recursos humanos destacan los sistemas de compensación, tales como los que se mencionaron anteriormente. Las dos áreas funcionales en donde se suelen encontrar más sistemas de
procesamiento de transacciones son la de producción y la de contabilidad. En el primer caso, se encuentran los sistemas de control de máquinas, de programación de planta, y de logística de materiales entre otros. En
contabilidad aparecen los sistemas de nóminas, de cuentas por pagar, etc.

-Sistemas de automatización de la oficina y sistemas de trabajo del conocimiento.
Existen dos clases de sistemas en el nivel del conocimiento de una organización. Los sistemas de automatización de la oficina [OAS, Office Automation Systems] apoyan a los trabajadores de datos, quienes por lo general no generan conocimientos nuevos, sino más bien analizan la información con el propósito de transformar los datos o manipularlos de alguna manera antes de compartirlos o, en su caso, distribuirlos formalmente con el resto de la organización y en ocasiones más allá de ésta. Entre los componentes más comunes de un OAS están el procesamiento de texto, las hojas de cálculo, la autoedición, la calendarización electrónica y las comunicaciones mediante correo de voz, correo electrónico y videoconferencia. Los sistemas de trabajo del conocimiento (KWS, Knowledge Work Systems] sirven de apoyo a los trabajadores profesionales, como los científicos, ingenieros y médicos, en sus esfuerzos de creación de nuevo conocimiento y dan a éstos la posibilidad de compartirlo con sus organizaciones o con la sociedad.

pag 29, Kendall-Kendall - Analisis y Diseño de Sistemas Ed. 6.pdf

-Sistemas de Soporte Gerencial:
Los sistemas de información gerencial (MIS, Management Information Systems] no reemplazan a los sistemas de procesamiento de transacciones, más bien, incluyen el procesamiento de transacciones. Los MIS son sistemas de información computarizados cuyo propósito es contribuir a la correcta interacción entre los usuarios y las computadoras. Debido a que requieren que los usuarios, el software [los programas de cómputo] y el hardware (las computadoras, impresoras, etc.), funcionen de manera coordinada, los sistemas de información gerencial dan apoyo a un espectro de tareas organizacionales mucho más amplio que los sistemas de procesamiento de transacciones, como el análisis y la toma de decisiones.

Para acceder a la información, los usuarios de un sistema de información gerencial comparten una base de datos común. Ésta almacena datos y modelos que ayudan al usuario a interpretar y aplicar los datos. Los sistemas de información gerencial producen información que se emplea en la toma de decisiones. Un sistema de información gerencial también puede contribuir a unificar algunas de las funciones de información computarizadas de una empresa, a pesar de que no existe como una estructura individual en ninguna parte de ésta.

pag 29, Kendall-Kendall - Analisis y Diseño de Sistemas Ed. 6.pdf

 -Sistemas Online:
Un sistema en línea es aquel que siempre debe estar encendido, disponible y generalmente conectado a una red de computadoras y depende de la capacidad del hardware para atender peticiones de servicio y en ningún momento está en sincronía con el mundo real ni tiene restricciones temporales. En adición a esto, un sistema fuera de línea es aquel que no siempre está disponible para recibir y enviar información y que depende de una base de datos previamente establecida para ejecutar su cometido. Como ejemplos de sistemas en línea se tienen las aplicaciones de Internet como los navegadores web o la adquisición de datos a través de una tarjeta especializada en un ambiente de tiempo compartido como Windows.

-Sistemas Expertos:
La inteligencia artificial (AI, Artificial Intelligence] se puede considerar como el campo general para los sistemas expertos. La motivación principal de la AI ha sido desarrollar máquinas que tengan un comportamiento inteligente. Dos de las líneas de investigación de la AI son la comprensión del lenguaje natural y el análisis de la capacidad para razonar un problema hasta su conclusión lógica. Los sistemas expertos utilizan las técnicas de razonamiento de la AI para solucionar los problemas que les plantean los usuarios de negocios (y de otras áreas].

Los sistemas expertos conforman una clase muy especial de sistema de información que se ha puesto a disposición de usuarios de negocios gracias a la amplia disponibilidad de hardware y software como computadoras personales (PCs) y generadores de sistemas expertos.

Un sistema experto [también conocido como sistema basado en el conocimiento) captura y utiliza el conocimiento de un experto para solucionar un problema específico en una organización. Observe que a diferencia de un DSS, que cede al responsable la toma de la decisión definitiva, un sistema experto selecciona la mejor solución para un problema o una clase específica de problemas.

pag 29, Kendall-Kendall - Analisis y Diseño de Sistemas Ed. 6.pdf

-Sistemas Colaborativos:
Los sistemas colaborativos, desde este punto de vista, se validan las interacciones sociales, como también la visión de que el aporte de dos o más individuos que trabajan en función de una meta común, puede tener como resultado un producto más enriquecido y acabado que la propuesta de uno sólo, esto motivado por las interacciones, negociaciones y diálogos que dan origen al nuevo conocimiento. Vemos también que el aprender es un proceso dialéctico y dialógico en el que un individuo contrasta su punto de vista personal con el de otro hasta llegar a un acuerdo. Ese otro, también puede ser un “sí mismo”, de esta forma incluimos el
dialogo íntimo y personal con uno mismo, esto se debe incluir en este teme por la importancia que lleva a cabo en la colaboración.

El éxito de la Red Internet y el auge en la utilización de su aplicación estrella la WEB, ha originado un incremento apreciable en las aplicaciones hipermedias, ya que la mayoría de la información que se maneja en Internet es de naturaleza hipermedia.

En la actualidad, la mayor parte de las veces, se utiliza Internet para que distintas personas accedan a una información común, pero esto esta cambiando y ya han aparecido numerosos ejemplos de situaciones en las que los usuarios no solo comparten la información sino que colaboran entre si para realizar actividades
conjuntas. Ejemplos típicos de estos sistemas son los centros de enseñanza a distancia (e-lerning), las comunidades virtuales, los foros de discusión ,los sistemas de realidad virtual o los sistemas de comunicación instantánea (Messenger, Net Meeting, ICQ, ...)

pag 3, http://estoesunejemplo.wikispaces.com/file/view/sistemas+colaborativos.pdf

-Agentes Inteligentes:
Un agente inteligente, es una entidad capaz de percibir su entorno, procesar tales percepciones y responder o actuar en su entorno de manera racional, es decir, de manera correcta y tendiendo a maximizar un resultado esperado. Es capaz de percibir su medioambiente con la ayuda de sensores y actuar en ese medio utilizando actuadores (elementos que reaccionan a un estímulo realizando una acción).

En este contexto la racionalidad es la característica que posee una elección de ser correcta, más específicamente, de tender a maximizar un resultado esperado. Este concepto de racionalidad es más general y por ello más adecuado que inteligencia (la cual sugiere entendimiento) para describir el comportamiento de los agentes inteligentes. Por este motivo es mayor el consenso en llamarlos agentes racionales.


Un agente inteligente puede ser una entidad física o virtual. Si bien el término agente racional se refiere a agentes artificiales en el campo de la Inteligencia Artificial, también puede considerarse agentes racionales a los animales incluido el hombre.

-Sistemas Multimedia:
El término “multimedia” viene de la yuxtaposición de la partícula “multi”, que implica variedad, y el plural latino de “médium”, que significa medio. Multimedia es la difusión de la información en más de una forma. Más precisamente, llamamos multimedia a cualquier combinación de texto, sonidos, imágenes o gráficos estáticos o en movimiento.

El soporte habitual es de tipo electrónico y a menudo es un sistema informático el encargado de generar la presentación de esa información en la forma y secuencia correcta. No obstante, otras formas de comunicación con múltiples recursos expresivos pueden también recibir la calificación de multimedia. Sería el caso de representaciones teatrales, musicales, cinematográficas, de televisión, etc.


Concretamente, consideraremos el estudio de las manifestaciones compuestas de texto, fotografías, animaciones, efectos sonoros y visuales, secuencias de vídeo, elementos de interactividad, realidad virtual, etc. que se presenten al usuario por medios informáticos.

-Sistemas Geográficos:
Los GIS (Sistemas de información geográfica, Geographical Information Systems) son algo más que programas de posicionamiento. Un GIS permite a un negocio combinar tablas de datos como listas de ventas de clientes con información demográfica procedente de la Oficina del Censo de los EE.UU. y otras fuentes. La combinación correcta puede revelar una valiosa y correcta información. Por ejemplo, una
compañía de televisión por cable puede localizar los potenciales clientes que vivan cerca de las líneas ya tendidas. Ya que los GIS pueden mostrar en mapas datos geográficos y demográficos, permiten que los usuarios vean datos relacionados que, de otro modo, podrían ser invisibles.

pag. 251, Introduccion a la Informatica.pdf

Importancia de los Sistemas de Información:
Los sistemas de Información dan apoyo a las operaciones empresariales, la gestión y la toma de decisiones, proporcionando a las personas la información que necesitan mediante el uso de las tecnologías de la información. Las empresas, y en general cualquier organización, los utilizan como un elemento estratégico con el que innovar, competir y alcanzar sus objetivos en un entorno globalizado. Los sistemas de información integran personas, procesos, datos y tecnología, yendo más allá de los umbrales de la organización, para colaborar de formas más eficientes con proveedores, distribuidores y clientes.

Aplicaciones de las Tecnologías de la Información a los Sistemas de Información:
La expansión de las tecnologías de la información y los sistemas de información basadas en la microelectrónica, la informática, la robótica y las redes de comunicaciones se esta produciendo a gran velocidad en todos los ámbitos socio-económicos y de las actividades humanas configurando la nombrada Sociedad de la información.

En los últimos años se han incorporado a nuestro entorno numerosos avances tecnológicos que han inundado hogares y oficinas. Son demasiadas aportaciones a la sociedad del bienestar para predecir un retroceso. En toda empresa, la preocupación permanente por la mejora de la administración, las finanzas y la producción han conducido a la rápida adopción de sistemas automáticos capaces de facilitar tareas mecánicas y rutinarias, evitar errores y mejorar el control de la cartera de clientes y con el incremento consiguiente de la calidad.

 Durante las tres últimas décadas hemos asistido a una segunda revolución tecnológica a causa de la integración de los ordenadores y los sistemas de información en la estrategia empresarial, factor básico de nuevas ventajas competitivas en manos de los directivos y arma poderosísima para obtener nuevas oportunidades de negocio.