miércoles, 11 de julio de 2012

Proceso de Desarrollo del Software

  Un sistema informático está compuesto por hardware y software. En cuanto al hardware, su producción se realiza sistemáticamente y la base de conocimiento para el desarrollo de dicha actividad está claramente definida. La fiabilidad del hardware es, en principio, equiparable a la de cualquier otra máquina construida por el hombre. Sin embargo, respecto del software, su construcción y resultados han sido históricamente cuestionados debido a los problemas asociados, entre ellos podemos destacar los siguientes:

*Los sistemas no responden a las expectativas de los usuarios.
* Los programas “fallan” con cierta frecuencia.
* Los costes del software son difíciles de prever y normalmente superan las estimaciones.
*La modificación del software es una tarea difícil y costosa.
 *El software se suele presentar fuera del plazo establecido y con menos prestaciones de las consideradas inicialmente.
*Normalmente, es difícil cambiar de entorno hardware usando el mismo software.
*El aprovechamiento óptimo de los recursos (personas, tiempo, dinero, herramientas, etc.) no suele cumplirse.

Muchos software ni siquiera llegan al término. Algunas deficiencias comunes en el desarrollo de software son:
*Escasa o tardía validación con el cliente.
*Inadecuada gestión de los requisitos.
*No existe medición del proceso ni registro de datos históricos.
*Estimaciones imprevistas de plazos y costos.
*Excesiva e irracional presión en los plazos.
*Escaso o deficiente control en el progreso del proceso de desarrollo.
* No se hace gestión de riesgos formalmente.
*No se realiza un proceso formal de pruebas.
*No se realizan revisiones técnicas formales e inspecciones de código








Fundamentos del enfoque Orientado a Objetos

Lo orientado a objetos se basa en el concepto de objeto. Un objeto es aquello que tiene estado (propiedades más valores), comportamiento (acciones y reacciones a mensajes) e identidad (propiedad que lo distingue de los demás objetos). La estructura y comportamiento de objetos similares están definidos en su clase común; los términos instancia y objeto son intercambiables. Una clase es un conjunto de objetos que comparten una estructura y comportamiento común.

La diferencia entre un objeto y una clase es que un objeto es una entidad concreta que existe en tiempo y espacio, mientras que una clase representa una abstracción, la "esencia" de un objeto, tal como son. De aquí que un objeto no es una clase, sin embargo, una clase puede ser un objeto.

En el enfoque Orientado a Objetos, las propiedades del objeto son claves. Los principios del modelo OO son: abstracción, encapsulación, modularidad y jerarquía, fundamentalmente, y en menor grado tipificación (typing), concurrencia, persistencia. Booch en 1986, dice que si un modelo que se dice OO no contiene alguno de los primeros cuatro elementos, entonces no es OO.
* Abstracción:Es una descripción simplificada o especificación de un sistema que enfatiza algunos de los detalles o propiedades del sistema, mientras suprime otros.
*Encapsulación: En el proceso de ocultar todos los detalles de un objetoque no contribuyen a sus características esenciales.
*Modularidad:Es la propiedad de un sistema que ha sido descompuesto en un conjunto de módulos coherentes e independientes.
*Jerarquía o herencia: Es el orden de las abstracciones organizado por niveles.
* Tipificación: Es la definición precisa de un objeto de tal forma que objetos de diferentes tipos no puedan ser intercambiados o, cuando mucho, puedan intercambiarse de manera muy restringida.
*Concurrencia: Es la propiedad que distingue un objeto que está activo de uno que no lo está.
* Persistencia: Es la propiedad de un objeto a través de la cual su existencia trasciende el tiempo (es decir, el objeto continua existiendo después de que su creador ha dejado de existir) y/o el espacio (es decir, la localización del objeto se mueve del espacio de dirección en que fue creado).





Características Generales:
* *Un objeto se identifica por un nombre o un identificador único que lo diferencia de los demás. Ejemplo: el objeto Cuenta de Ahorros número 12345 es diferente al objeto Cuenta de Ahorros número 25789. En este caso el identificador que los hace únicos es el número de la cuenta.

*Un objeto posee estados. El estado de un objeto está determinado por los valores que poseen sus atributos en un momento dado.

*Un objeto tiene un conjunto de métodos. El comportamiento general de los objetos dentro de un sistema se describe o representa mediante sus operaciones o métodos. Los métodos se utilizarán para obtener o cambiar el estado de los objetos, así como para proporcionar un medio de comunicación entre objetos.


*Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores que determinan el estado del objeto durante su tiempo de vida. Se implementan con variables, constantes y estructuras de datos (similares a los campos de un registro).

*Los objetos soportan encapsulamiento. La estructura interna de un objeto normalmente está oculta a los usuarios del mismo. Los datos del objeto están disponibles solo para ser manipulados por los propios métodos del objeto. El único mecanismo que lo conecta con el mundo exterior es el paso de mensajes.


*Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza. Para ser utilizado en un algoritmo el objeto debe ser creado con una instrucción particular (New ó Nuevo) y al finalizar su utilización es destruido con el uso de otra instrucción o de manera automática.

Desarrollo de componentes del software

El Desarrollo de Software Basado en Componentes (DSBC) trata de apoyar las bases para el diseño y desarrollo de aplicaciones distribuidas basadas en componentes software reutilizables. Esta norma cuenta en la actualidad con una utilidad, tanto desde el panorama académico como desde el industrial, en donde su demanda de temas es cada día mayor.
La finalidad primordial de (DSBC) es entender los diferentes modelos de desarrollo de software y la importancia de sus componentes y servicios. También evaluar las diferencias entre este modelo y los estudiados anteriormente en el transcurso de desarrollar este tipo de software.
Además deberíamos conocer los fundamentos sobre los que se sienta el modelo y todas las tendencias al momento de armar el software, es decir en su arquitectura.
Con este modelo también aseguramos la calidad del producto. La filosofía  de este modelo es que “es más fácil comprar que construir” pues si algo ya está elaborado no debemos desperdiciar el tiempo en construirlo. Pero no todo es solamente comprar pues nosotros debemos realizar un correcto ensamblaje de los componentes para que el software pueda funcionar correctamente.


Además debemos saber qué clase de componentes debemos elegir pues una mala elección nos causaría un mal funcionamiento del software. También debemos saber escoger a quien comprar y debemos saber cómo comprar. Debemos escoger la opción más conveniente en costos, calidad y además que opción nos servirá más para el software que estamos desarrollando. Este modelo también tiene limitaciones ya que no siempre se podrá encontrar los componentes adecuados para cada proyecto.

Lo más importante que se debe tener en cuenta al definir el concepto de DSBC, es el de diferenciar las características existentes entre el DSBC y el paradigma de objetos, la Programación Orientada a Objetos (POO) es cuando el software puede ser desarrollado de acuerdo a un modelo mental de un objeto real o imaginado, mientras que el DSBC dice que el software debe ser desarrollado a partir de componentes prefabricados. Existen varias definiciones de componentes realizadas por expertos que han sido los encargados del desarrollo de esta metodología, ellos han tomado como base la metodología de la programación orientada objetos y el modelado a través de UML :
* Un componente es una parte no trivial, casi independiente, y reemplazable de un sistema que llena claramente una funcionalidad dentro de un contexto en una arquitectura bien definida. Un componente se conforma y provee la realización física por medio de un conjunto de interfaces.

* Un componente de software en tiempo de ejecución es un paquete dinámicamente vinculado con uno o varios programas manejados como una unidad y que son accedidos mediante interfaces bien documentadas que pueden ser descubiertos en tiempo de ejecución.

* Un componente de software es una unidad de composición con interfaces contractualmente especificadas y explícitas sólo con dependencias dentro de un contexto. Un componente de software puede ser desplegado independientemente y es sujeto a la composición de terceros.


* Un Componente de Negocio representa la implementación de software del concepto de un negocio “autónomo” o un proceso de negocio. Que consiste de artefactos de software necesarios para expresar, implementar y poner en marcha el concepto de elemento reusable de un sistema más grande de negocios.

El Desarrollo de Software Basado en Componentes (DSBC) trata de apoyar las bases para el diseño y desarrollo de aplicaciones distribuidas basadas en componentes software reutilizables. Esta norma cuenta en la actualidad con una utilidad, tanto desde el panorama académico como desde el industrial, en donde su demanda de temas es cada día mayor.
La finalidad primordial de (DSBC) es entender los diferentes modelos de desarrollo de software y la importancia de sus componentes y servicios. También evaluar las diferencias entre este modelo y los estudiados anteriormente en el transcurso de desarrollar este tipo de software.
Se debe cononocer los fundamentos sobre los que se sienta el modelo y todas las tendencias al momento de armar el software, es decir en su arquitectura.
Con este modelo también aseguramos la calidad del producto. La filosofía  de este modelo es que “es más fácil comprar que construir” pues si algo ya está elaborado no debemos desperdiciar el tiempo en construirlo. Pero no todo es solamente comprar pues nosotros debemos realizar un correcto ensamblaje de los componentes para que el software pueda funcionar correctamente.

Además debemos saber qué clase de componentes debemos elegir pues una mala elección nos causaría un mal funcionamiento del software. También debemos saber escoger a quien comprar y debemos saber cómo comprar. Debemos escoger la opción más conveniente en costos, calidad y además que opción nos servirá más para el software que estamos desarrollando. Este modelo también tiene limitaciones ya que no siempre se podrá encontrar los componentes adecuados para cada proyecto.



Características de los componentes
Un componente de software debe poseer las siguientes características:
*Ser reutilizable.
*Ser intercambiable.
* Poseer interfaces definidas.
*Ser cohesivos

Estándares en el proceso de desarrollo de software


La gran cantidad de organizaciones de desarrollo de software implementan metodologías para el proceso de desarrollo. Muchas de estas organizaciones pertenecen a la industria armamentística, que en los Estados Unidos necesita un certificado basado en su modelo de procesos para poder obtener un contrato.
El estándar internacional que regula el método de selección, implementación y monitoreo del ciclo de vida del software es ISO 12207.
Durante décadas se ha perseguido la meta de encontrar procesos reproducibles y predecibles que mejoren la productividad y la calidad. Algunas de estas soluciones intentan 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 o consumir un presupuesto mayor que el planeado. Dada la cantidad de proyectos de software que no cumplen sus metas en términos de funcionalidad, costes o tiempo de entrega, una gestión de proyectos efectiva es algo que a menudo falta











Artefactos y Documentación

La documentación es la debilidad más frecuente en productos e instalaciones informáticos. 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.
El código fuente del software, la estructura de datos y los enlaces de comunicaciones constituyen en conjunto el paradigma de la documentación informática. Sin embargo, cuando los modelos de arquitectura, estructuras y especificaciones de diseño no los vinculan, sólo pueden acceder a éstos dificultosamente los iniciados. Hay buenas prácticas para escribir código fuente pero, las condiciones y circunstancias de cada programa y sistema son tan diversas que, las exigencias habituales se reducen a que funcione razonablemente.

Artefactos, de acuerdo con RUP, es una pieza de información producida, modificada o utilizada por un proceso. Artefacto son los productos tangibles del proyecto, las cosas que los proyectos producen o utilizan mientras se trabaja hacia el producto final. Los artefactos son insumos utilizados para realizar actividades y, son los resultados de estas actividades.
Son artefactos entregables como ejecutables, el código fuente, manuales, planes y proyectos. Productos intermedios, como documentos de arquitectura y diseño, especificaciones de requerimientos, modelos de negocios y casos de uso. De igual forma, son artefactos los elementos que componen los modelos y productos, como glosarios y diccionarios, gráficos, clases o subsistemas. También, en negocios regulados, son artefactos los instrumentos y evidencias de la gestión informática.