UML
En todas las disciplinas de la Ingeniería se hace evidente la importancia de los modelos ya que describen el aspecto y la conducta de "algo". Ese "algo" puede existir, estar en un estado de desarrollo o estar, todavía, en un estado de planeación. Es en este momento cuando los diseñadores del modelo deben investigar los requerimientos del producto terminado y dichos requerimientos pueden incluir áreas tales como funcionalidad, performance y confiabilidad. Además, a menudo, el modelo es dividido en un número de vistas, cada una de las cuales describe un aspecto específico del producto o sistema en construcción.
El modelado sirve no solamente para los grandes sistemas, aun en aplicaciones de pequeño tamaño se obtienen beneficios de modelado, sin embargo es un hecho que entre más grande y más complejo es el sistema, más importante es el papel de que juega el modelado por una simple razón: "El hombre hace modelos de sistemas complejos porque no puede entenderlos en su totalidad".
UML es una técnica para la especificación sistemas en todas sus fases. Nació en 1994 cubriendo los aspectos principales de todos los métodos de diseño antecesores y, precisamente, los padres de UML son Grady Booch, autor del método Booch; James Rumbaugh, autor del método OMT e Ivar Jacobson, autor de los métodos OOSE y Objectory. La versión 1.0 de UML fue liberada en Enero de 1997 y ha sido utilizado con éxito en sistemas construidos para toda clase de industrias alrededor del mundo: hospitales, bancos, comunicaciones, aeronáutica, finanzas, etc
Los principales beneficios de UML son:
UML, ¿Método o Lenguaje de Modelado?
UML es un lenguaje para hacer modelos y es independiente de los métodos de análisis y diseño. Existen diferencias importantes entre un método y un lenguaje de modelado. Un método es una manera explícita de estructurar el pensamiento y las acciones de cada individuo. Además, el método le dice al usuario qué hacer, cómo hacerlo, cuándo hacerlo y por qué hacerlo; mientras que el lenguaje de modelado carece de estas instrucciones. Los métodos contienen modelos y esos modelos son utilizados para describir algo y comunicar los resultados del uso del método.
Un modelo es expresado en un lenguaje de modelado. Un lenguaje de modelado consiste de vistas, diagramas, elementos de modelo ¾ los símbolos utilizados en los modelos ¾ y un conjunto de mecanismos generales o reglas que indican cómo utilizar los elementos. Las reglas son sintácticas, semánticas y pragmáticas (figura 1).

Vistas: Las vistas muestran diferentes aspectos del sistema modelado. Una vista no es una gráfica, pero sí una abstracción que consiste en un número de diagramas y todos esos diagramas juntos muestran una "fotografía" completa del sistema. Las vistas también ligan el lenguaje de modelado a los métodos o procesos elegidos para el desarrollo. Las diferentes vistas que UML tiene son:
Vista Use-Case: Una vista que muestra la funcionalidad del sistema como la perciben los actores externos.
Vista Lógica: Muestra cómo se diseña la funcionalidad dentro del sistema, en términos de la estructura estática y la conducta dinámica del sistema.
Vista de Componentes: Muestra la organización de los componentes de código.
Vista Concurrente: Muestra la concurrencia en el sistema, direccionando los problemas con la comunicación y sincronización que están presentes en un sistema concurrente.
Vista de Distribución: muestra la distribución del sistema en la arquitectura física con computadoras y dispositivos llamados nodos.
Diagramas: Los diagramas son las gráficas que describen el contenido de una vista. UML tiene nueve tipos de diagramas que son utilizados en combinación para proveer todas las vistas de un sistema: diagramas de caso de uso, de clases, de objetos, de estados, de secuencia, de colaboración, de actividad, de componentes y de distribución.
Símbolos o Elementos de modelo: Los conceptos utilizados en los diagramas son los elementos de modelo que representan conceptos comunes orientados a objetos, tales como clases, objetos y mensajes, y las relaciones entre estos conceptos incluyendo la asociación, dependencia y generalización. Un elemento de modelo es utilizado en varios diagramas diferentes, pero siempre tiene el mismo significado y simbología.
Reglas o Mecanismos generales: Proveen comentarios extras, información o semántica acerca del elemento de modelo; además proveen mecanismos de extensión para adaptar o extender UML a un método o proceso específico, organización o usuario.
Fases del Desarrollo de un Sistema
Las fases del desarrollo de sistemas que soporta UML son: Análisis de requerimientos, Análisis, Diseño, Programación y Pruebas.
Análisis de Requerimientos
UML tiene casos de uso (use-cases) para capturar los requerimientos del cliente. A través del modelado de casos de uso, los actores externos que tienen interés en el sistema son modelados con la funcionalidad que ellos requieren del sistema (los casos de uso). Los actores y los casos de uso son modelados con relaciones y tienen asociaciones entre ellos o éstas son divididas en jerarquías. Los actores y casos de uso son descritos en un diagrama use-case. Cada use-case es descrito en texto y especifica los requerimientos del cliente: lo que él (o ella) espera del sistema sin considerar la funcionalidad que se implementará. Un análisis de requerimientos puede ser realizado también para procesos de negocios, no solamente para sistemas de software.
Análisis
La fase de análisis abarca las abstracciones primarias (clases y objetos) y mecanismos que están presentes en el dominio del problema. Las clases que se modelan son identificadas, con sus relaciones y descritas en un diagrama de clases. Las colaboraciones entre las clases para ejecutar los casos de uso también se consideran en esta fase a través de los modelos dinámicos en UML. Es importante notar que sólo se consideran clases que están en el dominio del problema (conceptos del mundo real) y todavía no se consideran clases que definen detalles y soluciones en el sistema de software, tales como clases para interfaces de usuario, bases de datos, comunicaciones, concurrencia, etc.
Diseño
En la fase de diseño, el resultado del análisis es expandido a una solución técnica. Se agregan nuevas clases que proveen de la infraestructura técnica: interfaces de usuario, manejo de bases de datos para almacenar objetos en una base de datos, comunicaciones con otros sistemas, etc. Las clases de dominio del problema del análisis son agregadas en esta fase. El diseño resulta en especificaciones detalladas para la fase de programación.
Programación
En esta fase las clases del diseño son convertidas a código en un lenguaje de programación orientado a objetos. Cuando se crean los modelos de análisis y diseño en UML, lo más aconsejable es trasladar mentalmente esos modelos a código.
Pruebas
Normalmente, un sistema es tratado en pruebas de unidades, pruebas de integración, pruebas de sistema, pruebas de aceptación, etc. Las pruebas de unidades se realizan a clases individuales o a un grupo de clases y son típicamente ejecutadas por el programador. Las pruebas de integración integran componentes y clases en orden para verificar que se ejecutan como se especificó. Las pruebas de sistema ven al sistema como una "caja negra" y validan que el sistema tenga la funcionalidad final que le usuario final espera. Las pruebas de aceptación conducidas por el cliente verifican que el sistema satisface los requerimientos y son similares a las pruebas de sistema.
En todas las disciplinas de la Ingeniería se hace evidente la importancia de los modelos ya que describen el aspecto y la conducta de "algo". Ese "algo" puede existir, estar en un estado de desarrollo o estar, todavía, en un estado de planeación. Es en este momento cuando los diseñadores del modelo deben investigar los requerimientos del producto terminado y dichos requerimientos pueden incluir áreas tales como funcionalidad, performance y confiabilidad. Además, a menudo, el modelo es dividido en un número de vistas, cada una de las cuales describe un aspecto específico del producto o sistema en construcción.
El modelado sirve no solamente para los grandes sistemas, aun en aplicaciones de pequeño tamaño se obtienen beneficios de modelado, sin embargo es un hecho que entre más grande y más complejo es el sistema, más importante es el papel de que juega el modelado por una simple razón: "El hombre hace modelos de sistemas complejos porque no puede entenderlos en su totalidad".
UML es una técnica para la especificación sistemas en todas sus fases. Nació en 1994 cubriendo los aspectos principales de todos los métodos de diseño antecesores y, precisamente, los padres de UML son Grady Booch, autor del método Booch; James Rumbaugh, autor del método OMT e Ivar Jacobson, autor de los métodos OOSE y Objectory. La versión 1.0 de UML fue liberada en Enero de 1997 y ha sido utilizado con éxito en sistemas construidos para toda clase de industrias alrededor del mundo: hospitales, bancos, comunicaciones, aeronáutica, finanzas, etc
Los principales beneficios de UML son:
- Mejores tiempos totales de desarrollo (de 50 % o más).
- Modelar sistemas (y no sólo de software) utilizando conceptos orientados a objetos.
- Establecer conceptos y artefactos ejecutables.
- Encaminar el desarrollo del escalamiento en sistemas complejos de misión crítica.
- Crear un lenguaje de modelado utilizado tanto por humanos como por máquinas.
- Mejor soporte a la planeación y al control de proyectos.
- Alta reutilización y minimización de costos.
UML, ¿Método o Lenguaje de Modelado?
UML es un lenguaje para hacer modelos y es independiente de los métodos de análisis y diseño. Existen diferencias importantes entre un método y un lenguaje de modelado. Un método es una manera explícita de estructurar el pensamiento y las acciones de cada individuo. Además, el método le dice al usuario qué hacer, cómo hacerlo, cuándo hacerlo y por qué hacerlo; mientras que el lenguaje de modelado carece de estas instrucciones. Los métodos contienen modelos y esos modelos son utilizados para describir algo y comunicar los resultados del uso del método.
Un modelo es expresado en un lenguaje de modelado. Un lenguaje de modelado consiste de vistas, diagramas, elementos de modelo ¾ los símbolos utilizados en los modelos ¾ y un conjunto de mecanismos generales o reglas que indican cómo utilizar los elementos. Las reglas son sintácticas, semánticas y pragmáticas (figura 1).
figura 1
Vistas: Las vistas muestran diferentes aspectos del sistema modelado. Una vista no es una gráfica, pero sí una abstracción que consiste en un número de diagramas y todos esos diagramas juntos muestran una "fotografía" completa del sistema. Las vistas también ligan el lenguaje de modelado a los métodos o procesos elegidos para el desarrollo. Las diferentes vistas que UML tiene son:
Vista Use-Case: Una vista que muestra la funcionalidad del sistema como la perciben los actores externos.
Vista Lógica: Muestra cómo se diseña la funcionalidad dentro del sistema, en términos de la estructura estática y la conducta dinámica del sistema.
Vista de Componentes: Muestra la organización de los componentes de código.
Vista Concurrente: Muestra la concurrencia en el sistema, direccionando los problemas con la comunicación y sincronización que están presentes en un sistema concurrente.
Vista de Distribución: muestra la distribución del sistema en la arquitectura física con computadoras y dispositivos llamados nodos.
Diagramas: Los diagramas son las gráficas que describen el contenido de una vista. UML tiene nueve tipos de diagramas que son utilizados en combinación para proveer todas las vistas de un sistema: diagramas de caso de uso, de clases, de objetos, de estados, de secuencia, de colaboración, de actividad, de componentes y de distribución.
Símbolos o Elementos de modelo: Los conceptos utilizados en los diagramas son los elementos de modelo que representan conceptos comunes orientados a objetos, tales como clases, objetos y mensajes, y las relaciones entre estos conceptos incluyendo la asociación, dependencia y generalización. Un elemento de modelo es utilizado en varios diagramas diferentes, pero siempre tiene el mismo significado y simbología.
Reglas o Mecanismos generales: Proveen comentarios extras, información o semántica acerca del elemento de modelo; además proveen mecanismos de extensión para adaptar o extender UML a un método o proceso específico, organización o usuario.
Fases del Desarrollo de un Sistema
Las fases del desarrollo de sistemas que soporta UML son: Análisis de requerimientos, Análisis, Diseño, Programación y Pruebas.
Análisis de Requerimientos
UML tiene casos de uso (use-cases) para capturar los requerimientos del cliente. A través del modelado de casos de uso, los actores externos que tienen interés en el sistema son modelados con la funcionalidad que ellos requieren del sistema (los casos de uso). Los actores y los casos de uso son modelados con relaciones y tienen asociaciones entre ellos o éstas son divididas en jerarquías. Los actores y casos de uso son descritos en un diagrama use-case. Cada use-case es descrito en texto y especifica los requerimientos del cliente: lo que él (o ella) espera del sistema sin considerar la funcionalidad que se implementará. Un análisis de requerimientos puede ser realizado también para procesos de negocios, no solamente para sistemas de software.
Análisis
La fase de análisis abarca las abstracciones primarias (clases y objetos) y mecanismos que están presentes en el dominio del problema. Las clases que se modelan son identificadas, con sus relaciones y descritas en un diagrama de clases. Las colaboraciones entre las clases para ejecutar los casos de uso también se consideran en esta fase a través de los modelos dinámicos en UML. Es importante notar que sólo se consideran clases que están en el dominio del problema (conceptos del mundo real) y todavía no se consideran clases que definen detalles y soluciones en el sistema de software, tales como clases para interfaces de usuario, bases de datos, comunicaciones, concurrencia, etc.
Diseño
En la fase de diseño, el resultado del análisis es expandido a una solución técnica. Se agregan nuevas clases que proveen de la infraestructura técnica: interfaces de usuario, manejo de bases de datos para almacenar objetos en una base de datos, comunicaciones con otros sistemas, etc. Las clases de dominio del problema del análisis son agregadas en esta fase. El diseño resulta en especificaciones detalladas para la fase de programación.
Programación
En esta fase las clases del diseño son convertidas a código en un lenguaje de programación orientado a objetos. Cuando se crean los modelos de análisis y diseño en UML, lo más aconsejable es trasladar mentalmente esos modelos a código.
Pruebas
Normalmente, un sistema es tratado en pruebas de unidades, pruebas de integración, pruebas de sistema, pruebas de aceptación, etc. Las pruebas de unidades se realizan a clases individuales o a un grupo de clases y son típicamente ejecutadas por el programador. Las pruebas de integración integran componentes y clases en orden para verificar que se ejecutan como se especificó. Las pruebas de sistema ven al sistema como una "caja negra" y validan que el sistema tenga la funcionalidad final que le usuario final espera. Las pruebas de aceptación conducidas por el cliente verifican que el sistema satisface los requerimientos y son similares a las pruebas de sistema.
UML ofrece 9 tipos de diagramas con los cuales se pueden modelar sistemas:
- Diagrama de Casos para Uso para modelar los procesos "business"
- Diagrama de Secuencia para modelar el paso de mensajes entre objetos
- Diagrama de Colaboración para modelar interacciones entre objetos
- Diagrama 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.
- Diagrama de Clases para modelar la estructura estática de las clases en el sistema
- Diagrama de Objetos para modelar la estructura estática de los objetos en el sistema
- Diagramas de Componentes para modelar componentes
- Diagrama de Implementación para modelar la distribución del sistema
Paradigma Orientado a Objeto
La orientación a objetos ha derivado de las metodologías anteriores a éste. Así como los métodos de diseño estructurado realizados guían a los desarrolladores que tratan de construir sistemas complejos utilizando algoritmos como sus bloques fundamentales de construcción, similarmente los métodos de diseño orientado a objetos han evolucionado para ayudar a los desarrolladores a explotar el poder de los lenguajes de programación basados en objetos y orientados a objetos, utilizando las clases y objetos como bloques de construcción básicos.
En otras palabras Las técnicas orientadas a objetos permiten que el software se construya a partir de objetos de compartimiento específico.
Los propios objetos se pueden constituir a partir de otros , que a su vez pueden estar formados por otros objetos .Esto nos recuerda a una maquina compleja construida por partes , subpartes y sub-subpartes,etc.
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én basados esta metodología. Por eso, revisaremos los conceptos más importantes que se encuentran en las distintas etapas del desarrollo de software orientado a objetos.
Es importante conocer la base del diseño y programación de buenas clases, tanto por si solas como a través del uso de herencia. Asi como el concepto de subtipos, como concepto teórico que está detrás de las distintas implementaciones de herencia que proveen los lenguajes y provee el marco conceptual de cuando usar referencia. Más tarde presenta el proceso de desarrollo de software orientado a objetos, primero enfocado en la etapa de diseño, en donde se dan a conocer las distintas relaciones entre clases que podemos encontrar, proveer mecanismos para verificar si una clase y las relaciones entre ellas están bien diseñadas, y en particular si la herencia está bien usada.
Esto es fundamental para que los diseños a objetos no sean más complicados de entender que los de procedimientos y para que el software que se diseñe sea reusable y fácil de extender. Finalmente presenta los aspectos más importantes de la etapa de análisis, dando énfasis a la especificación de casos de uso y a como detectar objetos y clases relevantes en el problema.
El objetivo del análisis orientado a objetos es desarrollar una serie de modelos que describan el software de computadora al trabajar para satisfacer un conjunto de requisitos definidos por el cliente. El AOO, como los métodos de análisis convencionales descritos, forma un modelo de análisis multiparte para satisfacer este objetivo.
El modelo de análisis ilustra información, funcionamiento y comportamiento dentro del contexto de los elementos del modelo de objetos.
Analisis y diseño orientados al objeto es la tecnologia de dotacion logica. Cada objeto representa alguna entidad del interes en el sistema que es modelado, este es caracterizado por su clase, su estado y su comportamiento. Los varios modelos se pueden crear para demostrar la estructura estatica, el comportamiento dinamico y el despliegue runtime de estos objetos de colaboracion. Una de las notaciones para representar estos modelos es el UML ( Lenguaje Unificado de Modelado).
El analisis orientado a objetos aplica objeto-modelar tecnicas para analizar los requisitos funcionales para un sistema. El sistema orientado al objeto elabora los modelos del analisis para producir especificaciones para la puesta en practica.
El Análisis y el Diseño de sistema, tienen como fin estudiar sistemáticamente la operación de ingreso de los datos, el flujo de los mismos y la salida de la información; todo ello dentro del contexto de una empresa en particular.
La orientación a objetos ha derivado de las metodologías anteriores a éste. Así como los métodos de diseño estructurado realizados guían a los desarrolladores que tratan de construir sistemas complejos utilizando algoritmos como sus bloques fundamentales de construcción, similarmente los métodos de diseño orientado a objetos han evolucionado para ayudar a los desarrolladores a explotar el poder de los lenguajes de programación basados en objetos y orientados a objetos, utilizando las clases y objetos como bloques de construcción básicos.
En otras palabras Las técnicas orientadas a objetos permiten que el software se construya a partir de objetos de compartimiento específico.
Los propios objetos se pueden constituir a partir de otros , que a su vez pueden estar formados por otros objetos .Esto nos recuerda a una maquina compleja construida por partes , subpartes y sub-subpartes,etc.
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én basados esta metodología. Por eso, revisaremos los conceptos más importantes que se encuentran en las distintas etapas del desarrollo de software orientado a objetos.
Es importante conocer la base del diseño y programación de buenas clases, tanto por si solas como a través del uso de herencia. Asi como el concepto de subtipos, como concepto teórico que está detrás de las distintas implementaciones de herencia que proveen los lenguajes y provee el marco conceptual de cuando usar referencia. Más tarde presenta el proceso de desarrollo de software orientado a objetos, primero enfocado en la etapa de diseño, en donde se dan a conocer las distintas relaciones entre clases que podemos encontrar, proveer mecanismos para verificar si una clase y las relaciones entre ellas están bien diseñadas, y en particular si la herencia está bien usada.
Esto es fundamental para que los diseños a objetos no sean más complicados de entender que los de procedimientos y para que el software que se diseñe sea reusable y fácil de extender. Finalmente presenta los aspectos más importantes de la etapa de análisis, dando énfasis a la especificación de casos de uso y a como detectar objetos y clases relevantes en el problema.
El objetivo del análisis orientado a objetos es desarrollar una serie de modelos que describan el software de computadora al trabajar para satisfacer un conjunto de requisitos definidos por el cliente. El AOO, como los métodos de análisis convencionales descritos, forma un modelo de análisis multiparte para satisfacer este objetivo.
El modelo de análisis ilustra información, funcionamiento y comportamiento dentro del contexto de los elementos del modelo de objetos.
Analisis y diseño orientados al objeto es la tecnologia de dotacion logica. Cada objeto representa alguna entidad del interes en el sistema que es modelado, este es caracterizado por su clase, su estado y su comportamiento. Los varios modelos se pueden crear para demostrar la estructura estatica, el comportamiento dinamico y el despliegue runtime de estos objetos de colaboracion. Una de las notaciones para representar estos modelos es el UML ( Lenguaje Unificado de Modelado).
El analisis orientado a objetos aplica objeto-modelar tecnicas para analizar los requisitos funcionales para un sistema. El sistema orientado al objeto elabora los modelos del analisis para producir especificaciones para la puesta en practica.
El Análisis y el Diseño de sistema, tienen como fin estudiar sistemáticamente la operación de ingreso de los datos, el flujo de los mismos y la salida de la información; todo ello dentro del contexto de una empresa en particular.
Gestión de Calidad de Software
El ciclo de vida de un sistema software empieza en el momento en que nace la idea de desarrollar el sistema y acaba cuando el software por alguna u otra razón deja de ser usado.
Entre estos dos momentos el producto software pasa por varias fases: el diseño de alto nivel, el diseño técnico o detallado, el diseño de programa, el diseño de módulo, la codificación, la ejecución de las pruebas finales, la implantación, la explotación y el mantenimiento, y por último su sustitución por otro sistema.
La obtención de un software con calidad implica la utilización de metodologías o procedimientos estándares para el análisis, diseño, programación y prueba del software que permitan uniformar la filosofía de trabajo, en aras de lograr una mayor confiabilidad, mantenibilidad y facilidad de prueba, a la vez que eleven la productividad, tanto para la labor de desarrollo como para el control de la calidad del software.
La gestión de la calidad es el único instrumento adecuado para evitar un exceso de los gastos por falta de calidad del producto y de los procesos de desarrollo y de mantenimiento, y para poder decidir de forma responsable si un sistema es apto para su uso o no. La gestión, y como parte de ella el control de la calidad, no es exclusivamente la responsabilidad de los que desarrollan un sistema software. Sus clientes, es decir, los usuarios finales, tienen un papel incluso más importante en este proceso. En la situación óptima el equipo de calidad está compuesto por representantes de ambos partidos. Desde el punto de vista de los usuarios la cima de la gestión de la calidad está en la llamada prueba de aceptación, donde la prueba de aceptación se define como aquellas realizadas por los usuarios con carácter previo al paso a producción de una nueva versión del producto. Se trata de pruebas de caja negra en un entorno de preproducción en la que se verifican si las funcionalidades pactadas para la entrega y recogidas en catálogos de requisitos, casos de uso, historias de usuario u otro hito documental, cumplen las expectativas del usuario.
El ciclo de vida de un sistema software empieza en el momento en que nace la idea de desarrollar el sistema y acaba cuando el software por alguna u otra razón deja de ser usado.
Entre estos dos momentos el producto software pasa por varias fases: el diseño de alto nivel, el diseño técnico o detallado, el diseño de programa, el diseño de módulo, la codificación, la ejecución de las pruebas finales, la implantación, la explotación y el mantenimiento, y por último su sustitución por otro sistema.
La obtención de un software con calidad implica la utilización de metodologías o procedimientos estándares para el análisis, diseño, programación y prueba del software que permitan uniformar la filosofía de trabajo, en aras de lograr una mayor confiabilidad, mantenibilidad y facilidad de prueba, a la vez que eleven la productividad, tanto para la labor de desarrollo como para el control de la calidad del software.
La gestión de la calidad es el único instrumento adecuado para evitar un exceso de los gastos por falta de calidad del producto y de los procesos de desarrollo y de mantenimiento, y para poder decidir de forma responsable si un sistema es apto para su uso o no. La gestión, y como parte de ella el control de la calidad, no es exclusivamente la responsabilidad de los que desarrollan un sistema software. Sus clientes, es decir, los usuarios finales, tienen un papel incluso más importante en este proceso. En la situación óptima el equipo de calidad está compuesto por representantes de ambos partidos. Desde el punto de vista de los usuarios la cima de la gestión de la calidad está en la llamada prueba de aceptación, donde la prueba de aceptación se define como aquellas realizadas por los usuarios con carácter previo al paso a producción de una nueva versión del producto. Se trata de pruebas de caja negra en un entorno de preproducción en la que se verifican si las funcionalidades pactadas para la entrega y recogidas en catálogos de requisitos, casos de uso, historias de usuario u otro hito documental, cumplen las expectativas del usuario.
Pruebas de Software
Existen varias metodologías y técnicas
para probar software, evaluar prototipos y revaluar la funcionalidad.
Todas comparten un objetivo: maximizar la calidad de los productos de
software. Pero la prueba en sí misma no mejora la calidad del software.
Las pruebas y otros análisis sólo pueden revelar donde hay un problema y
la calidad no está asegurada hasta que se han eliminado los problemas
notificados.
En un proceso de pruebas formal, suelen
confundirse con mucha facilidad, los niveles de pruebas con los tipos de
prueba, y a pesar de que se encuentren íntimamente relacionadas, tienen
connotaciones diferentes en el proceso. Para entender un poco más,
vamos a partir del hecho de que las pruebas pueden ejecutarse en
cualquier punto del proceso de desarrollo de software, y es aquí donde
los niveles de prueba nos permiten entender con claridad los diferentes
puntos o etapas en donde pueden ejecutarse ciertos tipos de prueba. Por
lo anterior, es común que algunas personas se refieran a los niveles de
pruebas o intenten clasificarlos como: pruebas de desarrollador, pruebas
funcionales y pruebas de usuario final. Sin embargo, la terminología
apropiada para referirse a los diferentes niveles corresponde a la
siguientes cuatro (4) clasificaciones que son: pruebas unitarias,
pruebas de integración, pruebas de sistema y pruebas de aceptación. En
cada uno de estos niveles de prueba, se podrán ejecutar diferentes tipos
de prueba tales como: pruebas funcionales, no funcionales, de
arquitectura y asociadas el cambio de los productos.
A continuación una breve descripción de cada nivel de prueba:
Pruebas Unitarias o de Componente:
este tipo de pruebas son ejecutadas normalmente por el equipo de
desarrollo, básicamente consisten en la ejecución de actividades que le
permitan verificar al desarrollador que los componentes unitarios están
codificados bajo condiciones de robustez, esto es, soportando el ingreso
de datos erróneos o inesperados y demostrando así la capacidad de
tratar errores de manera controlada. Adicionalmente, Las pruebas sobre
componentes unitarios, suelen denominarse pruebas de módulos o pruebas
de clases, siendo la convención definida por el lenguaje de programación
la que influye en el término a utilizar. Por último, es importante que
toda la funcionalidad de cada componente unitario sea cubierta, por al
menos, dos casos de prueba, los cuales deben centrarse en probar al
menos una funcionalidad positiva y una negativa.
Pruebas de Integración:
este tipo de pruebas son ejecutas por el equipo de desarrollo y
consisten en la comprobación de que elementos del software que
interactúan entre sí, funcionan de manera correcta.
Pruebas de Sistema: este
tipo de pruebas deben ser ejecutadas idealmente por un equipo de
pruebas ajeno al equipo de desarrollo, una buena práctica en este punto
corresponde a la tercerización de esta responsabilidad. La obligación de
este equipo, consiste en la ejecución de actividades de prueba en donde
se debe verificar que la funcionalidad total de un sistema fue
implementada de acuerdo a los documentos de especificación definidos en
el proyecto. Los casos de prueba a diseñar en este nivel de pruebas,
deben cubrir los aspectos funcionales y no funcionales del sistema. Para
el diseño de los casos de prueba en este nivel, el equipo debe utilizar
como bases de prueba entregables tales como: requerimientos iniciales,
casos de uso, historias de usuario, diseños, manuales técnicos y de
usuario final, etc. Por último, es importante que los tipos de pruebas
ejecutados en este nivel se desplieguen en un ambiente de pruebas /
ambiente de pre-producción cuya infraestructura y arquitectura sea
similar al ambiente de producción, evitando en todos los casos utilizar
el ambiente real del cliente, debido principalmente, a que pueda
ocasionar fallos en los servidores, lo que ocasionaría indisponibilidad
en otros servicios alojados en este ambiente.
Pruebas de Aceptación:
Independientemente de que se haya tercerizado el proceso de pruebas y
así la firma responsable de estas actividades haya emitido un
certificado de calidad sobre el sistema objeto de prueba, es
indispensable, que el cliente designe a personal que haga parte de los
procesos de negocio para la ejecución de pruebas de aceptación, es
incluso recomendable, que los usuarios finales que participen en este
proceso, sean independientes al personal que apoyó el proceso de
desarrollo. Cuando las pruebas de aceptación son ejecutadas en
instalaciones o ambientes proporcionados por la firma desarrolladora se
les denominan pruebas Alpha, cuando son ejecutadas desde la
infraestructura del cliente se les denomina pruebas Beta. En los casos
en que las pruebas de aceptación del producto se hayan ejecutado en el
ambiente del proveedor, el aplicativo no podrá salir a producción, sin
que se hayan ejecutados las respectivas pruebas Beta en el ambiente del
cliente, de lo anterior es importante concluir, que las pruebas Alpha
son opcionales, pero las pruebas Beta son obligatorias.
También de acuerdo al grado de
conocimiento de la estructura interna del sistema bajo prueba se pueden
clasificar las pruebas en:
Pruebas de caja blanca (White-Box
Testing). Son pruebas estructurales. Conociendo el código y siguiendo su
estructura lógica, se pueden diseñar pruebas destinadas a comprobar que
el código hace correctamente lo que el diseño de bajo nivel indica y
otras que demuestren que no se comporta adecuadamente ante determinadas
situaciones. Ejemplos típicos de ello son las pruebas unitarias. Se
centran en lo que hay codificado o diseñado a bajo nivel por lo que no
es necesario conocer la especificación de requisitos, que por otra parte
será difícil de relacionar con partes diseñadas a muy bajo nivel.
Las pruebas de caja negra (Black-Box
Testing) son pruebas funcionales. Se parte de los requisitos
funcionales, a muy alto nivel, para diseñar pruebas que se aplican sobre
el sistema sin necesidad de conocer como está construido por dentro
(Caja negra). Las pruebas se aplican sobre el sistema empleando un
determinado conjunto de datos de entrada y observando las salidas que se
producen para determinar si la función se está desempeñando
correctamente por el sistema bajo prueba. Las herramientas básicas son
observar la funcionalidad y contrastar con la especificación.
Ejemplos típicos de pruebas de caja
negra son la comprobación de valores límite, pruebas de integridad de la
base de datos, pruebas de situaciones de excepción, o pruebas de
rendimiento del sistema. Presentan una limitación en cuanto a que es
prácticamente imposible reproducir todo el espectro por la innumerable
cantidad de combinaciones de entrada posibles, agravada por el
desconocimiento de la lógica interna.
No hay comentarios:
Publicar un comentario