Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Entornos
de desarrollo
José Manuel Piñeiro Gómez
Entornos
de desarrollo
Entornos
de desarrollo
José Manuel Piñeiro Gómez
Paraninfo
ciclos formativos
Paraninfo
Entornos de desarrollo
O José Manuel Piñeiro Gómez
Gerente Editorial
Reservados los derechos para to-
María José López Raso dos los países de lengua española.
De conformidad con lo dispuesto
Técnico Editorial en el artículo 270 del Código Pe-
Paola Paz Otero nal vigente, podrán ser castigados
con penas de multa y privación de
Sofía Durán Tamayo
libertad quienes reprodujeren o
plagiaren, en todo o en parte, una
Editora de Adquisiciones obra literaria, artística o científica
Carmen Lara Carmona fijada en cualquier tipo de soporte
sin la preceptiva autorización. Nin-
guna parte de esta publicación,
Producción
incluido el diseño de la cubierta,
Nacho Cabal Ramos puede ser reproducida, almace-
nada o transmitida de ninguna
Diseño de cubierta forma, ni por ningún medio, sea
este electrónico, químico, mecáni-
Ediciones Nobel
co, electroóptico, grabación, foto-
copia o cualquier otro, sin la previa
Preimpresión autorización escrita por parte de la
Ediciones Nobel Editorial.
Todas las marcas comerciales y sus logos mencionados en este texto son propiedad
de sus respectivos dueños.
ISBN: 978-84-1366-524-5
Depósito legal: M-14353-2022
(24.040)
La editorial recomienda que el alumnado realice las actividades sobre el cuaderno y no sobre el libro.
Paraninfo
Este libro desarrolla los contenidos del módulo profesional de Entornos de desarrollo,
de los Ciclos Formativos de grado superior en Desarrollo de Aplicaciones Web
y Desarrollo de Aplicaciones Multiplataforma, pertenecientes a la familia
profesional de Informática y Comunicaciones.
Programación didáctica.
Solucionario.
Presentación de aula.
Examina.
LDP (Libro Digital Proyectable).
Materiales y documentación extra.
'
$
de refactorización.
Proyecto geometría para la aplicación de ingeniería
inversa.
elif _Opel';tí…¡ == "MIRROR 7":
N =
y Eeraración la cobertura
de archivos ejecutables
en NetBeans ......... 60 a s D.
2.5. Instalación y desinstalación Mº_º? conceptual """"""" .
de médulos --....ses=:::.5 64 Actividades finales .........r... 119
2.5.1. Instalación
y desinstalación
de módulos
M 4. Optimización .
en Eclipse ........... 64 y documentación ........ 125
2.5.2. Instalación
y desinstalación 4.1. Refactorización ........... 126
de módulos 4.1.1. Los malos olores
en NetBeans......... 71 (bad smells). ......... 127
2.6. Mecanismos de actualización. .. 73 4.1.2. Implantación
Mapa conceptual. ........—....e.. 74 de la refactorización. . 129
Actividades finales ...........é.. 75 4.1.3. Patrones de
refactorización
He - z en Eclipse. ......... 130
- 3 Dlsen0y rea||2a0|0n 4.1.4. Otras operaciones
Introducción
Sería imposible concebir la sociedad actual sin tener en cuenta la presencia de los orde-
nadores, pues estos desempeñan un papel trascendental en muchos ámbitos de nuestra
actividad cotidiana. En esta unidad, se analiza el software del ordenador y el proceso que
es necesario llevar a cabo para la creación de programas o aplicaciones informáticas.
Este es el objeto de estudio de una disciplina conocida como ingeniería del software.
Según la definición de Pressman (2010), más rigurosa y técnica, el software es: «1) ins-
trucciones (programas de cómputo) que cuando se ejecutan proporcionan las caracte-
rísticas, función y desempeño buscados; 2) estructuras de datos que permiten que los
programas manipulen de forma adecuada la información, y 3) información descriptiva tan-
to en papel como en formas virtuales que describen la operación y uso de los programas.»
1. Unidad central de proceso (CPU): es la parte del ordenador que ejecuta las instruc-
ciones contenidas en los programas. Aunque las instrucciones de un programa
puedan ser muy complejas, estas al final se traducen o materializan en sencillas
operaciones aritméticas (sumas, restas, etc.) y lógicas (OR, AND, etc.) que se rea-
lizan sobre bits. La CPU consta, a su vez, de las siguientes partes:
2. Memoria principal o memoria RAM: contiene las instrucciones del programa que
hay que ejecutar y los datos sobre los que deben operar estas instrucciones. La
CPU toma estas instrucciones de la memoria RAM y envía las órdenes necesarias
para su ejecución. Se trata de una memoria volátil, lo que quiere decir que su con-
tenido desaparece cuando se apaga el ordenador.
Para la interconexión de todos estos elementos, existe una serie de conexiones que reci-
ben el nombre de buses, que se representan mediante flechas (véase Figura 1.1).
REGISTROS
MEMORIA
PRINCIPAL
| UNIDAD DE <i>
| CONTROL
Figura 1.1. La estructura de un ordenador consta de una CPU, dividida en: unidad de control, unidad
aritmético-lógica (ALU) y registros; la memoria principal o memoria RAM y la unidad de entrada/salida, que
permite la comunicación del ordenador con el exterior gracias a la conexión de los periféricos con esta unidad.
Los diversos elementos del hardware de un ordenador se conectan por medio de unas líneas llamadas buses
por las que circulan los bits.
1. DESARROLLO DE SOFTWARE |NFORMÁTÍCA y (
El software, por tanto, hace referencia al conjunto de instrucciones que debe ejecutar el
ordenador para resolver un problema a partir una serie de datos de entrada con el fin de
obtener determinados resultados. Tanto estas instrucciones como los datos sobre los
que estas operan deben residir en la memoria principal o memoria RAM. Estas instruc-
ciones son tomadas por la unidad de control, la cual envía las órdenes necesarias con el
fin de que la ALU realice las operaciones para dar respuestas a esas instrucciones. Los
datos de entrada para resolver el problema pueden ser suministrados al ordenador por
medio de una serie de periféricos de entrada, como el teclado y el ratón, y los resultados
se pueden mostrar mediante los periféricos de salida, como la pantalla y la impresora.
La información que se requiere guardar de manera permanente se almacena en periféri-
cos de entrada/salida, como el disco duro o una memoria flash.
E Software de aplicación: se trata de todo aquel software que no se incluye en los gru-
pos anteriores. Son todos aquellos programas que ayudan a las y los usuarios a
realizar algún tipo de tarea y que permiten que el ordenador sea un objeto útil para
las personas que lo usan. La existencia de este tipo de software es posible gracias
a la existencia del software de sistemas y del software de programación, ya que, al
final, se trata de programas creados con software de programación, y porque, para
poder usar cualquier ordenador, se requiere un software de sistemas. Constituyen
software de aplicación multitud de aplicaciones distintas, como aplicaciones ofimá-
ticas, programas de gestión empresarial, herramientas de diseño y programas para
el desarrollo de sitios web, videojuegos, etcétera.
Un lenguaje de programación puede definirse como una notación para escribir programas
a través de los cuales es posible establecer una comunicación con el hardware y dar así
las órdenes necesarias para la realización de una determinada tarea. Los lenguajes de
programación vienen definidos por una gramática o conjunto de reglas que se aplican a
un alfabeto compuesto por un conjunto de símbolos.
usarse debido a su complejidad, siendo sustituido por otros más cercanos al lengua-
je natural, que eran más fáciles de aprender y de utilizar. Las instrucciones en el len-
guaje máquina son secuencias de unos y ceros. Para referirse a los datos que se
van a procesar, este lenguaje utiliza la dirección de memoria en la que se encuen-
tran, de forma que es tarea del programador asignar una dirección a cada dato.
1. DESARROLLO DE SOFTWARE |NFORMATICA / [Cf
Figura 1.2. Las instrucciones en lenguaje ensamblador están escritas empleando códigos mnemotécnicos
(add indica sumar; mov, mover; etc.) y cada instrucción corresponde a una instrucción en lenguaje
máquina. Para pasar del lenguaje ensamblador al lenguaje máquina se usa un traductor llamado
ensamblador.
m Lenguajes de alto nivel o lenguajes evolucionados: tienen como objetivo principal li-
berar al programador de tareas tediosas y complejas que pueden frenar su producti-
vidad y eficiencia. Esto se consigue gracias al gran nivel de abstracción que ofrecen
estos lenguajes, lo cual hace que sea innecesario que las programadoras y progra-
madores conozcan las características de la máquina. Otra ventaja es la proximidad
que presentan estos lenguajes respecto al lenguaje natural. Sus características
más importantes son las siguientes:
— Se pueden definir variables para recoger los datos que se vayan a tratar. Estas
variables pueden adoptar la forma de complejas estructuras de datos, lo que fa-
O Ediciones Paraninfo
Sin embargo, no todo son ventajas: estos programas también presentan inconve-
nientes:
En el ámbito de los lenguajes de alto nivel, también es posible realizar una clasificación
en función del paradigma de programación empleado. Así, cabe distinguir entre /enguajes
estructurados y lenguajes orientados a objetos.
módulos se combinan entre sí, realizándose llamadas de unos a otros. En estas llama-
das, los módulos se pasan datos (llamados parámetros) y a veces devuelven resultados.
Los módulos pueden ser de dos tipos: procedimientos o funciones. La diferencia entre
estos es que las funciones devuelven algún dato como resultado de su ejecución, mien-
tras que los procedimientos no lo hacen.
Argot técnico
En algunos lenguajes de programación, como C, no se realiza de manera explícita la
distinción entre procedimiento y función, sino que se llama función a cualquier módulo.
En estos lenguajes, una función puede devolver un resultado o no devolver nada, de forma
que se puede considerar que, conceptualmente, las funciones que no devuelven ningún
resultado son en realidad procedimientos.
Figura 1.4. Diagrama de estructuras que muestra la arquitectura de una aplicación informática siguiendo
la metodología estructurada.
Los lenguajes orientados a objetos, que surgieron más tarde, supusieron en cierto modo
un cambio de visión en relación con el desarrollo de software. Se pasó de un enfoque
centrado en los procesos a prestar mayor atención a los datos sobre los que había
que operar. Según el paradigma orientado a objetos, se considera que una aplicación
| JMUNÍCACIONES 1. DESARROLLO DE SOFTWARE
informática consta de diversos objetos que interactúan entre sí. Un objeto es una instan-
cia de una clase, la cual está constituida por una serie de datos y un conjunto de ope-
raciones que se aplican sobre dichos datos. Los datos de una clase reciben el nombre
de atributos y las operaciones que se aplican sobre esos datos se llaman métodos. La
ejecución de todas las tareas encomendadas a un programa se logra mediante la parti-
cipación cooperativa de los objetos que componen la aplicación. Si en las metodologías
estructuradas, esta participación cooperativa se conseguía mediante las llamadas de
unos mádulos a otros, en el paradigma orientado a objetos, esta se consigue mediante
el envío de mensajes. Un mensaje representa la solicitud enviada desde un método de
un objeto para que otro objeto o él mismo ejecute otro método.
Por otra parte, un objeto se identifica por un conjunto de datos que configuran su esta-
do y un conjunto de métodos que indican el comportamiento que muestra dicho objeto:
Para el caso de los lenguajes estructurados, investiga cuáles de ellos han incor-
porado la programación orientada a objetos dando lugar a un lenguaje orientado a
objetos, tal y como ocurrió con el lenguaje orientado a objetos C++, que surgió como
extensión del lenguaje estructurado C.
1. DESARROLLO DE SOFTWARE |NFORMAT¡CA Y F
Se considera código fuente aquel que el programador escribe directamente, por lo que
en casi todos los casos, consiste en instrucciones escritas siguiendo las normas de un
lenguaje de programación de alto nivel. Como el ordenador no comprende este lengua-
je, debe ser transformado en código objeto. Dependiendo de cómo se lleve a cabo este
proceso de traducción o de transformación del código fuente en código objeto, hay dos
tipos de traductores:
1. Compiladores. Son traductores que realizan su tarea de forma global, esto es,
en un único proceso se analiza todo el programa fuente, se genera el código ob-
jeto respectivo y se almacena el resultado. Todo esto se podrá llevar a cabo en
caso de que el programa fuente esté correctamente escrito de acuerdo con las
normas del lenguaje de programación correspondiente; en caso de que no sea
así, no se generará el código objeto y se mostrarán uno o varios mensajes de
error que pueden ayudar a la persona encargada de la programación a corregir
estos errores. El código objeto generado como resultado de la compilación, de-
pendiendo del tipo de compilador, se podrá ejecutar directamente o puede que
se precisen otros pasos antes de que el programa sea ejecutable, como los pa-
sos de ensamblado, enlazado y carga. Una vez obtenido el código ejecutable,
este se podrá ejecutar tantas veces como se desee sin necesidad de tener que
volver a realizar el proceso de compilación.
Para realizar todo el proceso, desde la generación del código fuente hasta la ejecución
del programa, se precisa una serie de herramientas:
M Para escribir el código fuente se puede emplear un editor de textos simple o algu-
na herramienta de programación. Hay programas, como Notepadd++ o Sublime, que
permiten crear código fuente en diferentes lenguajes de programación y facilitan el
trabajo de las y los programadores, marcando los diferentes elementos del código
fuente en distintos colores, lo que facilita de manera importante la tarea de escritu-
ra del código fuente.
m También puede ocurrir que el código objeto generado no sea ejecutable directamen-
te, en cuyo caso, será necesario emplear alguna herramienta adicional, como un
enlazador. El enlazador inserta en el código objeto una serie de rutinas y librerías
que permiten que el código sea directamente ejecutable por el ordenador.
B 1.4.Máquinas virtuales
Una máquina virtual es una aplicación que ejecuta los programas como si fuese una má-
quina real, aunque no lo sea. Existen dos tipos de máquinas virtuales:
carga importante para el ordenador físico en el que se instalan, por lo que se re-
quiere que este tenga una capacidad notable, sobre todo, en cuanto a disco duro
y memoria RAM.
1. DESARROLLO DE SOFTWARE ¡NFORMAHCA [
v m| OodIiaaeEm|oO
| Ú Windows 7 x64 UBU
3
Papelera de
'l
OraciexEl12
Wi
áí9 N
HediSQU9:5 64
U
SQL Developer
e
reciciaje
e
GetStarted
Oracle Database
With
D.O
Practicas SIA
Figura 1.5. Uso del programa VMware Workstation para poder utilizar, dentro de un equipo, otro equipo
que tiene incorporado su propio sistema operativo y disco duro, entre otras tecnologías.
La máquina virtual de Java (JVM, por sus siglas en inglés, Java virtual machine) es el
ejemplo típico de máquina virtual de proceso. Su ventaja es que dota de portabilidad al
lenguaje, de manera que un programa compilado en Java se puede ejecutar en cualquier
plataforma. Esto se debe a que el programa escrito en Java realmente no es ejecutado
por el procesador del ordenador, sino por la JVM.
-
O Ediciones Paraninfo
La máquina virtual de Java (JVM), como se estudiará en la Unidad 2, forma parte del entorno
en tiempo de ejecución de Java (JRE, por sus siglas en inglés, Java Runtime Environment),
que está constituido por un conjunto de utilidades que permite la ejecución de programas
en Java. El JRE incluye, además de la JVM, un conjunto de librerías de Java y otros
componentes necesarios para que un programa escrito en Java se pueda ejecutar.
O MUNICACIONES
1. DESARROLLO DE SOFTWARE
El proceso que se lleva a cabo para poder ejecutar un programa escrito en Java es el si-
guiente:
3. La máquina virtual de Java traduce el archivo con extensión .class al código bina-
rio para que el programa pueda ser ejecutado. Como la JVM está disponible en
diferentes sistemas operativos, los archivos con extensión .class se pueden eje-
cutar en distintas plataformas, como Windows, Linux, macOS, etcétera.
En la década de los 70 del siglo xx, se produjo lo que se conoce como la crisis del software,
que se refiere a un conjunto de problemas encontrados en el desarrollo de software. Esta
O Ediciones Paraninfo
crisis abarcaba cómo desarrollar el software, cómo mantenerlo y cómo satisfacer la de-
manda creciente de software.
Se llegó a la conclusión de que todos estos problemas podían corregirse y que la clave
estaba en dar un enfoque de ingeniería al desarrollo del software, junto con la mejora de
las técnicas y las herramientas.
Todo esto desembocó en el nacimiento de la ingeniería del software, que es una disci-
plina para el desarrollo de software que surgió a partir de la ingeniería de sistemas y de
hardware. La definición que propuso Fitz Bauer para la ingeniería del software es: «el es-
tablecimiento y uso de principios de ingeniería para llegar a un obtener un software renta-
ble, que sea fiable y que funcione eficientemente en máquinas reales».
E
IMPLANTACIÓN
e
DESARROLLO
INGENIERÍA
DEL SOFTWARE
DISEÑO 7A /N(
m VALIDACIÓN º
Y VERIFICACIÓN
PRUEBAS
Figura 1.7. La ingeniería del software incluye una serie de tareas de desarrollo como la planificación, el análisis,
diseño, programación, pruebas e implantación. Aquí también se muestran otros conceptos relacionados
con el desarrollo de software, como el propio desarrollo y la validación y verificación de este.
El objetivo fundamental de la ingeniería del software es, por tanto, regular de alguna ma-
nera el desarrollo de software, es decir, establecer de manera clara las tareas que es ne-
cesario realizar para crear aplicaciones informáticas, realizando controles que aseguren
que la calidad de los programas resultantes sea aceptable.
Argot técnico
Según la RAE, el término ingeniería se refiere al «conjunto de conocimientos orientados a la
invención y utilización de técnicas para el aprovechamiento de los recursos naturales o para
la actividad industrial».
O Ediciones Paraninfo
Se suele emplear también el término proceso software para referirse a los pasos necesa-
rios para desarrollar una aplicación informática. En este sentido, una de las acepciones
del vocablo proceso en el diccionario de la RAE es la siguiente: «conjunto de las fases
sucesivas de un fenómeno natural o de una operación artificial». Se puede, por tanto, in-
terpretar que el proceso de ingeniería del software o proceso software hace referencia al
conjunto de fases para la construcción de software. En el Apartado 1.6, se estudiarán a
fondo las tareas necesarias para el desarrollo de software.
E Análisis: el objetivo de esta tarea es analizar las necesidades de los usuarios po-
tenciales del software para determinar qué debe hacer la aplicación y, de acuerdo
con ello, escribir una especificación precisa de dicho sistema. Durante esta fase
se pretende responder a las siguientes preguntas: qué información ha de ser pro-
cesada, qué función y rendimiento se desean, qué interfaces deben establecerse,
qué restricciones de diseño existen y qué criterios de validación se necesitan para
definir un sistema correcto. Para ello, como es obvio, es necesario realizar una ac-
tividad inicial de comunicación con el cliente que ha encargado el desarrollo de la
aplicación, y una vez obtenida la información necesaria, se podrá modelar el siste-
ma. Como resultado, se obtendrá una especificación del sistema, que consistirá en
una documentación que describe lo que tiene que hacer el software, pero no cómo.
Es primordial que esta documentación sea comprensible, completa y fácil de verifi-
car y de modificar para facilitar todo el trabajo posterior.
Mantenimiento
Recuerda
Aunque la tarea de mantenimiento parezca poco importante, hay estudios que indican que
más del 50 % del esfuerzo de desarrollo de software se dedica a esta tarea.
Esto se debe a que es muy común que toda aplicación informática, a lo largo de su vida,
debe ser sometida a ampliaciones, correcciones o a adaptaciones a nuevos entornos.
Por este motivo, es muy importante tener presente que, al desarrollar software, lo más
probable es que otras personas tengan que revisarlo y modificarlo, y por este motivo,
nuestro trabajo siempre debe poder ser entendido por esas personas.
Además de las tareas técnicas que se han señalado, es necesario llevar a cabo otra ta-
rea, que debe comenzar tras la comunicación inicial con el cliente y que es una actividad
más de gestión que técnica. Se trata de la tarea de planificación, que consiste en elabo-
rar un plan del proyecto de software que indique las tareas técnicas que se han de rea-
lizar, los riesgos probables, los recursos que se necesitan, los productos de trabajo que
se obtendrán y una programación de las actividades (qué actividades se deben ejecutar,
en qué orden, la duración de cada actividad, los recursos humanos y materiales necesa-
rios para cada actividad, etc.).
Por otro lado, además de todas estas actividades, que Pressman (2010) denomina ac-
tividades estructurales, para el desarrollo de software, es preciso realizar otras tareas
adicionales, de menor carácter técnico y también relacionadas con la gestión, y que
Pressman (2010) llamó actividades sombrilla:
E Administración del riesgo: consiste en evaluar los riesgos (problemas) que pueden
afectar al resultado del proyecto o a la calidad del producto.
*OMUNICACIONES 1. DESARROLLO DE SOFTWARE
M Revisiones técnicas: se evalúan los productos obtenidos con el fin de descubrir y eli-
minar errores antes de que se propaguen a la siguiente actividad.
m Medición: consiste en definir y reunir las mediciones del proceso, proyecto y produc-
to para ayudar al equipo a entregar el software que satisfaga las necesidades del
cliente.
E Preparación y producción del producto del trabajo: se agrupan las actividades nece-
sarias para crear productos del trabajo, como modelos, documentos, registros, for-
matos, etcétera.
ME 1.6.1.Análisis
El objetivo de esta actividad estructural de análisis es lograr una comprensión clara del
problema que se necesita resolver o, dicho de otro modo, de los requisitos funcionales
que debe cumplir la aplicación que el cliente ha encargado.
Además de los requisitos funcionales, que hacen referencia a lo que tiene que hacer la
aplicación, hay otro tipo de requisitos llamados no funcionales, como los siguientes:
M Escalabilidad: capacidad del sistema para manejar aumentos de carga sin disminuir
el rendimiento.
E Seguridad: grado con que una aplicación protege la información contra el acceso in-
debido a ella.
Estos requisitos también hay que tenerlos en cuenta para crear una aplicación que res-
ponda a las necesidades del cliente.
Antes de elaborar los modelos que son el resultado de la fase de análisis, es necesaria
una tarea de comunicación con el cliente, para la que se pueden emplear distintas téc-
nicas, como:
En la ERS, se incluyen modelos gráficos con apoyos textuales. Dichos modelos tienen la
ventaja de no ser ambiguos, a diferencia del lenguaje natural (español, inglés, etc.), y al
ser creados con herramientas informáticas, son fácilmente modificables. En esta etapa,
se crearán tanto diagramas de clases como diagramas de casos de uso, que se estudia-
rán en las Unidades 5 y 6 de este libro, respectivamente. En la Figura 1.9, se muestra un
diagrama de casos de uso.
<<incluye>> . ..
______________ - a M Identificación
. <<incluye>>
Glieñte — . — eÉ A YE nl ea si h
O Ediciones Paraninfo
Figura 1.9. Este diagrama de casos de uso refleja los requisitos funcionales que debe satisfacer una aplicación
para una entidad bancaria en la que los usuarios pueden realizar tres tipos de operaciones con su cuenta
bancaria: ingresar dinero, extraer dinero o realizar una transferencia. Para los dos últimos tipos de operaciones,
los clientes se tienen que identificar.
“ñ MUNICAGONES 1. DESARROLLO DE SOFTWARE
BNE 1.6.2.Diseño
Partiendo de la ERS obtenida en la etapa anterior, que indica, en esencia, cuál es el pro-
blema que se ha de resolver con la aplicación, en la etapa de diseño, se determina cómo
se ha de solucionar dicho problema. Para ello, se partirá de los diagramas obtenidos en
la etapa de análisis, refinando algunos de ellos y creando otros que indiquen los pasos
que hay que dar para responder a los requisitos establecidos.
Por ejemplo, partiendo del diagrama de casos de uso obtenido en la etapa de análisis,
se tratará de establecer que acciones hay que llevar a cabo para ejecutar cada caso de
uso, teniendo en cuenta que cada caso de uso se corresponde generalmente con un re-
quisito funcional. Así, tomando como ejemplo el diagrama de casos de uso de la Figu-
ra 1.9, en la etapa de diseño, habrá que indicar cuáles son los pasos necesarios para
realizar una transferencia de dinero de una cuenta a otra. De esta forma, cada caso de
uso genera un diagrama de interacción que detalla los pasos necesarios para ejecutarlo.
ME 1.0.3. Programación
Se parte del diseño detallado y, en esta fase, se escribe el código fuente correspondien-
te siguiendo las normas del lenguaje de programación de alto nivel seleccionado.
1 package programas;
a import java.util.Scanner;
3 public class PruebaSumaPares (
4 public static void main(String[] args) (
3 //Declaramos una variable para que contenga el resultado de
las sumas
6 int suma = 0;
7 /*Usamos la variable num para contener todos los números
8 comprendidos entre 1 y máximo*/
9 Tnt num =
10 System.out.print (“Introduzca un número mayor o igual que 1: “);
ha //Leemos un número entero por teclado y lo almacenamos en
máximo
12 Scanner teclado = new Scanner (System.in);
13 int máximo = teclado.nextInt();
14 //Sumamos los números pares comprendidos entre 1 y máximo
15 while (num <= máximo) f
16 if (num % 2 == 0)
17 suma = suma + num;
18 ++num;
19 )
20 System.out .printiln (“La suma de los números pares entre 1 y
“ + Máximo + “ es “+suma);
21 )
22
BNE 1.6.4.Pruebas
O Ediciones Paraninfo
El objetivo de esta actividad es detectar errores en el software antes de que este sea en-
tregado al cliente. La estrategia que se aplica en dichas pruebas consiste en realizarlas
desde los elementos más pequeños hasta los más grandes, es decir, se comienza pro-
bando pequeños componentes de software hasta llegar al programa completo.
- —Í,j.¡“*-/'/qí UN'CAGONES 1. DESARROLLO DE SOFTWARE
1. Las pruebas de caja blanca o pruebas estructurales: se examinan los detalles de cada
módulo, para lo que se debe disponer del código fuente. Así, se prueban los diferen-
tes caminos a través de este código, así como los bucles, las variables, etcétera.
Entrada Entrada
Figura 1.10. En las pruebas de caja blanca es necesario conocer el código fuente para realizar las pruebas,
mientras que en las de caja negra, solo es necesario conocer las funciones que realiza el software
para comprobar si la salida obtenida coincide con la esperada.
ME 1.6.5. Explotación
Una vez que se ha probado el software, se han corregido los errores detectados y se ha
documentado todo el proceso, se lleva a cabo la instalación y la puesta a punto y en fun-
cionamiento de la aplicación en las instalaciones del cliente. Durante esta fase, es nece-
saria la presencia del cliente. Por lo tanto, las tareas de esta fase son:
E Se llevan a cabo las comprobaciones conocidas como pruebas beta, que se realizan
en las instalaciones del cliente.
O Ediciones Paraninfo
E Una vez completados los pasos anteriores, la aplicación ya pasa a la fase de pro-
ducción normal, esto es, a su uso por parte del usuario final.
1. DESARROLLO DE SOFTWARE |NFORMATÍCA Y KF
ME 1.6.6. Mantenimiento
Hay diferentes tipos de mantenimiento en función del motivo que lo origina:
E Mantenimiento perfectivo: es muy común que, con el paso del tiempo, el cliente so-
licite ampliaciones funcionales, es decir, desee que la aplicación incorpore nuevos
requisitos funcionales. Asimismo, es posible que se deseen mejoras en requisitos
no funcionales, por ejemplo, que el programa se ejecute más rápidamente o que se
incremente la seguridad del sistema.
E Jefe de proyecto: lleva a cabo la tarea de planificación del proyecto, que incluye,
además de la propia planificación, la puesta en marcha del proyecto, su ejecu-
ción, seguimiento, control y cierre. Se trata, pues, de una tarea más de gestión que
técnica pero de gran relevancia, pues puede influir de manera decisiva en el éxito
o fracaso del proyecto. Se trata del máximo responsable de que el proyecto salga
adelante.
E Expertos del dominio: son personas que trabajan en la empresa u organismo para
el que hay que desarrollar la aplicación y que conocen el dominio del problema, es
decir, la parte de la realidad para la que se va a crear la aplicación. Los técnicos de-
ben comunicarse con estas personas, puesto que son las que conocen en detalle
los requisitos que la aplicación debe satisfacer.
E Arquitecto: a partir del trabajo realizado por el analista, debe definir las líneas
maestras del diseño, estableciendo la arquitectura del sistema, esto es, la mane-
ra en que este se divide en una serie de componentes. Esta arquitectura deberá
ser tomada como referencia por el resto de personas desarrolladoras para llevar a
buen término su trabajo.
]MUN4CACIONES 1. DESARROLLO DE SOFTWARE
Esta distribución de roles no indica necesariamente que cada rol sea desempeñado por
una sola persona ni tampoco que una misma persona no pueda desempeñar varios ro-
les. Estos hacen referencia simplemente a los distintos papeles que deben desempe-
har personas en el desarrollo de software, pero cada uno puede ser desempeñado por
una o varias personas o, incluso, una persona puede desempeñar varios de estos roles,
lo que dependerá de las características de la aplicación que se esté desarrollando, del
equipo de desarrollo con que se cuente y de las características y organización de la em-
presa de desarrollo.
SNE — V e 3 - e Y
[) * A . * .V. E . o
| E ./ .
- " H N ".. h
D o A
O Ediciones Paraninfo
Figura 1.11. El trabajo conjunto y cohesionado de todos los miembros del equipo de desarrollo bajo el mando
de un líder (jefe de proyecto) es un aspecto fundamental para el éxito del proyecto.
1. DESARROLLO DE SOFTWARE |NFORMAT¡CA Y [F
Un ciclo de vida determina el orden en el que se deben llevar a cabo las tareas en el pro-
ceso de desarrollo de software y los criterios que se deben cumplir para realizar el paso
de una tarea a la siguiente. Estos criterios consisten en la obtención de ciertos produc-
tos intermedios y, también, en indicar las características que deben satisfacer estos pro-
ductos para progresar a la fase posterior. Por ejemplo, como resultado de la tarea de
análisis, se debe obtener una ERS y se puede establecer qué condiciones debe cumplir
esta para poder avanzar a la fase de diseño.
De todo ello se deduce que la selección del ciclo de vida para un proyecto es una tarea
muy relevante que puede influir de manera decisiva en su éxito o fracaso.
El ciclo de vida que surgió en primer lugar es el llamado ciclo de vida clásico o modelo
en cascada. Posteriormente, se desarrollaron otros modelos: de proceso incremental, de
proceso evolutivo y de desarrollo ágil. En los siguientes apartados, se describe cada uno
de ellos.
ME 1.8.1.Modelo en cascada
El modelo en cascada, también llamado ciclo de vida clásico, es el modelo más primitivo
de ciclo de vida, pero ha resultado fundamental para el progreso posterior porque en él
se identifican ya prácticamente todas las clases de actividades distintas que intervienen
en el desarrollo y explotación de software.
Se plantea un flujo secuencial de las actividades y para pasar de una fase a la siguiente
es necesario cumplir ciertos objetivos. Para detectar los errores lo antes posible y evitar
O Ediciones Paraninfo
del ciclo de vida, como se indica con las flechas de la Figura 1.12. Por ejemplo, si en la
etapa de mantenimiento, se detecta que se cometió algún error en el diseño, será nece-
sario corregir dicho error de diseño y realizar cambios en las etapas posteriores de pro-
gramación y pruebas.
Mantenimiento
Figura 1.12. Representación del modelo en cascada o ciclo de vida clásico. Las cinco actividades
que se muestran se deben ejecutar en secuencia, si bien se permite volver hacia atrás cuando
se detecta la necesidad de realizar algún cambio.
Este modelo tiene, entre otras ventajas, que es fácil de comprender, de planificar y de se-
guir, y existen además herramientas que lo soportan. Sin embargo, entre los problemas
de este modelo se encuentran los siguientes (Pressman, 2010):
E En la realidad, es raro que los proyectos sigan el flujo secuencial propuesto por el
modelo. Aunque este modelo acepta repeticiones, lo hace de forma indirecta. Como
resultado, los cambios generan confusión conforme el equipo del proyecto avanza.
E A menudo, es difícil para el cliente enunciar de forma explícita todos los requeri-
mientos. Se debe tener presente que cuanto más tarde en el proceso de desarrollo
se detecte algún fallo en una fase previa, más costoso será incorporar los cambios
que ese fallo implique. Esto quiere decir que si durante la fase de programación se
ha detectado que algún requisito no se ha incorporado o se ha hecho de manera
errónea, será necesario rehacer todas las fases previas del ciclo de vida (análisis y
diseño).
Hoy día, el desarrollo de software está sometido a multitud de cambios, motivo por el
cual este modelo de ciclo de vida no resulta apropiado en la mayoría de los casos. A pe-
O Ediciones Paraninfo
sar de ello, se podría emplear en aquellos casos en los que no es previsible que se pro-
duzcan cambios en los requisitos.
Dadas las desventajas de este modelo, se desarrollaron con posterioridad otros modelos
que se exponen a continuación.
1. DESARROLLO DE SOFTWARE INFORMÁTICA Y CQ/X1
Incremento N
Incremento 2
Incremento 1 'Mantenimiento
Mantenimiento
Mantenimiento
Figura 1.13. Representación del modelo incremental de desarrollo de software. El software se divide en una serie
de incrementos, en cada uno de los cuales se aplican los pasos del ciclo de vida clásico.
Entre las ventajas de este modelo, Cuevas et al. (2003) señalan las siguientes:
bles.
Resulta recomendable emplear este modelo de ciclo de vida cuando no están bien defini-
dos los requisitos y es muy probable que se produzcan cambios.
| JMUN'CAGONES 1. DESARROLLO DE SOFTWARE
Estos modelos son iterativos y se caracterizan por el desarrollo de versiones cada vez más
completas del software. Se presentan a continuación dos modelos de proceso evolutivo:
M EN Construcción de prototipos
Un prototipo se puede definir como un sistema auxiliar que permite probar experimental-
mente ciertas soluciones parciales a las necesidades del usuario o a los requisitos del
sistema. Puede tratarse de un modelo que describa la interacción hombre-máquina, de
manera que facilite al usuario la comprensión de cómo se producirá la interacción, o un
programa que implemente algunos subconjuntos de la funcionalidad de la aplicación. Es
conveniente seguir este modelo de ciclo de vida cuando el cliente es capaz de definir un
conjunto de objetivos generales para el software, pero no puede identificar los requeri-
mientos en detalle, o cuando las personas desarrolladoras tienen dudas considerables
sobre determinados aspectos importantes del desarrollo, como la eficiencia de un algo-
ritmo, en qué medida la aplicación se podrá usar en un determinado sistema operativo o
de qué forma se ha de llevar a cabo la interacción hombre-máquina. Se puede conside-
rar este modelo de ciclo de vida de manera aislada, pero es más común emplearlo como
una técnica que puede implementarse en el contexto de cualquiera de los modelos de ci-
clo de vida descritos en este tema.
Hay que tener en cuenta que el objetivo fundamental a la hora de desarrollar el prototipo
es que las y los desarrolladores sepan exactamente lo que tiene que hacer la aplicación.
En la Figura 1.14, se presenta la secuencia de tareas que se llevan a cabo según este
modelo. Se comienza con una actividad de comunicación con el cliente con el fin de defi-
nir los objetivos generales del software y detectar las áreas en las que es necesaria una
mayor definición. Luego se planifica una iteración para desarrollar el prototipo y se lleva
a cabo el modelado (diseño rápido). Seguidamente, se construye el prototipo, que se en-
trega y es evaluado por los participantes, quienes proporcionan retroalimentación a las
personas desarrolladoras con el fin de mejorar la respuesta a los requerimientos. La ite-
ración ocurre a medida que el prototipo es refinado para satisfacer las necesidades de
distintos participantes y, al mismo tiempo, le permite a las y los desarrolladores entender
mejor lo que se necesita hacer.
O Ediciones Paraninfo
En este modelo, se construye el software a partir de versiones cada vez más completas,
de manera que se realizan una serie de tareas varias veces. En la primera iteración, se
llevan a cabo las tareas de la Figura 1.14 (planificación, modelado, construcción, desplie-
gue, evaluación y comunicación) para construir una primera versión del prototipo. La rea-
lización de todas estas actividades constituye una iteración, luego se vuelven a realizar
1. DESARROLLO DE SOFTWARE |NFORMÁT|CA Y COM W |
estas mismas tareas en la segunda iteración para obtener una segunda versión del pro-
totipo más completa, y así sucesivamente.
Hay que tener en cuenta que algunos prototipos son desechables, mientras que otros
son evolutivos, es decir, se transforman poco a poco hasta convertirse en el sistema real.
EVALUACIÓN INGENIERÍA
Se describe a continuación el cometido de las tareas que se llevan a cabo en cada ciclo
alrededor de la espiral:
El principal inconveniente de este modelo es, como indica Pressman (2010), que
«requiere mucha experiencia en la evaluación del riesgo y se basa en ella para llegar al
éxito. No hay duda de que habrá problemas si algún riesgo importante no se descubre y
administra».
Recuerda
Los dos modelos de proceso evolutivo que se han presentado (construcción de prototipo
modelo en espiral) tienen dos características principales en común:
Solución
3. Para aplicar cada procedimiento, se deben utilizar uno o varios métodos o técni-
cas, en las que se crean diagramas gráficos con apoyos textuales. Además, para
aplicar cada método se puede disponer de la ayuda de alguna herramienta que
automatice en mayor o menor medida la aplicación de dicho método. Un mismo
método se puede usar varias veces en una misma metodología y también se pue-
de utilizar en diferentes metodologías.
Las herramientas que permiten automatizar las tareas de desarrollo de software reciben
el nombre de herramientas CASE (del inglés, computer-aided software engineering).
De las definiciones de método y metodología, se puede deducir pues que una metodolo-
gía incluye un conjunto de métodos para realizar cada una de las tareas necesarias para
el desarrollo de software.
Las metodologías de desarrollo de software han ido evolucionando a lo largo del tiempo.
Así, se identifican tres periodos de tiempo:
1. Desarrollo convencional: durante los primeros años del desarrollo de software las
prácticas de desarrollo eran totalmente artesanales y no se seguía ninguna meto-
dología, lo que acarreaba multitud de problemas y desembocó en lo que se llamó la
crisis del software.
Argot técnico
El lenguaje UML es muy conocido y, aunque en su nombre se incluye el vocablo /enguaje,
este lenguaje es un tanto especial en el sentido de que se trata de un lenguaje gráfico que
establece un conjunto de normas que permiten visualizar, construir, especificar y documentar
un sistema. Siguiendo estas normas, se pueden dibujar distintos tipos de diagramas que
representan diferentes aspectos de un sistema siguiendo el paradigma orientado a objetos.
Así, en la Unidad 5, se estudian las normas de UML para el dibujo de diagramas de clases
y, en la Unidad 6, se explica cómo dibujar los diferentes tipos de diagramas que reflejan el
comportamiento de un sistema, como los diagramas de casos de uso y los diagramas de
interacción.
E Fase de elaboración (elaboration): los objetivos de esta fase son analizar el dominio
del problema, establecer una base de la arquitectura software, desarrollar el plan del
proyecto y eliminar los riesgos más importantes. En esta fase se debe disponer de
un prototipo validado de la arquitectura software a partir del cual se puede desarro-
llar el sistema.
' JMUN'CACIONES 1. DESARROLLO DE SOFTWARE
Al término de cada una de estas fases, se define un hito principal, esto es, un punto en
el tiempo en el que se deben haber conseguido unos objetivos determinados. Cuando
llega este momento, la dirección del proyecto tiene que decidir si el trabajo puede conti-
nuar con la siguiente fase.
Cada una de las fases de RUP puede descomponerse en iteraciones. Una iteración es un
periodo de tiempo en el que se realiza un conjunto completo de actividades de desarro-
llo. El sistema, por lo tanto, se va desarrollando incrementalmente de iteración en itera-
ción. Una nueva iteración produce una nueva versión que proporciona al software mayor
funcionalidad y es más refinada.
Atendiendo a la dimensión estática, el proceso RUP describe los perfiles o papeles de tra-
bajo (quién) que realizan productos intermedios (qué) como resultado de realizar un con-
junto de actividades (cómo) por medio de un flujo de trabajo predefinido (cuándo). De esta
forma, el RUP establece cuatro elementos de modelado principales:
E Actividad (activity): es una unidad de trabajo que lleva a cabo un individuo con un
rol determinado. Por ejemplo, para el papel del jefe o jefa de proyecto, una actividad
podría ser planificar una iteración. Otras actividades podrían ser: llevar a cabo prue-
bas, codificar una clase, detallar un caso de uso, etcétera.
O Ediciones Paraninfo
[l 12 El E2 C1 C2 C3 C4 T1 T2
Requisitos
Análisis y diseño —
Implementación A
Prueba _—
Implantación _.
Figura 1.16. Ejemplo de evolución de un proyecto de desarrollo empleando la metodología RUP. Se puede
observar cómo en las diferentes fases (comienzo, elaboración, construcción y transición) se van realizando
tareas correspondientes a los distintos flujos de ingeniería (modelado del negocio, requisitos, análisis y diseño,
implementación, pruebas e implantación), así como el volumen de trabajo que supone cada uno de estos flujos
de ingeniería en cada una de las iteraciones.
E Los individuos y sus interacciones, más que los procesos y las herramientas.
Es decir, si bien son valiosos los conceptos que aparecen en segundo lugar, valoramos más
los que aparecen en primer lugar.
Una de las principales ventajas del desarrollo ágil es su mayor facilidad para incorpo-
rar los cambios a lo largo del desarrollo y el menor coste que estos cambios conllevan.
Como sabemos, cuanto más tarde en el proceso de desarrollo se detecta la necesidad
de realizar un cambio, más costoso es incorporarlo. También resultará más costoso si
1. DESARROLLO DE SOFTWARE INFORMÁTICA Y G3¡M
este cambio afecta a etapas iniciales (análisis o diseño). Gracias a la entrega incremen-
tal propia del desarrollo ágil y a otras prácticas propias de esta metodología, como las
pruebas unitarias continuas y la programación por parejas, se consigue reducir el coste
de los cambios. Esto también es posible gracias a las entregas cada poco tiempo y a la
retroalimentación del cliente en cada entrega.
<
Q
<
O)
))
<
O) DESARROLLO
z
u
PRUEBAS
REVISIÓN
— E-
Figura 1.17. La agilidad, propia del modelo de desarrollo incremental, frente al modelo en cascada. En este
modelo, se llevan a cabo las mismas tareas que en el modelo en cascada, pero se aplican sobre entregas
pequeñas o incrementos de software.
. Los requisitos cambiantes son bienvenidos, aun en etapas avanzadas del desarro-
llo, pues, cuando hay cambios, los procesos ágiles son beneficiosos para la ventaja
competitiva del cliente.
. Se realizan entregas frecuentes y lo más pronto que se pueda de software que fun-
cione, preferiblemente entre dos semanas y un par de meses.
. Las personas responsables del negocio y las encargadas del desarrollo del software
trabajan conjuntamente, a diario y durante todo el proyecto.
. Los procesos ágiles impulsan el desarrollo sostenible. Los promotores, las perso-
nas que desarrollan el software y las usuarias de este deben ser capaces de mante-
ner un ritmo constante de forma indefinida.
a 1Z_OMUNICACIONES 1. DESARROLLO DE SOFTWARE
11. Las mejores arquitecturas, requisitos y diseños surgen de los equipos con organiza-
ción propia.
12. El equipo reflexiona con regularidad sobre cómo ser más eficaz, para después per-
feccionar y ajustar su comportamiento en consecuencia.
No es necesario que todas las metodologías ágiles apliquen estos doce principios con
la misma intensidad, pero estos principios sí que definen la filosofía del desarrollo ágil.
Figura 1.18. Cada uno de los incrementos de software se obtiene mediante una iteración, que en los modelos
ágiles suele recibir el nombre de sprint. En este caso, se desarrolla el software en tres sprints.
E Planificación: tras escuchar al cliente, se crean las llamadas historias de usuario, si-
milares a los casos de uso, que son escritas por el cliente; se colocan entonces en
una tarjeta y el cliente les asigna una prioridad. Posteriormente, el equipo XP asig-
na a cada historia un coste (semanas de desarrollo). El tiempo máximo de una his-
toria es de tres semanas; en caso de que sea más larga, se le pide al cliente que
la descomponga en historias más pequeñas y, de nuevo, se le asigna una prioridad
y un coste. En cualquier momento, se pueden escribir nuevas historias. El cliente y
las personas que se encargan del desarrollo deciden conjuntamente qué historias
incluir en el siguiente incremento de software, así como su fecha de entrega y de-
más aspectos relevantes.
E Pruebas: además de las pruebas unitarias que se hacen una vez creado el códi-
go, también se realizan continuamente pruebas de integración y validación, lo que
] MUNICACIONES
1. DESARROLLO DE SOFTWARE
revela al equipo XP los avances obtenidos de forma continua y permite lanzar seña-
les de alerta en caso de que haya problemas importantes. Finalmente, se llevan a
cabo las pruebas de aceptación, que son especificadas por el cliente.
EE Scrum
Scrum es un modelo de desarrollo ágil concebido por Jeff Sutherland y su equipo de
desarrollo en la década de los 90 y que luego fue desarrollado por Schwaber y Beedie.
Este modelo de desarrollo ágil tiene como objetivo la entrega de valor (productos) al
cliente en cortos periodos de tiempo y se basa en tres pilares: transparencia, inspec-
ción y adaptación:
Antes de iniciarse un sprint, tiene lugar una reunión llamada sprint planning, en la que
todo el equipo establece qué tareas se van a realizar en el sprint, cuál es su objetivo y
cómo se van a llevar a cabo las tareas. Al final del sprint, se hace una entrega de valor
al cliente. Se organizan reuniones diarias dentro de cada sprint con una duración máxi-
ma de 15 minutos. En las reuniones, se responde a las siguientes preguntas: ¿qué
hicimos ayer?, ¿qué vamos a hacer hoy? Y ¿tenemos algún problema que hay que so-
lucionar?
Una vez ha concluido el sprint, se entrega y presenta el producto al cliente (sprint review).
El equipo de desarrollo muestra el funcionamiento del producto al cliente, quien tendrá
que validarlo. Además, durante esta reunión, el cliente proporciona retroalimentación
útil para nuevas tareas.
O Ediciones Paraninfo
Tras el sprint review, se efectúa una retrospectiva del sprint, en la que se hace una eva-
luación del trabajo realizado durante el sprint, proponiendo mejoras para el siguiente
sprint. Finalizada esta reunión, se comienza el siguiente sprint, que incluirá las cua-
tro tareas que se han indicado: planificación, reuniones diarias, sprint review y retros-
pectiva.
1. DESARROLLO DE SOFTWARE |NFORMÁT'CA Y CO/N 1
4 METODOLOGÍA SCRUM
EOta % D
Dueño del Maestro Scrum
producto
Equipo de
desarrollo
Figura 1.19. En la metodología Scrum todo el trabajo que hay que realizar para el desarrollo del proyecto
(product backlog) se divide en una serie de sprints. A partir de la planificación del sprint, se crea una lista
de tareas (sprint backlog) que irá realizando el equipo asignado (Scrum team). Cada día de trabajo, se lleva
a cabo una reunión para analizar la marcha del sprint (Scrum meeting) y, al finalizar el sprint, se realiza una
presentación al cliente (sprint review) del producto obtenido hasta el momento (incremento, en inglés
“product increment”).
Actividad resuelta
Solución
Las características diferenciales de mayor relevancia de los modelos de desarrollo ágil fren-
te a otras metodologías son:
E Se hacen cada poco tiempo entregas de software que funciona al cliente, con el fin de
que este lo pueda evaluar y proporcionar así una retroalimentación gracias a la cual
se puedan solventar errores o problemas lo antes posible.
Lenguajes de programación.
Tipos
Máquinas virtuales
Desarrollo de software
Metodologías de desarrollo
de software
E Actividades de comprobación
1 La parte del hardware del ordenador que permite la comunicación de este con el
exterior, haciendo posible la conexión del ordenador con los periféricos, recibe el
nombre de:
a) Memoria RAM.
b) CPU.
c) ALU.
d) Unidad de entrada/salida.
1.3. Los únicos lenguajes que es capaz de entender directamente un ordenador son:
a) Los lenguajes de alto nivel.
b) Los lenguajes ensambladores.
C) Los lenguajes evolucionados.
d) Los lenguajes máquina.
1.6. Tras compilar el código fuente de un programa en Java, se obtiene un fichero con
extensión .class. Para convertir este código bytecode en código ejecutable se re-
quiere la intervención:
a) Del compilador javac.
b) De la máquina virtual de Java.
c) De un depurador.
O Ediciones Paraninfo
d) De un intérprete.
42
1. DESARROLLO DE SOFTWARE ACTIVIDADES FINALES
1.7. Lafase del ciclo de vida en la que se modifica el software tras haber sido este en-
tregado al cliente recibe el nombre de:
a) Pruebas.
b) Análisis.
c) Mantenimiento.
d) Diseño.
1.8. ¿A qué persona de las siguientes le corresponde la tarea de planificación del pro-
yecto de desarrollo de software?
a) Jefa o jefe de proyecto.
b) Analista.
c) Diseñador o diseñadora.
d) Arquitecto o arquitecta.
1.9. Lafase del modelo en espiral que diferencia a este modelo con respecto a otros es:
a) La planificación.
b) El análisis de riesgo.
c) La ingeniería.
d) La evaluación del cliente.
1.11. El modelado del negocio, los requisitos, el análisis y diseño, la implementación, las
pruebas y la implantación, ¿qué son en el ámbito de la metodología RUP?
a) Flujos de ingeniería.
b) Flujos de apoyo.
c) Productos intermedios.
d) Ninguna de las anteriores respuestas es correcta.
E Actividades de aplicación
O Ediciones Paraninfo
1.14. ¿De qué tres tipos de lenguajes de programación se puede hablar en función de su cer-
canía al lenguaje que utiliza el ordenador o al lenguaje natural? ¿Qué tipo de lenguajes
de programación son los más empleados en la actualidad y por qué? 43
ACTIVIDADES FINALES 1. DESARROLLO DE SOFTWARE
1.15. ¿Cuáles son las diferencias más relevantes entre el paradigma estructurado y el paradig-
ma orientado a objetos?
ic ¿Para qué sirven los compiladores y los intérpretes? ¿En qué se diferencian?
1.18. ¿Qué dos tipos de máquinas virtuales existen y en qué se diferencian? ¿Qué tipo de má-
quina virtual es la máguina virtual de Java?
1.22. ¿Cuál es el modelo de ciclo de vida del software más antiguo? ¿Cómo se concibe el de-
sarrollo de software siguiendo este modelo?
1.24. ¿Cuál es la relación entre los conceptos método y metodología en el ámbito de la inge-
niería del software?
Busca en internet información sobre la metodología Métrica. ¿Cuáles son los tres proce-
sos principales de desarrollo de software según Métrica?
Busca en la red información sobre la ingeniería inversa. ¿En qué consiste este proceso?
1.29. Busca en internet información sobre la reingeniería. ¿Qué comprende esta actividad?
1.30. Encuentra en la red cuáles son las características deseables de una metodología de de-
sarrollo de software. Enuméralas.
1.31. Busca en internet información sobre la reutilización de software. Explica este concepto e
indica por qué es importante fomentar la reutilización de software.
1.32. Con ayuda de internet, investiga sobre el modelo de desarrollo de software en V. ¿A qué
O Ediciones Paraninfo
44
1. DESARROLLO DE SOFTWARE ACTIVIDADES FINALES
Enlaces web de interés
Métrica v3 - https://administracionelectronica.gob.es/pae_Home/pae_Documentacion/
pae_Metodolog/pae_Metrica_v3.html
(Página web con información sobre la metodología Métrica v3 promovida por la Administra-
ción Pública española)
Rupmetodologia - http://rupmetodologia.blogspot.com/
(Blog sobre la metodología RUP)
AgileAlliance.org - https://www.agilealliance.org/
(Portal web creado por la ONG Agile Alliance que apoya a aquellos que exploran, aplican y
[m] expanden los valores, principios y práctica ágiles)
45
UNIDAD 2
Comprender la utilidad de los entornos E 2.1. La utilidad de los entornos
de desarrollo integrados. de desarrollo integrados
Identificar los componentes de un entorno m 2.2. Componentes de un entorno
de desarrollo integrado. de desarrollo
Instalar entornos de desarrollo integrados m 2.3. Instalación de un entorno
para crear aplicaciones en Java. de desarrollo
Saber utilizar entornos de desarrollo integrados E 2.4. Edición de programas y
para la edición de programas y la generación generación de archivos
de archivos ejecutables. ejecutables
Instalar y desinstalar módulos (p/ug-ins) E 2.5. Instalación y desinstalación
en un entorno de desarrollo integrado. de módulos
Conocer los mecanismos de actualización N 2.6. Mecanismos de actualización
de un entorno de desarrollo integrado.
a
/ : …'1'.kV N
Introducción
En la Unidad 1 se explicó el proceso que es necesario llevar a cabo para transformar el
código fuente de un programa en código ejecutable. Ello conlleva el empleo de varias
herramientas: un editor, un compilador o intérprete, un depurador, etc. Hoy en día, en
lugar de emplear estas herramientas de forma aislada, se suelen integrar en una apli-
cación que recibe el nombre de entorno de desarrollo o entorno de desarrollo integrado
(integrated development environment), conocido también por sus siglas en inglés, IDE.
En este tema, se verán cuáles son los componentes de un IDE, se explicará la ins-
talación de dos entornos de desarrollo (Eclipse y Apache NetBeans) y cómo se pue-
den crear programas mediante ellos. Además, se ejemplificará la instalación de módulos
adicionales para realizar tareas que los citados entornos no llevan incorporadas, pero
que pueden resultar interesantes con el objeto de crear aplicaciones de un determina-
do tipo o llevar a cabo tareas que quedan fuera del ámbito estricto de la programación.
1. Creación del código fuente del programa siguiendo las normas sintácticas de un
determinado lenguaje de programación de alto nivel.
3. Obtención del código ejecutable insertando en el código objeto una serie de ruti-
nas o librerías.
Para la realización de cada uno de estos pasos, se debe emplear una herramienta dife-
rente. Así, para la primera tarea se debe emplear un editor; para la segunda, un compila-
dor o un intérprete; y para la tercera, un enlazador.
El hecho de tener que emplear una herramienta independiente para cada una de estas
tareas, cuando estas siempre se tienen que realizar en secuencia para la creación de un
programa, es tedioso. Por este motivo, se crearon los llamados entornos de desarrollo
integrados. Estos se pueden definir como una aplicación informática compuesta por un
conjunto de herramientas integradas que facilitan el desarrollo de software. Estas herra-
mientas también se conocen como entornos de desarrollo.
O Ediciones Paraninfo
Argot técnico
La forma más habitual de referirse a los entornos de desarrollo o entornos de desarrollo
integrados es empleando sus siglas en inglés IDE (Integrated Development Environment).
C)MUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Aunque por la definición propuesta, se puede entender que un IDE asiste a la persona
usuaria en todas las tareas de desarrollo de software (análisis, diseño, programación,
pruebas y mantenimiento), lo cierto es que las actividades que mejor apoyo reciben por
la mayoría de los entornos de desarrollo son la programación y las pruebas, por lo que
en algunos casos se suele hablar de entornos de programación. La mayor parte de los
IDE, además de permitir la edición de programas y su ejecución, tras la traducción corres-
pondiente, permiten llevar a cabo las siguientes tareas:
E Ejecutar en modo depuración, para poder corregir los errores encontrados durante
las pruebas.
E Control de versiones.
E Generación de documentación.
Cabe mencionar aquí que hay IDE creados para su uso con un único lenguaje de progra-
mación, pero también existen entornos de desarrollo multilenguaje, es decir, que per-
miten crear y ejecutar programas escritos en varios lenguajes de programación de alto
nivel.
E El JRE está formado por un conjunto de utilidades que permiten la ejecución de pro-
gramas escritos en Java. Este entorno está formado por la máquina virtual de Java
(JVM), que se trató en la Unidad 1, un conjunto de bibliotecas Java y otros compo-
nentes necesarios para que una aplicación escrita en Java pueda ejecutarse.
El JDK y el JRE de Java se instalan conjuntamente. Para ello, se accede a la página web:
https://www.oracle.com/Java/technologies/Javase-downloads.HTMLHJavaseJDK. En
esta dirección es donde se accede a la última versión disponible en el momento de escri-
bir este libro, la 16.0.2. En esta página, en la sección correspondiente a la versión Java
O Ediciones Paraninfo
MM
2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO INFORMATICA Y < JI
Una vez realizada la descarga, se comienza la instalación haciendo doble clic sobre el fi-
chero ejecutable descargado. La instalación no presenta ningún problema y se seleccio-
nan todas las opciones por defecto.
Cuando estén instalados el JDK y el JRE de Java, será posible crear programas en Java
sin el empleo de ningún IDE o mediante el empleo de uno como Eclipse.
Para la creación de un programa en Java sin el empleo de ningún IDE, lo primero que
se ha de hacer es escribir su código fuente mediante el empleo de un editor de tex-
tos, como el bloc de notas. En este, se escribe el siguiente código, por medio del cual
se crea un programa que lo único que hace es escribir en la pantalla el texto «¡Hola,
mundo!»:
Este programa se debe guardar con el nombre de la clase creada y extensión .java, por
lo que su nombre será: HolaMundo.java. Además, se guarda en la carpeta en la que está
instalado el JDK de Java, que es C:VProgram Files Java dk-16.0.2
Vbin. Según la configu-
ración de nuestro sistema y del usuario con el que se haya accedido, puede ser que no
sea posible almacenar el archivo en la carpeta indicada. En este caso, se debe ejecutar
el editor de textos como administrador.
del sistema y nos colocaremos en la carpeta del JDK. Una vez en esa carpeta, se escri-
be javac y, a continuación, el nombre del fichero fuente que se desea compilar, como se
muestra en la Figura 2.2. Puede ser necesario, también en este caso, ejecutar el símbolo
del sistema como administrador, si surge algún problema con los permisos. En la Figura
2.2, se pueden leer las instrucciones ejecutadas desde el símbolo del sistema.
i1 ' [OMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Z
Anma
Argot técnico
El símbolo del sistema, también conocido por sus siglas en inglés CMD (command prompt),
es un intérprete de línea de comandos que incorpora Windows desde el que se pueden
dar órdenes al sistema por escrito empleando el teclado en lugar de utilizando una interfaz
gráfica. En una interfaz gráfica de usuario, también conocida como GUI (por sus siglas en
inglés, graphical user interface), se emplean tanto el teclado como el ratón para realizar
operaciones sobre elementos gráficos disponibles en la pantalla del ordenador. Así, las
interfaces más características de los sistemas operativos actuales son interfaces gráficas.
:NProgram FilesNJavaNjdk-16.0.2Nbin>
Figura 2.2. Órdenes que hay que ejecutar en el símbolo del sistema para compilar
el archivo con el código fuente.
Tras compilar correctamente el programa, solo faltará ejecutarlo, para lo que, desde el
símbolo del sistema, se escribe java y, después, el nombre del fichero sin extensión, en
este caso, HolaMundo. Como se puede observar en la imagen de la Figura 2.3, el mensa-
je «¡Hola, mundo!» aparece en la pantalla.
Figura 2.3. Orden para ejecutar el programa una vez que este ha sido compilado
O Ediciones Paraninfo
En el Apartado 2.4 se verá que, con la ayuda de un IDE, estas tareas se pueden llevar a
cabo más rápida y eficientemente mediante herramientas diseñadas a tal efecto.
a
e
2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO INFORMATICA Y C
E Editor de textos: se emplea para la escritura del código fuente del programa. Inclu-
ye las funciones propias de cualquier editor de textos (copiar, cortar, pegar, buscar,
reemplazar, etc.) e incluye herramientas importantes para la escritura de los pro-
gramas. Así, marca en ciertos colores determinados elementos del lenguaje, como
palabras reservadas y variables, resalta el inicio y el fin de cada bloque, etc. Esto
contribuye a la legibilidad de los programas y es un apoyo relevante para las tareas
de escritura y revisión del código fuente.
E Constructor de interfaz gráfica: permite crear aplicaciones con una interfaz gráfica
de usuario (GUI, por sus siglas en inglés, graphical user interface). Una GUI se crea
mediante la colocación de distintos controles en la pantalla, como botones, campos
de texto, listas o barras de menús, con los cuales interactúa el usuario mediante
el ratón o el teclado. La aplicación responde a las acciones (eventos) que realiza el
usuario sobre estos controles. La mayoría de los entornos de desarrollo requieren
la instalación de módulos adicionales para la creación de este tipo de aplicaciones.
E Control de versiones: controla los cambios que se realizan sobre los programas,
creando diferentes versiones de estos a medida que se van incorporando dichos
cambios.
P
O Ediciones Paraninfo
Recuerda o
Todo entorno de desarrollo debe incluir obligatoriamente un editor de textos orientado al
lenguaje y un compilador o un intérprete. La mayoría de los entornos de desarrollo incorporan
también los otros componentes descritos en este apartado.
3MUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Para explicar cómo se instala un IDE, aquí se han elegido dos de esos entornos, que son
de código abierto y gratuitos, concretamente, Eclipse y NetBeans. El software de código
abierto es software cuyo código fuente es del dominio público y, por tanto, puede ser uti-
lizado, cambiado e incluso redistribuido. Sin embargo, el software de código cerrado se
caracteriza por que el código fuente del producto no está a disposición del público en ge-
neral.
ME 7.3.1.Instalación de Eclipse
Eclipse presenta una arquitectura abierta y extensible basada en módulos (plug-ins en
inglés). De esta forma, Eclipse puede ser muy ligero o más pesado, dependiendo de los
módulos que se instalen. Otros entornos llevan integrados una serie de herramientas ne-
cesarias para desarrollar webs o para crear aplicaciones con interfaces gráficas de usua-
rio, motivo por el cual estos entornos desperdician recursos del ordenador, ya que hacen
al IDE más lento durante el tiempo en el que está funcionando. Eclipse se puede instalar
en diferentes sistemas operativos, en versiones de 32 y 64 bits.
En primer lugar, aquí se explicará cómo se instala la plataforma Eclipse. Las versiones de
O Ediciones Paraninfo
Si se hace clic en el botón Download x86_64, aparece otra pantalla, en la que, para co-
menzar la descarga, hay que pulsar sobre el botón Download (Figura 2.5).
VA|
LA
Es Eclipse Downloads
| The Eclipse | X
- Y> C A edipseorg/downloads/
ECLIPSE
ALOXY LEVERAGES
ECLIPSE FOUNDATION
Download Eclipse Technology MEMBERSHIP TO BUILD
ITS PETRO-CHEMICAL
thatis right for you BUSINESS
Tool Platforns
- ORIC.N
- Eclipse Che is a developer
workspace server and cloud
.
A modem, open source
software development
Get Eclipse IDE 2021-06 IDE. environment
that runs in the
cloud
Install your favorite desktop IDE packages.
Figura 2.4. Se pulsa en el botón Download x86_64 para descargar Eclipse para sistemas
operativos de 32 o de 64 bits.
€ > C Á eclipse.org/downloads/download.php?file=/0omph/epp/2021-06/R/eclipse-inst-jre-win64.exe
All downloads are provided under the terms and conditions of the Eclipse Foundation Software User Agreement uniess
otherwise specified. CRYSTAL REPORTS
Figura 2.5. Para iniciar la descarga del IDE Eclipse, se hace clic en el botón Download.
Tras hacer doble clic en el archivo ejecutable descargado, se selecciona la primera op-
ción: Eclipse IDE for Java Developers. En la ventana emergente, se puede madificar la car-
peta en la que se encuentra la máquina virtual de Java (JVM), así como la carpeta en la
que se desea realizar la instalación. Lo habitual es que sean válidas las rutas propues-
O Ediciones Paraninfo
tas. Al hacer clic en el botón INSTALL, comienza la instalación, al inicio de la cual, se soli-
cita aceptar el acuerdo de licencia. Una vez finalizada la instalación, aparece una ventana
como la de la Figura 2.6, en la que se indican las carpetas donde se encuentran insta-
lados JDK y Eclipse, y en la que se puede pulsar en el botón LAUNCH para iniciar el IDE
por primera vez.
N¡/XX Y COMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
. ; —
eclipseinstaller ., oo —
D LAUNCH
< BACK
Latest release
Te -
€ > C MM netbeansapacheorg/download/nb124/nb124.htmi Y º :
º macos versions prior to 10.14.4 require the Swift 5 Runtime to be installed to launch Apache NetBeans 12.4
Figura 2.8. Página web en la que se puede descargar un instalador de Apache NetBeans,
dependiendo del sistema operativo, o bien un archivo binario (archivo comprimido).
Una vez realizada la descarga del archivo comprimido, hay que descomprimirlo en nues-
tro equipo. Por ejemplo, se puede descomprimir en la unidad C:X, donde, tras la descom-
presión, se crea una carpeta con el nombre NetBeans. En la carpeta NetBeans Vbin habrá
dos archivos ejecutables para iniciar el IDE NetBeans: NetBeans.exe y NetBeans64.exe.
Es aconsejable crear un acceso directo a uno de estos archivos, dependiendo de si el
sistema operativo utilizado es de 32 o 64 bits. Al pinchar sobre este acceso directo, se
inicia el IDE NetBeans.
Al acceder al IDE Eclipse, se solicita que se indique el nombre y ubicación del espacio de
trabajo (workspace) en el que desea almacenar los proyectos (Figura 2.9). Si la ruta que
se propone no nos interesa, se puede modificar escribiéndola directamente o pulsando
en el botón Browse para navegar por la estructura de carpetas de nuestro equipo. Des-
pués, se pincha sobre el botón Launch.
A k“1/ COMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Figura 2.9. Ventana que se muestra la primera vez que se ejecuta Eclipse y las
siguientes veces si no se activa la casilla de verificación que se muestra. Se debe elegir
la carpeta en la que se desean guardar los proyectos, que se conoce como espacio
de trabajo o workspace.
Tras elegir la ubicación del espacio de trabajo, para empezar a trabajar con Eclipse,
hay que crear un proyecto seleccionando la opción de menú File > New > Java Project.
Seguidamente, se asigna un nombre al proyecto. Por ejemplo, como se muestra en la Fi-
gura 2.10, se escribe el nombre Ejercicios y se hace clic en el botón Finish.
Project layout
Working sets
Working sets:
Module
Create module-info.java file
0)
Figura 2.10. Ventana para la creación de un proyecto, dentro del cual se pueden crear
varios paquetes o clases.
O Ediciones Paraninfo
Una vez creado el proyecto, existen varias opciones. Una de ellas consiste en crear pa-
quetes dentro de nuestro proyecto para englobar diversas clases. Para crear un paquete,
se selecciona la opción de menú File > New Package. Por su parte, si se desea crear cla-
ses en el proyecto en el paquete por defecto o en el paquete que se haya creado, se se-
lecciona la opción de menú File > New Class.
, TE
Así pues, siguiendo con el ejemplo, primero se selecciona la opción de menú File > New
Package para crear un paquete llamado programas, como se muestra en la Figura 2.11.
Java Package
Create a new Java package.
Name: programad
[]Create package-info
java
[ Generate comments (configure templates and default value here!
A continuación, para crear una clase, se activa la opción de menú File > New Class. En la
pantalla que aparece después, se indica el paquete en el que se desea ubicar la clase y
su nombre. Asimismo, es posible seleccionar diferentes opciones interesantes, como por
ejemplo, que se cree un método main para la clase que se está creando o que se gene-
ren comentarios (Figura 2.12).
Java Class
Create a new Java class.
Package: programas
[]Enclosing type:
Name: Saludo
Modifiers: Opublic Opackage “ private — ) protected
[Jabstract [ ]final A static
Superclass: java.lang.Object
Interfaces:
Figura 2.12. Ventana mediante la cual se crea una clase dentro del paquete y del
proyecto indicados en las opciones Package y Source folder, respectivamente.
Se debe asignar un nombre a la clase.
| l/ í»OMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Tras crear la clase, aparece una pantalla (Figura 2.13), en la que, a modo de ejemplo, se
puede escribir una instrucción dentro del método main de la clase para mostrar un mensaje,
por ejemplo, «¡Hola, mundo!». En esta pantalla, se distinguen las siguientes áreas:
M Área de proyectos: en la parte izquierda, Package Explorer, se puede navegar por to-
dos los proyectos del espacio de trabajo y por los elementos que los componen.
M Área de edición: en la parte central, se puede escribir el código fuente de los pro-
gramas. En el código que se muestra en la Figura 2.13, el texto aparece resaltado
en diferentes colores; así, por ejemplo, las palabras clave del lenguaje aparecen en
color morado. Si se escribe una instrucción errónea, el editor la señala subrayando
en color rojo lo incorrecto y marcando la línea con una x dentro de un cuadrado con
fondo de color rojo.
E Outline: en la parte derecha, se muestra el esquema de la clase cuyo código se
está editando. Así, se accede más rápidamente a sus métodos y atributos.
E Consola Java: en la parte inferior, se muestra el resultado de la ejecución de los pro-
gramas o los errores de ejecución, en su caso.
File Edit Source Refactor ¡Navigate Search Project Run Window Help
- O:9
142 E 7 :D:.:%-0-4-Q-:7 0-:95-:0-6-e976C-p-r|r Qq :5|8
S Package Explorer 52 =2 [ "Saludojava 32 = E de Outline %2 = m
E E 3 1 package programas; A E 14 N w e x 3
4 E Ejercicios 2 £B programas
> 2A JRE System Library (jdk-16.0.2) $ public class saludo (| 4 O, Saludo
4 ( sre
a - ; A
—
e * main(String[]): void
a El programas 5e public static void main(String[] args) (
>I[3) Saludoj /7 TODO Auto-generated method stub
s a System.out.printin ("¡Hola, mundo!");
v
>
<
| Writable | Smart Insert |3:22:4
Figura 2.13. Aspecto del IDE Eclipse cuando se está escribiendo el código de un programa, en este caso,
uno que tan solo muestra en pantalla el famoso mensaje «¡Hola, mundo!»
Una vez se haya creado un programa en Eclipse con al menos una clase, ya es posible
ejecutarlo. Para ello, se debe mostrar en pantalla la clase cuyo código se desea ejecutar
y realizar una de las siguientes acciones:
Por cada proyecto creado en Eclipse, se genera, dentro de la carpeta que se ha asigna-
do al espacio de trabajo (workspace), una carpeta con el nombre asignado al proyecto. Es
importante saber que, dentro de esa carpeta, habrá a su vez dos carpetas:
E La carpeta src, que contiene los ficheros con el código fuente Java correspondiente
a cada una de las clases que contiene la aplicación que se está creando. En esta
carpeta, habrá una carpeta por cada paquete (si se han creado) y, dentro de estas,
un archivo de tipo texto con extensión .java por cada clase.
E La carpeta bin, en la que se encuentran los ficheros con las clases objeto. En esta
carpeta, hay, al igual que en la src, una carpeta por cada paquete (si se han creado)
y, dentro de estas, un archivo con la extensión .class por cada clase.
Solución
Sí, es posible. Si se pulsa sobre el enlace Recent Workspaces que aparece en la parte infe-
rior izquierda de la ventana que se muestra en la Figura 2.9, aparecerá una lista con los es-
pacios de trabajo empleados recientemente entre los que se puede seleccionar el que se
desee, haciendo clic sobre el nombre correspondiente.
Solución
La respuesta es afirmativa, pues la opción de menú File > Switch Workspace permite selec-
cionar uno de los espacios de trabajo usados recientemente. Si ninguno de los espacios de
trabajo nos interesa, se puede clicar sobre la opción Other. En este caso, aparece una ven-
tana como la representada en la Figura 2.9, en la que haciendo clic en el botón Browse...,
se puede seleccionar, como espacio de trabajo, una carpeta de nuestro equipo.
Al acceder al IDE NetBeans, para crear una aplicación con este entorno, lo primero que
se debe hacer, como con el entorno Eclipse, es crear un proyecto. Con este fin, se activa
la opción de menú File > New Project. En la ventana que se muestra en la Figura 2.14,
I 1MX*… 1/ [OMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
se puede observar que con NetBeans, se ofrece la posibilidad de crear proyectos no solo
en Java, sino también en otros lenguajes, como C, C++ o PHP En este caso, se seleccio-
na la opción de menú Java with Maven > Java Application. La opción Java with Maven >
> Java Frontend Application permite crear una aplicación Java con GUI, aunque esto tam-
bién es posible simplemente añadiendo un panel a una aplicación Java creada con la op-
ción Java Application.
Choose Project
Q Fiter: |
Categories: 5
:- [ Java with Maven = N Java Application
+- [ with Gradie
Java 28 JavaFrontend Application
-E Java with Ant
+ HIMLS/Javascript
1- E C/C++
- PP
E- E Samples
Description:
This feature s not yet enabled. Press Next to activateit.
A simple Java SE application using Maven. You are recommended to begin here, if you are
Lnew to Java!
Figura 2.14. Ventana que se muestra al seleccionar la opción de menú File > New
Project y que permite crear proyectos en Java, C, C++, PHP etcétera.
Si se elige la opción Java with Maven > Java Application, puede ocurrir que se indique a
continuación que se debe activar el soporte para Java SE; si este fuera el caso, se pulsa
el botón Activate (Figura 2.15).
Finding Feature
[] nb-javac
Impl
Download
and Activate...
Figura 2.15. Ventana en la que se solicita activar la asistencia para Java SE,
para lo que se pulsa sobre el botón Activate.
O Ediciones Paraninfo
Tras la activación, si esta ha sido necesaria, en la ventana que se muestra en la Figura 2.16,
se da nombre al proyecto y, en el campo Project Location, se indica su ubicación en
nuestro equipo. En los otros campos, se puede dejar la información que aparece por de-
fecto. Al hacer clic en el botón Finish, se crea el proyecto.
2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO INFORMATICA Y CQ/X1
Name
and Location
ProjectName: — [ProyectoNetBeans
Project Location: [C:Wsem&)oseb&d:mw…fc'£º
+ |C:WsersVoseDesktopParaninfo|EDProyectoNetBeans1
ProyectoNetBeans1
com.mycompany
1,0-SNAPSHOT
chm.mymnpanv.proymbeans A
Una vez generado un proyecto, es posible crear en él paquetes y clases, al igual que en
Eclipse. En NetBeans, se selecciona el menú contextual del proyecto en cuestión y se ac-
tiva la opción de menú New > Java Package o New > Java Class, respectivamente. Por
ejemplo, se puede añadir al proyecto creado anteriormente un paquete llamado progra-
mas. Este aparecerá inmediatamente en el explorador de proyectos (arriba a la izquierda)
dentro de la carpeta Source Packages. Luego, se abre el menú contextual de este pa-
quete para crear en él una clase llamada Saludo con el fin de mostrar el mensaje «¡Hola,
mundo!».
v
CrestedFile: [C:WsersVoselDesktopParaninfo
ED royectoNetBeans 1)srcain Vava lprogramas Saludo java |
Superdass:
Interfaces:
Figura 2.17. Ventana en la que se crea una clase llamada Saludo dentro del paquete
programas del proyecto ProyectoNetBeans1.
muestra una pantalla como la de la Figura 2.18, en cuya parte derecha, se puede escri-
bir el código fuente de la clase (área de edición). Hay disponible, al igual que en Eclipse,
un área reservada al explorador de proyectos (parte superior izquierda) y un área que re-
cibe el nombre de Navigator, donde se muestra el esquema de la clase que se está codi-
ficando (parte inferior izquierda).
A k“1/ COMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Al igual que se hizo para la clase creada con Eclipse, a modo de ejemplo, se puede in-
Cluir, dentro de la clase Saludo, un método main que muestre el saludo «¡Hola, mundo!».
File Edit View Navigate Source Refactor Run Debug Profile Team Iool indow - Help Q search (Ctl+D)
EE
DE eu O TY) 0- mO S
Projects X | Files Services
E- ProvectoNetnemnsl 2- a aua r7etladueu., E
-FE Source Packages
A m
+ EEl com.mycompany.proyectonetbeans1 License Headers ín Project Properties.
E- EE programas , Choose Tools | Templates
— saludo.java
he templarte in che editor,
-Ey Test Padkages
package programas;
..
* Cauthor Jose
"/
public class Saludo .
— Q man(strino] aros) public static void main (String args[])(í
System.out.printin ("¡Hola, mundo!");
Figura 2.18. Aspecto de la pantalla de IDE NetBeans cuando se está escribiendo el código de un programa.
En este caso, se ha creado un programa que tan solo muestra en pantalla el famoso mensaje «¡Hola, mundo!».
programas.Saludo
O Ediciones Paraninfo
Argot técnico
El término plug in es un verbo inglés que se puede traducir como «enchufar» o «conectar».
Se puede interpretar que un plug-in es un módulo o componente de software que añade una
característica o un servicio adicional a un software existente y que se enchufa o conecta a
dicho sistema.
Eclipse Marketplace
Select solutions to instal I. Press Install Now to proceed with installation.
Press the "more info" link to learn more about a solution.
Updates available
Some of your installed plug-ins have updates available. Please update
now to benefit from the latest improvements.
|Show updates | | Updatenow ,
Marketplaces
—
O Ediciones Paraninfo
Figura 2.20. Ventana que se muestra al seleccionar la opción de menú Help > Eclipse
Marketplace, útil para instalar o desinstalar módulos en Eclipse. Si hay actualizaciones
disponibles para los módulos instalados, Eclipse informa sobre este hecho, como es el caso.
1 kOMUNICAGONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Para instalar el módulo que incorpora Swing a Eclipse, se selecciona de nuevo la opción
de menú Help > Eclipse Marketplace y, en la ventana que aparece en pantalla, se escri-
be WindowBuilder en el cuadro de texto que hay a la derecha de la palabra Find. Window-
Builder es el módulo que permite incorporar Swing a nuestra instalación de Eclipse. Una
vez escrito, se pulsa el botón Go a la derecha y aparece más abajo, entre otros, el módu-
lo WindowBuilder 1.9.5. Seguidamente, se clica sobre el botón Install correspondiente a
este módulo (véase Figura 2.21).
Eclipse Marketplace
Select solutions to install. Press Install Now to proceed with installation.
Press the "more info" link to learn more about a solution.
WindowBuilder 1.9.5
WindowBuilder is composed of SWT Designer and Swing Designer and makes it very easy to create Java GUI
applications without spending a lot of time writing code.... more info
T byeEclipse Foundation, EPL
SWT swing wysiwyg graphical WindowBuilder
—EL
Marketplaces
para su instalación.
A continuación, aparece una nueva ventana con los elementos del módulo que se va a
instalar (Figura 2.22), de entre los cuales se puede seleccionar solo algunos o todos
ellos.
2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO INFORMATICA Y COÍM
Una vez elegidos los componentes que se desean instalar, se pulsa el botón Confirm y se
acepta el acuerdo de licencia en la siguiente ventana, tras lo cual, comienza la instala-
ción en segundo plano. Al finalizar la instalación, debe reiniciarse Eclipse para que tenga
efecto la actualización del software.
El módulo WindowBuilder sirve para la creación de aplicaciones con una interfaz gráfica
de usuario, en las que se presentan diferentes tipos de controles, como los que se sue-
len mostrar en los formularios. Algunos de ellos son los siguientes:
Áreas de texto (JTextArea): se utilizan para introducir texto que ocupa varias líneas.
Listas (JList): permiten escoger un valor de entre varios, habiendo dos posibilidades:
la selección de una sola opción o de varias (con la tecla Ctrl pulsada).
Cuadros combinados (JComboBox): son listas desplegables que pueden ser utiliza-
das también como cuadros de texto, en los que se puede escribir.
Í JKI¡. KW/ COMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
NUEVO USUARIO
1 Cuadro de contraseña
Cuadro combinado
Botones de opción
Área de texto
Botón
Figura 2.23. Ventana creada con Swing gracias a la instalación del módulo WindowBuilder en Eclipse
y en la que se muestran distintos tipos de controles.
Para crear una aplicación visual, se activa la opción del menú New > Other > Window-
Builder > Swing Designer > Application Window.
Select a wizard
Create a Swing application window
Wizards:
type filter text
b E Plug-in Development
b ( User Assistance
4 ( WindowBuilder
Project Palette
4 (= Swing Designer
7 Application Window
B JApplet
= ia
Figura 2.24. Ventana para crear una aplicación visual con Eclipse.
O Ediciones Paraninfo
Una vez hecho esto, tras indicar el paquete en el que desea ubicar la aplicación visual,
se da un nombre a esta. Entonces, aparece una pantalla, como la se muestra en la Fi-
gura 2.25, en la que aparece el código de la aplicación, que ha sido generado de mane-
ra automática.
2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO INFORMÁTICA
Y COMU
File Edit Source Refactor MNavigate Search Project Run Window Help
b [$ Figurajava
e 5
A
% 1
2
package programas; A BARRVox:
EB programas
» ] Personajava 3% import java.awt.EventQueue:[] 4 O, Pruebaswing
> D) PruebaCuenta.java 6 a- frame: JFrame
7 public class PruebaSwing í a .s main(String[]) : void
» D) PruebaCuentaHerenciaja
b (7) PruebaDíaSemana.java d Q new Runnable()(...
private JFrame frame;
b $7 PruebaEdadPersona.java e “ Pruebaswing0
» [2] PruebaEmpleado.java 7 E initializeQ):
void
» (7 PruebaExcepción1.java
* Launch the application.
» (7 Pruebafactorial.java *Z
> () PruebaFechas.java public static void main (String[] args) 1
> ] PruebaFigura.java EventQueue.invokelLater(new Runnable() (
> D) PruebaFiguralnt.java public void run() 1
> ) PruebaFiguraPolimórfica.j try í
b () PruebaFiguraPolimórfica2 PruebaSwing window = new PruebaSwing
();
» $) PruebaForjava window. frame.setVisible (true) ;
b 47) PruebalecturaNum.java ) catch (Exception e) (
b $9) PruebaMath.java e.printStackTrace () ;
> ] PruebaPersona java »
> B PruebaPersonaPolimórfic:l
> 17 PruebaRandom.java
» $7 PruebaSumabPares.java = Sour::l Design|
>[[] PruebaSwing.java [E] Problems G Javadoc [Q) Declaration El Console %
b 5) PruebaTablaMultiplicar.ja
No consoles to display at this time.
> $7 PruebaWhile.java
b [) Rectángulo.java
» [ Saludo.java
» () Triángulo.java v
< >
programas.PruebaSwing.java - Ejercicios/src
Figura 2.25. Pantalla que aparece inmediatamente después del momento en que se crea una aplicación visual.
En el área central se muestra el código fuente de la aplicación porque está seleccionada por defecto la pestaña
Source, pero se puede visualizar su diseño seleccionando la pestaña Design.
Si se clica sobre la pestaña Design, que está situada en la parte inferior del área central,
aparece el área de diseño de la ventana de la aplicación (Figura 2.26). A la izquierda de
dicha área, se muestra una paleta con diversos elementos. Los más importantes son los
componentes o controles que se pueden añadir a la ventana que se está creando (eti-
quetas, campos de texto, botones, casillas de activación, etc.).
< — Palette —
() Struts
8: Springs
(= Components
tEuJLabel ¡AlTerfield
(EJComboBox ESIButton
WIJCheckBox — € JRadioButt...
Ef JToggleBu... EB JTextArea
[elJFormatte... E-JPassword...
—| JTextPane EjJEditorPane
[EJSpinner =f JList
E JTable E] JTree
E JProgressB... M )ScrollBar
E Separator — (GiJSlider
( Swing Actions
O Ediciones Paraninfo
ha <
Figura 2.26. Área de diseño de la ventana que se está creando y que inicialmente está
en blanco, pero en la que se pueden colocar los controles o componentes que aparecen
en la paleta de la izquierda.
Hx XW/ [OMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
Eclipse Marketplace
Select solutions to install. Press Install Now to proceed with installation.
Press the "more info" link to learn more about a solution.
Figura 2.27. Ventana de Eclipse Marketplace en el que se muestra el módulo Papyrus SysML
preparado para su instalación.
Para instalar el módulo Papyrus SysML, se pulsa sobre el botón Install, se seleccionan to-
dos sus componentes y, finalmente, se hace clic en el botón Confirm. Luego, se debe reini-
ciar el IDE Eclipse para que la instalación tenga efecto.
Eclipse Marketplace
Select solutions to install. Press Install Now to proceed with installation.
Press the "more info" link to learn more about a solution.
Popular |Favorites
| Installed | () Giving loT an Edge
WindowBuilder 1.9.5
WindowBuilder is composed of SWT Designer and Swing Designer and
makes it very easyto create Java GUI applications without spending a
" lotoftime writing code.... more info
by Eclipse Foundation, EPL
SWT swing wysiwyg graphical WindowBuilder
Marketplaces
Figura 2.28. Para saber cuáles son los módulos instalados en Eclipse Marketplace,
se pincha sobre la pestaña Installed. Estos módulos se pueden actualizar
(si hay alguna actualización disponible), cambiar o desinstalar.
Por cada módulo instalado, en la parte inferior derecha, aparece un botón en el que pue-
de leer Update o Change. Si aparece el texto Update, quiere decir que hay alguna actuali-
zación disponible para ese módulo, en cuyo caso, se puede activar la opción Update que
aparece al desplegarla para llevar a cabo la actualización. También aparece la opción
Change, que sirve para modificar elementos del módulo instalado. Así, si se pincha esta
opción para el módulo WindowBuilder 1.9.5, aparece la ventana que se muestra en la Fi-
gura 2.29.
a VG WindowBuilder
1.9.5 http://download.eclipse.org/windowbuilder/latest/
RG WindowBuilder Core (required)
4 WindowBuilder Core Ul (required)
] 4 WindowBuilder Java Core (required)
R WindowBuilder Swing Designer (required)
G WindowBuilder SWT Designer (required)
I WindowBuilder SWT Designer Core (required)
[ G+ WindowBuilder Core Documentation
[V] G WindowBuilder GroupLayout Support
Á WindowBuilder Swing Designer Documentation
4 WindowBuilder SWT Designer Documentation
4 WindowBuilder SWT Designer SWT_AWT Support
O Ediciones Paraninfo
Figura 2.29. Ventana que muestra los elementos del módulo PowerBuilder 1.9.5
instalados por si se desea eliminar alguno o añadir otro que no esté incorporado.
H—… 1XW/ COMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
En esta ventana, se puede desmarcar alguno de los elementos del módulo, en cuyo caso
se activa el botón Confirm y se procede a su desinstalación. En caso de haber seleccio-
nado un módulo que no incluya todos los elementos disponibles para este, también se
podrá instalar algún elemento adicional.
Para todos los módulos instalados, también aparece la opción Uninstall, que habrá que
seleccionar si se desea desinstalarlo, para lo cual se pedirá confirmación.
En la pestaña Available Plugins, es posible visualizar los módulos disponibles para su ins-
talación en NetBeans, como se muestra en la Figura 2.30. Al marcar cada módulo, apa-
rece su descripción en la parte derecha de la ventana.
EZ
P
Install - Name
NB MindMap Editor
] Backlog Support
] Github Issues Support 1“nmmmmv¡cm::immlri.¿¡n
[ JM for NB Update Center
[m] TegMyCode Version: 1.4.11
[m] NetBeans Case Converter Author:
Igor Maznitsa
al Calor Codes Preview Date: 28/3/21
[m] nb-noext-mime-resolver Source: NetBeans Plugin Portal
l| Change Line Endingson Save Editing Homepage: htto://www.scareto.org
dMap Editor E
Modia Descriati
000000
The Plugin allons creste and edit mind maps within NetBeans projects.
O Ediciones Paraninfo
?
1
A modo de ilustración, aquí se explica cómo instalar el módulo NB MindMap Editor, que
permite crear y editar mapas mentales dentro de los proyectos de NetBeans. A tal fin, se
selecciona dicho módulo y se hace clic en el botón Install. Tras aceptar el acuerdo de li-
cencia, comienza su instalación, que se puede indicar que tenga lugar en segundo plano
(casilla de verificación Run in Background). Cuando ya está instalado, es necesario reini-
ciar el IDE para lo que habrá que indicar si se desea reiniciar el entorno en ese momen-
to o más tarde.
The NetBeans IDE Installr has successfuly installed the folowing plugins:
NB MindMap Editor
Una vez instalado un módulo, aparece este en la pestaña Installed. Como se puede ob-
servar en la Figura 2.32, en esta pestaña, se indica para cada módulo instalado si está
activo o no en la columna Active.
PHP
s! :
SO
Version: 1.74
E
i
Plugin Description
e
YI
Para activar cualquier módulo, tan solo es necesario marcarlo y hacer clic en el botón
Activate; en caso de que se quiera desinstalar, se pulsa sobre el botón Uninstall.
X1/ kOMUNICACIONES 2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO
MN 2.6.Mecanismos de actualización
Es importante mantener actualizado el entorno de desarrollo que se utilice, así como los
módulos o plug-ins que se han instalado.
Available Updates
Check the updates that you wish to install. 7
Name Version 1d
[Z] E Oomph Setup 1.22.0.v20210817-... — org.eclipse.oomph.setup feature.group
<
— SelectAll —| | DeselectAl
Details
Figura 2.33. Actualizaciones disponibles para Eclipse. Se puede elegir las que se desea instalar.
En esta ventana, es posible seleccionar las que deseen instalar y, una vez selecciona-
das, se pulsa en el botón Next. Después de esto, se confirma y se inicia el proceso de
instalación tras aceptar el correspondiente acuerdo de licencia.
En el caso de NetBeans, para actualizar el IDE, existe la misma opción de menú Help >
> Check for Updates. Una vez activado, aparecen en una ventana las actualizaciones
disponibles y se puede proceder entonces a instalarlas pinchando sobre el botón Next.
Figura 2.34. Actualizaciones disponibles para Apache NetBeans. Para llevar a cabo
su instalación, se hace clic en el botón Next.
Utilidad de los entornos
de desarrollo
Componentes de un entorno
de desarrollo
Instalación de un entorno
o de desarrollo
o£
]A
—
()
K)
()
v
)
o=
-]
_
=
()
()
K7
oD Edición de programas
= y generación de archivos
-
= ejecutables
=
o
s
+e
”
£
Instalación y desinstalación
de módulos
Mecanismos de actualización
O Ediciones Paraninfo
74
E Actividades de comprobación
2.1. Las actividades de desarrollo de software que más asistencia reciben por los en-
tornos de desarrollo son:
a) Programación y pruebas.
b) Análisis y diseño.
c) Diseño y programación.
d) Programación y mantenimiento.
2.3. ¿Qué nombre recibe el componente de un entorno de desarrollo que permite con-
trolar los cambios que se realizan sobre los programas, creando distintas versiones
de estos?
a) Constructor de interfaz gráfica.
b) Depurador.
c) Editor de textos.
d) Control de versiones.
2.4. Para compilar un programa escrito en Java desde el indicador del sistema se usa el
compilador llamado:
a) javac.
b) java.
c) compiler.
d) Ninguna de las respuestas anteriores es correcta.
2.5. Los ficheros que contienen el código fuente de los programas escritos en Java tie-
nen extensión:
a) .java.
b) .class.
C) .exe.
d) .txt.
79
2.7. Por cada proyecto Java creado en Eclipse, se crea una carpeta en el espacio
de trabajo (Workspace) especificado y, dentro de esta carpeta, hay una carpeta
cuyo nombre es . Esta carpeta contiene una subcarpeta por cada paque-
te del proyecto y, dentro de cada una de estas subcarpetas, hay un archivo con
la extensión para cada clase creada en el paquete. Elige la opción correc-
ta para rellenar los huecos en el texto anterior:
a) bin / class.
b) src / class.
C) bin / java.
d) Ninguna de las respuestas anteriores es correcta.
2.8. Indica la afirmación correcta en relación con las similitudes y diferencias entre
los entornos de desarrollo Eclipse y Apache NetBeans:
a) En los dos entornos de desarrollo se debe indicar la ubicación del espacio de tra-
bajo o workspace donde se almacenarán los proyectos.
b) En Eclipse, se puede ejecutar cada clase de manera independiente seleccionan-
do, desde su menú contextual, la opción de ejecución correspondiente, mientras
que en NetBeans esto no es posible.
c) En los dos entornos de desarrollo, tras instalar un módulo, es posible modificar
los elementos de los que consta el módulo instalado.
d) Ninguna de las respuestas anteriores es correcta.
Actividades de aplicación
O Ediciones Paraninfo
2.11. Se sabe que es posible crear y ejecutar programas en Java sin el uso de ningún entorno
de desarrollo. ¿Qué ventajas aporta el empleo de un entorno de desarrollo?
2.12. ¿Cuáles son las diferencias entre un editor de textos como el bloc de notas y el editor de
76 textos que incorpora un entorno de desarrollo?
2. INSTALACIÓN Y USO DE ENTORNOS DE DESARROLLO ACTIVIDADES FINALES
2.13. ¿Qué software es necesario instalar en un ordenador antes de poder crear y ejecutar progra-
mas en Java independientemente de que se use para ello un entorno de desarrollo o no?
2.14. ¿Qué extensión tienen los programas fuente escritos en Java? Y una vez compilados,
¿Qqué extensión tiene el archivo resultado de dicha compilación?
2.15. ¿En qué consiste un constructor de interfaz gráfica? ¿Incorporan este componente
Eclipse y Apache NetBeans tras su instalación?
2.16. ¿En qué área de la pantalla de Eclipse se puede ver el resultado de la ejecución de un
programa abierto? Y ¿en qué área se pueden visualizar los proyectos del espacio de tra-
bajo (workspace) y se puede navegar por sus elementos?
2 ¿Qué controles se emplean dentro de una aplicación con interfaz gráfica de usuario para
que la persona usuaria pueda elegir una opción de entre varias que son excluyentes en-
tre sí? Y ¿cuáles se pueden usar para introducir texto que se desea que quede oculto?
2.18. Muchos entornos de desarrollo incluyen entre sus componentes un debugger o depura-
dor, ¿para qué sirve este componente?
2.2 ¿Es posible modificar los elementos o componentes de un módulo instalado en Eclipse
sin desinstalarlo y volver a instalarlo? En caso afirmativo, ¿cómo se puede realizar?
2.22. ¿En qué lenguajes de programación es posible escribir programas en Apache NetBeans
una vez instalado, es decir, sin instalar ningún módulo adicional o plug-in?
E Actividedaampdliaeció
sn
2.23. Crea en Eclipse una pantalla como la de la Figura 2.35, para la introducción de los datos
de una nueva persona usuaria de una aplicación.
O Ediciones Paraninfo
Figura 2.35. Pantalla creada con Swing gracias a la instalación del módulo WindowBuilder en Eclipse. 1
2.24. Busca en internet información sobre el entorno de desarrollo BlueJ. ¿Qué le diferencia de
entornos de desarrollo como Eclipse y Apache NetBeans? ¿Con qué lenguajes de pro-
gramación se puede utilizar?
2.25. Busca información en la red sobre el entorno de desarrollo Microsoft Visual Studio. ¿Con
qué lenguajes de programación se puede utilizar?, ¿es de código abierto o cerrado?, ¿es
gratuito?
2.26. Averigua en internet qué lenguajes de programación se pueden utilizar con el entorno de
desarrollo Oracle JDeveloper, si se trata de un entorno de código abierto o cerrado y si
es gratuito.
Linuxtopia - https://www.linuxtopia.org/online_books/eclipse_guides.html
(Página web con guías sobre Linux y desarrollo de software. Incluye una sección sobre Eclipse)
[a]
E [m]M(m] Apache NetBeans - https://netbeans.apache.org/
* (Página web con información sobre el IDE Apache NetBeans, desde la que se puede descargar)
78
SEARCH
<o
z
>
Diseño y realización
de pruebas
Objetivos Contenidos
Comprender la filosofía de las pruebas El 3.1. Filosofía de las pruebas
del software. del software
Emplear las estrategias adecuadas El 3.2. Estrategia de pruebas
para la realización de pruebas a lo largo del software
del ciclo de vida del software. E 3.3. Técnicas de diseño de casos
Conocer y aplicar técnicas de diseño de casos de prueba
de prueba de caja blanca y de caja negra. E 3.4. Documentación de las pruebas
Conocer de qué manera se documentan E 3.5. Herramientas de depuración
las pruebas.
E 3.6. Pruebas automáticas
Utilizar herramientas de depuración
en un entorno de desarrollo.
Realizar pruebas automáticas en un entorno
de desarrollo.
O Ediciones Paraninfo
3. DISEÑO Y REALIZACIÓN DE PRUEBAS |NFORMATÍCA / Kf
Introducción
Cuando un equipo de desarrollo acepta el encargo de crear una aplicación informática,
desea que el resultado de su trabajo sea de calidad, esto es, que la aplicación responda
a las necesidades del cliente y que tenga el menor número posible de errores. El objetivo
de la etapa de pruebas, posterior a la programación, es descubrir dichos defectos antes
de que el software sea entregado al cliente.
En esta unidad, se explica cómo abordar esta importante tarea y las diferentes técnicas
de diseño de casos de prueba. También se verá de qué manera un entorno de desarrollo
puede asistir a las personas que desarrollan programas informáticos en las tareas de de-
puración o corrección de errores encontrados en esta fase. Para finalizar, se describe el
empleo de una herramienta que sirve para la realización de pruebas unitarias de mane-
ra automatizada.
Cabe hacer hincapie aquí que el objetivo de esta tarea es la detección de defectos y no
precisamente la demostración de que el software no tiene ninguno. Y es que, aunque
se trate de una pequeña aplicación, es imposible probar exhaustivamente el software,
es decir, es imposible encontrar todos sus errores. El objetivo debe ser pues realizar
pruebas que no supongan un esfuerzo excesivo y que haya una elevada probabilidad de
que se detecten los fallos, es decir, se trata de intentar encontrar un equilibrio entre el
esfuerzo requerido para esta tarea y la capacidad de detección de defectos. En este sen-
tido, también es necesario desmitificar una creencia común: el hecho de que se detecten
defectos durante este proceso es un indicativo de la negligente actuación de los desarro-
lladores de software. Nada más lejos de la realidad: como seres humanos que son, se
equivocan, lo que tiene como consecuencia que el resultado de su trabajo (en este caso,
el software) puede contener errores. Así pues, el objetivo debe ser detectar estos fallos
antes de que el software sea entregado al cliente, porque es probable que si no los en-
cuentran quienes han desarrollado el programa, los detecte el cliente una vez que el pro-
ducto ha sido entregado, y esto, sin lugar a dudas, no es deseable.
Otro factor que juega en contra de la consideración adecuada de las pruebas es que si
bien las tareas de análisis, diseño y programación se consideran tareas constructivas,
las pruebas pueden ser consideradas por parte del equipo desarrollador como psicológi-
O Ediciones Paraninfo
Piattini et al. (2007), en relación con la actitud necesaria para acometer las pruebas, nos
indican que «un buen caso de prueba es aquel que tiene una gran probabilidad de encon-
trar un defecto no descubierto aún y que el éxito de una prueba consiste en detectar un
defecto no encontrado antes. El contraste con la visión tradicional de las pruebas ('Va-
mos a probar un par de opciones para comprobar que funciona y ya está') es radical».
Por estas razones, es necesario cambiar la mentalidad en relación con las pruebas del
software. Lo indicado anteriormente no quiere decir que las desarrolladoras y desarro-
lladores no deban probar sus propios programas. De hecho, siempre suelen ser ellas y
ellos mismos las personas encargadas de realizar las pruebas de más bajo nivel o las
pruebas de unidades individuales. No obstante, en el caso de proyectos grandes y sobre
todo en pruebas a mayor nivel, se suele involucrar en esta tarea a un equipo de pruebas
independiente, con el que deben trabajar conjuntamente las personas encargadas del de-
sarrollo del software para garantizar que se realicen pruebas exhaustivas del programa.
2. Por otro lado, se trata de comprobar si el producto que se está desarrollando fun-
ciona correctamente, es decir, si lo que hace lo realiza de manera correcta. Esto
se refiere al concepto de verificación.
Así pues, mediante las pruebas se debe comprobar tanto si el producto es el que quiere
el cliente (validación) como si está construido correctamente, de manera que lo que hace
lo hace bien (verificación).
Asimismo, en relación con las pruebas, hay dos aspectos estratégicos, relacionados con
su puesta en práctica, que es preciso considerar:
2. Las técnicas de diseño de casos de prueba que se van a emplear. O dicho de otro
modo, una vez seleccionada la parte del software que se someterá a prueba, se
deberá decidir de qué manera se debe llevar a cabo esta, es decir, habrá que
seleccionar la técnica apropiada. Estas técnicas se estudiarán en detalle en el
Apartado 3.3.
El IEEE (por sus siglas en inglés, Institute of Electrical and Electronics Engineers) propor-
ciona la siguiente definición para caso de prueba: «un conjunto de entradas, condiciones
de ejecución y resultados esperados desarrollados para un objetivo particular como, por
ejemplo, ejercitar un camino concreto de un programa o verificar el cumplimiento de un
O Ediciones Paraninfo
se realiza una tarea conocida con el nombre de depuración. La depuración es, por tanto,
el resultado de una prueba exitosa y consiste en localizar el error y corregirlo, para lo que
puede ser necesario efectuar nuevos casos de prueba.
—
Recuerda o
El hecho de que se encuentren errores a lo largo de la fase de pruebas de una aplicación
no debe entenderse como un fracaso del trabajo previo realizado. Al contrario, se debe
considerar como algo positivo el hecho de que se encuentren errores después de terminada
la programación, pues esto permite eliminarlos antes de entregar la aplicación y evita que
estos sean descubiertos por el cliente. No se debe olvidar que «todos cometemos errores» y,
como dice el dicho popular, «rectificar es de sabios».
ME 32.1.Prueba de unidad
Se comienza probando o bien módulos individuales de software, en caso de que se de-
sarrolle software convencional, o bien clases, si se trata de software orientado a objetos.
En este último caso, la prueba de unidad conlleva realizar también pruebas a nivel de
método, es decir, para cada método no trivial habrá que comprobar si su comportamiento
es el adecuado. Es obvio pues que para probar correctamente una clase entera, es nece-
sario realizar pruebas con cada uno de sus métodos.
ZN
Amma
Argot técnico
Cuando se habla de software convencional, ello se refiere al software creado siguiendo el
paradigma estructurado, según el cual una aplicación consta de varios componentes o
módulos (procedimientos o funciones), de manera que existe un módulo de control principal,
que llama a otros módulos, y estos a otros y así sucesivamente.
Recuérdese que, por el contrario, en el paradigma orientado a objetos, una aplicación
consta de varias clases, y que cada una de estas se compone de atributos y operaciones,
llamadas métodos. A partir de una clase, se pueden crear objetos o instancias de ella. La
O Ediciones Paraninfo
Existen dos estrategias para las pruebas de integración en los sistemas orientados a ob-
jetos:
2. Prueba basada en uso: se comienza probando las clases independientes, esto es,
aquellas que usan muy pocas clases de servidor o ninguna. Después de probar
estas, se examina la siguiente capa de clases, llamadas clases dependientes, que
son utilizadas por las primeras. Esta secuencia de pruebas para las capas de cla-
ses dependientes continúa hasta que se construye todo el sistema.
que la persona que lleva a cabo la prueba «ponga en jaque» el sistema, intentando
conseguir contraseñas, provocando errores del sistema, etc. El objetivo es comprobar
el comportamiento del sistema antes estas situaciones y determinar en qué medida
la dificultad que supone el intento de penetración en el sistema no compensa los be-
neficios que pueda conseguir la persona que lo intenta penetrar.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS |NFORMATÍCA / [r
E Pruebas de rendimiento: se realizan con los sistemas para los que no es suficiente
el cumplimiento de una serie de requisitos funcionales, sino que también es nece-
sario que se cumplan ciertos requisitos de rendimiento, como que se dé respuesta
a un determinado evento en un tiempo limitado. Por lo tanto, están diseñadas para
probar el rendimiento del sistema.
En este tipo de pruebas, participan activamente aquellas personas que lo van a utilizar,
las cuales, ayudadas por el equipo de pruebas, deben ejecutar las pruebas. Esta es la
fase final del proceso software, en la que la persona usuaria da su consentimiento para
su uso o explotación.
O Ediciones Paraninfo
Todos estos tipos de pruebas se muestran en el modelo en V, que es una variante del
modelo en cascada. En su representación, los diferentes niveles de pruebas se colocan
formando una V (véase la Figura 3.1) para mostrar la relación de cada fase del ciclo de
vida con su fase de pruebas asociada.
“ MUN'CACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
MODELO EN V
Plan de la prueba
de aceptación
REQUISITOS PRUEBA DE ACEPTACIÓN
Plan de la prueba
del sistema
Plan de la prueba
de integración
CÓDIGO
Figura 3.1. Representación del modelo en V, en el que la fase posterior a la programación (las pruebas)
se divide en varias subfases que corresponden a las etapas del ciclo de vida en cascada, si bien las etapas
de análisis y diseño se dividen cada una de ellas en dos.
Jot técnico
El nombre de estos dos tipos de pruebas está relacionado con la percepción del probador
acerca de la porción del software que prueba.
O Ediciones Paraninfo
En el caso de las pruebas de caja negra, para la persona que prueba el software, este se
puede considerar una caja negra porque no es necesario conocer ningún detalle acerca de
este más que la función que realiza y, por tanto, la salida que genera a partir de la entrada
proporcionada.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS |NFORMÁTICA Y ( NN
Sin embargo, en el caso de las pruebas de caja blanca, se parte del código fuente y, de su
examen, se derivan los casos de prueba. En este caso, sí es necesario, por consiguiente,
conocer el interior (el código fuente) del software que se somete a prueba. De hecho, las
pruebas de caja blanca también reciben el nombre de pruebas de caja de cristal porque el
interior del software debe ser visible para el probador.
3. Ejecutan todos los bucles en sus fronteras y dentro de sus fronteras operativas.
Existen diferentes técnicas de diseño de casos de prueba de caja blanca, que se expo-
nen seguidamente.
Para crear un grafo de flujo, se deben llevar a cabo los siguientes pasos:
2. Se unen los nodos mediante flechas llamadas aristas que representan el flujo de
control y son similares a las flechas de un diagrama de flujo. Se deben represen-
tar las estructuras básicas de programación tal y como se muestra en Figura 3.2.
AY COMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
Alternativa doble
Alternativa simple (If ... then ...
Secuencial (if ... then... endif) else ... endif)
L D 4Repetitiva de O an
(while ... do Repetitiva de 1 an
... end while) (repeat ... until ...)
Figura 3.2. Representación de los grafos de flujo para diferentes estructuras de control.
Una vez creado el grafo de flujo, se puede calcular la complejidad ciclomática de McCabe
V(G) de cualquiera de las tres formas siguientes:
E Número de regiones del grafo, considerando una región como una zona del grafo
cerrada. No obstante, también se debe considerar como región la región externa
(no cerrada).
V(G)=A-N+2
E Según la ecuación:
VG) =NP+1
El valor V(G) indica el número de caminos independientes del grafo y, por tanto, el núme-
ro de casos de prueba que hay que generar para garantizar que se han recorrido todas
las instrucciones y condiciones del código.
O Ediciones Paraninfo
El último paso de este método es generar casos de prueba que recorran cada uno de los ca-
minos, para lo que se deben elegir los datos de entrada que fuercen cada uno de esos cami-
nos. Puede ocurrir que alguno de los caminos no pueda recorrerse de manera independiente,
sino como parte de otro camino.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS INFORMATICA Y (L
Para cada caso de prueba, se deben comparar los resultados obtenidos con los espe-
rados. La no coincidencia indicará la existencia de algún defecto y, en consecuencia, se
debe llevar a cabo un proceso de depuración.
Solución
La primera tarea que se debe a llevar a cabo es asignar un número entero a cada secuen-
cia de instrucciones y a cada condición:
begin
int num = 0, cont pos=0, cont neg=0, suma pos=0, suma neg=0;
2 float neg=
media pos=0,med ia 0;
else
cont_neg++;
suma neg+=num;
endif;
System.out
.print (“Introduce número: “);
G
num=Entrada .entero();
1f ((cont_pos l= 0))
media 00s = (float)suma pos/cont pos;
System.out .printin ( “Media de los positivos: “+ media_pos);]
if (( cont_neg !=0 ))
[media_neg= (£loat) suma neg/cont neg;
O Ediciones Paraninfo
end; >
* * /XAUN'CAGONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
El siguiente paso es construir el grafo de flujo de acuerdo con las estructuras mostradas
en la Figura 3.2. El grafo de flujo quedaría como el que se muestra en la Figura 3.3. En el
grafo, se han marcado en rojo los nodos predicados y se ha asignado un número a cada
región en color azul.
Una vez que se tiene el grafo de flujo, ya se puede calcular la complejidad ciclomática,
V(G), de las tres formas que se ha indicado antes:
V(G)
= número de regiones
= 5
VWG)=A-N+2=16-13+2=5
VG)=NP+1=4+1=5
O Ediciones Paraninfo
Como V(G) toma el valor 5, se deduce que hay cinco caminos independientes en el códi-
go examinado y, por tanto, el número de casos de prueba que hay que crear para cubrir
todas las instrucciones y condiciones del programa es 5. La siguiente tarea es encontrar
esos cinco caminos independientes. Para ello, hay que tener en cuenta que cada camino
independiente incluye una ruta nueva en relación con los anteriores:
3. DISEÑO Y REALIZACIÓN DE PRUEBAS INFORMÁTICA Y (L
Camino 1: 1-2-8-10-11-13
Camino 2: 1-2-3-4-6-7-2-8-10-11-13
Camino 3: 1-2-34-6-7-2-8-9-10-11-13
Camino 4: 1-2-3-5-6-7-2-8-10-11-13
Camino 5: 1-2-3-5-6-7-8-10-11-12-13
Con objeto de probar el camino 1, se debe introducir como primer número el O con el
fin de que no se entre en el bucle ni una sola vez y se pase directamente del nodo 2 al
nodo 8. En este caso, el programa no debe mostrar nada, ya que no se ha introducido nin-
gún número ni positivo, ni negativo.
El camino 2 no se puede probar como tal, ya que al introducir un número positivo (para
pasar por el nodo 4), se debería pasar por el nodo 9, que muestra la media de los núme-
ros positivos. Por consiguiente, este camino debe probarse como parte de otro.
Para probar el camino 3, hay que suministrar al programa, en primer lugar, un número po-
sitivo (para pasar por el nodo 4), por ejemplo, el número 8, y un O a continuación (para no
pasar más por el bucle). El programa deberá indicar que la media de los números positi-
vos es 8. Al probar el camino 3, ya se prueba el camino 2 como parte de él.
El camino 4 tampoco se puede probar como tal, pues al introducir un número negativo
(para pasar por el nodo 5), se debe pasar por el nodo 12 para mostrar la media de los nú-
meros negativos.
Por último, a fin de probar el camino 5, se debe suministrar al programa un número ne-
gativo (para pasar por el nodo 5), por ejemplo, el —4, y un 0 a continuación. El programa
deberá indicar que la media de los números negativos es —4. Al probar el camino 5, se
prueba también el camino 4 como parte de él.
Para cada caso de prueba, se comprueba que el resultado mostrado coincide con el espe-
rado, de forma que la no coincidencia indicará la existencia de algún defecto, por lo que
habrá que proceder a detectar y corregir dicho error (mediante un proceso de depuración).
El siguiente programa escrito en Java pide un número entero por teclado e indica si
es un número perfecto, es decir, si es igual a la suma de sus divisores propios. Un
divisor propio es un entero positivo distinto del número en sí mismo y que divide al
número de forma exacta, es decir, sin resto. >
A f (OMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
1. Comenzar por el bucle más interno, estableciendo valores mínimos para todos
los demás bucles.
2. Realizar pruebas de bucle simple para el bucle más interno, manteniendo los
bucles exteriores en sus valores mínimos.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS |NFORMÁT'CA Y CON
3. Trabajar de fuera hacia dentro y probar el siguiente bucle manteniendo los otros
bucles exteriores en valores mínimos y los otros bucles interiores en valores tí-
picos.
Aquí es necesario considerar que, en una instrucción, se define una variable si se le asig-
na valor, mientras que se puede afirmar que esa variable se usa si se consulta o utiliza
su valor de algún modo. Así, en una condición, siempre se usan una o varias variables.
Si se asigna el número / a una instrucción, el conjunto DEF para esa instrucción / estará
formado por el conjunto de variables que se definen en esa instrucción. Su conjunto USO
estará formado por el conjunto de variables cuyo valor se usa en esa instrucción. Esto
quedaría ilustrado así:
Mediante esta técnica, se encuentran las cadenas DU para una variable. Estas cadenas
tienen la forma /X, 1, 1'], donde X es una variable, / e / son instrucciones tal que X está en
DEF(1) y en USO(1), y la definición de X en ! está viva en /” porque existe algún camino en-
tre / e / que no incluye ninguna otra definición de X.
Argot técnico
Las cadenas DU de esta técnica reciben este nombre porque se trata de cadenas de
definición-uso, más concretamente, cadenas en las que primero se define una variable
y luego se usa esa misma variable sin que haya entre la instrucción donde se define y la
instrucción donde se usa ninguna otra definición de la variable.
Debido a que el objetivo es encontrar cadenas DU, esta técnica también recibe el nombre de
O Ediciones Paraninfo
prueba DU.
2. Calcular el conjunto DEF y USO para cada variable que se usa en ese programa.
4. Generar el número mínimo de casos de prueba que incluyan caminos para todas
las cadenas DU.
5. Generar datos de entrada que fuercen cada uno de los caminos encontrados en el
paso anterior.
Solución
Seguidamente, se calculan las cadenas DU solo para la variable num. A tal fin, se definen
los conjuntos DEF y USO para esta variable. Como se puede observar, la variable num se
define en las instrucciones 1 y 6, mientras que se usa en las que tienen asignados los
números 2, 3, 4 y 5. Esto se indica del siguiente modo:
DEF(1) = (num)
USO(2) = fnum)
USO(3) = fnum)
USO(4) = fnum)
USO(5) = fnum)
DEF(6) = (num)
El siguiente paso es buscar las cadenas DU para esta variable, que son las siguientes
numeradas:
DU [fnum, 1, 2] (1)
DU [num, 1, 31 (2)
DU [num, 1, 4] (3)
DU [num, 1, 5] (4)
DU [num, 6, 2] (5)
DU [num, 6, 3] (6)
DU [num, 6, 4] (7)
O Ediciones Paraninfo
DU [num, 6, 5] (8)
A continuación, se debe encontrar el número mínimo de caminos que incluyan todas las
cadenas DU. Estos caminos son: >
3. DISEÑO Y REALIZACIÓN DE PRUEBAS |NFORMÁTICA y ();
En este caso, con dos caminos es suficiente para cubrir todas las cadenas DU encontra-
das. En la primera iteración del bucle del camino 1, se cubren las cadenas DU (1), (2) y
(3); en la segunda iteración, se cubren las cadenas DU (5), (6) y (7) y, en la tercera itera-
ción, se cubre la cadena DU (8). Pero, en el camino 1, no es posible cubrir la cadena DU
con el número (4), es decir, DU [num, 1, 5] porque por el nodo 1 solo se pasa una vez. En
las iteraciones, no se puede pasar por los nodos 4 y 5 a la vez y, para volver a uno de los
nodos 4 0 5, hay que pasar por el nodo 6, que contiene otra definición de la variable num.
Por este motivo, hay que establecer otro camino para cubrir esta cadena DU.
Ya solo quedaría generar los datos de entrada para recorrer cada uno de estos dos cami-
nos. Para el camino 1, habría que introducir en el programa dos números positivos, luego
uno negativo y un cero para finalizar. Por ejemplo, si se suministra un 4, un 8 y un —9, el
programa nos debe indicar que la media de los números positivos es 6 y la de los nega-
tivos, —9. Para forzar el camino 2, habría que introducir en el programa un número nega-
tivo y un cero para finalizar. Si, por ejemplo, se proporciona como entrada el número —10
y luego un 0, el programa debe indicar que la media de los números negativos es —10.
E Un valor específico.
Hay una serie de reglas que ayudan a identificar las clases de equivalencia en función
del tipo de la condición de entrada:
E Si se sabe que algunos elementos de una clase no se tratan de igual forma que el
resto de sus elementos, debe dividirse dicha clase de equivalencia en varias clases
menores.
Para la creación de los casos de prueba, una vez conocidas estas reglas, se llevan a
cabo los siguientes tres pasos:
2. Crear el número mínimo de casos de prueba que incluyan todas las clases
válidas.
3. Crear un caso de prueba por cada clase no válida. El caso de prueba debe incluir
una clase no válida, y todas las demás clases deben ser válidas.
Actividad resuelta 3
O Ediciones Paraninfo
Solución
En la Tabla 3.1, se muestran las condiciones de entrada y, por cada una de ellas, las cla-
ses válidas y las no válidas, numerándose cada una de ellas. >
/ A
Tabla 3.1. Condiciones de entrada para el supuesto, junto con las clases de equivalencia
válidas y no válidas de acuerdo con las normas especificadas
En la Tabla 3.2, se muestran los casos de prueba válidos y, en la Tabla 3.3, los no váli-
dos. Por cada caso de prueba, se indica, en la última columna, las clases de equivalencia
incluidas. Recuerda que, para el caso de las clases válidas, se debe crear el número mí-
nimo de casos de prueba que incluyan todas las clases válidas; en este caso, se requie-
re un único caso de prueba.
19569832349E3pan0]a(1)(9)(10) .................................
2398323232c ................. Noespanºla()(5)(11) .................................
W»" 10M[.HXHCIAX(:IO'XIES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
b) Primer apellido: debe ser una cadena de entre 2 y 30 letras, pudiendo incluir algún
espacio en blanco.
C) Año de nacimiento: debe ser un número entero entre 1901 y el año actual.
Crea una tabla de clases de equivalencia. Además, genera los casos de prueba corres-
pondientes usando la técnica de particiones o clases equivalencia, indicando en cada
caso las clases cubiertas.
Las reglas que se siguen para generar los casos de prueba son las siguientes:
4. Se usa la regla 2 para cada condición de salida que especifique un número de va-
lores. Si, por ejemplo, el programa especifica que se puede hacer uso de uno a
tres descuentos, habrá que generar casos de prueba para lograr cero, uno, tres y
O Ediciones Paraninfo
cuatro descuentos.
Dado que esta condición de entrada especifica un número de valores (entre 18 y 65), hay
que generar clases de equivalencia para los valores mínimo y máximo (18 y 65), uno me-
nos que el mínimo (17) y uno más que el máximo (66), como se muestra en la Tabla 3.4,
en la que se ha asignado a las clases de equivalencia una numeración que sigue la de la
Actividad resuelta 3.3:
Tabla 3.4. Clases de equivalencia válidas y no válidas para la condición de entrada edad
empleando la técnica de análisis de valores límite
Una vez generada estas clases de equivalencia adicionales, se trata de generar los casos
de prueba que abarquen estas clases. Para ello, se debe tener en cuenta que hay que
generar un caso de prueba válido que abarque todas las clases válidas. Como, en este
caso, para la edad, hay dos clases válidas, se deben generar dos casos de prueba váli-
dos (véase Tabla 3.5). A la edad, se deben añadir las otras condiciones de entrada que
se incluyeron en la Actividad resuelta 3.3.
Tabla 3.5. Casos de prueba con clases de equivalencia válidas que se generan empleando la
técnica de análisis de valores límite
Tabla 3.6. Casos de prueba con clases de equivalencia no válidas que se generan empleando
la técnica de análisis de valores límite
O Ediciones Paraninfo
M EN Conjetura de errores
Esta técnica consiste en generar una lista de errores que suelen cometer quienes desa-
rrollan aplicaciones y de las situaciones que suelen dar lugar a dichos errores, para lue-
go generar un conjunto de casos de prueba basándose en esta lista. Se trata de errores
que se cometen comúnmente y no relacionados con aspectos funcionales.
Se muestran a continuación una serie de ejemplos típicos que reflejan el empleo de esta
técnica:
E La prueba del sistema debe emplear casos de prueba de caja negra para compro-
O Ediciones Paraninfo
Recuerda
Una buena estrategia de prueba debe combinar los dos tipos de técnicas de diseño de
casos de prueba estudiadas (pruebas de caja blanca y de caja negra) para lograr la cobertura
deseada.
En cuanto a la documentación del diseño de las pruebas, es conveniente crear los si-
guientes documentos:
E Especificación del diseño de las pruebas: es un informe que detalla el plan de prue-
bas porque en él se indica cada uno de los elementos concretos que se van a pro-
bar y los procedimientos de prueba. A partir de este documento se generan los
siguientes:
1. Histórico de pruebas: registra todos los hechos relevantes ocurridos durante la eje-
O Ediciones Paraninfo
2. Informe de incidentes: registra cada incidente ocurrido durante la prueba que re-
quiera una posterior investigación.
.' !X*. Yl [OMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
Especificación del
diseño de las pruebas
Figura 3.4. El plan de pruebas es un documento único para una aplicación con indicaciones generales acerca
de las pruebas. Este se desglosa, por cada elemento que se va a probar, en varias especificaciones del diseño
de las pruebas. Cada uno de estos documentos contiene además varias especificaciones de casos de prueba
y varias especificaciones de procedimientos de pruebas.
Informe
de incidente
Figura 3.5. Se parte de una especificación del diseño de las pruebas y, por cada ejecución de estas, a partir
de una serie de casos de pruebas y sus procedimientos, se genera un histórico de pruebas con todos
O Ediciones Paraninfo
los hechos relevantes ocurridos durante esas pruebas y un informe por cada incidente ocurrido.
Todo ello se recoge en el informe resumen de pruebas.
proporcionar información sobre la naturaleza de los defectos encontrados. Por cada de-
fecto encontrado, se debería registrar la siguiente información: cuándo se cometió, quién
lo cometió, qué se hizo mal, cómo se podría haber evitado, por qué no se detectó antes,
cómo se podría haber detectado antes y cómo se encontró el error.
El objetivo del análisis causal es formar al personal sobre los errores cometidos para
que se puedan prevenir en el futuro. La información generada se puede emplear para
predecir los fallos futuros del software.
A veces, la localización del defecto es una tarea sencilla, pero otras veces, no tanto, y
para ello, pueden resultar útiles las herramientas de depuración que proporcionan los en-
tornos de desarrollo. Puede ocurrir incluso que para la detección del defecto sea necesa-
rio crear nuevos casos de prueba.
Una vez detectado el defecto, habrá que corregirlo y tener en cuenta que, al llevar a cabo
las modificaciones que supuestamente corregirán el fallo, se pueden introducir nuevos
defectos, por lo que será conveniente ejecutar pruebas de regresión, esto es, se repeti-
rán los casos de prueba que se ejecutaron antes de las modificaciones para estar segu-
ros de que los cambios no hayan originado nuevos defectos en el software.
A modo de ejemplo, aquí se verá cómo el depurador o debugger del IDE Eclipse asiste en
esta tarea a las personas que desarrollan software. Grosso modo, las ayudas que propor-
ciona esta herramienta son las siguientes:
Para ejecutar un programa en modo depuración, se puede realizar cualquiera de las si-
guientes acciones:
Eile Edit Source Refactor Navigate Search Project Pydev Run Window Help
e -OO| NAN ELOAPIVIF-0-0-Q-185
-P IFETIO-A-eve-5-14 ARE
- Q Signin
+5 Debug x E Project Explorer = 6 [NotaMediajava X = l (;)Variables X % Breakpoints 6 Expressions = (=)
=1 2 s s S, ; ER A EE :
4 7 NotaMedia [Java Application] 23 notas[contador] = teciado.nextInt(): Name Value
4 E programas.NotaMedia at localhost:53248 2 » E* no method return val
4 P Thread [main] (Suspended (breakpoint at line34ir — 25 teclado.close(): 4 6 notas (id=20)
= NotaMedia.calcularNotaMedia(nt[]) line:34 2 return notas; = 10
= NotaMedia.main(String[]) lne: 12 2 a m
»E CaProgram FilesVavaljdk-16.0.2bin javaw.exe (16fe _2E a ]
private static double calcularNoraMedia (int[] notas) (
ha variable para almacenar la suma de las notas a Bl
a ]
ray para sumar codas las notas a 15)
= 0; Eontador < nota=.lengrh: ++668tadoz) 4 Í:]]
a
a nora medía como el resultado de dividir la suma al a [8]
notas entre el número de notas*/ a 19
float media = (float) suma/notas.length: a ol
return media; a m
» a 12
<
El Console X [E] Problems (1) Debug Shell XZ|
NotaMedia [Java Application] CAProgram FilesVavajdk-16.0.Abin javaw.exe (16 feb 2022 20:18:17)
Introduzca una nota: Ú
Introduzca una nota: £
Introduzca una nota:
Figura 3.6. Vista Depuración mientras se está ejecutando una aplicación en modo de depuración.
E _ Área de edición: situada en la parte central, en ella se muestra el código fuente del
programa que se está ejecutando.
En modo depuración, al hacer clic en la opción de menú Run, aparecen nuevas opciones,
algunas de las cuales se explican a continuación:
E Step into (o tecla F5): ejecuta el código paso a paso. En caso de que en el código
O Ediciones Paraninfo
haya una llamada a un método, también se ejecutará paso a paso cada instrucción
de este.
E Step over (o tecla F6): ejecuta el código paso a paso, pero en caso de que en el códi-
go haya una llamada a un método, el código del método no se ejecutará paso a paso.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS INFORMATICA Y (0IM '
Step return (o tecla F7): si la ejecución está dentro de un método, el depurador sale
del método en cuestión.
Skip all breakpoints (teclas Ctrl + Alt + B): se saltan todos los puntos de ruptura
como si estos no existiesen.
Add Java exception breakpoint: permite añadir una excepción como punto de ruptura.
A continuación, se ofrece un ejemplo de uso del depurador a partir del código que se expo-
ne abajo, por medio del cual, se crea un array de 15 números que representan las notas
(números enteros) obtenidas por 15 alumnos. Se usa el método /eerNotas para leer por te-
clado las 15 notas e introducirlas en el array y el método calcularNotaMedia para leer to-
das las notas y calcular la nota media, que es mostrada por pantalla en el método main.
package programas;
(NH
import java.util.Scanner;
public class NotaMedia (
public static void main(String[] args) f
ooJatuH.s
calcularNotaMedia
(notas) ) ;
)
WNHOao
)
teclado.close();
return notas;
)
O Ediciones Paraninfo
int suma = 0;
au
D) NotaMediajava X
//Llamamos al método que calcula la nota media
System.out.printin ("La nota media es un " + calcularNotaMedia (notas));
)
Figura 3.7. Punto de ruptura o interrupción en la instrucción de la línea 34 reflejado mediante el círculo
pequeño que aparece a la izquierda de dicha línea.
O Ediciones Paraninfo
Si se desea eliminar un punto de ruptura, tan solo hay que hacer doble clic sobre el
circulito.
| EL) D 4 [14] 4
40 o suma 3
a) INEN
a2 v
< > < >
Para demostrar el funcionamiento de JUnit, en este apartado, se crea una clase Cuenta
en un proyecto en Eclipse. Esta clase incluye como atributos el número de la cuenta y su
saldo, un método constructor con un parámetro por cada uno de los atributos de la cla-
se, métodos de consulta y acceso a cada uno de sus atributos, así como los siguientes
métodos:
1 package programas;
2 public class Cuenta (
3 private String número; //Número de la cuenta bancaria
4 private float saldo; //Saldo de la cuenta bancaria en euros
5 public Cuenta (String numCta, float saldoCta)
6 número= numCta;
7 saldo = saldoCta;
8 )
9 public String getNúmero
() f
10 return número;
10 )
11 public float getSaldo
() (
12 return saldo;
13 )
14 public void setNúmero (String numCta) (
O Ediciones Paraninfo
15 número = numCta;
16 )
1 public void setSaldo(float saldoCta) f
18 saldo = saldoCta;
19 )
3. DISEÑO Y REALIZACIÓN DE PRUEBAS INFORMÁT|CA Y CO/X*—/¡1 W*
El siguiente paso es crear una clase de prueba para esta clase. Seleccionada la clase
Cuenta, se activa con el botón derecho del ratón la opción del menú contextual New >
> JUnit Test Case. Se dejan las opciones por defecto y se pulsa en el botón Next. En la
ventana emergente (Figura 3.10), se eligen los métodos que se quieren probar; en este
caso, se probarán los métodos getSaldo, setSaldo, ingresarDinero y extraerDinero.
Test Methods
Select methods for which test method stubs should be created. E_'
Available methods:
- ]O -Cuena]
Ce 5 Cuenta(String, float)
getNúmero()
getSaldo()
setNúmero(String)
setSaldo(float)
ingresarDinero(float)
extraerDinero(float)
mostrarCuenta()
a ]O object
4 methods selected.
Se creará una clase de prueba llamada CuentaTest, cuyo código se muestra a conti-
nuación:
O Ediciones Paraninfo
package programas;
H
class CuentaTest (
E
eTest
u
1 KOMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
6 void testGetSaldo() (f
7 fail (“Not yet implemented”);
8 )
9 eTest
10 void testSetSaldo() (f
11 fail (“Not yet implemented”);
12 )
13 eTest
14 void testIngresarDinero() (
fail (“Not yet implemented”);
15 )
16 eTest
17 void testExtraerDinero() (
18 fail (“Not yet implemented”);
19 )
20 )
Como se puede observar, se ha creado un método de prueba para cada uno de los méto-
dos que se han seleccionado antes. El nombre de cada uno de estos métodos comienza
por test y, por cada uno de ellos, aparece la notación ETest por ser un método de prueba.
A continuación, se deben implementar estos métodos. Para implementar los métodos de
prueba, es útil el empleo del método JUnit assertEquals (valorEsperado, valorReal), que
comprueba si el valor esperado indicado coincide con el valor real.
eTest
HH
void testGetSaldo() |
au
Si se escribe este código para el método y se pulsa el botón Run o la opción de menú
Run > Run, se podrá ver, en la parte izquierda de la pantalla (véase Figura 3.11), que
se han ejecutado cuatro casos de prueba en los cuales no se ha producido ningún error,
pero que ha habido tres fallos. Al lado de cada método de prueba, hay un símbolo, de
manera que:
O Ediciones Paraninfo
| !
a Ki CuentaTest [Runner: JUnit 5) (0,135 s) Íi se eTest
del testExtraerDinero0 (0,1235) — void testGerSaldo() [
dEl testingresarDinero0 (0,005«) !Il-.x Cuenta cuental = new Cuenta ("ES21099865462528660871295", 100):
Jl testGetSaldo0) (0,002 ) 12 float saldo = cuental.gerSaldo();
LEl testSetSaldo0 (0,003 s) LWB',2 ] assertEquals (100, saldo);
168 eTest
a void testSerSaldo() (
18 fail("Not yet implemented");
9 D
Figura 3.11. Pantalla en la que se muestra el resultado de la ejecución de la clase de prueba CuentaTest,
obteniendo una prueba exitosa (la del método testGetSaldo) y tres fallos porque los otros tres métodos
aún no han sido implementados.
1 QeTest
2 void testSetSaldo() |
3 Cuenta cuental = new Cuenta (“ES21099865462528660871295”, 0);
4 cuental.setSaldo(100);
5 assertEquals (100, cuental.getSaldo());
6 )
7 QeTest
8 void testIngresarDinero() (
9 Cuenta cuental = new Cuenta (“ES21099865462528660871295”, 100);
10 cuental.ingresarDinero(400);
ha assertEquals (500, cuental.getSaldo());
12 )
13 eTest
14 void testExtraerDinero() |
L5 Cuenta cuental = new Cuenta (“ES21099865462528660871295”, 100);
16 cuental.extraerDinero(20) ;
17 assertEquals (80, cuental.getSaldo());
18 )
Una vez implementados, si se hace clic en el botón de ejecución, se indicará que la eje-
cución de los cuatro casos de prueba ha sido exitosa:
el testGetSaldo0) (0,002 s)
dEl testSetSaldo0) (0,014 5)
Figura 3.12. Parte de la pantalla en la que se muestra el resultado de la ejecución de la clase de prueba
CuentaTest, obteniéndose una prueba exitosa para los cuatro métodos de la clase porque los cuatro han
podido implementarse y, además, el resultado de la ejecución de cada método coincide con el esperado.
; (,OMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
Recuerda
En relación con lo dicho en el Apartado 3.1, se puede afirmar que un buen caso de prueba es
aquel que ofrece una elevada probabilidad de detectar un error, o lo que es lo mismo, aquel
que es muy probable que tenga éxito. Recuérdese que el objetivo de las pruebas es detectar
errores antes de que el software sea entregado al cliente, por lo que cabe afirmar que las
pruebas tienen éxito en la medida en que, mediante su ejecución, se encuentran defectos.
Sin embargo, en el ámbito de la herramienta JUnit, se marcan en color verde aquellos
métodos de prueba en los que el resultado obtenido coincide con el esperado. El color verde
suele vincularse con el éxito o con lo bueno y, por lo tanto, se puede afirmar que, en JUnit,
se considera exitoso aquel método de prueba como consecuencia del cual no se produce
un error o divergencia entre el resultado obtenido y el esperado. Esto parece ir en contra
de lo afirmado en el párrafo anterior y explicado en apartados anteriores, es decir, en
contra de la consideración de que un caso de prueba exitoso es aquel que detecta un fallo.
No obstante, no se trata de una incongruencia en relación con lo que se indicó en el
Apartado 3.1, sino, más bien, una forma diferente de interpretar el resultado de la ejecución
de un caso de prueba. Hay que seguir siendo conscientes de que la detección de un defecto
al ejecutar un caso de prueba es una «buena noticia» en la medida en que permite corregir
algo que se ha hecho mal porque, al ser humanos, nos podemos equivocar,
y lo positivo de todo ello es que aún se tiene tiempo de enmendar el error sin que el cliente
lo detecte.
Para ejemplificar ese caso, aquí se modificará el método extraerDinero() de la clase Cuenta,
de manera que se produzca una excepción cuando el saldo resultante de la extracción
de dinero sea negativo. A tal fin, se lanza una excepción, ArithmeticException, que mues-
tre un mensaje de error indicando lo que ha ocurrido. El método extraerDinero() quedaría
del siguiente modo:
else
,
Con el fin de comprobar que, efectivamente, se lanza una excepción cuando el saldo de
la cuenta es negativo, se modifica el método de prueba testExtraerDinero() generando un
caso de prueba que dé lugar a esta situación, por ejemplo, creando una cuenta con 100 €
O Ediciones Paraninfo
y solicitando una extracción de 120 € de esta. Para ello, se debe generar la excepción
ArithmeticException, capturando esa excepción y colocando el código que la genera den-
tro de un bloque try. En caso de que no se genere la excepción, como es de esperar, se
muestra un mensaje indicando que se ha producido un fallo con fail.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS INFORMÁT|CA Y (,O/X
1 QeTest
2 void testExtraerDinero() (
3 try(
4 Cuenta cuental = new Cuenta (“ES21099865462528660871295”, 100);
5 cuental .extraerDinero
(120);
6 fail (“ERROR. Se debería haber lanzado una excepción al
resultar un saldo negativo”) ;
7 )
8 catch (ArithmeticException ae) f
9 //Prueba correcta
10 )
11 )
ME 3.6.2. Anotaciones
Muy frecuentemente, al crear un caso de prueba, es necesario repetir ciertas instruc-
ciones en cada uno de los métodos de prueba. Así, en todos los métodos de la clase
CuentaTest se puso como primera instrucción la de creación de una cuenta con un sal-
do de 100 €:
De forma análoga, existe la anotación QAfterEach, para indicar que todas las instruccio-
nes del método para el que se especifica esta anotación se deben ejecutar después de
la ejecución de cualquier método de prueba.
A modo de ilustración, aquí se modificará la clase CuentaTest para incluir dicha instruc-
ción en un método nuevaCuenta(). La clase quedaría así:
package programas;
J4aukewrnHh
import org.junit.jupiter.api.BeforeEach;
class CuentaTest (
private Cuenta cuenta;
aBeforeEach
public void nuevaCuenta
() f
o
I A YI COMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
Asimismo, es muy habitual tener que realizar ciertas acciones una sola vez al inicio de
las pruebas, es decir, antes de la ejecución de cualquier método de prueba. Para ello,
se debe emplear la anotación EBeforeAll. De manera similar, existe la notación GAfterAll,
cuyas instrucciones se deben ejecutar después de la ejecución de todos los métodos de
prueba.
Los métodos con las anotaciones OBeforeAll y QAfterAll, así como los atributos a los que
acceden, deben tener asignada la propiedad static porque para el uso de estos métodos
y de los atributos a los que acceden, no es necesario crear ningún objeto de la clase a
la que pertenecen.
1 package programas;
2 import static org.junit.jupiter.api.Assertions.*;
3 import org.junit.jupiter.api.Test;
4 import org.junit.jupiter.api.BeforeAll;
5 class CuentaTest (
6 private Cuenta cuenta;
7 eBeforeAll
8 public void nuevaCuenta
() f
9 cuenta = new Cuenta (“ES21099865462528660871295”, 100);
10 )
E eTest
12 void testGetSaldo() (
13 float saldo = cuenta.getSaldo();
14 assertEquals (100, saldo);
15 )
16 eTest
17 void testSetSaldo() f
18 cuenta.setSaldo(100);
19 assertEquals (100, cuenta.getSaldo());
20 )
2 eTest
22 void testIngresarDinero() (
23 cuenta.ingresarDinero
(400);
24 assertEquals (500, cuental.getSaldo());
25 )
26 eTest
27 void testExtraerDinero() (
28 try(
29 cuenta.extraerDinero
(120);
30 fail (“ERROR. Se debería haber lanzado una excepción
al resultar un saldo negativo”);
31 )
32 catch (ArithmeticException ae) (
33 //Prueba correcta
34 )
35 )
36 )
Figura 3.13. Resultado de la ejecución de la clase de prueba CuentaTest. En este caso, la prueba ha originado
un fallo para el método testGetSaldo().
u “O/VNUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
Como se puede observar, se señala un fallo para el método testGetSaldo() porque se es-
peraba el valor 100, pero el valor del saldo es 500. Esto es debido a que el orden de
ejecución de los métodos de prueba no es el orden en el que se han escrito en la cla-
se CuentaTest, sino el orden en el que aparecen en el resultado de la ejecución, que se
muestra en la Figura 3.13, que es en orden alfabético por nombre de los métodos. Dado
que, en el método testIngresarDinero(), se ha incrementado el saldo en 400 €, tras ha-
berle asignado a la cuenta un saldo de 100 € al inicio, en el método nuevaCuenta(), que
tiene asignada la notación QBeforeAll, el saldo de la cuenta debe ser 500 €, y no 100 €,
como debía ser en la anterior versión de la clase CuentaTest. El motivo es que, en ese
caso, antes de la ejecución de cada método de prueba, se ejecutaba de nuevo el méto-
do nuevaCuenta(), por tener este asignado la anotación OBeforeEach. Se puede observar,
por tanto, como el empleo de una notación u otra (OBeforeAll o OBeforeEach) es muy re-
levante. Por tanto, para que el método testGetSaldo() se ejecute correctamente, se debe
cambiar el valor esperado del saldo a 500 €, quedando el método testGetSaldo() así:
eTest
H
void testGetSaldo() |
aH N
Recuerda
El criterio de cobertura de las pruebas es relevante porque es el que se usa para determinar en
qué momento se considera que se han realizado tantas pruebas con una alta probabilidad de
detección de errores como para considerar que ya no es necesario continuar realizando pruebas
sobre el elemento del software considerado. Un criterio de cobertura ampliamente empleado
es el recorrido de todas las instrucciones del código fuente del elemento que se está probando.
lizar la cobertura de código eligiendo la opción de menú Run > Coverage con la clase de
prueba visible en el explorador de proyectos, o bien seleccionar del menú contextual de la
clase CuentaTest la opción Coverage As > Junit Test. En cualquiera de los dos casos, nos
aparecerá en el área de consola (parte inferior de la pantalla) una nueva pestaña llamada
Coverage con la indicación de la cobertura alcanzada, como se muestra en la Figura 3.14.
3. DISEÑO Y REALIZACIÓN DE PRUEBAS INFORMÁT|CA Y CO)…X/&1 ;'
Figura 3.14. Cobertura de prueba alcanzada para la clase Cuenta y para el paquete y el proyecto en el que está
incluida esta clase.
Así, para el caso de la clase Cuenta, la cobertura es del 48,6 %. Esto se debe a que hay
tres métodos que no han sido probados en absoluto (setNúmero(), getNúmero() y mostrar-
Cuenta()) y otro que solo ha sido probado parcialmente, que es extraerDinero(). Si se se-
lecciona en el explorador de proyectos la clase Cuenta, es posible observar en el área de
edición sus instrucciones en diferentes colores (Figura 3.15):
E El color verde indica que el método ha sido probado por completo.
27 else
O Ediciones Paraninfo
Figura 3.15. Instrucciones del código de la clase Cuenta que se han probado, en diferentes colores,
que indican si el método correspondiente se ha probado o no.
—. JK". Y COMUNICACIONES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
En este caso, la cobertura es del 62,5 % porque de los 8 métodos de la clase Cuenta
han sido probados 5.
Si se selecciona la opción Branch Counters, se señalarán, para los métodos con varias ra-
mas, la cobertura de ramas que se ha conseguido con la clase de prueba. Como en este
caso, en la clase Cuenta, solo hay un método con dos ramas, el método extraerDinero(),
el resultado para este método es que la cobertura es del 50 %.
Figura 3.17. Cobertura de ramas para los métodos de la clase Cuenta que tienen ramas. Solo hay un método
con dos ramas, de las cuales, se ha probado una de ellas.
O Ediciones Paraninfo
Filosofía de las pruebas
del software
Estrategia de pruebas
del software
Diseño y realización de pruebas
Herramientas de depuración
O Ediciones Paraninfo
Pruebas automáticas
118
E Actividades de comprobación
3.1. Señala la afirmación correcta en relación con las pruebas del software:
a) Es posible probar exhaustivamente el software para garantizar que este está
exento de errores.
b) La prueba del software es por naturaleza una tarea destructiva frente a las restan-
tes etapas del ciclo de vida.
c) Mediante las pruebas es posible validar y verificar el software.
d) El orden en el que se deben aplicar las pruebas sobre el software viene determi-
nado por las técnicas de diseño de casos de prueba.
3.2. Las pruebas cuyo objetivo es garantizar que los elementos que componen el
software se comunican adecuadamente y cooperan entre ellos para realizar las
tareas encomendadas son las pruebas:
a) Del sistema.
b) De validación.
c) De unidad.
d) De integración.
3.3. Las técnicas de diseño de casos de prueba en las que se examinan los detalles
de cada componente del software para generar los casos de prueba son:
a) Las pruebas de caja negra.
b) Las pruebas estructurales.
c) Las pruebas de caja blanca.
d) Las respuestas b y c son correctas.
3.4. El gráfico que hay que dibujar a partir del código fuente para poder aplicar la
prueba del camino básico se llama:
a) Grafo de flujo.
b) Organigrama.
c) Ordinograma.
d) Grafo de programa.
a) Hay algún camino entre / e /* que incluye algún otro uso de la variable X.
b) Hay algún camino entre / e / que incluye alguna otra definición de la variable X.
c) Hay algún camino entre / e /” que no incluye ningún otro uso de la variable X.
d) Hay algún camino entre / e /” que no incluye ninguna otra definición de la variable X.
119
ACTIVIDADES FINALES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
3.8. Las pruebas consistentes en volver a ejecutar casos de prueba tras modifica-
ciones en el software con el fin de asegurarse de que los cambios no han origi-
nado nuevos defectos se llaman:
a) Pruebas de regresión.
b) Pruebas de repetición.
c) Pruebas de integración.
d) Pruebas de validación.
3.9. ¿En qué área de la vista de depuración de Eclipse se pueden ver las variables
del programa y los valores que van tomando estas a lo largo de la ejecución del
programa?
a) En el área de depuración.
b) En la consola.
c) En el área de inspección.
d) En el área de edición.
3.10. En el ámbito de las clases de prueba que se pueden crear con JUnit, ¿cuándo
se dice que se ha producido un error?
a) Cuando el resultado de la ejecución de un caso de prueba coincide con el espe-
rado.
b) Cuando el resultado de la ejecución de un caso de prueba no coincide con el es-
perado.
c) Cuando un método de prueba no se ha implementado todavía.
d) Ninguna de las respuestas anteriores es correcta.
E Actividades de aplicación
3.11. ¿Qué es un caso de prueba?
3.12. ¿Qué diferencia hay entre las pruebas de caja blanca y las de caja negra?
3.13. El siguiente programa escrito en Java pide números por teclado hasta que se introduzca
O Ediciones Paraninfo
un O y calcula, por un lado, la suma de los números pares y, por otro, la suma de los
impares. Para este programa, construye el grafo de flujo correspondiente, calcula la
complejidad ciclomática e indica un conjunto de caminos independientes. Además, se-
ñala, para cada camino, el caso de prueba correspondiente, incluyendo la entrada pro-
120 porcionada y la salida esperada.
1 public static void main(String[] args) (
E int num;
3 int sumapares = 0;
4 int sumaimpares = 0;
5 Scanner entrada = new Scanner (System.in);
6 System.out .print (“Introduzca un número (0 para
terminar): “);
7 num = entrada.nextInt();
8 while (num != 0)
9 ( if (num $ 2 == 0)
10 sumapares = sumapares + num;
Ta else
1 sumaimpares = sumaimpares + num;
13 System.out.print (“Introduzca un número (0 para
terminar): “);
14 num = entrada.nextInt();
15 )
16 System.out .printin (“La suma de los números pares es “ +
sumapares) ;
17 System.out .printin (“La suma de los números impares es “ +
sumaimpares) ;
18 )
3.14. El siguiente programa escrito en Java solicita por teclado un número entero e indi-
ca si es primo o no. Para este programa, construye el grafo de flujo correspondiente,
calcula la complejidad ciclomática e indica un conjunto de caminos independientes.
Además, señala, para cada camino, el caso de prueba correspondiente, incluyendo
la entrada proporcionada y la salida esperada.
primo.”);
15 else
16 System.out.println (“El número “ + mnum + “ no es
primo.”);
e y
121
ACTIVIDADES FINALES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
3.15. Tomando el programa de la Actividad 3.13, obtén las cadenas DU para la variable suma-
pares y encuentra el número mínimo de caminos de prueba que deben recorrer todas es-
tas cadenas.
3.16. Obtén las cadenas DU para la variable ¡ del programa de la Actividad 3.14 y encuentra el
número mínimo de caminos de prueba que deben recorrer todas estas cadenas.
a) NIF: debe ser una cadena de 9 caracteres de los cuales los 8 primeros deben ser dí-
gitos, mientras que el último debe ser una letra. La letra debe corresponder a los
8 números de acuerdo con el algoritmo correspondiente.
C) La marca de la tarjeta de crédito: solo puede ser Visa, Mastercard o Maestro. Los tra-
tamientos que se deben realizar en cada caso son diferentes.
Crea una tabla de clases de equivalencia y genera los casos de prueba correspondien-
tes, usando la técnica de particiones de equivalencia, e indica, en cada caso, las clases
cubiertas.
3.18. Un taller de reparación de vehículos permite reservar cita previa vía internet. En su apli-
cación, se solicita al cliente introducir varios datos y, para algunos de ellos, se desea rea-
lizar validaciones:
a) La matrícula del vehículo, que debe constar de cuatro números y tres letras.
c) La potencia del vehículo en caballos, que debe ser un número entero entre 40 y 300.
3.20. ¿De qué manera se pueden complementar las técnicas de diseño de casos de prueba de
clases de equivalencia y el análisis de valores límite?
3.21. Se proporciona el código de una clase llamada Punto con dos atributos para sus coor-
denadas en dos dimensiones y una serie de métodos que permiten realizar operaciones
con puntos:
O Ediciones Paraninfo
private double x;
N
private double y;
w
this.x =
122
u
6 this.y = y;
7 )
8 public double getX()(f
9 return x;,;
10 )
ae public double getY ()
12 return y;
13 )
14 public void setX(double x) f
115 this.x = ;
16 )
17 public void setY (double y) f
18 this.y = y;
19 )
20 public double distancia (Punto p) (
2 return Math.sgrt (Math.pow(p.x-this.x, 2) + Math.pow(p.y-
this.y, 2));
22 )
23 public boolean compara (Punto p) f
24 iE£ (p-x -- xp.Yy —Y)
25 return true;
26 else
27 return false;
28 )
29 )
Crea una clase de prueba para probar el correcto funcionamiento de los métodos distancia
y compara que, respectivamente, calculan la distancia entre dos puntos y los comparan,
indicando si son iguales o no. Emplea la anotación EBeforeEach para crear dos puntos
con los cuales se realicen las dos operaciones.
3.22. ¿Para qué se utiliza la notación G AfterEach en un método dentro de una clase de prueba?
3.23. Calcula la cobertura de métodos y de instrucciones para la clase Punto de la Actividad 3.21
y analiza los resultados.
3.24. ¿Son válidas las estrategias de pruebas de integración expuestas en el Apartado 3.2.2
para software convencional? Si no es así, ¿qué otras estrategias se emplean para este
O Ediciones Paraninfo
tipo de software?
Busca en la red información sobre las pruebas alfa y beta. ¿De qué tipo de pruebas se
[
trata en cuanto a la estrategia de aplicación de las pruebas? ¿En qué se diferencian las
pruebas alfa de las pruebas beta? 123
ACTIVIDADES FINALES 3. DISEÑO Y REALIZACIÓN DE PRUEBAS
3.26. Como se indicó en el Apartado 3.5, las pruebas de regresión consisten en repetir casos
de prueba que se ejecutaron antes de realizar ciertas modificaciones para cerciorarse de
que los cambios no hayan originado nuevos defectos en el software. Busca información
sobre este tipo de pruebas para dar respuesta a las siguientes preguntas: ¿cuándo se
deben llevar a cabo este tipo de pruebas?, ¿qué técnicas de diseño de casos de prueba
se suelen emplear?, ¿es posible automatizarlas?
A7 Con ayuda de internet, averigua qué son las pruebas de usabilidad y por qué son tan Úti-
les para las aplicaciones web.
3.28. Investiga en internet en qué consisten las pruebas de humo y cuándo se suelen llevar a
cabo.
3.29. Busca en internet información sobre las pruebas de portabilidad. ¿En qué consisten este
tipo de pruebas y para qué tipo de software se suelen llevar a cabo?
O Ediciones Paraninfo
124
Home Blog Team Info
UNIDAD 4
Optimization
Vestibulum molestie nisl nec nunc viverra efficitur.
efficiturquam tristique aliquam.Proin ut est lectus.
— 5
1IIIIIIIIII""
Optimización
y documentación
Objetivos Contenidos
Comprender el concepto de refactorización y El 4.1. Refactorización
los patrones de refactorización más usuales. N 4.2. Analizadores de código
Aplicar patrones de refactorización en el ámbito
E 4.3. Control de versiones
del entorno de desarrollo.
; -A - A El 4.4. Documentación
Revisar el código fuente mediante un analizador
de código.
Conocer el concepto de control de versiones.
Utilizar herramientas de control de versiones
integradas en el entorno de desarrollo.
Comprender la necesidad de una correcta
documentación de una aplicación.
Emplear herramientas del entorno de desarrollo
para documentar clases.
O Ediciones Paraninfo
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMÁTICA Y ( NN
Introducción
La calidad del código creado, como producto final de un proyecto de desarrollo, es fun-
damental para facilitar la tarea de mantenimiento, la cual supone un porcentaje muy
elevado del esfuerzo realizado para el desarrollo de software. Por eso, actualmente, la
refactorización del código fuente o mejora de su estructura interna, sin alterar su com-
portamiento externo, es una tarea muy relevante. En esta unidad, se explicará con de-
talle dicho proceso y se estudiarán los patrones de refactorización más usuales y su
aplicación en Eclipse.
Por otro lado, los analizadores de código sirven para la mejora de la calidad del código
fuente, pues detectan defectos en este, que podrían tener efectos adversos. Aquí, se
describe el funcionamiento de un analizador de código integrado en el IDE Eclipse.
Un correcto control sobre las diferentes versiones que se van generando de una aplica-
ción informática también es de gran importancia para controlar los cambios que se van
produciendo y para facilitar el mantenimiento del software, motivo por el cual se dedica
una parte de esta unidad al control de versiones.
E 41 Refactorización
Uno de los productos finales del proceso de desarrollo de software es el código fuente y,
ante cualquier cambio que sea necesario llevar a cabo en una aplicación, habrá que mo-
dificar dicho código. Es muy frecuente que, a lo largo del ciclo de vida de una aplicación,
haya que realizar cambios sobre esta por varios motivos y, para cada uno de ellos, exis-
ten distintos tipos de mantenimiento:
La probabilidad de que haya que realizar alguno de estos tipos de mantenimiento sobre
una aplicación es casi del 100 % y, además, es muy probable que la persona o perso-
nas que tengan que ocuparse de este no sean las mismas que se encargaron de crear
la aplicación. Por todo ello, es del todo conveniente que el código fuente sea sencillo y
esté bien estructurado.
3 ÍVRUN'CACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
Argot técnico
El vocablo refactorizar no aparece en el diccionario de la RAE. Proviene del inglés refactoring,
pero esta palabra inglesa tampoco aparece de momento en los diccionarios de inglés.
Para evitar usar una palabra extranjera, se podrían emplear vocablos como «perfeccionar»,
«reestructurar», «reorganizar», pero estos términos resultan más genéricos de lo deseable,
por lo que a lo largo de esta unidad se usará el término refactorizar, cuyo significado se ha
señalado en el párrafo anterior.
Existen varias razones por las que puede ser conveniente refactorizar:
E Evitar la reescritura de código: refactorizar suele ser mejor que reescribir el código,
ya que suele ser más costoso escribir código desde cero.
E Que el código funcione, es decir, que haya superado la etapa de pruebas de acuer-
do con el nivel de cobertura deseado.
el término bad smells (malos olores), que son aquellos síntomas en el código que acon-
sejan la realización de una refactorización. Que el código presente estos síntomas no
significa que el software no funcione, pero puede llevar a una ejecución más lenta del
programa o a un código difícil de mantener, y debido a la baja calidad del código, este
será más propenso a tener fallos en el futuro.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMÁT'CA Y CON
“D
Anma
Argot técnico
El término bad smell, que traducido literalmente del inglés quiere decir “mal olor”, se debe
entender en sentido metafórico. Es frecuente escuchar la expresión española de que «algo no
huele bien», la cual se emplea no en el sentido estricto del verbo oler (*percibir un olor”), sino
en sentido figurado. De hecho, en el diccionario de la RAE, la expresión no oler bien significa
«dar sospecha de que encubre un daño o fraude». Esto es precisamente lo que ocurre
cuando se detecta un mal olor en el código: se trata de un síntoma o una sospecha de que
hay algo mal en el código que puede tener efectos secundarios negativos.
EA nivel de aplicación:
EA nivel de clase:
— Clase larga (large class): consiste en tener una clase con demasiados atributos,
métodos o instancias. Esto es debido a que la clase tiene encomendadas más
tareas de las que le deberían corresponder.
— Clase demasiado simple (freeloader): consiste en tener una clase con muy pocas
responsabilidades. Muchas veces se trata de clases que solo tienen atributos y
métodos de acceso (set) y de consulta (get).
— Envidia de funcionalidad (feature envy): existe un método en una clase que pa-
rece más interesado en otra clase que en la clase en la que se encuentra, es
decir, un método que usa en exceso métodos de otra clase. Se suele resolver
moviendo el método a la clase cuyos elementos más utiliza.
E A nivel de método:
— Demasiados parámetros (too many parameters): un método con una larga lista de
parámetros hace que sea difícil de invocar y de probar. Además, puede indicar
que el método está realizando más tareas de las que debería.
— Línea de código excesivamente larga (God line): una línea de código demasiado
larga hace el código difícil de leer, entender, corregir y dificulta la reutilización.
ME 4.1.2.Implantación de la refactorización
Existen dos posibilidades a la hora de realizar la refactorización: comenzar con un nuevo
desarrollo o aplicar la refactorización a posteriori 0, dicho de otro modo, ejecutarla sobre
una aplicación ya desarrollada.
En el caso de que la aplicación ya esté desarrollada, no hay más remedio que aplicar la
refactorización sobre toda la aplicación en lugar de incorporar la refactorización como ta-
rea que se va aplicando de forma continua a medida que se va escribiendo el código. Aun
así, lo recomendable es ir llevando a cabo pequeñas refactorizaciones secuencialmente
O Ediciones Paraninfo
Y, tras cada una, realizar pruebas para comprobar que la aplicación sigue funcionando co-
rrectamente, de manera que no se hayan introducido errores como consecuencia de las
modificaciones incorporadas al código.
4. Comenzar refactorizando los principales fallos de diseño (código duplicado, clases lar-
gas, etc.). Se trata de refactorizaciones que son fáciles de aplicar y muy beneficiosas.
5. Refactorizar el código tras añadir cada nueva funcionalidad. Resulta muy producti-
vo realizar discusiones en grupo sobre la conveniencia de realizar una refactoriza-
ción tras la adición de cada nueva función al software.
6. Implantar la refactorización continua, por lo que las personas responsables del de-
sarrollo del software deben incorporar la tarea de refactorización como una más
dentro del proceso de desarrollo.
Sin embargo, aunque la refactorización continua puede ser una práctica muy adecuada,
es cierto que hay ocasiones en las que no es tan fácil aplicarla por uno de los siguien-
tes motivos:
La mejor estrategia en estos casos es, como se indicó antes, dividir la refactorización
completa en el mayor número posible de pequeñas refactorizaciones. También es acon-
sejable, antes de llevar a cabo cada pequeña refactorización, comunicar los cambios que
se van a realizar a las personas afectadas, esto es, a las personas que están trabajando
con el código que va a ser objeto de la refactorización. Asimismo, puede resultar conve-
niente explicar cada refactorización llevada a cabo una vez que esta se haya completado.
Para aplicar los patrones de refactorización en el IDE Eclipse, hay que seleccionar el ele-
mento sobre el que se desea aplicar la refactorización y elegir del menú contextual la op-
ción Refactor, o bien seleccionar la opción Refactor del menú principal. La refactorización
se puede aplicar sobre una clase, un atributo, una variable, una expresión, un bloque de
instrucciones, etcétera.
| 'ílr “OMUNICACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
BNE Rename
Este patrón de Eclipse permite cambiar el nombre de una clase, de un atributo, de un
método, de una variable, etc., de forma que se renombran todas las referencias a ese
elemento a lo largo del programa.
A modo de ejemplo, aquí se va a cambiar el nombre de la clase Rectángulo en el proyec-
to figuras de manera que se elimine la tilde del nombre, esto es, su nuevo nombre será
Rectangulo. Seleccionada la clase Rectángulo, se elige la opción del menú contextual
Refactor > Rename. A continuación, se escribe su nuevo nombre en el campo New name.
Si se pulsa en el botón Next, en la ventana emergente (Figura 4.1), aparecen en la par-
te superior las partes de la aplicación en las que se propone realizar la modificación,
pudiéndose seleccionar las que nos interesan (lo más probable es que sean todas). Ade-
más, se puede visualizar el estado antes y después del renombrado. Si se hace clic en el
botón Finish, se procede al renombrado en las partes seleccionadas.
Changes to be performed
Cuadrado.java - Ejercicios/src/figuras
> [V]P PruebaFigura.java - Ejercicios/src/figuras
€, Rename compilation unit 'Rectángulo.java' to 'Rectangulo.java'
<
O Ediciones Paraninfo
Figura 4.1. Al seleccionar el patrón de refactorización Rename de un elemento, se muestran todos los lugares
de la aplicación donde ese cambio de nombre tendrá efecto antes de llevarlo a cabo.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMÁTICA Y C… |
EE oe
Esta opción permite mover una clase de un paquete a otro, procediéndose a cambiar to-
das las referencias a esa clase.
ME Extract Interface
Si se selecciona una clase en Eclipse, el programa permite extraer los métodos desea-
dos de esa clase para crear una interfaz (véase en qué consiste una interfaz en el Apar-
tado 5.4.5). En la interfaz se definen los métodos especificando solo su cabecera, es
decir, el nombre del método, el tipo de valor de retorno (si devuelve algo) y sus paráme-
tros. El código de los métodos se especifica en las clases que implementan la interfaz.
Por ejemplo, podría resultar interesante llevar a una interfaz el método esMayorQue de la
clase Figura porque se van a incluir en la aplicación otras clases para las que también in-
teresa saber si un objeto es mayor que otro. Así, se va a añadir la clase Fracción, para la
que nos interesa saber si una fracción es mayor que otra. En este caso, es conveniente
crear una interfaz porque aunque tanto las figuras como las fracciones se pueden compa-
rar, no se comparan de la misma manera: en el caso de las figuras, una es mayor que otra
en función de su área, mientras que en el caso de las fracciones, una es mayor que otra en
función de su valor. Entonces, se va a crear una interfaz llamada Comparar que incluya el
método esMayorQue.
Una vez seleccionada la clase Figura, se activa la opción del menú contextual Refactor >
> Extract Interface y aparece una ventana como la que se muestra la Figura 4.2, en la
que se pide el nombre de la interfaz y se deben seleccionar los métodos que se incorpo-
rarán a esta.
.* área() : double
e esMayorQuelFigura): int
e getColor(): Color
e getXCentro(): double
e getYCentro(): double
* perímetro() : double
e setColor(Color): void
e setXCentro(double): void
e setYCentro(double): void
ME Extract Superciass
Permite crear a partir de una clase una superclase para ella, la cual contendrá los mé-
todos y atributos seleccionados de la clase en cuestión. Conviene tener en cuenta que
puede haber errores en los métodos de la nueva superclase si estos hacen referencia a
atributos de la clase original, esto es, a atributos de la subclase tras la refactorización.
m P p
Mueve un atributo o un método de una clase a su superclase 0, en el caso de los méto-
dos, declara el método como abstracto en la superclase.
EE PUN Down
Mueve un conjunto de métodos y atributos de una clase a sus subclases.
car o asignar un valor por defecto. También es posible añadir nuevos parámetros pulsan-
do el botón Add, o eliminar un parámetro, estando este seleccionado y clicando sobre el
botón Remove. Los botones Up y Down sirven para cambiar el orden de los parámetros.
También se pueden cambiar, añadir o eliminar las excepciones que lanza el método en la
pestaña Exceptions.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMÁT|CA Y CO/“¡ ;
public
Parameters
Preview >
EE nline
Permite escribir en una sola línea la referencia a una variable o a un método y el uso de
dicha variable o método.
se puede seleccionar la variable nuevoP y, en el menú contextual, elegir la opción Refactor >
> Inline. El resultado será el que se muestra a continuación, donde se ha sustituido, en
la instrucción return, la referencia a la variable nuevoP por el valor que se le asignó en la
instrucción anterior:
Changes to be performed
a Eá PruebaFigura.java - Ejercicios/src/figuras
G PruebaFigura
4 Y) é mainíString[])
“E Add variable declaration
“El Replace expression with variable reference
[V] E Replace expression with variable reference v
D) PruebaFigura.java Da | £ SA
Original Source
1 switch (opción) 17 String mostrarPerímetro = "El perímetro es: ";
f case 1: 18switch (opción)
System.out.print ("Introduzca el lado 1 de 19 1 case 1:
double ladol = teclado.nextDouble() ; System.out.print ("Introduzca el lado
System.out.print ("Introduzca el lado 2 de double ladol = teclado.nextDouble
():
double lado?2 = teclado.nextDouble
(); System.out.print ("Introduzca el lado
System.out.print ("Introduzca el lado 3 de double lado2 = teciado.nextDouble
():
double lado3 = teclado.nextDouble
(); System.out.print ("Introduzca el lado
Triángulo t = new Triángulo
(x, y, Color.re double lado3 = teciado.nextDouble()
System.out.printlin ("El perímetro es: " + — Triángulo t = new Triángulo (x, y, Colo:
System.out.printin ("El área: " + t.área()| 27 System.out.printin (mostrarPerímetro +
break: Svstem.out.printin ("El área: " + t.ári Y
>
Figura 4.4, Al seleccionar el patrón de refactorización Extract Local Variable para una expresión, se pueden
cambiar todas las ocurrencias de esa expresión por una variable cuyo nombre se debe indicar.
ME Extract Constant
Sustituye un número o una cadena de caracteres por una constante. Todas las aparicio-
nes del número o cadena son sustituidas por la constante indicada.
que el cambio se lleve a cabo para todas las apariciones del número o cadena de ca-
racteres.
El objetivo es que el valor literal se ubique en un solo lugar para facilitar su modificación,
si fuera el caso.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁTYICOCAMU
Solución
Changes to be performed
a V]é! PruebaFigura.java - Ejercicios/src/figuras
a V PruebaFigura
Y] El Add constant declaration
ae main(String[])
Y) ] Replace expression with constant reference
() Pruebafigura,java MILASA
Original Source Refactored Source
20.ectangulo r = new Rectangulo (x, 20 ectangulo r = new Rectangulo
21 ystem.out.println (mostrarPerime 21 ystem.out.println (mostrarPe
22 ystem.out.printin (MEl área: " + 22 ystem.out.printin (ÁREA + r.
23 reak; 23 reak;
243: 24 3:
25 ystem.out.print ("Introduzca el 25 ystem.out.print ("Introduzca
26 .0uble lado = teclado.nextDouble ( 26.0uble lado = teclado.nextDoul
27 uadrado c = new Cuadrado (x, y, d 27 uadrado c = new Cuadrado(x,
28 ystem.out.printin (mostrarPerime 28 ystem.out.printin (mostrarPe
29 ystem.out.printin ("El área: " + 29 ystem.out.printin ("El área:
<
Figura 4.5. Al seleccionar el patrón de refactorización Extract Constant para una expresión, se pueden
cambiar todas las ocurrencias de esa expresión por una constante cuyo nombre se debe indicar.
al atributo, indicar su modificador de acceso y dónde se desea que se lleve a cabo su ini-
cialización (en la declaración del atributo o en el método en el que se encuentra).
Access modifier
Opublic — Oprotected Opackage 0) private
0) Current method
) Class constructors
Al pinchar sobre el botón Preview, Eclipse también permite ver los efectos que tendrá el
cambio realizado (véase Figura 4.7).
Changes to be performed
4 [V| PruebaFigurajava
- Ejercicios/src/figuras
a V| E Pruebafigura
a ] f main(String[])
[v] $El Convert local variableto field
[3] PruebaFigura.java
Original Source Refactored Source
7public static void main(String[] args) ( 74
£ int opción; 8
sdo í Spublic static void main (String[] args) (
opción = mostrarMenú(); 10 int opción;
if (opción != 4)1 11 do í
Scanner teclado = new Scanner (System.in): opción = mostrarMenú ();
System.out.print ("Introduzca la coordenada x del centro if (opción != 4)1
double x = teclado.nextDouble
(): Scanner teclado = new Scanner (System.in):
System.out.print ("Introduzca la coordenada y del centro System.out.print ("Introduzca la coordenada x del cel
double y = teclado.nextDouble (): double x = teclado.nextDouble
();
String mostrarPerímetro = "El perímetro es: "; System.out.print ("Introduzca la coordenada y del cel
3 switch (opción) double y = teclado.nextDouble
(): v
< _ _ >
Figura 4.7. Ventana que aparece al hacer clic en el botón Preview y en la que se visualizan los cambios
que supone la conversión de una variable local a un atributo de la clase.
ME Extract Method
O Ediciones Paraninfo
Para ilustrar esto, en el método main de la clase PruebaFigura se podría asignar un méto-
do a cada bloque de código que se ejecuta al seleccionar cada opción de menú. En ese
caso, se seleccionaría la porción de código entre case 1 y la correspondiente instrucción
break y se activaría la opción de menú Refactor > Extract Method. Aparece entonces una
ventana en la que se debe asignar un nombre al método (procesarTriángulo) y un modifi-
cador de acceso (private). En dicha ventana se visualizan sus parámetros y, en la parte
inferior, la cabecera del método resultante (Figura 4.8).
Type
Scanner
double
double
String
[ Preview>_
Además, se puede visualizar cómo quedará el código haciendo clic en el botón Preview.
La refactorización se llevará a cabo pinchando sobre el botón OK.
Este patrón sustituye todas las referencias a un atributo de una clase por los correspon-
dientes métodos de consulta (get) y de acceso (set).
Por ejemplo, se podrían encapsular los atributos x e y de la clase Punto. Para ello, se
selecciona el atributo x y se activa la opción Refactor > Encapsulate Field del menú
A 1'1/ (…OMUNICACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
contextual. Eclipse indicará los nombres de los métodos de consulta y acceso que se
usarán para el encapsulamiento, que serán los presentes en la clase, en caso de que
ya estén declarados. Como siempre, al hacer clic en el botón Preview, es posible ver los
cambios que supondría llevar a cabo esta refactorización, la cual se activará al pulsar el
botón OK (Figura 4.9). Se debe hacer lo mismo para el atributo y.
Changes to be performed $ | y
D ¿,E Punto.java - Ejercicios/src/figuras
Además, es posible consultar las refactorizaciones que se han llevado a cabo visuali-
zando un histórico de refactorizaciones. A tal fin, se elige la opción de menú Refactor >
> History. Entonces, se pueden seleccionar las refactorizaciones que se desea consultar
y, al colocarse sobre cada una de ellas, se muestra información detallada sobre cada re-
factorización (véase la Figura 4.10).
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁTICA Y CQ/X1
Refactoring History
Browse and edit the workspace refactoring history.
Details:
Extract local variable 'mostrarPerímetro' from expression "“El perímetro es: " +
- Original project: 'Ejercicios'
- Variable name: 'mostrarPerímetro'
- Destination method: 'figuras.PruebaFigura.main(...)'
- Variable expression: '"El perímetro es: "
- Replace occurrences of expression with variable
<
Por último, se pueden eliminar las refactorizaciones que se deseen del historial, seleccio-
nándolas y haciendo clic en el botón Remove.
Los analizadores de código realizan un análisis léxico y sintáctico del código fuente y
si detectan que este es mejorable, lo indicarán y propondrán la manera de realizar la
mejora.
E Reducir el rendimiento.
E Provocar errores.
Los analizadores de código son herramientas automáticas que realizan un análisis está-
tico del código fuente con el fin de detectar deficiencias en este y proponer mejoras, para
lo que se basan en una serie de reglas predefinidas. Si el análisis del código es realiza-
do de manera manual por parte de una persona, recibe más bien el nombre de compren-
sión de programas o revisión de código.
Por un lado, existen analizadores de código gratuitos y de pago y, por otro lado, de código
abierto y de código cerrado. En este sentido, PMD (Programming Mistake Detector) es un
analizador de código gratuito y de código abierto. PMD es capaz de detectar errores co-
munes de programación como:
Código duplicado.
Este analizador de código está orientado a los lenguajes de programación Java y Apex,
pero también se puede emplear con JavaScript, Visualforce, PL/SQL, ApacheVelocity, XML
y XLS.
Se puede instalar PMD como un módulo en Eclipse. Para ello, en Eclipse, se activa la op-
ción de menú Help > Eclipse Marketplace. Tras escribir PMD en la casilla Find y hacer
clic en el botón Go, uno de los módulos que aparece se llama pmd-Eclipse-plugin 4.28.0
(Figura 4.11). Para proceder a su instalación, se pulsa en el botón Install.
Eclipse Marketplace
Select solutions to install. Press Install Now to proceed with installation.
Press the "more info" link to learn more about a solution.
pmd-eclipse-plugin 4.28.0
PMD is a source code analyzer. It finds common programming flaws like unused variables,
empty catch blocks, unnecessary object creation, and so forth. It supports... more info
by PMD, BSD
PMD linter Source Code Analyzer code quality java
en7| () installs: 65,9K (1.534 last month) | Install
—
Marketplaces
O Ediciones Paraninfo
Figura 4.11. Ventana que muestra el módulo PMD en Eclipse. Para instalar
este analizador de código, se clica sobre el botón Install.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁTICA Y COA/'WH, ;
File Edit Source Refactor Navigate Search Project Run Window Help
EO 4-0-Q-255-:PMPEr iN-6-o970-0-1*
Q B
= S Package Explorer X = O ( Puntojava X dy Figurajava [ Pruebafigur... [7 Cuentajava
EEs as ? 1 package programas:
» 13 DClasestjemplo l
a Ejercicios 3 public class Punto
» m JRE System Library [JavaS£-14 + private double x;
.=m = 5 private double y;
E
>E :""'"”'"ºº' 7Epublic Punto(double x, double y)[
l - s 8o this.x = x;
» PA Compararjava Mieyo yr
59 Cuadradojjava 10 )
5 B Figurajava
» ] PruebaFigurajava 128 public donmble getX()!
> 5) Puntojave 13 return x:
5 B Rectangulojava 14
5 2 Triángulojava
5 JB programas “public double gerY()[
5 m JUnit 5 ? return y;
b S doc
public void setX(double x) (
21 this.x — x:
22 )
23
245 public void setY (double y)1
25 this.y = y;
26 )
> —
| Writable | Smart Insert | 18:2:224
Figura 4.12. Ventana que muestra, para el proyecto figuras, el resultado del análisis
de código realizado por PMD. Se indica por cada clase y mediante un color
distinto si se ha detectado algún defecto.
En esta pantalla, se muestra la vista PMD, que aparece por defecto cuando se solicita el
análisis de código. Por cada clase, se indica si se ha detectado algún defecto mediante
símbolos de determinados colores. Se puede ver el significado de estos colores eligien-
do la opción de menú Window > Preferences y luego seleccionando en la parte izquier-
da PMD (Figura 4.13).
> Papyrus
Sul
Dl
EE
116
5 Plug-in Development
> PMD Medium
> QVT Operational Editor Medium Low
> Run/Debug i Low
> Terminal
> TextMate
b UML Lab and Color.
Shape O r 09 D OOIOS ODPAVD><d
Validation . i " — 3
> Version Control (Team) eon: IT CEE
CICIENCIC
» WindowBuilder
» XML
» XML (Wild Web Developer)
» Xpand Violations review parameters
Use PMD style (// NOPMD comment)
O Ediciones Paraninfo
OeO
Como se puede observar en la Figura 4.13, está activada la casilla de verificación que in-
dica que se muestre la vista PMD cuando se solicita la realización del análisis de código.
Las dos casillas de verificación que se muestran a continuación sirven para indicar si se
desea que se muestren dos áreas de la pantalla al hacer la revisión de código: Violations
Overview y Violations Outline, respectivamente. Más abajo se indican los símbolos que se
emplean para cada tipo de defecto descubierto al lanzar PMD: la gama va desde el co-
lor rojo, que se usa para los defectos más graves hasta el color morado para los avisos
(warnings). Se pueden modificar el símbolo y el color que se desea para la señalización
de cada tipo de defecto. En este caso, se marcarán las casillas de verificación para soli-
citar que se muestren en la vista PMD las áreas Violations Overview y Violations Outline.
Si se vuelve a analizar el código correspondiente al proyecto figuras, aparecerá la panta-
lla que se representa en la Figura 4.14.
File Edit Source Refactor MNavigate Search Project Run Window Help
los atributos y métodos y que no se hayan usado llaves en las sentencias ¡f...else.
se han cometido. Haciendo clic en el botón con los tres puntos de la parte derecha, se
puede seleccionar Show violations to files, en cuyo caso los errores no aparecerán agru-
pados por tipo de error, sino por cada uno de los ficheros (clases) en que se han produ-
cido. Por cada fichero, se podrá desplegar la información para que se muestre cada uno
de los tipos de errores.
E Disable rule: por medio de esta opción, se inhabilita la regla correspondiente a di-
cho error, por lo que todos los errores relacionados con esta regla no se volverán a
mostrar hasta que no se vuelva a habilitar la regla.
PMD se basa en una serie de reglas predefinidas para la detección de defectos, de ma-
nera que, al lanzar este analizador de código, se considerará errónea toda aquella por-
ción de código que incumpla alguna de las reglas establecidas. Se pueden consultar
estas reglas eligiendo la opción de menú Windows > Preferences y seleccionando en la
parte izquierda PMD > Rule Configuration (véase Figura 4.15).
Rule Configuration
|
A
lf global rule management is enabled, you can deactivate rules here globally. This is
useful in order to ignore some rules temporarily. This setting overrides
project-specific settings.
» Install/Update
b Java
b Language Servers
[ | Rules grouped by [<no grouping> _v | Active rules: 446/446 4
b Maven
» Model Validation F Rule set Type Language *A
o
(OO
Figura 4.15. Ventana que muestra las reglas que emplea PMD al analizar el código.
Si se activa la casilla de verificación de la parte superior, se pueden añadir reglas,
borrar las existentes o modificar las propiedades de las reglas.
TJ KOMUNICACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
d I global rule management is enabled, you can deactivate rules here globally. This is
» AN useful in orderto ignore some rules temporarily. This setting overrides
b Ant project-specific settings.
b eS
» Gradi
“ H';pº 5| Rules grouped
by | <no grouping> —< | Active rules: 446/ 446 4
b Install/Update A
. Rule O — Ruleset Type Language
» Language Servers AbstractClassWithoutAbstractMethod Best Practices — T
vYYVVVVVVYY
> Maven AbstractClassWithoutAnyMethod Design XT
» Model Validation AbstractNaming Code Style XT
[Y] AccessorClassGeneration Best Practices — T
AccessorMethodGeneration BestPractices — T
AddEmptyString Performance — X, T
ApexAssertionsShouldincludeMessage Best Practices — -
» Plug-in Development ApedBadCrypto Ceruety
4 PMD ApexCRUDViolation Security
CPD Preferences V ApexCSRF Error Prone
File Filters s
Reports [ Summary | Rule — [-——— [ Exclusions [ ---—-—W
Rule Configuration - , ;
» QVT Operational Editor Priority: ¡Waming —< D>
e Rule name : AbstractClassWithoutAbstractMethod
——]————] — —
b Terminal
b TextMate RuleSet: Best Practices _.
b UML Lab Implemented by: — Java class
Validation
» Version Control (Team) Implementation class: | net sourceforge.pmdlang,java.rule.bestpractices.AbstractClassWithoutAbstractMethodRule —|
p WindowBuilder Uses type resolution — []Uses data flow analysis
b XML
> XML (Wild Web Developer) Targetlanguage: — [Java Y | Min version: v
» Xpand
Oy e
Figura 4.16. Ventana en la que se pueden visualizar y modificar las propiedades de una regla
concreta en la parte inferior (pestaña Rule), haciendo clic en el botón Apply.
También es posible eliminar reglas o crear nuevas reglas haciendo clic en los botones
+ y % , respectivamente.
Si tras seleccionar en el explorador de proyectos un proyecto, un paquete o una clase, se
elige en el menú contextual la opción de menú PMD > Clear Violations Review, se elimi-
nan las revisiones de error realizadas, por lo que al volver a analizar el código, esos erro-
res volverán a aparecer si siguen presentes en el código o si se han cometido de nuevo.
En caso de que se active la opción del menú contextual PMD > Clear Violations, se eli-
minarán todas las violaciones detectadas. No obstante, si se vuelve a analizar el código,
estas volverán a aparecer.
O Ediciones Paraninfo
Por otra parte, se puede utilizar PMD para encontrar código duplicado. Para ello, PMD in-
cluye un detector de código duplicado conocido como CPD (Cut and Paste Detector). Para
usarlo, se selecciona un proyecto en el explorador de proyectos y, en el menú contextual,
se elige la opción PMD > Find Suspect Cut and Paste. Emergerá una ventana como la de
la Figura 4.17.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN
Language:
Minimum Tile-size:
Report
Y] Create report file (saved to project report folder)
Output format: —| Simple Text
oK
Será necesario elegir el lenguaje de programación (en nuestro caso, Java) y, en el campo
Minimum Tile-size, se debe indicar el número mínimo de tokens (identificadores, palabras
reservadas, operadores, etc.), los cuales, si se repiten en varios lugares de la aplicación,
se consideran código duplicado. El resultado de este detector o bien se puede mostrar
en el área inferior de la pantalla, o bien, si se mantiene activada la casilla de verificación
bajo la palabra Report, se generará un informe con el nombre pmd-report que se almace-
nará en la carpeta del proyecto y para el que se pueden elegir diversos formatos: texto
plano (archivo con extensión .txt), XML o CSvV.
Argot técnico
El vocablo token tiene diferentes acepciones. En el párrafo anterior, se ha usado este término
con el siguiente significado: «cadena de caracteres que tiene un significado coherente en
cierto lenguaje de programación».
En el Apartado 4.3.2, se usa otra acepción de token, que se traduce por “identificador”.
En ese caso, se usa este identificador a modo de contraseña para la protección de cierta
información sensible.
Aparte de dicha tarea, ha surgido también la necesidad de otra nueva labor, más de
gestión que técnica, que se debe llevar a cabo de manera paralela a las tareas técnicas
de desarrollo (análisis, diseño, etc.) y que se conoce como gestión de la configuración
del software (GCS). Esta tarea tiene fundamentalmente cuatro objetivos ante cualquier
cambio:
u “OMUNICACIONES 4. OPTIMIZAC
Y DOCUMENTACIÓN
IÓN
1. Identificar el cambio.
2. Controlar el cambio.
4. Informar de los cambios aplicados a todos aquellos a los que pueda afectar.
P
Recuerda O
A la tarea de gestión de la configuración del software (GCS) ya se hizo referencia en el
Apartado 1.6, en el que se señaló que, además de las actividades técnicas típicas del
proceso de desarrollo de software (análisis, diseño, programación, etc.), hay otra serie de
tareas de apoyo a todo el proceso, más de gestión que técnicas, una de las cuales Pressman
(2010) llamó administración de la configuración del software, que tiene por objeto
administrar los efectos del cambio a lo largo del proceso de desarrollo de software. Se trata
de las mismas tareas pero con distinto nombre.
Como es sabido, el desarrollo de un producto de software, a no ser que este sea trivial,
se debe descomponer en una serie de tareas como consecuencia de las cuales se obtie-
nen una serie de productos intermedios hasta llegar al producto final (programa ejecuta-
ble) deseado por el cliente. Se puede afirmar, por tanto, que la configuración del software
está formada por una serie de elementos de configuración (EC) aprobados en un mo-
mento dado del ciclo de vida. A medida que evoluciona el software, como consecuencia
de la realización de uno o varios EC, o como consecuencia de una nueva versión de uno
o varios EC, surge una nueva configuración del software. Normalmente, se trabaja con
aquella configuración del software formada por las últimas versiones de los EC corres-
pondientes.
Los EC pueden ser de dos tipos: básicos o agregados, donde un EC agregado se pue-
de dividir en varios EC básicos. Así, por ejemplo, un EC agregado lo constituye el código
fuente de la aplicación completa, y un EC básico, el código fuente de una clase.
Conforme avanza el proyecto, se crearán nuevas versiones de los EC. El término versión
tiene diferentes acepciones en el diccionario de la RAE, pero la que más directa aplica-
ción tiene en nuestro ámbito es la siguiente: «cada una de las formas que adopta la re-
lación de un suceso, el texto de una obra o la interpretación de un tema». Por lo tanto,
este concepto hace referencia a las diferentes formas que puede adoptar un EC a lo lar-
go su existencia. Y por consiguiente, una tarea correspondiente a la GCS es la identifica-
ción de las versiones de cada EC.
O Ediciones Paraninfo
La GCS, según está regulada en el estándar IEEE 828-2005, consta de las siguientes ac-
tividades:
ME 4.3.1.Gestión de versiones
Las versiones de un EC hacen referencia a las diferentes formas que va tomando este a
lo largo del proceso de desarrollo de software. Se considera que existen versiones a ni-
vel de cada EC y a nivel de la configuración del software completo.
de grafos:
1. Grafo de evolución simple: que se representa mediante una simple secuencia li-
neal de versiones de forma que cada revisión de una versión da lugar a una nueva
versión. No coexisten varias versiones en el tiempo.
" 3MUN'CACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
2. Árbol: en el que existe un tronco, donde está la versión principal, desde el que se
pueden crear ramas con el fin de realizar modificaciones sobre ellas para incorpo-
rar cambios al tronco, pero no modificándolo directamente, sino haciéndolo sobre
la rama en cuestión. Se llama cabeza a la última versión del tronco. Dado que el
producto que se entrega al cliente se encuentra en el tronco, siempre es necesa-
rio fusionar las ramas con el tronco, lo que consiste en unir con el tronco los cam-
bios realizados en una rama. Puede ocurrir que incluso sea preciso fusionar varias
ramas y luego fusionar el resultado con el tronco.
Cada vez que se crea una versión, a esta se le debe asignar una etiqueta. Los cambios
que incorpora una versión con respecto a la anterior llevan el nombre de delta y esta in-
formación se puede registrar en el repositorio de diferentes maneras:
E Deltas directos: se almacena la primera versión completa y los cambios que presen-
ta una versión con respecto a la anterior.
M Git
Git es una herramienta libre de control de versiones de software que fue creada por
Linus Torvalds durante el proceso de desarrollo del núcleo de Linux.
Trabajando con Git, los ficheros deben pasar por varias ubicaciones antes de quedar al-
macenados en el repositorio. Así, es posible distinguir las siguientes áreas:
E Área de trabajo (working area): se trata del directorio local de trabajo en el que se
crean los archivos primero y luego se modifican.
E Área de preparación (staging area): es una zona intermedia en la que se colocan los
archivos del área de trabajo que se encuentran en esta área pendientes de confir-
mación.
E Repositorio local (commit area): este repositorio debe ser creado en el equipo local
y es donde se almacenan los archivos con sus modificaciones y las diferentes ver-
siones antes de enviarlos al repositorio remoto. Normalmente, los archivos pasan
del área de preparación al repositorio local.
E Repositorio remoto: este repositorio se encuentra fuera del equipo local y es donde
se almacenan los ficheros totalmente confirmados. Es posible establecer una sin-
cronización entre el repositorio local y el remoto.
Por otro lado, en Git un archivo puede pasar por los siguientes estados:
El git add: permite pasar un fichero o un directorio del área de trabajo al área de pre-
paración.
E git push: permite pasar los cambios realizados en el repositorio local al repositorio
remoto.
E git pull: permite actualizar el repositorio local con los cambios más recientes del
repositorio remoto, de forma que los archivos que reflejan esos cambios llegan al
área de preparación.
E git clone: hace una copia del repositorio remoto en el repositorio local.
En la Figura 4.18, se muestra cuáles son los comandos que permiten el paso de los fi-
cheros de un área a otra.
git commit
—
Figura 4.18. Diferentes ubicaciones por las que puede pasar un archivo gestionado con Git hasta que llega
al repositorio remoto y los comandos que permiten el paso de una ubicación a otra.
Aquí se estudiará cómo se trabaja con Git integrado en el IDE Eclipse. Para ello, primero,
se crea una carpeta, que se puede llamar EjemplosCtrolVersionesGit y será el nuevo espa-
cio de trabajo (workspace) para Eclipse, y otra carpeta que se puede llamar Repositorios-
Git para almacenar los repositorios locales de los proyectos.
En primer lugar, se abre en Eclipse la vista Git seleccionando la opción de menú Window >
> Perspective > Open Perspective > Other > Git. Aparecerán entonces en la parte iz-
quierda de la pantalla tres opciones: 1) añadir un repositorio de Git local ya existente,
2) clonar un repositorio de Git o 3) crear un nuevo repositorio local de Git. Se elige esta
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMÁT|CA Y C… |
última opción, tras lo cual, se pide indicar la ruta del repositorio (carpeta Repositorios-
Git) y el nombre del nuevo repositorio: Ejemplo1. En la ventana representada en la Figu-
ra 4.19, se puede observar que el nombre del repositorio se debe indicar después de la
ruta y que la rama que se crea por defecto se llama master. Se trata del nombre que Git
asigna a la rama principal, también llamada tronco.
Al hacer clic en el botón Create, se crea el repositorio, cuya estructura se puede observar
en el área de repositorios Git, que aparece en la parte izquierda de la pantalla debajo del
área de proyectos (Figura 4.20). El Working Tree que se puede observar en esta área se
corresponde con el área de trabajo y se ubica en la carpeta asignada al repositorio local.
©|_.ff|¿.%| EÑ: =a
(E) Git Repositories X
4*_ _ Ejemplo1 [master] - C:'¡Useronse'&5BhopXParan¡nfo“x£[iReposutonos(5utí£jemplo1*….9r1
b el Branches
> Ka Tags
b > References
9 Remotes
4|(= Working Tree - CAUsersVose|DesktopParaninfoEDRepositoriosGitvEjemplo1
4 (= .git
E branches
= hooks
Figura 4.20. Estructura del repositorio que se acaba de crear y que se muestra en la parte
izquierda de la pantalla.
Figura 4.21. Al seleccionar el repositorio creado anteriormente, el proyecto queda asociado a él.
Como se puede observar en la Figura 4.22, en el área de proyectos, delante del nombre
del proyecto, aparece el símbolo > y además se indica que es la rama master. Con esto,
Eclipse informa a la persona que está programando que el proyecto está bajo el control
de versiones de Git.
-E -YO:k-0-4-
-Q-
H Package Explorer X BS 3
alic3 > Proyecto! [RepositoriosGit master]|
b BÍ JRE System Library [JavaSE-16]
S sre
Figura 4.22. Se muestra el proyecto que se acaba de crear en el explorador de paquetes de la vista Java.
El símbolo > antes del nombre del proyecto indica que está bajo el control de versiones de Git.
El siguiente paso es crear dentro del proyecto Proyecto1 un paquete llamado paquete1
y, dentro de este, una clase llamada Principal con un método main, como se muestra en
la Figura 4.23.
[] *Principal.java X =a
1 package paquetel; a
N
Figura 4.23. Contenido de la clase creada para el proyecto de prueba Proyecto1 con el que se van a controlar
las versiones a través de la herramienta Git.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁT|CA Y Ci )
Después, se validan estos cambios, esto es, se confirman (commit) para pasar este fi-
chero al área de preparación. Para ello, desde el menú contextual de cualquier elemento
del proyecto en el explorador de proyectos se selecciona la opción Team > Commit... Se-
guidamente, aparece una pantalla (Figura 4.24), en la que en el área Unstaged Changes,
se muestran los cambios que se han detectado en el área de trabajo que no han sido
validados, es decir, que no han pasado al área de preparación. Por otro lado, en el área
Staged Changes, se ven los cambios confirmados, es decir, los que están en el área de
preparación. En la parte derecha de la pantalla, hay un cuadro de texto para escribir el
mensaje correspondiente a la validación, información que es obligatorio rellenar.
EN Problems € Javadoc [E) Declaration EJ Console ¡y Git Staging X f Filter files S QH a '|_EE] 8 50
8 > Ejemplo1 [master]
Figura 4.24. Pantalla desde la que se pueden seleccionar los cambios que se desean confirmar (commit)
para su paso al área de preparación. Para ello, Eclipse obliga a escribir un mensaje en el cuadro de texto
Commit Message.
Para confirmar los cambios, se arrastran los elementos correspondientes del área Unstaged
Changes al área Staged Changes, lo cual supone pasar los ficheros modificados del área
de trabajo al área de preparación. Si se desea que estos cambios sean confirmados en
el repositorio local, se debe escribir un mensaje en el cuadro Commit Message y clicar
en el botón Commit. Por otro lado, si se desea que los cambios lleguen al repositorio re-
moto, habrá que hacer clic en el botón Commit and Push.
Para continuar con esta práctica, después de escribir un mensaje en el cuadro Commit
Message y pulsar sobre el botón Commit, se puede realizar algún cambio adicional en el
método main de la clase Principal, por ejemplo, se puede escribir otro mensaje por pan-
talla. De nuevo, se activa la opción de menú contextual Team > Commit... De esta forma,
ya se han llevado a cabo dos confirmaciones o commits. Es posible visualizar el historial
de versiones de la clase Principal seleccionando en su menú contextual la opción Team >
> Show in History (véase la Figura 4.25).
O Ediciones Paraninfo
Como se puede ver en la Figura 4.25, para el segundo commit, aparecen las etiquetas
master y HEAD. Como ya se indicó, Git llama master a la rama principal o tronco. Por otro
lado, HEAD hace referencia a la versión más reciente de una determinada rama o del
tronco.
x. /K¡. YI COMUNICACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
(E Problems € Javadoc [E) Declaration EJ Console ¿Sy GitStaging é) Histoy X $HEriE-aa-7 - e-*e3:c506
File: Proyecto1/src/paquete1/Principal.java [Ejemplo!]
ld Message Author Authored Date Committer Committed Date
…HEADij commit Jose 1seconds 290 Jose 1 seconds ago ñ]
ece9397 Primera confirmación Jose 12 hours ago Jose 12 hours ago
Segundo commit
Figura 4.25. Seleccionando la opción del menú contextual Team > Show in History, se puede visualizar
el historial de versiones de un fichero. Se puede navegar por las distintas versiones y observar
las modificaciones que incorpora cada versión en relación con la anterior.
Al hacer doble clic sobre una versión, se pueden ver más en detalle los cambios reali-
zados (Figura 4.26). Así, si se hace doble clic sobre el primer commit, se muestra en la
parte derecha de la pantalla la versión actual y, a la izquierda, el contenido de la versión
correspondiente al commit seleccionado, marcando en azul los cambios que ha supuesto
una versión en relación con la otra.
[J] Java Source Compare -$ ME
4 as
Local: Principaljava Principaljava ece9397 (Jose)
1package paquetel; 1package paquetel; A
2 2
3public class Principal | 3public class Principal (
4 4
5 public static void main(String[] args) ( 5 public static void main(String[] args) (
6 System.GU€.println ("Estamos haciendo control de versiones c 6 System.out.printin ("Estamos haciendo control de versione
7 System.cut.printin ("Escribo otra línea para hac EE 7 »
ef » e)
9 s v
< > < >
(S) Problems E Javadoc S), Declaration EJ Console ¿Sy GitStaging ) Histoy X HE| 2- 0- -Me-*%3c50
File: Proyecto1/src/paquetel/Principaljava [Ejemplo1]
ld Message Author Authored Date Committer Committed Date
360e0e5 (master)(HEAD)Segundo commit Jose 1 seconds ago Jose 1 seconds ago
ece9397 Primera confirmación Jose 12 hours ago Jose 12 hours ago
Figura 4.26. Historial de versiones de un fichero: si se hace doble clic sobre uno de los commits, se puede ver
en detalle los cambios realizados en esa versión.
Para poder utilizar un repositorio remoto, se puede hacer uso de GitHub, que ofrece
la posibilidad de crear un repositorio en la nube. Con este fin, se accede al sitio web
https:// github.com/ y se pincha sobre el botón Sign up, para darse de alta y crear una
cuenta gratuita de GitHub.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMAT|CA Y (/N
€ >Ccl(a hnps//gnhubcom/new¡ º
Great repository names are short and memorable. Need inspiration? How about glowing-octo-broccoli?
Description (optionar)
[ l: Public
- Anyone on the intenet can see this repository. You choose who can commit.
o Private
You choose who can see and commit to this repository.
Figura 4.27. Vista de la plataforma GitHub en la que, para crear un repositorio remoto, se
debe indicar el nombre, que el repositorio sea público y, opcionalmente, una descripción.
Al hacer clic en el botón Create repository, que aparece en la parte inferior de la pantalla,
se creará el repositorio. Después aparecerá otra pantalla como la que se representa en
la Figura 4.28, en la que se indica la URL del repositorio que se acaba de crear y se pro-
porcionan comandos para trabajar con este repositorio.
€) entornosparaninfo/Repositorion:
€ > C A githubcom/entomosparaninfo/RepositorioremotoGit1
E entornosparaninfo
/ RepositorioRemotoGit1 - Pubiic unvatch - 1 s 0
Get started by creating a new file or uploading an exísting file. We recommend every repository include a README, LICENSE, and
-gitignore.
Figura 4.28. Pantalla que aparece tras haber creado un repositorio remoto en GitHub.
Un dato muy relevante es la URL del repositorio creado, que se puede leer en la parte
superior de la pantalla.
] MUNICACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
GitHub no hace uso de la autenticación vía HTTPS (Hypertext Transfer Protocol Secure) con
la contraseña de la cuenta de GitHub por motivos de seguridad. Debido a esto, para so-
lucionar este problema, el cual impide subir ficheros al repositorio remoto, se debe crear
un identificador o token de acceso personal. Para ello, en nuestra cuenta de GitHub (ico-
no de arriba a la derecha), se selecciona la opción de menú Settings y se clica en el enla-
ce Developer settings de entre las opciones que se muestran a la izquierda en la pantalla
que aparece después. Seguidamente, se hace clic en el enlace Personal Access tokens
en el menú de la izquierda (Figura 4.29). En Note, se señala el uso que se va a dar al
token; en Expiration, se elige la opción No expiration; se marca la casilla de verificación
repo y, finalmente, se pulsa el botón de la parte inferior de la pantalla Generate token.
Note
Expiration *
GitHub stronaly recommends that you set an expiration date for your token to help keep your information secure.
Learn more
L
Select scopes
Scopes define the access for personal tokens. Read more about OAuth scopes.
repo Full control of private repositories
reposstatus Access commit status
Figura 4.29. Creación de un token de acceso personal en GitHub para poder subir ficheros al repositorio remoto.
Se indica para qué se va a usar y que no expire nunca. El token se creará al hacer clic en el botón Generate token.
Tras haber creado el token, se puede copiar al portapapeles, pues se necesitará para
configurar, desde Eclipse, la subida de archivos al repositorio remoto. Para realizar dicha
configuración, en Eclipse se debe abrir la vista de repositorios de Git, para lo que se acti-
va la opción de menú Window > Show view > Other > Git > Git Repositories.
Desde la vista Git Repositories, que se puede ver debajo del explorador de paquetes,
para el elemento Remotes, se elegirá del menú contextual la opción Create Remote...
Aparecerá una ventana (Figura 4.30) en la que se pueden dejar las opciones que apare-
cen por defecto y se hace clic en el botón Create.
(O)
Location
URI: '1 https://github.com/entornosparaninfo/RepositorioRemotoGit1.git | Local Folder... Local Bundle File...
Host: | _g_ithub.com
Connection
Protocol: [ https v
oe| ¡
Authentication
User: [ entnmos£araninfo
Password: W eoeooococoooooCooeoooCeoeOCocoeoeee
[]Store in Secure Store
Figura 4.31. Ventana en la que se configura la subida de archivos al repositorio remoto de GitHub,
proporcionando la URL de dicho repositorio, el nombre de usuario de GitHub y el token personal de acceso.
Una vez se dispone de un repositorio remoto y se han configurado las subidas a dicho re-
positorio, se pueden subir los ficheros del repositorio local al remoto. Para ello, se dispo-
nen de varias opciones:
M Seleccionar para el fichero que se quiere subir la opción del menú contextual Team >
> Commit... y hacer clic en el botón Commit and Push (como el que se muestra en
la Figura 4.24), o bien en el botón Push HEAD si el fichero ya está confirmado en el
repositorio local.
M Seleccionar para el fichero que se desea subir la opción del menú contextual Team >
> Repository > Push Branch “master'...
m Seleccionar para el proyecto que se va a subir la opción del menú contextual Team >
> Remote > Push...
E Seleccionar para el proyecto que se desea subir la opción del menú contextual
O Ediciones Paraninfo
Al seleccionar el proyecto y la opción de menú Team > Remote > Push..., aparece una
ventana (Figura 4.32) con la opción de usar los datos del repositorio ya configurado, que
es lo que se seleccionará, y después se hará clic en el botón Next.
| A k“1/ COMUNICACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
¡oligin: https://github.com/entornosparaninfo/RepositorioRemotoGit1.git —
0) Custom URI:
Location
URI: Local Folder...
Host:
Repositary path:
Connection
Protocol:
Port:
Authentication
User:
Password:
Figura 4.32. Ventana en la que ya aparecen configuradas las subidas al repositorio remoto.
En la siguiente ventana que aparece (Figura 4.33), en la casilla situada bajo Source ref,
se elige lo que se quiere subir al repositorio remoto (en este caso, HEAD) y se clica en
el botón Add Spec.
Mode Source Ref Destination Ref Force Update Remove Force Update All
de Update - HEAD HEAD a
E Remove All
Figura 4.33. Ventana en la que se indica qué parte del proyecto se desea subir al
repositorio remoto, seleccionándolo en Source ref y haciendo clic en el botón Add Spec.
O Ediciones Paraninfo
Luego, se pulsa sobre Finish y, si se solicitan de nuevo los datos de autenticación (nom-
bre de usuario de GitHub y token personal de acceso), se introducen estos. El proyec-
to se subirá al repositorio remoto de GitHub. Si se va ahora a GitHub, se verá que, en el
repositorio creado (RepositorioRemotoGit1), aparece el proyecto que se acaba de subir.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁTICA Y CQÍM ;
Para crear una rama, en el área de repositorios Git, se elige para el elemento Branches
la opción del menú contextual Switch To > New Branch... (Figura 4.34). Se asignará un
nombre a la rama (por ejemplo, rama1) y se dejará marcada la casilla de verificación
Check out new branch, mediante la cual nos cambiamos a la rama rama/1, que se está
creando.
Source: £% master
When pulling:
Figura 4.34. Ventana en la que se crea una nueva rama, llamada rama,
y nos movemos a ella.
Dentro del proyecto, se crea un nuevo paquete (paqueteRama1) con una clase llamada
Rama1, en cuyo método main, se mostrará un mensaje por pantalla.
Eílpmblems G Javadoc [Declaration EJ Console ¿Sy Git Staging ) Histoy X HE| E-aa-y7 - -4350
roject: Proyecto1 [Ejemplo!]
ld Message Author Authored Date Committer Committed Date
[ 18fa6e4 Confirmación para cambio rama 1 Jose 16 seconds ago Jose 16 seconds ago
048eb52 master |Tercer commit Jose 31 minutes ago Jose 31 minutes ago
360e0e5 % Segundo commit Jose 4 hours ago Jose 4 hours ago
ece9397 Primera confirmación Jose 16 hours ago Jose 16 hours ago
Figura 4.35. Vista de las diferentes versiones que se han creado para el proyecto, incluyendo la que se acaba
de crear a partir de la rama rama.
O Ediciones Paraninfo
Para subir esta rama al repositorio remoto, se selecciona la rama rama1 en el área de
repositorios Git y la opción del menú contextual Push Branch... Se hace clic en el botón
Preview y luego en Finish en la siguiente pantalla, y entonces, la subida ya se habrá rea-
lizado, como se podrá observar en GitHub, donde se indica que hay dos ramas (master y
rama1) (véase Figura 4.36).
— 1 1OMUN|CACIOMES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
E entornosparaninfo
/ RepositorioRemotoGit1 ' Public Ounwatch - 1 Astar 0 Y Fork 0
rama1
Create a new reiease
View al branches
Figura 4.36. Pantalla de inicio de GitHub para el repositorio remoto RepositorioRemotoGit1, donde se puede
observar que hay dos ramas (branches), pudiéndose seleccionar la rama master o la rama ramal.
Fusión de ramas
Para terminar, se explica a continuación cómo se pueden fusionar dos ramas en el re-
positorio local. A modo de ejemplo, aquí se fusionarán las ramas master y rama1. Para
ello, en Eclipse, en el área de repositorios Git, se hace doble clic sobre la rama master
con el fin de cambiar a esa rama. De hecho, el programa pregunta si se quiere hacer
un checkout a la rama master, a lo que se debe responder que sí, haciendo clic en el bo-
tón Check Out. A continuación, en el menú contextual de la rama master, se activa la op-
ción Merge (Figura 4.37).
29 Git Repositories X = B (2 Probems G =
El er|" S| [ : Repostor emplo! _
4 () Ejemplo! [rama1] - CAUsersVoselDesktopParaninfoVEDWRepositoriost | Id Message
4 25 Branches 18fabed
4 5 Local 048eb52 3
£ master 048eb52 Tercer com—!
, ramal 18fa6e4 Confirmació 39 - Check Out
E Remote Tracking 4 - Push Branch...
» Tags 28 CreateBranch...
Dil References 1 RenameBranch...
b 9 Remotes C
b E Working Tree - C:1UsersVJoselDes ENfIgurE Sranch.
$ Delete Branch Delete
[% Merge
y Rebase on
45 Reset...
Show In Alt+Shift+W »
Figura 4.37. Para fusionar la rama rama1 con el tronco (rama master), se selecciona
O Ediciones Paraninfo
en el área de repositorios Git de Eclipse, para la rama master, la opción del menú
contextual Merge.
En la ventana que aparece después (Figura 4.38), se selecciona la rama que se desea
fusionar, en este caso, rama/1, y se clica en el botón Merge.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁTICA Y (
Merge 'master'
Select a branch or tag to merge into the 'master' branch
4 (= Local
9 master 048eb52 Tercer commit
£5. ramal 18fabe4 Confirmación para cambio rama 1
( Remote Tracking
as Tags
Merge options
(9) Commit (commit the result)
() No commit (prepare merge commit, but don't commit yet)
O Squash (merge changes into working tree, but don't create merge commit)
Figura 4.38. Ventana en la que selecciona la rama que se quiere fusionar con la rama
master y se confirma haciendo clic en el botón Merge.
Para que esta fusión se plasme en el repositorio remoto, se debe activar la opción Push
Branch del menú contextual para la rama master, y, en la siguiente ventana, hacer clic en
el botón Preview y, en la siguiente, pulsar el botón Push. Se indicará si se ha realizado
correctamente la subida al repositorio remoto.
aninfo | ubiic
/ RepositorioRemotoGit1
E entornospar Ounwatch = 1 | Wstar 0! Yrok 0
Ocode — O Issues 17 pull requests O Actions — [] Projects — [ wiki O Security — Y Insights — 83 settings
Jose and Jose Confirmación para cambio rama 1 18fases 6 hours ago O History
Figura 4.39. En CitHub, para la rama master, aparece tanto el contenido de la rama master antes de la fusión
(paquete paquete1) como el contenido de la rama rama1 (paquete paqueteRama1), puesto que ambas ramas
se han fusionado correctamente.
1OMUN|CACIONES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
EN 4.4.Documentación
Uno de los componentes del software que se incluyó en la definición de software en el
Apartado 1.1 fue «información descriptiva tanto en papel como en formas virtuales que
describen la operación y uso de los programas», lo cual se refiere a la documentación
que debe acompañar a todo software cuando se entrega al cliente. Asf, se deben docu-
mentar las diferentes fases de cada proyecto, lo que proporcionará información relevan-
te al cliente y favorecerá la realización de las tareas de mantenimiento que afectan a la
mayoría del software que se crea.
Seguidamente, se ofrece el índice de ERS propuesto por el IEEE en la norma IEEE 830.
No es obligatorio seguir este Índice, pero toda ERS debería incluir toda la información
que aquí se indica:
1. Introducción.
1.1. Objetivo.
O Ediciones Paraninfo
1.2. Ámbito.
1.3. Definiciones, acrónimos y abreviaturas.
1.4. Referencias.
1.5. Visión general del documento.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN INFORMÁTICA Y CO/X 1
2. Descripción general.
2.1. Perspectiva del producto.
2.2. Funciones del producto.
2.3. Características del usuario.
2.4. Limitaciones generales.
2.5. Supuestos y dependencias.
2.6. Requisitos futuros.
3. Requisitos específicos.
3.1. Interfaces externas.
3.1.1. Interfaces de usuario.
3.1.2. Interfaces de hardware.
3.1.3. Interfaces de software.
3.1.4. Interfaces de comunicaciones.
3.2. Requisitos funcionales.
3.3. Requisitos de rendimiento.
3.4. Restricciones de diseño.
3.5. Atributos de calidad del sistema.
3.6. Otros requisitos.
4. Apéndices.
Con relación a la documentación del diseño, esta es definida por el IEEE como una des-
cripción del software creada para facilitar el análisis, la planificación, la implementación y
la toma de decisiones. Este documento debe explicar cómo un producto de software será
construido para satisfacer un conjunto de requisitos técnicos. Una ERS describe el qué
del proyecto, mientras que la documentación del diseño se enfoca en el cómo. Este do-
cumento debe servir de base para el equipo de desarrollo y otros interesados en el pro-
yecto. Debería contener toda la información necesaria para que un programador pueda
escribir el código. El índice de documentación de diseño propuesto por el IEEE en la nor-
ma IEEE 1016 es el siguiente:
1. Introducción.
1.1. Objetivo.
1.2. Ámbito.
1.3. Visión general del documento.
1.4. Material de referencia.
1.5. Definiciones y acrónimos.
2. Visión del sistema.
O Ediciones Paraninfo
4. Diseño de datos.
4.1. Descripción de los datos.
7. Matriz de requisitos.
8. Apéndices.
En cuanto a la documentación de las pruebas, es conveniente que, para una buena orga-
nización de estas y para asegurar su reutilización, se documenten tanto el diseño de las
pruebas como el resultado o ejecución de estas. El estándar IEEE 829 propone una serie
de documentos cuya utilidad se describe en el Apartado 3.4. A continuación se muestran
los índices propuestos en dicho estándar para cada uno de los documentos.
15. Riesgos asumidos por el plan y planes de contingencia para cada riesgo.
HISTÓRICO DE PRUEBAS
1. Identificador.
2. Descripción de la prueba: elementos probados y entorno de la prueba.
Anotación de datos sobre cada hecho ocurrido:
M Fecha y hora.
INFORME DE INCIDENTE
1. Identificador.
2 Resumen del incidente.
Descripción de datos objetivos (fecha y hora, entradas, resultados esperados,
etc.).
4. Impacto que tendrá sobre las pruebas.
1- Identificador.
2. Resumen de la evaluación de los elementos probados.
Variaciones del software respecto a su especificación de diseño, así como las
variaciones en las pruebas.
Solución
O Ediciones Paraninfo
No es necesario. Se trata de unos documentos propuestos por el IEEE en los que se inclu-
yen todos los apartados que debería incluir cada documento, como por ejemplo, la ERS. No
obstante, aunque no es preciso seguir los índices de estos documentos, en cualquier docu-
mento que se elabore, sí se debería incluir toda la información a la que se refiere cada uno
de los puntos de los citados índices.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN |NFORMATÍCA | KF
La documentación del código fuente, aunque parezca una tarea innecesaria o poco inte-
resante, en la vida real, es una tarea de gran importancia porque un porcentaje muy im-
portante del esfuerzo de desarrollo de software de una organización se dedica a la tarea
de mantenimiento, en cualquiera de sus modalidades (mantenimiento correctivo, perfec-
tivo o adaptativo). Todos los estudios realizados en relación con el esfuerzo de la tarea
de mantenimiento, cifran su coste en más del 50 % del esfuerzo dedicado al desarrollo
de software.
Hay que tener en cuenta que todos los programas que tengan éxito tendrán que sufrir
cambios a lo largo de su uso por errores no detectados, porque se requieran nuevas fun-
cionalidades o cambios en funcionalidades existentes, o porque sea necesario adaptar
el software a nuevos entornos.
Además, es muy probable que las personas que tengan que realizar modificaciones so-
bre un determinado programa no sean las mismas personas que lo elaboraron. Y aunque
lo sean, lo cual no es muy frecuente, no es muy probable que recuerden por qué escri-
bieron cierto código. La utilidad de la documentación debe ser precisamente facilitar la
modificación de programas, es decir, la tarea de mantenimiento del software. Se debe
posibilitar la rápida detección de errores y su depuración y la detección de aquellas par-
tes del software que es necesario modificar, por ejemplo, por la inclusión de nuevas fun-
cionalidades.
JavaDoc permite generar documentación de código escrito en Java en formato HTML. Para
que esto resulte útil, es necesario seguir una serie de recomendaciones de JavaDoc, herra-
mienta que generará un fichero que incluirá el código y la documentación. JavaDoc recomien-
da lo siguiente en relación con los comentarios.
E Comentarios de línea: comienzan con los caracteres “//” y finalizan con la línea.
E Comentarios de varias líneas: pueden abarcar varias líneas, empiezan con “/*” y
terminan con “*/”.
O Ediciones Paraninfo
colocar en cualquier lugar de los programas, sino que deben situarse antes de la
declaración de una clase, un atributo o un método. Incluyen dos partes: una des-
cripción y un bloque de etiquetas o tags. Las etiquetas más utilizadas se muestran
en la Tabla 4.1.
Etiqueta
Eparam nombre_param descripción : Descripción del parámetro. Se usa una etiqueta de este tipo
por cada parámetro.
i Osee referencia Referencia a otro elemento: a una clase del mismo proyecto :
: : (paquete.clase),aotro método de la misma clase (+método()),
: a un método de otra clase (claseitmétodo()), a un método de :
una clase de otro paquete (paquete.clasetmétodo()). :
package CuentaPrueba;
NH
/**
W
de las
* cuentas bancarias </h2>
* eversion 01-2021
* Gauthor Jose Piñeiro
* since 14-02-2021
*
public class CuentaDoc (
private String número; //Número de la cuenta bancaria
private float saldo; //Saldo de la cuenta bancaria en euros
/*—k
21 saldo = saldoCta;
22
23
24 /**
62
63 /**
Para ejecutar JavaDoc desde Eclipse, se activa la opción de menú Project > Generate
Javadoc. En la pantalla que se muestra en la Figura 4.40, se debe:
Javadoc Generation
Select types for Javadoc generation.
Javadoc command:
C:1Program FilesVava jdk-16.0.21bin javadoc.exe
Select types for which Javadoc will be generated:
a [u]( Ejercicios
a [u](8 sic [] P CuentaTestjava
[m]EB CuentaPrueba Y] [ CuentaDocjava
] B programas
0)
Si nos dirigimos a la carpeta especificada en Destination por medio del explorador de ar-
chivos, se puede hacer doble clic en el documento index.html, cuyo contenido es el que
se muestra en la Figura 4.41.
( CuentaDoc
Package CuentaPrueba
Class CuentaDoc
java lang Object
CuentaPrueba CuentaDoc
public class Cuentapoc
extends object*
Clase CuentaDoc, para contener la información de cada una de las cuentas bancarias
Version:
012021
Author:
Jose Piñeiro since 14-02-2021
Constructor Summary
Constructor Description
Cuentapoc(string” nuncta, flost saldocta) Constructor dela clase CuentaDoc con todos los parámetros
Method Summary
[Modifier
and Type
mc ae | an ed
Method Description
void extraerDinero(flost importe) Método que saca dinero de la cuenta, decrementando su saldo
Implantación de
Refactorización
Patrones de refactorización
en Eclipse
operaciones de
refactorización en Eclipse
Opt imización y documentac ión
Analizadores de código
Gestión de versiones
Control de versiones
Herramientas de control
de versiones
Documentación
Generación de documentación
O Ediciones Paraninfo
7
ACTIVIDADES FINALES 4. OPTIMIZACIÓN Y DOCUMENTACIÓN
E Actividades de comprobación
4.1. En relación con el momento de aplicación de la refactorización, indica cuál es la
afirmación verdadera:
a) Es más adecuado aplicar la refactorización sobre una aplicación ya finalizada.
b) Es mejor realizar pequeñas refactorizaciones a lo largo del proceso de desarrollo
de software.
c) Es conveniente aplicar refactorizaciones tras la adición de cada nueva funcionali-
dad al software.
d) Las respuestas b y c son correctas.
4.2. ¿Qué nombre recibe el mal olor (bad smell) consistente en que existen demasia-
das ramas y bucles en un método?
a) Método largo (long method).
b) Código divergente (divergent code).
c) Código duplicado (duplicated code).
d) Complejidad ciclomática (cyclomatic complexity).
4.6. En cuanto a las diferencias entre las herramientas automáticas para la refactori-
zación y las que se usan para el análisis estático de código (analizadores de có-
digo):
a) Los dos tipos de herramientas son capaces de detectar automáticamente defec-
tos en el código.
O Ediciones Paraninfo
b) Los dos tipos de herramientas pueden ser empleadas por las personas que llevan
a cabo la programación como medio para corregir defectos cometidos en esta.
C) Los dos tipos de herramientas son capaces de detectar automáticamente malos
olores (bad smells).
174 d) Ninguna de las respuestas anteriores es correcta.
4. OPTIMIZACIÓN Y DOCUMENTACIÓN ACTIVIDADES FINALES
4.7. Indica cuál de las siguientes afirmaciones es verdadera en relación con el códi-
go duplicado:
a) Las herramientas de refactorización de Eclipse pueden emplearse para la detec-
ción automática de código duplicado.
b) Existe algún patrón de refactorización en Eclipse que se puede emplear para so-
lucionar el problema del código duplicado.
c) El analizador de código PMD se puede emplear para la detección automática de
código duplicado.
d) Las respuestas b y c son correctas.
4.8. En Git un archivo que está pendiente de confirmación, ¿en qué área se encuen-
tra?
a) En el repositorio local (commit area).
b) En el área de trabajo (working area).
c) En el área de preparación (staging area).
d) En el repositorio remoto.
4.9. ¿Qué orden se emplea en Git para pasar cambios realizados en el repositorio lo-
cal al repositorio remoto?
a) Pull.
b) Push.
c) Check out.
d) Commit.
175
M Actividades de aplicación
4.13. Describe en qué consiste la técnica de la refactorización.
4.15. ¿En qué consiste el patrón de refactorización Extract Local Variable de Eclipse?
4.17. En la aplicación figuras, cambia el nombre de la clase Triángulo para eliminar su tilde,
de forma que su nuevo nombre sea Triangulo. Elimina también las tildes de los nom-
bres de los métodos abstractos área() y perímetro() de la clase Figura.
4.18. En la clase PruebaFigura de la aplicación figuras, elimina las tildes de las variables op-
ción y mostrarPerímetro del método main, del nombre de los métodos mostrarMenú()
y procesarTriángulo() y de la variable opción del método mostrarMenú/().
4.19. En la clase PruebaFigura, sustituye la variable local opcion del método main por un
atributo privado de la clase.
4.20. ¿Qué diferencias hay entre las herramientas para la refactorización y los analizadores
de código?
4.21. ¿Es posible en Eclipse consultar las reglas que emplea el analizador de código PMD
al realizar sus análisis? Si es posible, ¿cómo se pueden consultar?
4.22. ¿Es posible en Eclipse modificar las reglas que emplea el analizador de código PMD
al realizar sus análisis? Si es posible, ¿cómo se pueden modificar?
4.23. Crea en Eclipse un repositorio local llamado Ejemplo2 dentro de la carpeta Reposi-
toriosGit que se creó anteriormente. Crea un proyecto Java en Eclipse llamado Pro-
yecto? dentro de la carpeta EjemplosCtrolVersionesGit. Crea dentro del proyecto una
clase mediante la que se muestre un mensaje por pantalla. Confirma los cambios
realizados en el repositorio local.
Crea una rama llamada rama?, en la cual debes añadir una nueva clase que muestre
dos mensajes por pantalla, y confírmala en el repositorio local. Añade para la clase
creada en la rama rama1 dos nuevos mensajes por pantalla, valida los cambios en el
repositorio local y súbela al repositorio remoto. Fusiona esta rama con el tronco y sú-
bela al repositorio remoto.
Crea otra rama llamada rama2 con una nueva clase que muestre un mensaje por
O Ediciones Paraninfo
M Actividedaampde
liaciós n
4.25. Enel Apartado 4.1, se indicó que existen tres tipos de mantenimiento (perfectivo, co-
rrectivo y adaptativo), sin embargo, se suele hablar a veces de mantenimiento pre-
ventivo. ¿En qué consiste este tipo de mantenimiento?, ¿tiene alguna relación con la
refactorización?
4.25. Uno de los malos olores que se señaló en el Apartado 4.1.1 es el llamado cirugía a ti-
ros (shotgun surgery), consistente en que un cambio en una clase conlleva la realiza-
ción de cambios en otras muchas clases. Investiga cuál puede ser el motivo de este
mal olor y cómo se puede solucionar.
4.27. Otro de los malos olores que se describió en el Apartado 4.1.1 es el llamado código
divergente (divergent code), que consiste en que un cambio en el sistema conlleva
muchos cambios en una misma clase. Se trata del mal olor contrario a cirugía a tiros.
Investiga cuál puede ser el motivo de este mal olor y Cómo se puede solucionar.
4.258. Enel Apartado 4.3.3, se ha empleado la herramienta de control de versiones Git inte-
grada en el IDE Eclipse, pero también es posible emplearla de manera independiente
en modo línea de comandos. ¿Desde qué página web es posible realizar la descar-
ga? ¿En qué sistemas operativos se puede instalar Git?
4.29. ¿Es posible instalar Git con interfaz gráfica sin estar integrado en un IDE? En caso de
que sea posible, ¿desde qué página web se puede realizar la descarga correspon-
diente y en qué sistemas operativos se puede instalar?
4.30. Busca la utilidad de los siguientes comandos que se pueden emplear en Git en modo
línea de comandos: git init y git diff.
4.31. Investiga si es posible emplear Git integrado en el IDE Apache NetBeans. En caso de
que sea posible, ¿es necesario realizar alguna instalación?
O Ediciones Paraninfo
177
Enlaces web de interés
Baeldung - https://www.baeldung.com/Eclipse-refactoring
(Tutoriales sobre temas relacionados con el desarrollo en Java)
Linuxtopia - https://www.linuxtopia.org/online_books/eclipse_guides.html
(Página web con guías sobre Linux y el desarrollo de software. Incluye una sección sobre
Eclipse)
Refactoring.Guru - https://refactoring.guru/es
(Sitio web sobre refactorización, patrones de diseño, principios SOLID y otros temas rela-
cionados con la programación)
Git-sem - https://git-sem.com/
(Sitio web dedicado a la gestión de la configuración del software empleando la herramien-
ta Git)
PMD - https://pmd.github.io/
: (Sitio web sobre el analizador de código PMD)
O Ediciones Paraninfo
178
—[—ÑCS————]].
ofobb ou¿¿oQ
;-f,¡ : hi
UNIDAD 5
17 * !—.u'
.n+eu1:;' £¿I.o1
'::
'll'
á. asifors ..
1u
anolesd
YTS
(,
*
;*jVe 7
.!( ¿A i &l1llo
bita J
eaiyT2 : |
(! b
Y.1u,:.|0u). .”| edaroz
00 ; 1oenf : 9ru¡º
a q
“ ¡fu(n¡ de
Elaboración de diagramas
de clases
Objetivos Contenidos
Aprender los conceptos básicos de la orientación E 5.1. Conceptos básicos
a objetos. de la orientación a objetos
Comprender los fundamentos del lenguaje UML. m 5.2. El lenguaje UML
Conocer los tipos de diagramas que se pueden E 5.3. Clases, atributos, métodos
construir en el lenguaje UML. y visibilidad
Saber cómo representar clases empleando E 5.4. Relaciones entre clases
el lenguaje UML.
El 5.5. Tipos de clases de análisis
Reconocer y diferenciar los tipos de relaciones
E 5.6. Herramientas para la creación
que se pueden establecer entre las clases.
de diagramas de clases
Conocer la manera de representar las diferentes
El 5.7. Generación de código a partir
relaciones entre clases empleando el lenguaje de diagramas de clases
UML.
l 5.8. Generación de diagramas
Distinguir los tipos de clases de análisis
de clases a partir de código
de interfaz, de control y de entidad. (ingeniería inversa)
Utilizar herramientas para la elaboración
O Ediciones Paraninfo
de diagramas de clases.
Generar código a partir de un diagrama de clases.
Crear un diagrama de clases a partir de código
mediante ingeniería inversa.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMATICA Y [C fM"
Introducción
Para crear una aplicación informática, es necesario llevar a cabo una serie de tareas que
ya fueron descritas en las unidades previas. Durante las etapas de análisis y diseño, se
deben obtener modelos gráficos que representen la información que es necesario mane-
jar en la aplicación y las operaciones que se deben realizar sobre dicha información. La
creación de estos modelos se debe realizar siguiendo ciertas normas y el estándar a ni-
vel internacional para ello es el lenguaje UML (unified modeling language).
Una aplicación orientada a objetos consta de una serie de clases relacionadas entre sí,
a partir de las cuales, se crean objetos que se envían mensajes. Con relación a ello, el
lenguaje UML establece las normas para crear muchos tipos diferentes de diagramas,
de los cuales los más relevantes son los diagramas de clases, a los que se dedica esta
unidad. Así, se estudiarán cómo se representan las clases y sus relaciones siguiendo el
lenguaje UML y cómo crear estos diagramas empleando varias herramientas informáti-
cas. También se verá la manera de generar código a partir de un diagrama de clases, y
viceversa.
Para que un lenguaje de programación pueda ser calificado como orientado a objetos
precisa tener una serie de características, que se enumeran a continuación (Coad y
Yourdon, 1991):
E Abstracción: cada objeto en el sistema funciona como un agente abstracto que pue-
de realizar trabajo, informar y cambiar su estado, así como comunicarse con otros
objetos en el sistema sin revelar cómo se implementan estas características. El
proceso de abstracción permite seleccionar las características relevantes dentro de
un conjunto e identificar comportamientos comunes para definir nuevos tipos de en-
O Ediciones Paraninfo
E Encapsulamiento: hace referencia a reunir todos los elementos que pueden consi-
derarse pertenecientes a una misma entidad. Esto permite aumentar la cohesión
de los componentes del sistema.
| ]MUN'CACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
E Herencia: las clases con atributos o métodos comunes se relacionan entre sí for-
mando jerarquías de clasificación en las que las subclases (clases hijas) poseen
por herencia los atributos y métodos de la superclase o de las superclases (clase
padre o clases padres). La herencia posibilita el polimorfismo y el encapsulamiento,
lo que permite crear clases como tipos especializados de clases preexistentes.
E Modularidad: es la propiedad que permite dividir una aplicación en partes más pe-
queñas llamadas módulos, cada uno de los cuales debe ser lo más independiente
posible de los otros módulos, es decir, el acoplamiento entre los módulos debe ser
el menor posible.
E Ocultamiento: cada objeto está aislado del exterior y expone su interfaz a otros ob-
jetos, la cual especifica cómo interactuar con los objetos de la clase. Esta propie-
dad protege a las propiedades de un objeto contra su modificación por quien no
tenga derecho a acceder a ellas, de manera que solo los métodos del objeto pue-
den acceder a su estado. Esto asegura que otros objetos no puedan cambiar el
estado interno de un objeto de manera inesperada, y así se evitan efectos secunda-
rios e interacciones inesperadas.
El modelo orientado a objetos surgió como parte de las metodologías de análisis y dise-
ño orientado a objetos, que comenzaron su andadura durante los años 80 del siglo pa-
sado. A partir del año 1996, se integraron varios de los métodos de análisis y diseño
orientado a objetos, lo que dio lugar a la aparición del lenguaje unificado de modelado
(UML), cuya última versión es la 2.5.1, que data del año 2015.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMATICA Y Cv (w—¡
Los principios básicos que se deben seguir a la hora de diseñar el modelo de un siste-
ma son los siguientes:
E La elección acerca de qué modelos crear tiene una enorme influencia sobre cómo
se acomete un problema y cómo se da forma a una solución.
El lenguaje UML sigue estos principios. Cabe afirmar que UML es un lenguaje gráfico que
se emplea para visualizar, especificar, construir y documentar un sistema por medio de
diferentes tipos de diagramas que se utilizan en las diferentes tareas de desarrollo del
software. Estos modelos se corresponden con diferentes niveles de abstracción y pre-
sentan diferente nivel de detalle, o dicho de otro modo, empleando UML se puede es-
tudiar el sistema desde diferentes puntos de vista, ya que no todos los usuarios de un
sistema precisan tener la misma visión de este. UML incorpora distintos tipos de diagra-
mas y notaciones gráficas y textuales destinadas a mostrar el sistema desde diferentes
perspectivas, que pueden usarse en las diferentes fases del ciclo de vida del desarro-
llo de software. UML establece las normas que se deben seguir cuando se elaboran es-
tos diagramas.
MN EN Elementos estructurales
En su mayoría, los elementos estructurales son la parte estática de un modelo y repre-
sentan conceptos o cosas materiales. Son los siguientes:
Libro
- código: int
- ISBN: String
- título: String
- editorial: String
- prestado: boolean
Figura 5.1. Clase llamada Libro con cinco atributos (código, ISBN,
título, editorial y prestado) y dos métodos (prestar y devolver).
<<Interface>>
IVentana
+ abrir ()
+ cerrar ()
+ mover ()
+ dibujar ()
( Generarfactura )
' = — —
—
Registrar pedido
5. Clase activa: es un tipo especial de clase cuyos objetos tienen uno o más proce-
sos o hilos de ejecución. Una clase activa es lo mismo que una clase excepto en
el hecho de que sus objetos pueden ejecutarse concurrentemente con otros obje-
tos de clases activas. Se representa mediante un rectángulo, al igual que una cla-
se, pero con líneas dobles a la derecha e izquierda (Figura 5.5).
GestorDeEventos
+suspender(
)
+vaciarCola()
6. Componente: es una parte modular del diseño del sistema que oculta su imple-
mentación tras un conjunto de interfaces externas. El sistema se define a partir
de los componentes conectados entre sí. La implementación de un componen-
te puede expresarse conectando partes y conectores, y las partes pueden incluir
componentes más pequeños. Por consiguiente, los componentes pueden ser de
granularidad variable. Gráficamente, se representa como una clase con un icono
especial en la esquina superior derecha (véase la Figura 5.6).
]
FormularioDeCliente
Argot técnico
O Ediciones Paraninfo
El vocablo granularidad tiene diferentes acepciones, pero la que aquí interesa es la siguiente:
«el nivel de detalle considerado en un modelo o proceso». Cuanto mayor sea la granularidad,
mayor será el nivel de detalle. Así, cabe afirmar que un componente con procesos genéricos
tiene un nivel de granularidad bajo y, por este motivo, se puede dividir en componentes más
detallados, es decir, en componentes con una granularidad mayor o más nivel de detalle.
1»' [OMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
<<artifact>>
NavegadorWeb
=
A
M EE Elementos de comportamiento
Los elementos de comportamiento son las partes dinámicas de los modelos UML y re-
presentan un comportamiento en el tiempo y en el espacio. Suelen estar conectados
semánticamente a elementos estructurales. Existen de tres tipos:
Imprimirractura
2. Máquina de estados: especifica las secuencias de estados por los que pasa un
objeto o una interacción durante su vida, en respuesta a eventos, junto con sus
reacciones a esos eventos. Sirve para especificar el comportamiento de una cla-
O Ediciones Paraninfo
1 En espera |
Procesar pedido
M E EN Elementos de agrupación
Son las partes organizativas de los modelos UML. El principal elemento de agrupación es
el paquete. Frente a las clases, que organizan construcciones de implementación, un pa-
quete es un mecanismo de propósito general para organizar el diseño. Un paquete pue-
de incluir elementos estructurales, de comportamiento y otros paquetes. Al contrario de
los componentes, que existen en tiempo de ejecución, los paquetes son puramente con-
ceptuales, de manera que solo existen en tiempo de desarrollo. Los paquetes se repre-
sentan gráficamente como una carpeta que lleva en su interior el nombre del paquete
(Figura 5.12).
Un paquete puede contener otros paquetes sin límite de anidamiento, pero cada elemen-
to pertenece a solo un paquete. Los paquetes se pueden utilizar en cualquier diagrama
1,Ú 1ñ MUN'CACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Argot técnico
El vocablo anidamiento en el diccionario de la RAE viene definido como «acción y efecto
de anidar» y el verbo anidar posee varias acepciones. En este ámbito, la que se aplica es
la de «abrigar, acoger». Así, si se dijera que se admiten paquetes de hasta dos niveles de
anidamiento, se querría decir que un paquete puede acoger en su interior a varios paquetes,
y cada uno de estos puede acoger a varios paquetes más pequeños. Si solo se permite
dos niveles de anidamiento, cada uno de los paquetes de tercer nivel ya no se puede
descomponer en paquetes más pequeños. El hecho de que no haya límite de anidamiento
quiere decir que no existe ninguna limitación en cuanto a los niveles de descomposición
de un paquete en paquetes más pequeños.
Los paquetes son los elementos básicos de agrupación, pero también hay otros, como
frameworks, modelos y subsistemas.
Argot técnico
El término inglés framework se puede traducir por 'marco de trabajo” y en Wikipedia se
define como «un conjunto estandarizado de conceptos, prácticas y criterios para enfocar un
tipo de problemática particular que sirve como referencia para enfrentar y resolver nuevos
problemas de índole similar» (https://es.wikipedia.org/wiki/Framework). Este término se usa
ampliamente en el mundo del software, en el que se podría describir como un conjunto de
herramientas que hacen posible que los desarrolladores sean más eficientes en su trabajo.
Un framework ofrece un conjunto de componentes de software listos para su uso y
reutilización. Ejemplos de ello son los frameworks .NET de Microsoft, Angular.js y CakePHP.
Ejemplar es débil
respecto a Libro
Z
Ae
Argot técnico
El vocablo middleware, como se puede deducir por analogía con los términos hardware y
software, hace referencia a aquello que no está muy claro si se debe situar en el ámbito del
hardware o en el del software. Se trata de un tipo de software que se sitúa entre el sistema
operativo y las aplicaciones que se ejecutan en el ordenador. Gracias al middleware es
posible la comunicación y la administración de datos en aplicaciones distribuidas.
O Ediciones Paraninfo
6. Diagramas de perfiles: permiten extender el lenguaje UML para su uso con una
plataforma de programación en particular (como el framework .NET de Microsoft o
la plataforma Java Enterprise Edition) o modelar sistemas para su uso en un domi-
nio particular, como la medicina o los servicios financieros.
E Diagrama global de interacciones: aportan una visión general del flujo de con-
trol de las interacciones. Es un tipo de diagrama híbrido entre el diagrama de
secuencia y el diagrama de actividad. El empleo de este diagrama es útil cuan-
do el modelo de interacción tiene un gran tamaño, ya que este ofrece una vi-
sión global de la interacción.
Una clase tiene tanto una serie de atributos como una serie de métodos, comunes a to-
dos los objetos de la clase:
E Los atributos son las propiedades que posee una clase. Así, la clase Libro podría
tener los atributos: código, ISBN, título, editorial y prestado. Cada atributo tendrá
un nombre, un tipo de dato (numérico entero, numérico real, cadena de caracteres,
etc.) y, posiblemente, un valor por defecto. Cada objeto de la clase Libro tendrá es-
tos mismos atributos y cada uno de estos atributos tendrá un valor asignado. La
clase Cuenta podría tener los atributos número de cuenta y saldo.
E Los métodos son las operaciones que se pueden llevar a cabo con los objetos de la
clase y definen el comportamiento de la clase. Así, por ejemplo, la clase Libro po-
dría disponer de los métodos prestar y devolver, que deben ser invocados cuando
un usuario o una usuaria pide prestado un libro de la biblioteca y devuelve un libro
O Ediciones Paraninfo
que le fue prestado, respectivamente. Por otro lado, la clase Cuenta podría disponer
de los métodos ingresarDinero y extraerDinero, que deben ser invocados cuando un
cliente ingrese dinero en la cuenta o extraiga dinero de ella, respectivamente. Estos
dos métodos recibirán como argumento o parámetro el importe que se desea ingre-
sar y extraer, respectivamente.
| i íOMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
La información acerca de las clases se suele representar mediante los llamados diagra-
mas de clases siguiendo la notación UML. Cada clase se representa mediante un rectán-
gulo con tres secciones:
Sin embargo, la información que se incluye en las secciones correspondientes a los atri-
butos y a los métodos puede diferir dependiendo de lo avanzado que se encuentre el pro-
ceso de análisis y diseño del software. Así, inicialmente, puede ser suficiente con indicar
únicamente los nombres de los atributos y los nombres de los métodos, como se mues-
tra en la Figura 5.14 para las clases Libro y Cuenta.
Libro
código
Cuenta
-
ISBN
número
título
saldo
editorial
prestado ingresarDinero ()
extraerDinero ()
prestar ()
devolver ()
Figura 5.14. Representación de las clases Libro (con los atributos código, ISBN,
título, editorial y prestado y los métodos prestar y devolver) y Cuenta (con los
atributos número y saldo y los métodos ingresarDinero y extraerDinero).
E Protected: este modificador de acceso indica que el atributo o el método que lo ten-
ga asignado es accesible desde métodos de la propia clase y desde métodos de su
subclase o de sus subclases. Este modificador se simboliza por medio del símbolo
almohadilla (%).
Lo habitual es, al menos en las fases iniciales del proceso de desarrollo, asignar a los
atributos el modificador de acceso private, y a los métodos, el modificador public, si bien
este último se puede cambiar posteriormente a private si se detecta que no es necesario
el uso del método por parte de otras clases.
En cuanto a los tipos de datos, se pueden utilizar los tipos básicos de datos de UML, que
son los siguientes:
E boolean: permite almacenar solo los valores true (verdadero) o false (falso).
También, es posible usar los tipos de datos de lenguajes orientados a objetos, como Java,
a saber:
E float o double: hace referencia a un número real, es decir, con decimales o bien un
número que permite un rango de valores mayor que el tipo int.
E char: permite almacenar un solo carácter, que puede ser una letra, un dígito, un ca-
rácter especial (+, Q, $, :, etc.) o una secuencia de escape (como, por ejemplo, el
carácter de nueva línea, Un).
Además, en el caso de los métodos, se puede indicar el tipo del valor devuelto, si es que
el método devuelve algún valor, y para cada uno de los datos que recibe el método (pará-
metro), el nombre del parámetro y su tipo de dato, siguiendo la siguiente sintaxis:
Así, se podría indicar que el atributo código de Libro es de tipo entero (int), que los atribu-
tos /SBN, título y editorial son de tipo cadena de caracteres (String) y que el atributo pres-
tado es de tipo booleano (boolean), dado que un libro solo puede estar prestado (que se
representa con valor true para el atributo prestado) o no prestado (que se representa con
1,5 [OMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
valor false para este atributo). Por otro lado, para los métodos prestar y devolver, podría
indicarse que devuelven un valor de tipo boolean, que informaría si el préstamo o la de-
volución ha tenido lugar o no, respectivamente.
En el caso de la clase Cuenta, podría indicarse que su atributo número es de tipo cadena
de caracteres (String) y que su atributo saldo es de tipo número real (float). En el caso de
los métodos ingresarDinero y extraerDinero, estos no devuelven nada, pero ambos recibi-
rán un parámetro, que se puede llamar importe, que debe ser de tipo número real (float).
Se podría entonces representar las clases Libro y Cuenta en un diagrama UML con la in-
formación antes expuesta tal y como se muestra en la Figura 5.15.
Libro
- código: int
Cuenta
- ISBN: String
- número: String
- título: String
- saldo. float
- editorial: String
- prestado: boolean + ingresarDinero (importe: float)
ME 5.4.1.Agregación
Una agregación es un tipo de relación entre clases que representa un objeto compues-
to por otros objetos. En esta relación, se distingue la parte que representa el todo, que
recibe el nombre de compuesto, y las diferentes partes que lo componen, que reciben el
O Ediciones Paraninfo
nombre de componente.
La agregación implica que solo puede existir una instancia del objeto agregado si existe
al menos una instancia relacionada de alguno de los componentes. Por ejemplo, no tiene
sentido hablar de un plan de estudios si no tiene al menos una asignatura.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES |NFORMÁT|C A Y (
Las relaciones de agregación se representan uniendo el compuesto con sus partes com-
ponentes mediante una línea colocando un rombo con fondo blanco al lado del compues-
to, como se muestra en la Figura 5.16.
Figura 5.16. Diagrama UML que muestra una relación de agregación entre la clase de tipo compuesto
Cuadro y sus partes o componentes Marco, Cristal y Lámina.
M 1: uno.
E 0..*: cero o varios. También se puede representar solo con el símbolo del asterisco
(*)
1..*: uno o varios.
E N: el número indicado.
Así, el 1 al lado de la clase Marco se debe interpretar como que un cuadro posee un
O Ediciones Paraninfo
solo marco, el 1 al lado Cristal se debe interpretar como que un cuadro posee un_único
cristal, y el 1 al lado de Lámina, como que un cuadro posee una única lámina. El 1 si-
tuado al lado de Cuadro y del rombo de la línea que representa su relación con Marco
debe interpretarse como que un marco pertenece a un solo cuadro y lo mismo ocurre
con Cristal y Lámina.
1,Ú [OMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
En la Figura 5.17, se muestra otro ejemplo de agregación, en el que se indica que un pla-
to se elabora con un conjunto de varios ingredientes. El 1..* al lado de Ingrediente indica
que un plato consta de uno o varios ingredientes. El * al lado de Plato indica que un in-
grediente puede estar presente en ninguno o en varios platos. Se puede asignar o no un
nombre a cualquier agregación, en cuyo caso, este nombre se debe colocar al lado de la
línea que une las dos clases. Así, en el diagrama UML que se observa en la Figura 5.17,
se ha asignado el nombre se elabora con a la agregación, aunque no sea obligatorio.
Plato |
se elabora con
l"
Ingrediente M
ME 5.4.2. Composición
La agregación fuerte o composición es un tipo especial de agregación en la que la mul-
tiplicidad al lado de la clase que representa el compuesto es siempre 1 y en la que la
existencia de los componentes depende del compuesto. De esto se puede deducir que,
a diferencia de la agregación, la composición impone dos restricciones:
2. Si se elimina el compuesto, hay que eliminar todos los componentes vinculados a él.
Otro ejemplo de composición (Figura 5.19) sería aquel en el que se relaciona una ven-
tana de una interfaz gráfica de usuario con sus partes, de tal manera que toda ventana
consta de un único panel, puede tener o no una cabecera y dispone de dos barras de
desplazamiento (una por la izquierda y otra por la derecha).
5. ELABORACIÓN DE DIAGRAMAS DE CLASES |NFORMÁTICA Y COM | U N
PlanEstudios
título
fechaAprobación
númeroCréditos
consta de
1.
Asignatura
código
nombre
tipo
créditos
0..1
Figura 5.19. Diagrama UML que muestra una relación de composición entre la clase 'compuesto' Ventana
y sus componentes Cabecera, BarraDesplazamiento y Panel.
Solución
O Ediciones Paraninfo
Entre las clases País y Región se debe establecer una relación de tipo composición por-
que un país es un compuesto que consta de varios componentes (regiones) y no pueden
existir regiones sin un país asociado. Además, se cumplen las dos restricciones que im-
pone una composición respecto a una agregación: >
] MUN'CACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Cabe afirmar, por tanto, que la clase Cuenta es una generalización de las subclases
CuentaCorriente y CuentaDeAhorro, y que CuentaCorriente es una especialización de la
superclase Cuenta porque una cuenta corriente es algo más especializado que una cuen-
ta, pues posee todas las características de una cuenta, pero también una característica
adicional, que es el saldo medio.
Este tipo de relaciones se representan uniendo mediante una línea cada subclase con su
superclase y esta línea lleva en el extremo un triángulo apuntando a la superclase, como
se puede observar en la Figura 5.20.
Cuenta
- número: String
- saldo: float
| CuentaCorriente | | CuentaDeAhorro |
O Ediciones Paraninfo
Figura 5.20. Diagrama UML que muestra una relación de generalización-especialización entre la superclase
Clase y sus subclases CuentaCorriente y CuentaDeAhorro.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁTICA Y C rM '
La herencia hace referencia al hecho de que las superclases poseen no solo sus atribu-
tos o métodos propios, sino que también heredan los de la superclase correspondiente.
Así, la subclase CuentaCorriente tiene un saldo medio (atributo propio), pero también tie-
ne un número de cuenta y un saldo, atributos que hereda de la superclase Cuenta.
Argot técnico
El hecho de emplear el término herencia para referirse al hecho de que las subclases poseen,
además de sus atributos y métodos propios, los de la superclase con la que se vinculan,
está directamente relacionado con el hecho de que a la superclase se le llame también clase
padre, y a las subclases, clases hijas.
Las asociaciones pueden ser de diferentes tipos en función del número de clases que
vinculan. El número de clases que se vinculan por medio de una asociación recibe el
nombre de grado de la relación. En función de su grado, existen los siguientes tipos de
relaciones:
E Reflexivas: son las relaciones de grado 1, es decir, aquellas que vinculan a una cla-
se consigo misma.
E Binarias: son las relaciones de grado 2, esto es, aquellas que vinculan dos clases.
E Ternarias, cuaternarias...: son las relaciones de grado 3, 4..., es decir, aquellas que
vinculan tres, cuatro... clases, respectivamente.
Toda asociación se representa mediante una línea que une las clases vinculadas y lo
más habitual es asociarle un nombre, que suele ser un verbo y se debe escribir sobre di-
cha línea.
Una asociación reflexiva se representa por medio de una línea que une una clase consigo
misma. Por ejemplo, en una aplicación puede haber una clase Empleado y se podría querer
reflejar la jerarquía de la plantilla de la empresa, esto es, se podría querer saber, por cada
persona empleada, qué empleado o empleada es su jefe directo, que será solamente uno,
en caso de tenerlo. Para determinar las cardinalidades o multiplicidades, habría que plan-
O Ediciones Paraninfo
E Un empleado es jefe de ninguno o varios empleados, por lo que una de las cardina-
lidades será 0..* o *. Esto quiere decir que un empleado tiene cero o muchos su-
bordinados.
| l (»OMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
esJefeDe
0..1
Empleado
- NIF: String
- nombre: String
- dirección: String
- fecNac: Date
Figura 5.21. Diagrama UML que muestra una relación reflexiva de Empleado, la cual refleja el jefe directo
de cada persona empleada, en caso de que lo tenga.
Una relación binaria se representa por medio de una línea que une las dos clases. Por
ejemplo, puede haber una relación entre Cliente y Pedido, que indique por cada cliente
los pedidos que este ha realizado. En este caso, para la determinación de las cardinali-
dades, habría que plantearse lo siguiente:
E Un cliente puede realizar uno o varios pedidos, por lo que se pondrá 1..* al lado de
la clase Pedido.
Cliente
- NIF: String
. realiza 4..+| - referencia: String
- nombre: String
- fecha: Date
- teléfono: String
Figura 5.22. Diagrama UML que muestra una asociación binaria entre Cliente y Pedido, que refleja los pedidos
que realiza cada cliente.
ta de flecha que indica en qué sentido es navegable la relación. Así, en el diagrama que
se muestra en la Figura 5.23, en el que se ha dibujado una punta de flecha al lado de la
clase Pedido, se indica que la relación es navegable de Cliente a Pedido, lo que quiere de-
cir que a partir de un cliente se puede acceder a todos sus pedidos, pero no es posible
saber por cada pedido qué cliente lo ha realizado.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁT|CA Y CO/X 1
Cliente
- NIF: String
realiza 1..+| - referencia: String
- nombre: String
- fecha: Date
- teléfono: String
Figura 5.23. Diagrama UML que muestra una asociación binaria entre Cliente y Pedido navegable solo
de Cliente a Pedido, lo que quiere decir que a partir de un cliente se puede acceder a todos los pedidos
que este ha realizado.
El código que se genera a partir de este diagrama de clases debe ser similar al que se
muestra a continuación, en el que, como se puede observar, en la clase Cliente se ha
creado un atributo de tipo ArrayList para registrar sus pedidos.
7 )
S public class Pedido (
9 private String referencia;
10 private Date fecha;
AaE
1e
Si la punta de flecha se hubiese colocado solo al lado de Cliente, querría decir que, a par-
tir de un pedido, se puede saber el cliente que lo ha realizado, pero no es posible conocer
para un cliente todos los pedidos que ha solicitado. En este caso, se incluiría en la clase
Pedido un atributo de tipo objeto de la clase Cliente, como se puede observar en el siguien-
te código.
6 )
7 public class Pedido (
O Ediciones Paraninfo
Si se dibujaran puntas de flecha tanto al lado de Cliente como al lado de Pedido, enton-
ces la relación sería navegable en los dos sentidos, y en el código generado, aparecería
en Cliente el atributo que indica el conjunto de pedidos que ha realizado, y en Pedido, el
atributo que indica el cliente que ha realizado el pedido.
Las relaciones de grado mayor que 2 (ternarias, cuaternarias, etc.) se representan me-
diante un rombo que une a las clases relacionadas. Sería posible tener, por ejemplo,
una relación ternaria entre las clases Atleta, Prueba y Fecha, que indica, para los parti-
cipantes en una competición de atletismo, qué día o días han participado en cada prue-
ba. Para la determinación de las cardinalidades en el caso de las relaciones ternarias, se
debe tomar un objeto de cada dos clases y sería necesario plantearse con cuántos obje-
tos de la otra clase como mínimo y como máximo puede estar relacionado ese par de ob-
jetos. En este caso, habría que plantearse lo siguiente:
E Dados un atleta y una prueba, ese atleta en esa prueba ha podido participar ningún
día o varios días, por lo que se indicará la cardinalidad O..* o * al lado de Fecha.
E Dados un atleta y una fecha, ese atleta ese día puede haber competido en ninguna
o varias pruebas, por lo que se indicará la cardinalidad 0..* al lado de Prueba.
E Dadas una prueba y una fecha, ese día en esa prueba han podido participar ningu-
no o varios atletas, por lo que se indicará la cardinalidad O..* al lado de Atleta.
En la Figura 5.24 se muestra el diagrama UML que representa la relación ternaria arri-
ba descrita.
Atleta
participaEn Prueba
- dorsal: int
- código: int
- nombre: String
- descripcion: String
- equipo: String
|—
Fecha
- fecha: Date
Figura 5.24. Diagrama UML que muestra una asociación ternaria entre Prueba, Atleta y Fecha, que refleja el día
0 los días en los que participa cada atleta en cada prueba.
O Ediciones Paraninfo
Hay algunas ocasiones en las que es necesario almacenar información acerca de las
asociaciones. La manera de reflejar esto es por medio de la creación de lo que se cono-
ce como una clase asociativa. A modo de ilustración, aquí se describe la relación binaria
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMAT|CA Y CIA]»
entre las clases Pedido y Artículo. Un pedido tiene como atributos su referencia y fecha,
y un artículo, su código, descripción y precio (PVP). En un pedido, se pueden solicitar uno
o varios artículos y un artículo puede ser solicitado en ninguno o en varios pedidos. Esto
se representa mediante el diagrama UML que se muestra en la Figura 5.25.
Artículo
Figura 5.25. Diagrama UML que muestra una asociación binaria entre Pedido y Artículo, que refleja el artículo
0 los artículos solicitados en cada pedido.
Cuando un cliente realiza un pedido, este puede solicitar un número diferente de unida-
des para cada uno de los artículos incluidos en dicho pedido, por ejemplo, en un pedi-
do podría solicitar 5 bolígrafos azules de la marca X y 20 gomas de borrar de la marca Y.
Este atributo, que hace referencia al número de unidades de cada artículo que se solici-
ta en cada pedido, y que se llamará cantidad, ¿dónde se sitúa: en la clase Pedido o en
la clase Artículo? No tiene sentido colocarlo en la clase Pedido porque en un pedido se
pueden solicitar cantidades distintas por cada uno de los artículos incluidos en él. Así,
en este ejemplo, se solicitan dos cantidades: 5 (bolígrafos) y 20 (gomas de borrar). Asi-
mismo, no es posible en un objeto de una clase asignar varios valores al mismo atributo.
Tampoco tiene sentido colocar este atributo en la clase Artículo porque un mismo artí-
culo se puede solicitar en varios pedidos y la cantidad que se solicita de dicho artículo
en cada pedido puede ser diferente. Por ejemplo, la goma de borrar de la marca Y puede
estar incluida en tres pedidos: en uno de ellos, se han podido solicitar 20 unidades; en
O Ediciones Paraninfo
de unidades de ese artículo que se solicitan en ese pedido. La manera de reflejar esta
información es creando una clase asociativa vinculada a la relación entre Pedido y Artí-
culo. Se podría llamar a esta clase LíneaPedido, que en la vida real hace referencia a la
parte de cada pedido correspondiente a cada artículo solicitado en dicho pedido. Tenien-
do esto en cuenta, en esta clase asociativa se colocará el atributo cantidad, que indica el
número de unidades que se solicitan de cada artículo en cada pedido. Una clase asocia-
tiva se representa como una clase normal, pero se une mediante una línea discontinua a
la asociación a la que se vincula, como se muestra en la Figura 5.26.
Artículo
Pedido
: - código: String
- referencia: String — | 0* incluye T
! - descripción: String
- fecha: Date E
H - PVP: float
LíneaPedido
- cantidad: int
Figura 5.26. Diagrama UML que muestra, además de una asociación binaria entre Pedido y Artículo, una clase
asociativa, a la que se ha llamado LíneaPedido. Esta indica, por artículo solicitado en cada pedido, la cantidad
o número de unidades que de ese artículo se han solicitado en ese pedido.
P
Recuerda .
Si se establece una analogía entre los diagramas de clases y los diagramas
entidad-relación, que se emplean para representar conceptualmente la información que
se debe almacenar en una base de datos, se podría decir que una clase asociativa de un
diagrama de clases es un constructo que se crea para albergar lo que en un diagrama
entidad-relación serían los atributos de una relación. De esta forma, una clase asociativa
contiene los atributos que corresponderían a una relación en un diagrama entidad-relación.
El Por cada artículo, se desea registrar su código, descripción, precio de venta al públi-
co (PVP) y stock o existencias que hay de ese artículo en cada supermercado.
mercados.
También se pueden vincular clases asociativas a relaciones de grado mayor que 2 (ter-
narias, cuaternarias, etc.). Si, por ejemplo, para el diagrama UML de la Figura 5.24, se
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁTICA Y (:OM v
quisiera almacenar por cada día en el que un atleta participa en una prueba, el resultado
obtenido por ese atleta ese día en esa prueba, habría que vincular una clase asociativa
a la relación ternaria con el atributo resultado de tipo String. En este atributo, se almace-
naría el tiempo que ha empleado en la carrera, la longitud saltada, la distancia a la que
ha llegado el elemento lanzado, etc. La Figura 5.27 muestra el diagrama UML con la cla-
se asociativa.
Fecha
- fecha: Date
Atleta
Prueba
- dorsal: int
-] - código: int
- nombre: String
- descripcion: String
- equipo: String
Participacion
- resultado: String
Figura 5.27. Diagrama UML que muestra una asociación ternaria entre Prueba, Atleta y Fecha, que refleja
el día o los días que participa cada atleta en cada prueba. Además, se ha vinculado una clase asociativa
a dicha relación ternaria con el objetivo de almacenar el resultado obtenido por cada atleta en cada prueba
en la que ha participado.
Cada tipo de vehículo consta de varias piezas (carrocería, motor, ruedas, etc.) y
cada una de estas piezas se puede descomponer en piezas más pequeñas, y así
sucesivamente, hasta llegar a piezas indivisibles, como por ejemplo, un espejo o un
tornillo.
Se consideran piezas todos los componentes de un tipo de vehículo independien-
temente de su tamaño, por lo que se considera que un vehículo es una pieza en sí
misma, pero también lo es un simple tornillo.
Dada una pieza, puede que esta no forme parte de ninguna pieza superior (tal es el
caso de un vehículo) o que forme parte de varias piezas superiores.
Se desea conocer:
Por cada pieza que consta de piezas inferiores, el número de unidades de cada pie-
za inferior que incluye cada pieza superior; así, no solo interesa saber que un de-
terminado tipo de vehículo consta de motor y de ruedas, sino también cuántos
motores tiene ese tipo de vehículo (uno) y cuántas ruedas (4, por ejemplo).
Solución
Para poder manejar toda esa información, se debe crear una clase Pieza, y para reflejar la je-
rarquía de piezas, se debe establecer una relación reflexiva. Así pues, con el objeto de deter-
minar las cardinalidades o multiplicidades de esta relación, hay que plantearse las siguientes
cuestiones:
Una pieza se descompone o divide en ninguna o varias piezas, por lo que una de las
cardinalidades es 0..* o *. Las piezas indivisibles no se dividen en piezas más pe-
queñas.
Una pieza está incluida en ninguna pieza (si la pieza es un tipo de vehículo) o en va-
rias, por lo que la otra cardinalidad también es 0..* 0 *.
Por otro lado, para saber el número de unidades de cada subpieza en que se divide cada
pieza, se necesita vincular, a la relación reflexiva, una clase asociativa albergando ese nú-
mero, que indicará, por cada pareja de pieza-subpieza, el número de subpiezas que con-
tiene cada pieza (véase la Figura 5.28).
se divide en
- Composición
Pieza
- unidades: Integer
- código: String
- nombre: String
- stock: Integer
- stockMínimo: Integer
O Ediciones Paraninfo
Figura 5.28. Diagrama UML que muestra una relación reflexiva de la clase Pieza, necesaria para conocer
la relación jerárquica existente entre las piezas. Se precisa de una clase asociativa para conocer el número
de subpiezas que contiene cada pieza.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES Y COM
INFORMÁTICA
Las interfaces suelen contener métodos comunes a varias clases, de forma que todas
las clases que implementan una interfaz o que establecen una relación de realización
con una interfaz, heredan de dicha interfaz todos sus métodos.
Por ejemplo, se podría tener las clases Figura y Fracción que implementan la interfaz
Comparar que incluye un método esMayorQue(), el cual permite determinar si una figura
es mayor que otra (tiene un área mayor que otra) o si una fracción es mayor que otra. A
su vez, la clase Figura tiene tres subclases: Rectángulo, Triángulo y Círculo. Una relación
de realización se representa gráficamente uniendo mediante una línea con trazado dis-
continuo cada clase con la interfaz que implementa y esta línea tiene en el extremo un
triángulo apuntando a la interfaz, como se puede observar en la Figura 5.29.
«interface»
Comparar
Figura
Figura 5.29. Diagrama UML que muestra una relación de realización entre Figura y la interfaz
Comparar y otra relación de realización entre Fracción y la interfaz Comparar. Además,
la clase Figura es la superclase de las subclases Rectángulo, Triángulo y Círculo.
O Ediciones Paraninfo
1. Las clases de interfaz se usan para modelar la interacción entre el sistema y sus ac-
tores. Esta interacción consiste normalmente en recibir y mostrar información o pe-
dirla a las personas usuarias o sistemas externos. Estas clases se deben limitar a
describir la información y peticiones que se intercambian los actores y el sistema a
través de ellas. Cada clase de interfaz se debería asociar a, al menos, un actor, y vi-
ceversa. Se usan estas clases para modelar ventanas, formularios, impresos, etc.
3. Las clases de control realizan la coordinación y el control sobre otros objetos del
sistema. Toda la dinámica del sistema es modelada por clases de control. Se aso-
cia una clase de control a cada aplicación y esta clase modela la dinámica del sis-
tema delegando trabajo a otras clases.
OOO
Clase de interfaz Clase de control Clase de entidad
E Papyrus: es una herramienta mucho más avanzada que se puede integrar en Eclipse
como un módulo y que permite realizar todo tipo de diagramas UML.
E Modelio: es una aplicación de modelado UML de código abierto que permite crear
todo tipo de diagramas y, además, generar el código correspondiente.
Nada más acceder a la página web indicada, se ofrecen dos opciones: crear un nuevo
diagrama o abrir un diagrama (véase la Figura 5.31).
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁTICA Y COM l )
E2 Device
Change storage
Tras seleccionar la opción Create New Diagram, en la ventana que aparece a continua-
ción, se asigna un nombre al diagrama y se deja el tipo de archivo por defecto: de tipo
XML con la extensión .drawio. Se puede elegir, además, el tipo de diagrama que se de-
sea crear; en este caso, UML. Por último, se hace clic en el botón Create (Figura 5.32).
b Grupo en el hogar
Figura6-2.drawio — Figurab-3.drawio
O Ediciones Paraninfo
E Área de paletas: en esta área situada en la parte izquierda de la pantalla, hay dis-
tintas paletas disponibles para seleccionar los elementos que se desean dibujar
en nuestro diagrama. Hay varias paletas con distintos nombres para crear distin-
tos tipos de diagramas: General, Flowchart, Entity Relation, UML, UML 2.5, etc. En
el ejemplo que aquí se expone, se hará uso de las paletas UML y UML 2.5. Al ha-
cer clic en cualquiera de ellas, se pueden visualizar todas las formas de que dis-
pone cada paleta. Si no está disponible la paleta UML 2.5, se debe pulsar en el
enlace + More Shapes de la esquina inferior izquierda de la pantalla y, en la sec-
ción Software de la ventana que aparecerá a continuación, se marca la casilla de
verificación correspondiente a UML 2.5, tras lo cual aparecerá esta paleta en el
área de paletas.
B DiagramaPrueba.drawio - diagra: X
€ > C 4 appdiagrams.net E a n * º :
1I Aplicaciones d Bookmarks [ Natur E Nucleus M XAMPP G LaguíaGranCanari.. 9 Hombres: Nunca es... » Lista de lectura
DiagramaPrueba.drawio
File Edit View Arrange Extras Help
- 10%- Aaáa
Page View
) Backgruun
O Shadow
Options
Connection Arrows
Connection Points
Guides
Autosave
Paper Size
A4 (210 mm x 297 mm)
Figura 5.34. Pantalla principal de diagrams.net, donde se distinguen tres áreas de izquierda a derecha:
área de paletas, área de edición y área de propiedades.
O Ediciones Paraninfo
Para practicar el uso de esta herramienta, aquí se va a crear un diagrama de clases que
refleja información sobre el personal y los clientes de una empresa, así como los artícu-
los que esta vende y los pedidos que realizan los clientes de estos artículos (véase su
representación en la Figura 5.35).
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMATICA Y <|í' /MX'—'1
Persona
- NIF: String
- nombre: String
- dirección: String
- teléfono: String
Empleado
- puesto: String
realiza :
(¿_ + gestiona
| Artículo
Pedido
, - 0.* incluye 1..*) - código: String
0.* | referencia: String
- - descripción: String
- fecha: Date
LineaPedido - precio: float
2 -soÑ5 i. ——m—.—m <q
- cantidad: int
Figura 5.35. Diagrama de clases creado con diagrams.net que refleja el personal y los clientes de una empresa
y los pedidos que estos hacen de los artículos que vende la empresa.
Para crear una clase, tan solo hay que hacer clic sobre uno de los dos siguientes ico-
nos de la paleta UML: , en función de si se quiere reflejar atributos y métodos de
cada clase o solamente sus atributos, respectivamente. Aquí, se hará clic con el botón iz-
quierdo del ratón en el primero de estos iconos para crear las clases. Aparecerá entonces
una clase en el área de edición. Después, hay que colocarse sobre la palabra Classna-
me y escribir el nombre que se desea dar a la clase, por ejemplo, Pedido. Una vez he-
cho esto, hay que colocarse sobre cada campo e indicar su visibilidad, nombre y tipo,
por ejemplo: — referencia: String (Figura 5.36). Para añadir otro atributo, se seleccio-
na este con el botón izquierdo del ratón, se activa en el menú contextual la opción
Duplicate y aparecerá duplicado debajo del último método, pero se puede subir, arras-
trándolo con el botón izquierdo del ratón pulsado hasta el área de atributos que se quie-
ra. ES posible asimismo cambiar su visibilidad, nombre y tipo. Si no se desea indicar
O Ediciones Paraninfo
métodos para alguna clase, es posible colocarse sobre todos los métodos que haya y
eliminarlos, eligiendo la opción Delete del menú contextual o pulsando la tecla Supr. Se
puede modificar el tamaño de una clase, seleccionándola y pulsando sobre la sección
superior de la clase (donde se muestra el nombre) y arrastrando cualquiera de las fle-
chas que se muestran.
| i (,OMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Pedido
- referencia: String
- fecha: Date
Para dibujar una asociación sin indicación de navegabilidad entre dos clases, se puede
clicar en el elemento de la sección UML de la paleta que se muestra en la Figura 5.37.
parent child
Association 1
Al hacer clic sobre este elemento, este pasará al área de edición y se debe arrastrar
pulsando cada uno de sus extremos hasta el borde de la clase donde se quiere unir la
línea. Una vez hecho esto, se sobrescriben las palabras parent y child con las cardinali-
dades o multiplicidades que corresponda. En este caso, para la relación entre Pedido y
Artículo, una de las cardinalidades debe ser 0..* y la otra, 1..*. Aunque en un diagrama
de clases UML, no es obligatorio asignar nombre a las relaciones, es muy conveniente.
Para ello, se puede hacer uso del elemento Text de la sección General de la paleta: se
hace clic en este elemento y aparecerá en el área de edición. Se sobrescribe la palabra
Text con el texto incluye y se arrastra este hasta colocarlo sobre la línea de la relación.
De este modo, quedarán unidas las clases Pedido y Artículo (Figura 5.38).
Artículo
Pedido
0.* incluye 4..4 - código: String
- referencia: String
- descripción: String
- fecha: Date
- precio: float
Figura 5.38. Parte del diagrama de clases en el que se muestran las clases Pedido y
Artículo unidas por medio de una asociación llamada incluye.
O Ediciones Paraninfo
Como se puede observar en la Figura 5.35, hay una clase asociativa vinculada a la rela-
ción incluye llamada LíneaPedido. En este ejemplo, se creará esta clase como cualquier
otra, y para unirla a la relación incluye, se usará una línea con trazado discontinuo me-
diante el elemento Dashed Line de la sección General de la paleta (Figura 5.39).
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMAT|CA Y GÍ))M
Dashed Line
Después, se pueden crear las clases Persona, Cliente y Empleado y para reflejar la rela-
ción de generalización-especialización entre la superclase Persona y las subclases Clien-
te y Empleado, se utilizará el elemento llamado Generalization de la sección UML de la
paleta (Figura 5.40).
Extends——>
Generalization
Tras hacer clic en este elemento, se arrastra el extremo con el triángulo hasta que toque
la superclase Persona y el otro extremo hasta tocar una subclase. Conviene eliminar la
leyenda Extends de la flecha, para lo que hay que colocarse sobre esta leyenda y pulsar
la tecla Supr.
Por último, se pueden establecer las relaciones binarias realiza y gestiona entre Cliente
y Pedido y entre Empleado y Pedido, respectivamente, y la relación reflexiva es jefe de la
clase Empleado.
Una vez terminado el diagrama, se debe guardar activando la opción de menú File > Save,
o bien File > Save as, esta última opción si se quiere dar un nombre distinto del indicado
con anterioridad. Se creará un archivo editable desde diagrams.net en la ubicación indi-
cada de tipo XML y con extensión .drawio.
También es posible exportar el archivo a diferentes formatos: de tipo imagen (PNG, JPEG
y SVG), PDF, HTML, etc. Para ello, hay que seleccionar la opción de menú File > Export as.
Una vez instalado, para su uso, es necesario abrir la vista Papyrus para que aparezcan
en pantalla todos los elementos necesarios para la creación de diagramas UML. Para
que se abra dicha vista, se selecciona la opción de menú Window > Perspective > Open
Perspective > Other > <Papyrus>.
j/'x_¡¡ Y COMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Con objeto de generar un diagrama de clases, lo primero que se debe hacer es crear un
proyecto, para lo que hay que seleccionar la opción de menú File > New > Papyrus Pro-
ject. En la ventana que se muestra en la Figura 5.41, se marca la casilla de verificación
correspondiente a UML:
Architecture Contexts:
«e ing.
m|
Ia UML
4 ] € Systems Engineering
CE SysML 1.6
Architecture Viewpoints:
] € Software Analysis
] € Software Design
Después de hacer clic en el botón Next, en la siguiente ventana, se debe asignar un nom-
bre al proyecto, por ejemplo, DClasesEmpresa. En la ventana siguiente (Figura 5.42), es
necesario indicar el tipo o los tipos de diagramas que se desea incluir en el proyecto. En
este caso, solo se indica que se desea hacer diagramas de clases marcando la casilla
de verificación Class Diagram.
Initialization information
Select root element name and representation kind
Representation name
44 Activity Diagram
M PA Class Diagram
F Class Tree Table
E Communication Diagram
El Component Diagram
Tras pulsar en el botón Finish, aparece una ventana (Figura 5.43), con varias áreas:
E Explorador del modelo (Model Explorer), en la parte izquierda debajo del explorador
de proyectos; en esta área, se permite navegar por los diferentes elementos del
modelo. Se creó un modelo asociado al proyecto en el proceso de creación del pro-
yecto Papyrus.
E Outline, en la parte inferior izquierda; en esta área, se muestra una miniatura del
diagrama que se está creando.
E Editor de diagramas, en la parte central; esta área se emplea para el dibujo del dia-
grama correspondiente.
Figura 5.43. Vista Papyrus de Eclipse con los elementos necesarios para crear diagramas de clases
repartidos en diferentes áreas.
Con el propósito de practicar el uso de esta herramienta, aquí se va a crear el mismo dia-
O Ediciones Paraninfo
grama de clases que se creó con diagrams.net en el Apartado 5.6.1 (Figura 5.35).
Para crear una clase hay que hacer clic sobre el elemento con el nombre Class de la paleta
y luego clicar en el editor de diagramas. Seleccionada la clase, en el área de propiedades,
se escribe el nombre que se desea dar a la clase en el campo Name, por ejemplo, Pedido.
| A H1/ COMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Figura 5.44. En la sección Properties, se pueden ver y modificar las propiedades de una clase
(su nombre, visibilidad, etc.).
Para indicar los atributos de la clase, se debe hacer clic en el botón j de la sección
Owned attribute del área de propiedades. En la ventana que aparece entonces (Figura
5.45), se debe indicar, por cada atributo, su nombre en Name, su visibilidad, su tipo de
dato en Type y su valor por defecto, si lo tiene, en Default value. Además, si el atributo
tiene un valor único, se elige la opción true en ls unique. En cuanto al tipo de dato, la ma-
yoría de los tipos de datos primitivos de Java están disponibles en el paquete «EPackage,
ModelLibrary» Primitive Types. Se dispone de más tipos de datos, como el de tipo fecha
(EDate) en el paquete «ModelLibrary» EcorePrimitive Types, y se accede a estos al hacer
clic en el botón (-+ que aparece al lado de Type.
Otue Ofalse
Otmue Ofalse
Otme Ofalse
private
O Ediciones Paraninfo
UML | Comments:
Figura 5.45. Ventana que muestra las propiedades del atributo referencia de
la clase Pedido: su nombre, tipo de dato y visibilidad son las más importantes.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁTICA Y CO/X1
Una vez proporcionada la información de los atributos, para que esta se pueda visualizar
en el diagrama, es necesario arrastrar cada atributo del explorador del modelo hasta la
clase a la que pertenece. De este modo, la clase Pedido se verá en el diagrama como se
muestra en la Figura 5.46.
E Pedido
E - referencia: String [1]
EZ - fecha: EDate [1]
Para dibujar una asociación con clase asociativa vinculada, se debe hacer clic en el icono
de la sección Edges de la paleta con el nombre Association Class y luego se debe pinchar
sobre una de las clases y posteriormente sobre la otra. Aparecerá entonces una asocia-
ción dirigida entre las dos clases y la clase asociativa, a la que se debe dar el nombre
LíneaPedido y asignarle el atributo cantidad de tipo integer.
Al hacer clic sobre la línea que representa la asociación, se mostrarán las propiedades
de la asociación, las cuales se pueden modificar. En Name aparece el nombre de la clase
asociativa, LíneaPedido, que se va a mantener. Se deben cambiar las multiplicidades o
cardinalidades a cada lado de la asociación, de modo que sean 1..* al lado de Artículo y
0..* al lado de Pedido. Para que estas se muestren en el diagrama, además de ponerlas
en Multiplicity, se deben escribir en el campo Name, como se muestra en la Figura 5.47.
[ Properties X [ )|
úl LíneaPedido |
UML Name [LínezPedido J
Comments
o Label YY
s;ñ'º Is abstract Otme - Ofalse Is active Otue - Ofalse
e
— ls derived Otue - Ofalse
[ public -
Advance Visibility
Rulers And Grid .
Ovmed atiribute E-
Advanced —
EZ cantidad : Integer
Figura 5.47. Propiedades de la asociación con clase asociativa LíneaPedido entre Pedido y Artículo.
X1/ KOMUNICAC'ONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Tras estos cambios, la asociación entre Pedido y Artículo con la clase asociativa LíneaPe-
dido quedará como se refleja en la Figura 5.48.
Figura 5.48. Representación de las clases Pedido y Artículo unidas por medio de una asociación con una clase
asociativa vinculada llamada LíneaPedido.
A continuación, se crearán las clases Persona, Cliente y Empleado. Una vez creadas es-
tas tres, se debe establecer la relación de generalización existente entre ellas, ya que
Persona es superclase de Cliente y Empleado. Para ello, se hace clic sobre Generalization
en la sección Edges de la paleta y luego se clica en la subclase y la superclase.
Se puede ahora establecer la relación binaria realiza entre Cliente y Pedido. A tal fin,
se debe hacer clic sobre Association (Directed) en la sección Edges de la paleta y lue-
go sobre cada una de las clases vinculadas (Cliente y Pedido). Aparecerá entonces una
asociación con flecha (dirigida) entre las dos clases. Al hacer clic sobre la línea que re-
presenta la asociación, se puede modificar sus propiedades. En Name se escribe el nom-
bre realiza. Si no se quiere que la asociación sea navegable o tenga punta de flecha, se
seleccionará la opción false en Navigable. Finalmente, se escribe en Multiplicity las cardi-
nalidades correspondientes: 0..* al lado de Pedido y 1 al lado de Cliente. Las propieda-
des de esta asociación deben establecerse como se indica en la Figura 5.49.
[ Properties X mieics
7 realiza
UML Name realiza |
Comments Label [ 1
Profile “ : -
Siye Visibility public
ñ ppearance Member End Member End
— Name [ pedido | Name cliente |
Rulers AndGrid — Label [ | Label ]
Advanced — =
Type El Pedido Cel e E Criente E [l (2 [2e]
Owner | Association | Oe Association -
Navigable Otue Ofalse Navigable Otue Ofalse
Aggregation | none v Aggregation none v
+ AlquilarPelícula()
+ DevolverPelícula()
— E A
Película m - nombre : string m“º':t mº_;"'“
“o:ly
; - dirección; str
-g
TE -emai sirirg
mtníglm - numSocio : string
<aPodición: - ecAla: e - ecAlquier: dale
::b¿ro?.:;;n “ pesamión: d — - fecD£*reu'sta :sting
I'$ínjr$t oc$ncwpel a manan 1| +gelSanción): foat - lecDevie: sting
al
integer): boolean + selSanción(in importe: toa) 1| +setFecDeealín value:string) 00
EsOl + CompararNIF(in NIF: string): bool... '
Stock0: nteger — | NIF: string, in CodPel: integer) — C
+ Alquilerfin
S .Zim=>->--———mmm——m—— ,
| .. .>=—---4-G e +| + ComprobarSanción(: foat
—P__—“ -
Figura 5.50. Diagrama de clases creado con Papyrus en Eclipse que refleja los empleados y clientes
de una empresa y los pedidos que estos hacen de artículos que vende la empresa.
Una vez finalizado el diagrama, se debe guardar seleccionando la opción de menú File >
> Save. También es posible exportar el diagrama a diferentes formatos, seleccionando
el modelo en el explorador de proyectos y la opción del menú contextual Export... y lue-
go la opción Papyrus > Export All Diagrams. Se puede exportar a formato GIF, BMP JPEG,
JPG, SVG o PDF.
Al ejecutar por primera vez la herramienta, aparece una ventana de bienvenida desde la
que es posible acceder a diferentes guías. Aquí se va a realizar el diagrama de clases de
la Figura 6.18 de la Unidad 6.
A Kf/ £OMUNICAC'ONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Una vez se cierra la ventana de bienvenida, para comenzar a trabajar con Modelio, se
debe crear un proyecto seleccionando la opción de menú File > Create a project. En el
cuadro de diálogo que aparece entonces (Figura 5.51), se debe dar un nombre al pro-
yecto y se puede proporcionar una descripción de este. Después, se activa la casilla de
verificación Java project para posteriormente generar el código Java correspondiente al
diagrama de clases. Para crear el proyecto, se pulsa sobre el botón Create the project.
Create a project
Enter project details
ProyectoVideoclub
En la parte izquierda de la ventana, aparece entonces una carpeta con el nombre del
proyecto. En el proyecto, se creará un paquete con el nombre Videoclub. Para ello, se
despliegan las dos carpetas con el nombre del proyecto y en el menú contextual de la
carpeta inferior, se elige la opción de menú Create element > Package, como se puede
observar en la Figura 5.52.
diesProjectX |
— Search -QemEC ioM1h
Persectves Package
= =a
te= mode 1e , - | as
€O7 EN 1 ) Interface
4 É ProyectoVideoclub E sa
> E LocalModule Create diagram... =
a e PmyedoV¡den(qu Create element » % e
; m Component
$, Addstereotype E UseCase
Figura 5.52. Para crear un diagrama en Modelio, una vez creado un proyecto, hay que
seleccionar la carpeta correspondiente al proyecto y la opción del menú contextual
Create element > Package.
O Ediciones Paraninfo
A continuación, dentro de este paquete, se indica que se desea crear un diagrama, acti-
vando la opción del menú contextual Create diagram (véase la Figura 5.53).
leX
f- Model 32 1
€O7 EE -
a ,g-—,_l ProyectoVideoclub
D $ LocalModule
Create diagram...
Create element »
Modeler Module »
» JavaDesigner »
Figura 5.53. Para crear un diagrama en Modellio, tras crear un paquete, hay que
seleccionar el paquete y elegir la opción del menú contextual Create diagram.
Es necesario indicar el tipo de diagrama que se quiere crear, en este caso, un diagrama
de clases, y asignarle un nombre (Figura 5.54).
Creation wizard
Creste 2 Class diagram
Identification
la e UML/BPMN Name | DiagramaClasesVideoclub|
Gn Owner | Videoclub
Activity diagram
ES| BPMN Collaboration diagram
BPMN Process diagram
CommunicationT diagram obsener
—
f| Dependency Diagram (automatic) N
Deployment diagram
Object diagram
/| Package Structure Diagram (automatic)
Sequence diagram
(2 State Machine diagram
ConcreteSubject — ConcreteObserver
/| Sub-Packages Structure Diagram (automatic)
- subjectState: string | — BC - cbsenerState- string
Use Case diagram
+ getState(): string | + update)
Tras clicar en el botón OK, aparecerá la pantalla principal de Modelio, donde se pueden
distinguir varias áreas:
E Explorador del modelo, en la parte izquierda, donde se muestran todos los elemen-
O Ediciones Paraninfo
tos del diagrama por los que se puede navegar haciendo doble clic sobre cada uno
de ellos.
M Área de detalles, en la parte inferior; en esta área, se muestran diversos tipos de in-
formación en función de la pestaña seleccionada. Así, si se hace clic sobre la pesta-
ha Properties, se muestran las propiedades del elemento seleccionado del diagrama;
si se hace clic sobre Diagrams, se muestra un desplegable con los diagramas del
proyecto.
Lo primero que se debe hacer es indicar que el paquete que se ha creado con el nombre
Videoclub es un elemento Java para posibilitar posteriormente la generación de código
Java a partir del diagrama de clases. A tal fin, seleccionado el paquete, en el área de de-
talles en la pestaña Properties, se marca la casilla de verificación Java element.
Para crear una clase en el diagrama, tan solo hay que pinchar sobre el icono — de la
paleta Class model y hacer clic en la posición deseada del área de edición. O bien en la
pestaña Properties, o bien seleccionando la opción del menú contextual de la clase Edit
element, se pueden ver y madificar las propiedades de la clase. En la pestaña Properties,
se le asigna a la clase el nombre Película. Para añadirle atributos a la clase, se pulsa sobre
el icono 4a: de la paleta Class Model y, luego, se clica sobre la clase. En la pestaña Proper-
ties del área de detalles, se puede asignar las propiedades necesarias al atributo: nombre,
tipo de dato y visibilidad. En la Figura 5.55, se muestran las propiedades para el atributo
código de la clase Película.
Type T | integer
Visibility Private
Multiplicity min 1
Multiplicity max 1
Value |
Access mode — Read/Write
Type constraint |
Abstract |
Class
Derived
Ordered
Unique
Target is class
Para asignar métodos a una clase, se debe pulsar sobre el icono 00 de la paleta Class
Model y luego se hace clic sobre la clase. Se puede observar que al llevar a cabo esta
operación han aparecido automáticamente para la clase los métodos de selección (get)
y acceso (set) para todos sus atributos. Esto es así porque el módulo Java Designer que
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMATICA Y 0Í)) y
viene incorporado en Modelio tiene una propiedad por defecto que indica que se generen
estos métodos de manera automática para todas las clases. Si se quiere eliminar esta
posibilidad porque hace excesivamente densos los diagramas, se puede seleccionar la
opción de menú Configuration > Modules, hacer clic sobre el módulo Java Designer, y en
sus propiedades, que aparecen en la parte inferior de la ventana, asignar el valor Never
a la propiedad Accessor generation dentro del apartado Automation, como se muestra en
la Figura 5.56.
Project configuration
Project properties
Audit ] Informations
| Work models| Modules [ Libraries
| URLs ]
= Project's modules
Modules installed in the project.
Enable Scope Name Version Status — License Compatibility
User - E ModelerModule — 9200 Started Free — Compatible
User — $ JavaDesigner — 3000 Started Free — Compatible
No obstante, también es posible eliminar cualquier atributo o método asignado a una cla-
se colocándose sobre él con el ratón y pulsando la tecla Supr o la opción del menú con-
textual Delete selection.
Edition of Operation
Operation
Operation parameters
Name
ERE
Multiplicity — Passingmode — Value
47 retum 1
»P CodPel 1 n
<
00 + CompararCódigo
(CodPel in : integer): boolean
Description CIHTML
[KEnter note text here>
Figura 5.57. Ventana en la que se visualizan y modifican las propiedades de los métodos
de una clase al seleccionar el método correspondiente y la opción del menú contextual
Edit element. En la pestaña Operation, se debe asignar al método su nombre, tipo y
visibilidad, y se deben definir sus parámetros y valor de retorno, si procede.
Después, se crean del mismo modo los restantes métodos de la clase Película (dismi-
nuirStock, aumentarStock y getStock) y, a continuación, la clase Videoclub con sus dos
métodos AlquilarPelícula y DevolverPelícula.
Para crear relaciones entre clases, se debe clicar sobre el tipo de relación que nos inte-
resa en la paleta Class Model y luego en la clase origen y en la clase destino. En el caso
de la relación entre Videoclub y Película, se hará clic sobre el icono =— que se usa
para una asociación o relación genérica. A continuación, se deben modificar las propieda-
des de la asociación (nombre, navegabilidad y multiplicidades mínimas y máximas al lado
de cada clase), seleccionando la opción del menú contextual Edit element. En el caso de
esta relación, sus propiedades deberán quedar como se muestra en la Figura 5.58.
Edition
Association End
Properties | Notes
and constraints | Audit | Java _|
; be -
=— UML - AssociationEnd Property — | To: Película e
Fa Desioner ;Asmciat¡on name — <null> |
— Navigable a 1)
E Modeler Module — | |
Target <null> N Película
Association type Association - Association |
Multplicity min — 1 o -
Mu)tí6licity max TI hl hd
Visibility N/A Public |
ls changeable N/A IB
Accessors N/A Read/Wiite -
O Ediciones Paraninfo
Abstract N/A m l
Figura 5.58. Ventana en la que se visualizan y modifican las propiedades de las relaciones establecidas
entre clases, seleccionando la relación correspondiente y la opción del menú contextual Edit element.
En la pestaña Properties se puede asignar un nombre a la relación, los roles, cambiar el tipo de asociación
e indicar las multiplicidades mínimas y máximas al lado de cada clase.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁTICA
Y COM
Después, se crea el resto del diagrama de clases siguiendo los pasos que se han indicado.
Al final, se obtiene un diagrama de clases como el que se muestra en la Figura 5.59.
Ventana Videoclub
=+
+ AlquilarPelícula() 1 1 | + AlquilarPelícula(in NIF: string, in CodPel: integer): boolean
+ DevolverPelícula() + DevolverPelicula(in NIF: string, in CodPel: integer): boolean
1 1 1
Cliente =
— NIF.: string
Película E - nombre : string
s - dirección : string
- ] - teléfono : string
_sé1sv:'s:'? - email - string Q
- numSocio : string Alquiler
. si¡¡ngng
añoProducción - integer ANe - fecAlqui-ler date
- ae - fecDevPrevista - string
“St0eK rteger o _ ; : ++ getSan ción(): float - fecDereal : string
: as…mp…lmrstoc…ko in CodPel: integer): boolean setSanción(in importe: float) '<1 * Eac EA ale: stmmg) 00
Der -
+ aumentarStock + CompararNIF(in NIF: string): bool...
le + Alquiler(in NIF: string,
e in CodPel: integer) — CO
+ getSto
¡*_qe —
t$tock_0integer
1 = | + ComprobarSanción(): float
Figura 5.59. Diagrama de clases creado en Modelio que refleja la información que es necesario gestionar
en un videoclub.
Para poner esto en práctica, aquí se usará Modelio, partiendo del diagrama de clases de
la Figura 5.59. Esto se puede llevar a cabo gracias a que, al instalar Modelio, esta he-
rramienta incorpora un módulo llamado Java Designer, una de cuyas utilidades es la ge-
neración de código Java. Para ello, es necesario haber especificado que las clases del
diagrama, o bien el paquete que incluye todo el diagrama de clases, es un elemento
Java. A tal fin, se selecciona el paquete o la clase correspondiente, y en la pestaña Java
del área de detalles, se activa la casilla de verificación Java element.
Para generar el código Java correspondiente a una clase, se debe seleccionar dicha clase en
el explorador del modelo y elegir la opción del menú contextual Java Designer > Generate,
como se muestra para la clase Película en la Figura 5.60.
EO 1O
"e 1
=:_ E Creste diagram...
4 E ProyectoVideoclu e Create element »
» E LocalModule E ModelerModule »
4 M Proyectovideon Java Designer D ME
a E pmyme E =
« E Videociu 4 Addstereoy [£ Update model from sourcesii necessany
O Ediciones Paraninfo
> [ E ctetrntpe. E
Delete PÉ Cresteajava atribute property
— eº| » — Delete element
vm*1 PP Cresteajava association end property
E
b c|¡gu_%ñ Cut element Ctrl+X
Se habrá creado, en ese instante, un archivo con el codigo fuente Java correspon-
diente, llamado Pelicula.java. Este archivo se podrá encontrar en la carpeta src/
Videoclub de la carpeta dedicada al proyecto, creada por Modelio en el equipo. Se pue-
de visualizar el contenido de este archivo seleccionando para la clase la opción del menú
contextual Java Designer > Edit. En la Figura 5.61, se puede observar el código genera-
do para la clase Película, que debe ser revisado y modificado convenientemente. Como
se puede ver en el código, Modelio ha añadido alguna importación y anotaciones propias.
También es reseñable que ha creado un atributo de tipo lista para reflejar la navegabi-
lidad de la relación entre Película y Alquiler, es decir, para registrar todos los alquileres
que se han realizado para cada película.
DiagramaClasesVideoclub “% Película 2
package Videoclub;
import java.util.ArrayList;
import java.util.List;
import com.modeliosoft.modelio.javadesigner.annotations.objid;
Bobjid (*O
Es posible definir la ingeniería inversa como «el proceso llevado a cabo con el objetivo
de obtener información o un diseño a partir de un producto, con el fin de determinar cuá-
les son sus componentes y de qué manera interactúan entre sí y cuál fue el proceso de
5. ELABORACIÓN DE DIAGRAMAS DE CLASES |NFORMÁT|CA Y ( '
Argot técnico
Aplicada al software, la ingeniería inversa consiste en llevar a cabo las tareas de la
ingeniería del software en un sentido contrario al habitual. Teniendo en cuenta que las fases
del desarrollo más importantes de una aplicación informática son, en este orden, análisis,
diseño y programación, se trata de partir del resultado de la tarea de programación, o sea,
del código fuente, y obtener a partir de este la documentación que se debería haber obtenido
durante las fases de diseño y análisis.
Aquí, se aplicará la ingeniería inversa para obtener a partir de una aplicación escrita en
Java el diagrama de clases correspondiente. A tal efecto, se utilizará Modelio.
€OT 1E
E*
- Create diagram...
Figura 5.62. Para realizar ingeniería inversa a partir de archivos con código fuente de Java en Modelio, se debe
crear un proyecto Java y activar la opción del menú contextual Java Designer > Reverse > Reverser Java
application from sources.
O Ediciones Paraninfo
tran los archivos con el código fuente. Una vez seleccionada la carpeta, aparece una ven-
tana como la de la Figura 5.63, en la que se deben marcar las clases deseadas.
—. JX'. Y COMUNICACIONES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
Java Reverse
Choose the files to reverse (.java)
Círculo.java
[2¡ Cuadrado.java
[Z) Figurajava
% Punto java
[2! Rectángulo java
E] Triángulo java
Granularity
Complete
< Previous
Figura 5.63. Ventana en la que se seleccionan las clases para las que
se desea aplicar la ingeniería inversa.
En esta ventana, hay que pulsar la tecla Next y, también, en la siguiente, y finalmente la
tecla Reverse. Entonces, aparece un aviso indicando que el tipo String no es reconocido,
pero la ingeniería inversa se lleva a cabo y, de hecho, se muestran inmediatamente en el
explorador del modelo todas las clases incluidas en el paquete. A continuación, es posi-
ble desplegar cada clase y visualizar todos sus elementos (atributos, operaciones y rela-
ciones), como se puede observar en la Figura 5.64 para la clase Circulo.
a . ingenierfainversageometría
00 +getRadio0: double
00 +perimetro(): double
Luego, es necesario crear un diagrama de clases, para lo que se activa la opción del menú
contextual de la carpeta Create diagram, y se le asigna un nombre. El siguiente paso será
arrastrar, desde el explorador del modelo hasta el área de edición del diagrama, las clases
y los elementos de estas que se deseen (atributos, métodos y relaciones).
5. ELABORACIÓN DE DIAGRAMAS DE CLASES INFORMÁTICA Y (/O/X'1 1
Si se arrastran todas las clases con sus atributos y las relaciones existentes entre ellas,
se obtiene un diagrama de clases, como el de la Figura 5.65, en el que, no obstante, se
han modificado las cardinalidades para la asociación entre las clases Figura y Punto. Se
mostraban a ambos lados las cardinalidades 0..1, pero deben ser, por un lado, 1 al lado
de Punto porque toda figura tiene un punto como centro y, por otro lado, * al lado de Fi-
gura, porque un punto puede ser el centro de más de una figura.
Figura Punto
— - centro |
-color: <no type> ——> - x: double
u 1 | -y : double
Cuadrado !
Figura 5.65. Diagrama de clases sin métodos resultado del proceso de ingeniería inversa en Modelio.
Se puede observar que, en el diagrama se ha establecido una relación entre Figura y Punto,
a la que se ha asignado el nombre centro, que es el nombre del atributo de la clase Pun-
to dentro de la clase Figura que indica el punto que constituye el centro de la figura. Ade-
más, la punta de flecha al lado de Punto indica que esta relación es navegable solo desde
Figura hasta Punto. Esto quiere decir que, dada una figura, es posible conocer el punto
que constituye su centro, pero dado un punto, no es posible conocer las figuras para las
cuales ese punto es su centro. Esto sería posible si en la clase Punto hubiese un atribu-
to de tipo lista con objetos de la clase Figura, pero esto no ocurre en este ejemplo, como
se puede observar en el código de la clase Punto.
O Ediciones Paraninfo
Conceptos básicos de
la orientación a objetos
El lenguaje UML
Generación de diagramas
de clases a partir de código
(ingeniería inversa)
229
ACTIVIDADES FINALES 5. ELABORACIÓN DE DIAGRAMAS DE CLASES
E Actividades de comprobación
5.1. ¿Cuál es la característica de un lenguaje de programación por la que es posible
definir varios métodos para la misma clase con el mismo nombre, pero diferen-
te número y/o tipo de parámetros y/o tipo de valor devuelto?
a) Polimorfismo.
b) Modularidad.
c) Encapsulamiento.
d) Ocultamiento.
a) Nodo.
b) Artefacto.
c) Componente.
d) Caso de uso.
5.5. ¿Qué diagramas muestran la funcionalidad del software desde el punto de vista
del usuario?
a) Diagramas de casos de uso.
b) Diagramas de clases.
c) Diagramas de actividades.
d) Diagramas de componentes.
5.6. Si a la hora de definir una clase, se quiere que sus atributos sean accesibles
desde la propia clase y sus subclases, se tendrá que asignar a los atributos el
O Ediciones Paraninfo
modificador de acceso:
a) Public.
b) Protected.
c) Private.
230 d) Package.
5.7. La propiedad por la cual una subclase tiene, además de sus atributos y métodos
propios, los atributos y métodos de su superclase, recibe el nombre de:
a) Jerarquía.
b) Herencia.
c) Especialización.
d) Generalización.
5.8. El tipo de relación entre una clase de tipo compuesto y una clase componen-
te tal que el tiempo de vida de los componentes tiene que coincidir con el del
compuesto, recibe el nombre de:
a) Asociación.
b) Agregación.
c) Composición.
d) Generalización.
5.9. ¿Es posible en un diagrama de clases UML reflejar información que en lugar de
ser propia de una clase pertenezca a una asociación entre clases?
a) No, noes posible.
b) Sí, sí es posible y esto se puede llevar a cabo simplemente asignando atributos a
la relación.
C) Sí, sí es posible y esto se puede llevar a cabo creando una clase asociativa vincu-
lada a la relación, de manera que esta clase contenga los atributos propios de la
relación.
d) Ninguna de las respuestas anteriores es correcta.
5.10. El proceso de obtener un diagrama de clases a partir del código fuente recibe el
nombre de:
a) Ingeniería.
b) Reingeniería.
c) Ingeniería inversa.
d) Ingeniería invertida.
E Actividades de aplicación
5.11. ¿Cuál es la diferencia entre los diagramas de clases y los diagramas de objetos?
5.12. ¿Para qué se usan los diagramas de casos de uso? ¿De qué elementos consta un
diagrama de casos de uso?
5.13. ¿En qué consiste la visibilidad de un atributo o de un método? ¿Qué valores puede
O Ediciones Paraninfo
5.14. ¿Cómo se representan en un diagrama de clases las relaciones de grado mayor que
2 (ternarias, cuaternarias, etc.)? ¿Pueden tener estas relaciones atributos asociados?
En caso afirmativo, ¿cómo se representa esta información? 231
5.15. ¿A qué se refieren los conceptos de generalización y especialización?
Profesor
esCapitalDe
Asignatura
Figura 5.66. Diagrama de clases que refleja, por un lado, la ciudad capital de cada país, y por otro,
las asignaturas que imparte cada profesor y el grupo al que imparte cada asignatura.
5.17. ¿Por qué en el siguiente diagrama de clases la línea que una la relación vende con
la clase Venta esta dibujada con un trazado discontinuo? ¿Qué información propor-
cionan los atributos stock y precio de la clase Venta? ¿Por qué se ha creado la clase
Venta?
Supermercado
- stock: int
- precio: float
Figura 5.67. Diagrama de clases que refleja los artículos que vende cada supermercado.
5.18. ¿Qué tipos de clases de análisis se pueden identificar en una aplicación? ¿Para qué
se usa cada uno de estos tipos de clases?
5.19. Realiza un diagrama de clases sin métodos para una empresa dedicada al alquiler de
automóviles, teniendo en cuenta los siguientes requisitos:
E Cada cliente puede ser avalado por otro cliente de la empresa. Un cliente puede
avalar a varios.
5. ELABORACIÓN DE DIAGRAMAS DE CLASES ACTIVIDADES FINALES
E Una reserva la realiza un único cliente, pero puede involucrar varios coches.
E Todo coche tiene siempre asignado un determinado garaje. De cada coche, se re-
quiere registrar su matrícula, modelo, color y marca.
E Cada eserva se realiza en una determinada agencia. De cada agencia, se requie-
re registrar su nombre y dirección.
E Sobre cada garaje, es necesario conocer su código único, ubicación y capacidad
o número máximo de coches que caben en el garaje.
5.21. Realiza un diagrama de clases sin métodos para una entidad bancaria, de la que es
necesario saber su CIF, nombre y dirección. Tras una entrevista se ha obtenido la si-
guiente información:
Cada cuenta corriente tiene asociados uno o más clientes. Sin embargo, es posi-
ble que varios clientes con la misma cuenta (por ejemplo, personas de la misma
familia: padres e hijos menores) no puedan realizar las mismas operaciones.
Cada cliente puede tener varias cuentas. En cada una de ellas puede realizar ope-
raciones distintas.
Cada cuenta puede o no tener uno o varios recibos domiciliados.
5.22. Elabora un diagrama de clases sin métodos para una empresa que pertenece a un
grupo nacional de agencias que se dedican a la venta al por mayor, de acuerdo con
las siguientes especificaciones:
Los clientes de la empresa pueden ser mayoristas, minoristas e, incluso, clientes
del propio grupo de empresas. Acerca de todos los clientes, se debe conocer su
NIF, nombre y apellidos, dirección y teléfono. Además, para los mayoristas se ne-
cesita saber el almacén y el número de tarjeta bancaria. En el caso de los mino-
ristas, interesa el número de cuenta bancaria; y en el caso de clientes del propio
grupo, la actividad a la que se dedican.
Cuando un cliente hace un pedido, al que se asigna un número y del que se re-
gistra asimismo su fecha, se genera un documento con la relación de los artículos
solicitados. De cada artículo se precisa saber su código, nombre, precio, existen-
cias actuales y el número mínimo y máximo de existencias recomendables, así
como el número de unidades de ese artículo solicitadas en el pedido. Cada ar-
tículo lleva asociado un tipo de IVA, que puede ser del 4, del 10 o del 21 %. Por
otra parte, algunos artículos tienen asociado un envase, del que se desea alma-
cenar su código, descripción y precio.
El pedido puede ser modificado como consecuencia de devoluciones, siniestros,
cambios de última hora en el criterio del cliente, etcétera.
Al final de cada mes, la empresa pone en marcha el proceso de facturación que
consiste en crear una factura por cada cliente, en la que se incluyen los pedidos
correspondientes a ese mes. Las facturas se numeran y llevan una fecha asociada.
En los pedidos intervienen los llamados vendedores o comisionistas, que son em-
pleados de la empresa cuyo propósito es promocionar y vender los artículos. En
cada pedido interviene un solo comisionista. Al final de cada mes, reciben sus li-
quidaciones correspondientes. Cada vendedor-comisionista tiene un porcentaje
sobre el total de sus ventas y una determinada antiguiedad. Aparte de estos da-
tos, se precisa registrar su NIF, nombre y apellidos, teléfono y NSS (número de
Seguridad Social). Se considera venta solamente si se ha facturado.
O Ediciones Paraninfo
234
5. ELABORACIÓN DE DIAGRAMAS DE CLASES ACTIVIDADES FINALES
5.24. Además de los tipos de relaciones entre clases que se han estudiado en el Apartado 5.4
de esta unidad, en un diagrama de clases, se pueden reflejar relaciones de depen-
dencia entre clases. Busca información sobre este tipo de relaciones y responde a
las siguientes preguntas: ¿qué significado tienen las relaciones de dependencia entre
clases?, ¿cómo se representan?
5.27. Averigua en qué consiste la restricción ordered en un diagrama de clases. ¿Para qué
se emplea? Describe cómo se representa.
Diagrams.net - https://www.diagrams.net/
(Sitio web sobre la herramienta de modelado de código abierto app.diagrams.net)
O Ediciones Paraninfo
Modelio - https://www.modelio.org/
(Sitio web sobre la herramienta de modelado UML de código abierto Modelio)
235
O
Q
<
Q
_
—
Introducción
En la Unidad 5, se vio que el lenguaje UML se utiliza para elaborar diferentes tipos de
diagramas que son necesarios para realizar las tareas de análisis y diseño de una apli-
cación informática. Entre ellos, se estudiaron en detalle los diagramas de clases, los
cuales son diagramas estructurales que se usan para representar la parte estática del
sistema. Paralelamente, esta unidad se dedicará a los diagramas de comportamiento, es
decir, aquellos que reflejan la parte dinámica del sistema.
En primer lugar, se presentan los diagramas de casos de uso, que son fundamentales en
todo el proceso de desarrollo del software y reflejan las funciones encomendadas al sis-
tema desde el punto de vista de quienes utilizan la aplicación. Después, se caracterizan
los diagramas de interacción (diagramas de secuencia y de colaboración), cuya función
es informar con detalle sobre el comportamiento de cada caso de uso. Por último, se
estudian los diagramas de estados y los de actividades.
E 6.1.Diagramas de comportamiento
Los diagramas de comportamiento UML sirven para visualizar, especificar, construir y do-
cumentar los aspectos dinámicos de un sistema. La Tabla 6.1 recoge los siete tipos de
diagramas de comportamiento disponibles y la utilidad de cada uno de ellos.
Tabla 6.1. Tipos de diagramas de comportamiento que se pueden construir en lenguaje UML
y su uso
Diagrama Uso
Diagramas de casos de uso Describen las funcionalidades del sistema desde el punto de
: : vista de la persona usuaria. Son fundamentales, pues se usan :
: como punto de partida para los demás diagramas. :
: Diagramas de actividades : Se emplean para especificar paso a paso una operación com- :
: : pleja. Sirven para modelar el flujo de un caso de uso o entre :
: casos de uso. E
: Diagramas de colaboración “ Muestran un conjunto de objetos, los enlaces entre ellos y los
: : mensajes que se reciben y se envían entre ellos. :
O Ediciones Paraninfo
Se puede afirmar que los casos de uso sirven de guía en un conjunto de actividades de
desarrollo:
E Planificación de iteraciones.
Una característica muy relevante de los casos de uso es que proporcionan trazabilidad
al sistema, esto es, por medio de ellos, se puede determinar qué parte del sistema se
ha creado a partir de cada caso de uso: qué parte del diagrama de clases, qué parte del
programa, qué casos de prueba, etc. De esta manera, se puede detectar al realizar un
cambio en un caso de uso, qué clases y componentes es necesario modificar.
2. Los actores se determinan observando las personas usuarias directas del sis-
tema, las personas responsables del uso o mantenimiento del sistema y otros
O Ediciones Paraninfo
sistemas que interactúan con el sistema en cuestión. Hay que tener en cuenta
que una misma persona puede desempeñar varios papeles distintos y, por lo tan-
to, se representaría por medio de distintos actores. Cada actor lleva asociado un
nombre que describe el papel que desempeña. Los actores se representan como
se muestra en la Figura 6.1, escribiéndose el nombre del actor en la parte inferior.
LA
/ FAN
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMATICA Y (r '
Usuario
Un diagrama de casos de uso para una aplicación ofrece un panorama de todos los ca-
sos de uso y sus relaciones. Por lo tanto, en él, se representa toda la funcionalidad que
proporciona el sistema. Todos los casos de uso se colocan en el interior de un recuadro
que representa al sistema que se está construyendo, de manera que los actores quedan
fuera de este recuadro, pues se encuentran fuera del sistema.
Entre los elementos integrantes de un diagrama de casos de uso (casos de uso y acto-
res) se pueden establecer varios tipos de relaciones:
E Relación de comunicación: este tipo de relaciones se usa para indicar qué actor o
actores intervienen en cada caso de uso. Se representa mediante una línea que
une el actor con el caso de uso.
E Relación de uso o inclusión: se crea este tipo de relación cuando se dispone de va-
rios casos de uso con una serie de actividades comunes. En estos casos, se crea
un caso de uso que incluye la actividad o actividades duplicadas y, luego, se indica
que los otros casos de uso incluyen o hacen uso de este nuevo caso de uso que se
crea. Esta relación de inclusión se representa mediante una línea con trazado dis-
continuo y una punta de flecha hacia el caso de uso con la actividad o actividades
duplicadas. Esta línea lleva la leyenda o el estereotipo «include».
E Relación de extensión: este tipo de relación se emplea cuando un caso de uso ori-
gen (A) amplía o extiende la funcionalidad del caso de uso destino (B), es decir, in-
cluye algunos pasos adicionales con respecto al caso de uso destino. Esta relación
se representa mediante una línea con trazado discontinuo y una punta de flecha ha-
cia el caso de uso destino. Esta línea lleva la leyenda o el estereotipo «extend». El
caso de uso A no es imprescindible que ocurra y, cuando ocurre, realiza funciones
adicionales a las del caso de uso B.
A modo de ejemplo, en una entidad bancaria en la que los clientes pueden realizar di-
ferentes operaciones con sus cuentas, como transferencias, ingresos y extracciones de
dinero, se dispondría de tres casos de uso correspondientes a esas tres funcionalidades
(transferencia, ingreso y extracción). Para poder realizar las operaciones de transferencia
y extracción, los clientes se tienen que identificar. Por lo tanto, se podría crear un caso
O Ediciones Paraninfo
de uso que incluyera esa parte común a esos dos casos de uso, que se puede llamar
identificación. En el caso de las transferencias, también se pueden realizar por internet,
por lo que habría que crear el caso de uso transferencia por internet, que incluiría algu-
nos pasos adicionales con respecto al caso de uso transferencia. El diagrama de casos
de uso quedaría como el que se muestra en la Figura 6.2.
T/ £OMUNICACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Sistema bancario )
Transferencia
por internet
Transferencia
Cliente Identificación
- -- <<include>>
Figura 6.2. Diagrama de casos de uso para un sistema bancario en el que las y los
clientes pueden realizar ingresos, extracciones o transferencias de dinero.
Un caso de uso debe ser simple, inteligible, claro y conciso. Lo habitual es que haya
pocos actores asociados a cada caso de uso. Hay una serie de preguntas clave que es
preciso plantearse al crear un diagrama de casos de uso:
Además de obtener el diagrama de casos de uso para una aplicación, es necesario des-
cribir para cada caso de uso lo siguiente:
E El flujo básico, es decir, el flujo de eventos ordenados por los que pasa el caso de
uso.
E Los caminos alternativos, es decir, las posibles desviaciones con respecto al flujo
básico.
Los casos de uso permiten comprobar la verificación y validación del sistema. En cuanto al
O Ediciones Paraninfo
si lo que hace el sistema lo hace bien, es decir, si lo hace como la persona usuaria quiere
que se haga.
Las operaciones que deberá realizar la aplicación son las que se indican a continuación:
Agregar excompañero/a: para esta operación, se deberán suministrar todos los da-
tos indicados anteriormente.
Eliminar cena: para esta, se deberá suministrar el año de la cena que se desea
eliminar.
Eliminar asistente: para esta, habrá que suministrar el año de la cena y el nombre
del asistente que al final no va a acudir a la cena.
No puede haber dos cenas el mismo año. Se deberá realizar la comprobación perti-
nente a la hora de agregar una cena.
O Ediciones Paraninfo
La persona encargada de organizar una cena debe ser una previamente agregada al
programa. Esto se deberá comprobar al agregar una nueva cena.
Todos los asistentes a las cenas deben ser antiguos compañeros y compañeras ya
agregados al programa. Esto se deberá comprobar al agregar un nuevo asistente.
IMUNICACIONES
! .K…—“ Á ! E 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
A continuación, se detallan cada uno de los casos de uso considerando las restricciones
indicadas:
Agregar cena: se solicita la fecha de la cena. Si ya hay cena ese año, se mostrará
un mensaje de error; si no la hubiera, la aplicación pedirá al usuario que ingrese el
lugar de la cena y el nombre de la persona que la organiza. Si el nombre de esta no
se corresponde con el de un excompañero o excompañera existente, aparecerá un
mensaje de error; en el caso contrario, se guardan los datos de la cena.
Eliminar cena: se pide el año de la cena que se desea eliminar. Si no hubiera una
cena ese año, se mostrará un mensaje de error; en caso contrario, se eliminará
la cena.
Consultar cena: para este caso de uso, se solicita el año de la cena. En caso de que
no haya ninguna cena ese año, aparecerá un mensaje de error; en caso contrario,
se mostrarán la fecha de la cena, el lugar donde se realizará y el nombre de la per-
sona organizadora.
Agregar asistente: se pide que se indique el año de la cena. Si no hay cena en ese
año, se mostrará un mensaje de error; en el caso contrario, se preguntará el nom-
bre del nuevo asistente a la cena. En caso de que el nombre del asistente no coin-
cida con alguno de las y los excompañeros agregados, saldrá un mensaje de error.
En caso de que ya esté anotado ese asistente para la cena, se indicará mediante
un mensaje; en caso contrario, se añadirá dicho asistente a la cena.
asistente.
Solución
Agenda
excompañeros/as
Agregar
excompañero/a
Consultar
excompañero/a
Agregar
cena
Eliminar
cena
Consultar
N cena
Usuario
Agregar
asistente
Eliminar
asistente
Consultar
asistentes
Tras la introducción de los datos, el sistema comprueba que no haya una perso-
na con el mismo nombre y, si es así, lo añade a la agenda y muestra un mensa-
je de confirmación en pantalla.
Se vuelve a solicitar al usuario o usuaria la selección de una operación.
COMUNCACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
E Caminos alternativos:
El Precondición: la agenda tiene que estar creada y deben existir excompañeras o ex-
compañeros agregados.
El Flujo básico:
dl El usuario o usuaria solicita consultar los datos de un antiguo compañero o
compañera.
El sistema comprueba si hay alguna persona con ese nombre y muestra sus
datos: teléfono y correo electrónico.
4. Se vuelve a solicitar a la persona usuaria la selección de una operación.
El Caminos alternativos:
Si en el paso 3 anterior se detecta que no existe ninguna persona con ese nom-
bre, se muestra un mensaje que el usuario o usuaria debe aceptar y se pasa al
paso 4.
El Precondición: la agenda tiene que estar creada y debe existir algún excompañero
agregado o excompañera agregada.
Flujo básico:
de El usuario o la usuaria solicita introducir una nueva cena.
2 Se pide a la persona usuaria la introducción de la fecha y el lugar de la cena.
El sistema comprueba que no haya ninguna cena ese mismo año.
Se pide a la persona usuaria la introducción del nombre de la persona organiza-
dora de la cena.
O Ediciones Paraninfo
El sistema comprueba que haya alguna persona con el nombre del organizador
de la cena y si la hay, se añaden los datos de la cena y se muestra un mensaje
de confirmación en la pantalla.
E Caminos alternativos:
— Sienel paso 3 se detecta que ya existe una cena ese año, se muestra un men-
saje que el usuario o usuaria debe aceptar y se pasa al paso 6.
E Poscondición: la agenda dispone de una cena más o del mismo de número de cenas
si esta no se ha podido añadir.
3. El sistema comprueba que haya una cena ese año y, si es así, se elimina la
cena y se muestra un mensaje de confirmación en la pantalla.
El Caminos alternativos:
— Sienel paso 3 se detecta que no existe ninguna cena ese año, se muestra un
mensaje que el usuario o usuaria debe aceptar y se pasa al paso 4.
El Precondición: la agenda tiene que estar creada y deben existir cenas y excompañe-
ras y excompañeros agregados.
El Flujo básico:
1. El usuario o usuaria solicita agregar un asistente a una cena.
2. Se pide al usuario o usuaria la introducción del año de la cena.
El sistema comprueba que esa persona no figure ya entre los asistentes a la cena. >
D
! lf' *OMUN'CACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
El Caminos alternativos:
— Sienel paso 3 se detecta que no existe ninguna cena ese año, se muestra un
mensaje que la persona usuaria debe aceptar y se pasa al paso 8.
— Sienel paso 5 se detecta que no existe ninguna persona con ese nombre, se
muestra un mensaje que el usuario o usuaria debe aceptar y se pasa al paso 8.
— Sienel paso 6 se detecta que esa persona ya figura entre los asistentes a la
cena, se muestra un mensaje que el usuario o usuaria debe aceptar y se pasa
al paso 8.
Una vez dentro de la aplicación, tras indicar que se desea crear un nuevo diagrama y la
ubicación donde se quiere almacenar, aparece una pantalla como la de la Figura 5.34.
Para crear un caso de uso, hay que hacer clic con el botón izquierdo del ratón sobre el
icono correspondiente a un caso de uso en la paleta UML. Ese icono aparece entonces
en el área de edición y se puede escribir en él su nombre. Para los actores, se debe ha-
cer clic sobre el icono del actor y asignarle su nombre.
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMATICA Y CO/X
Tabla 6.2. Elementos que forman parte de los diagramas de casos de uso con su icono y paleta
correspondiente en diagrams.net
Elemento
: Actor Í UML
: E Actor
<<include>>
<<extend>>
Sistema UML
Una vez creados los actores y los casos de uso, hay que establecer las relaciones entre
ellos. Para las relaciones de comunicación, se utiliza el icono Association/Connector de la
paleta UML 2.5 que se muestra en la Tabla 6.2. Se puede cambiar el grosor de la línea,
seleccionándola y reduciendo su número de puntos en la pestaña Style de las propieda-
O Ediciones Paraninfo
Transferencia
_por internet
<<exterid>>
,
Transferencia
- -<<include>>
- a( dentificación
Cliente <<include3
Figura 6.4. Diagrama de casos de uso para una entidad bancaria creado con diagrams.net.
Ya solo faltaría indicar los límites del sistema, pues debe recordarse que los actores no
forman parte del sistema en un diagrama de casos de uso. A tal fin, se hace uso del ele-
mento Frame de la paleta UML, como se muestra en la Tabla 6.2. Se debe clicar en este
elemento, escribir el nombre que se quiere dar al sistema donde pone frame y mover el
marco al lugar del área de edición. Allí se dimensionará este marco lo necesario para
que abarque todo el diagrama excepto los actores. De esta manera, se habrá conseguido
un diagrama de casos de uso completo como el de la Figura 6.2.
Tabla 6.3. Elementos que forman parte de los diagramas de casos de uso con el símbolo
correspondiente en Papyrus SysML y la sección de la paleta donde se encuentra
En primer lugar, se colocará en el diagrama el elemento que señaliza los límites del sis-
tema. Para ello, se utilizará el elemento Subject de la sección Nodes de la paleta. Una
vez seleccionado este elemento, y al hacer clic sobre el área de edición, aparecerá una
ventana como la de la Figura 6.5, en la que habrá que indicar el tipo de elemento que se
desea crear. Se debe elegir el tipo Component.
[SY Artifact
/ Association
É AssociationClass
Class
“= Collaboration
f CommunicationPath
Etoménaú¡
DataType
[ DeploymentSpecification
(S) Device
FEl Enumeration
(E] ExecutionEnvironment
O)
Cuando se añaden elementos al diagrama, se deben de colocar todos ellos, excepto el actor,
dentro de los límites del sistema. Para crear un caso de uso, hay que clicar sobre el icono
correspondiente en la sección Nodes de la paleta. Luego, se debe hacer clic en el área deli-
mitada por el sistema y se escribe el nombre del caso de uso. En el caso de los actores, se
debe pulsar sobre el icono del actor en la misma sección de la paleta y asignarle su nombre.
1,Ú 1»OMUNICACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Una vez creados los actores y los casos de uso, se deben establecer las relaciones entre
ellos. Para las relaciones de comunicación, se hará uso del icono Association de la sec-
ción Links de la paleta que se muestra en la Tabla 6.3. Solo hará falta pulsar sobre este
icono, luego hacer clic en el actor y el correspondiente caso de uso en el área de edición.
=|
- Sistema bancario
«extend»
Cliente
- Identificación
' Extracción
Figura 6.6. Diagrama de casos de uso para una entidad bancaria creado con Papyrus SysML en Eclipse.
7Ziv
EFO
Argot técnico
El nombre de diagramas de interacción que se asigna a estos diagramas en UML obedece
a que estos diagramas muestran de qué manera interactúan los distintos objetos que forman
parte de una aplicación para llevar a cabo las tareas encomendadas a ella. Hay que tener
presente que una aplicación orientada a objetos se ejecuta por medio del envío de mensajes
entre los diferentes objetos que la componen y que un mensaje es una solicitud enviada
desde un objeto a otro o a él mismo para que ejecute un método.
O Ediciones Paraninfo
Argot técnico
Lo relevante en un diagrama de secuencia es precisamente la secuencia cronológica o el
orden en el que se envían los mensajes para ejecutar lo especificado en un escenario de un
caso de uso; de ahí su nombre.
En un diagrama de secuencia, para cada actor u objeto que interviene, se crea una línea
vertical con trazado discontinuo llamada línea de vida, en la parte superior de la cual se
dibuja un rectángulo que representa a una clase, o un actor, según el caso. En el interior
del rectángulo se debe escribir el signo de puntuación dos puntos (:) y el nombre de la
clase, que representa un objeto de dicha clase.
Figura 6.7. Diagrama de secuencia de ejemplo con tres objetos que se intercambian
mensajes para realizar lo especificado en un supuesto escenario de un caso de uso.
| *¡/XX Y COMUNICACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Como paso previo a la elaboración de los diagramas de secuencia para cada caso de
uso, es necesario identificar las clases de análisis. Por ejemplo, para la aplicación de la
agenda de excompañeros de la Actividad resuelta 6.1, para la que se especificaron los
casos de uso, se pueden identificar las siguientes clases:
Con estas cuatro clases, es posible crear el diagrama de clases que se representa en
la Figura 6.8, en el que se ha relacionado la clase de control con las clases de entidad
Excompañero y Cena. Para cada cena se necesita conocer los excompañeros y excom-
pañeras que han asistido y la persona que la ha organizado. No se han indicado méto-
dos para las clases, los cuales se irán añadiendo a las clases a medida que se vayan
descubriendo en los diagramas de secuencia. Cada mensaje enviado a una clase en un
diagrama de secuencia será un método de la clase receptora en el diagrama de clases.
Ventana Control
Excompañero
- nombre: String
- fecha: Date
. - teléfono: String
- lugar: String
- email: String
Figura 6.8. Diagrama de clases de análisis con las clases de interfaz, de control y de entidad identificadas
en la aplicación para una agenda de antiguos compañeros y compañeras de estudios.
Solución
Usuano
AgregarExcompañero ()
AgregarExcompañero (nom, tel, ema)
»>
CompararNombre (nom)
El caso de uso Consultar excompañero/a (véase Figura 6.10) comienza cuando la persona
usuaria solicita consultar los datos de un/a excompañero/a, la ventana obtiene el nombre
de este o esta, y pide a la clase de control que busque una persona con ese nombre. La
clase de control comprueba si existe alguna persona con ese nombre comparando el nom-
bre del excompañero/a que se desea consultar con los nombres de los excompañeros/as
existentes. En caso de que no exista una persona con ese nombre, finaliza el caso de
uso; y en caso contrario, se muestran los datos de ese antiguo compañero o compañera
(teléfono y correo electrónico).
Ust:ano
-—ConsultarExcompañero(
ConsultarExcompañero (nom)
CompararNombre (nom)
MostrarExcompañero ()
O Ediciones Paraninfo
El caso de uso Agregar cena (Figura 6.11) se inicia cuando el usuario o usuaria solicita
agregar una cena. La ventana obtiene entonces la fecha y el lugar de la cena y pide a
la clase de control que agregue una cena con esos datos. Se comprueba si ya existe
alguna cena para el año indicado, comparando el año de la cena que se desea añadir
con los años de las cenas existentes. En caso de que se encuentre una cena para el año
indicado, finaliza el caso de uso; en caso contrario, la ventana solicita la introducción del
nombre de la persona que organiza la cena y se busca un excompañero o excompañera
con el nombre de la persona organizadora, comparando este nombre con los de las per-
sonas ya agregadas. En caso de que no exista ningún excompañero o excompañera con
ese nombre finaliza el caso de uso; en caso contrario, se crea un objeto de la clase Cena
a partir de los datos introducidos por la persona usuaria.
AgregarCena2 (org) :
CompararNombre (org)
El caso de uso Eliminar cena (Figura 6.12) comienza solicitándose eliminar una cena. La
ventana obtiene el año de la cena que se desea eliminar y pide a la clase de control que
busque una cena para ese año. La clase de control comprueba si existe alguna cena para
el año indicado comparando el año de la cena que se desea eliminar con los años de
las cenas existentes. En caso de que no exista, finaliza el caso de uso; en caso de que
sÍ exista, la clase de control solicita la eliminación de la cena enviando un mensaje a la
clase Cena.
Usuario
1
1
EliminarCena ()
EliminarCena (año)
CompararAño (año)
EliminarCena ()
O Ediciones Paraninfo
El caso de uso Agregar asistente (Figura 6.13) se inicia en el momento en que la persona
usuaria solicita agregar un asistente a una cena, la ventana obtiene el año de la cena y
pide a la clase de control que consulte si hay una cena para ese año. La clase de control
comprueba si esta existe, comparando el año de la cena que se desea consultar con
los años de las cenas existentes. En caso de que no haya ninguna cena para ese año,
finaliza el caso de uso; en el caso contrario, la ventana obtiene el nombre del asistente
a la cena que se desea agregar y pide a la clase de control agregar dicho asistente. Esta
clase de control solicita buscar dicho asistente entre las personas agregadas. Si no lo
encuentra, finaliza el caso de uso; en caso contrario, lo busca entre los asistentes a la
cena. En caso de que ya figure, finaliza el caso de uso; y, en caso contrario, se agrega
dicho asistente a la cena.
Ul .
AgregarAsistente (año, asisl _:_ H
BuscarAsistente (asis)
CompararNombre (asis)
Una vez elaborados los diagramas de secuencia, se puede ir refinando o ampliando el dia-
grama de clases de la Figura 6.8, de manera que cada mensaje que recibe una clase se
corresponde con un método de dicha clase. Por tanto, a partir de los diagramas de secuen-
cia especificados en esta actividad, se generaría el diagrama de clases que se muestra en
la Figura 6.14.
Control
í 0 0.*
Cena Excompañero
- fecha: Date - nombre: String
- lugar: String [ asiste 10,.1| - teléfono: String
+ EliminarCena () + MostrarExcompañero()
O Ediciones Paraninfo
+ BuscarAsistente (asis: String): boolean + Excompañero (nom: String, tel: String, ema: String)
Figura 6.14. Diagrama de clases ampliado con los métodos encontrados en los diagramas de secuencia
correspondientes a los casos de uso Agregar excompañero/a, Consultar excompañero/a, Agregar cena,
Eliminar cena y Agregar asistente.
| 1WIX/…NK:AGONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Solución
El primer paso es crear el diagrama de casos de uso, que se muestra en la Figura 6.15.
Videoclub J
Registrar película
; ; Registrar cliente
Dependiente
Alquilar película
; ; Devolver película
Cliente
O Ediciones Paraninfo
Figura 6.15. Diagrama de casos de uso para un videoclub, que incluye los dos actores que intervienen
en la aplicación (cliente y dependiente) y cuatro casos de uso (registrar película, registrar cliente,
alquilar película y devolver película).
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO |NFORMATICÁX Y [k N
A continuación, se elaboran los diagramas de secuencia para los casos de uso Alquilar
película y Devolver película, pero antes se tienen que identificar las clases de análisis,
que son las siguientes:
El caso de uso Alquilar película (véase la Figura 6.16) se inicia cuando el cliente solicita
alquilar una película, la ventana obtiene la identificación del cliente (su NIF) y la de la pe-
lícula que desea alquilar (su código) y le pide a la clase Videoclub que proceda al alquiler
de dicha película. Esta comprueba si el cliente tiene impuesta alguna sanción, buscando
el cliente por su NIF. Si ha recibido alguna sanción, se muestra un mensaje de error y fi-
naliza el caso de uso; en caso contrario, se busca la película que se desea alquilar y una
vez encontrada, se comprueba si hay ejemplares suficientes de esa película. En caso de
que no lo haya, se muestra un mensaje de error y finaliza el caso de uso; en caso contra-
rio, se disminuye el stock de dicha película y se procede a registrar el alquiler.
N
Clie:nte :Ventana W :Videoclub , :Cliente :Película ¡Alquiler
'
A AlquilarPelícula() ! — !
F AlquilarPelícula (NIF, CodPel)¿n_
CompararNIF (NIF)
getSanción() []
u
CompararCódigo (CodPel)
getSto¡:k ()
DisminuirStock 0
El caso de uso Devolver película (Figura 6.17) comienza cuando el cliente solicita devolver
una película. Para ello, la ventana obtiene la identificación del cliente (su NIF) y la de la
película que desea devolver (su código) y le pide a la clase Videoclub que proceda a la
devolución de dicha película. Al efecto de registrar la devolución, se busca la película por
O Ediciones Paraninfo
AumentarStock () U ! !
setFecóev() E é
ComprobarSanción ()
setSancion ()
m d
U "
A partir de las clases de análisis indicadas anteriormente y los métodos detectados en los
dos diagramas de secuencia anteriores, se deduce el diagrama de clases que se observa
en la Figura 6.18.
Ventana Videoclub
Cliente
- código: int Alquiler
- NIF: String
- fecAlquiler: Date
- título: String
- nombre: String - fecDevPrevista: Date
- añoProducción: int
- dirección: String - fecDevReal: Date
- género: String
- teléfono: String
- país: String + Alquiler (NIF: String, CodPel: int)
- email: String
+ ComprobarSanción (): Float
+ CompararCódigo (CodPel: int): boolean - numSocio: int
+ setFecDev ()
+ getStock (): int - fecAlta: Date
+ setSanción ()
gramas muestran la misma información que los diagramas de secuencia, pero en los
diagramas de colaboración no se concede una especial relevancia al orden (la secuencia)
en que se envían los mensajes, sino que se da mayor importancia a visualizar las clases
que colaboran y cómo estas se relacionan mediante el envío de mensajes.
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMATICA Y CC/X
—
Recuerda ,
Lo relevante en un diagrama de colaboración no es el orden en el que se envían los
mensajes para ejecutar lo especificado en un escenario de un caso de uso, sino la
visualización de los objetos que colaboran en una aplicación o en parte de ella por medio
del envío de mensajes. De hecho, los mensajes y colaboraciones que se muestran en un
diagrama de colaboración no tienen por qué estar restringidos a un determinado caso de
Uso, sino que pueden mostrarse las colaboraciones necesarias para la ejecución de varios
o incluso todos los casos de uso de la aplicación.
E Enlaces: las clases que interactúan entre sí mediante el envío de algún mensaje se
unen mediante una línea que representa un enlace entre las clases.
E Mensajes: se representan al lado del enlace entre las dos clases que se inter-
cambian el mensaje, que se representa mediante una flecha, al lado de la cual se
coloca un número y el mensaje en cuestión. El número hace referencia al orden del
mensaje (número de secuencia) dentro del diagrama de colaboración.
2: m2 ()
——
1:mi1 ()> 3:m3 ()>
A :B C
Figura 6.19. Diagrama de colaboración de ejemplo correspondiente al diagrama de secuencia de la Figura 6.7.
Usuario
:Excompañero
Figura 6.20. Diagrama de colaboración de ejemplo correspondiente al diagrama de secuencia de la Figura 6.9.
1a ¡'M
N uOMUNICACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Usuario
:Cena :Excompañero
Figura 6.21. Diagrama de colaboración de ejemplo correspondiente al diagrama de secuencia de la Figura 6.11.
Una vez cargada la aplicación y tras indicar que se desea crear un nuevo diagrama y la ubi-
cación donde se desea almacenar este, aparecerá una pantalla como la de la Figura 5.34
de la Unidad 5.
Para crear un diagrama de secuencia, hay que hacer clic sobre el icono correspondiente
a cada elemento en la paleta UML. Dichos elementos se recogen en la Tabla 6.4.
Tabla 6.4. Elementos que forman parte de los diagramas de secuencia, su icono correspondiente
en diagrams.net y la paleta que le corresponde
Elemento
O Ediciones Paraninfo
Elemento
Línea de vida
: para un objeto UML
Synchronous
Invocation
— |selfcal .
: <
: Mensaje enviado de UML
: un objeto a sí mismo
Self Call
Para comenzar a elaborar el diagrama, habrá que colocar las líneas de vida correspon-
dientes al actor Usuario y a las clases Ventana, Control y Excompañero. Se clica sobre el
icono correspondiente de la paleta UML y se le asigna un nombre al actor o a la clase.
Posteriormente, habrá que representar los mensajes.
Para cada uno de ellos, se debe pinchar sobre el icono que le corresponde (véase Tabla 6.4)
y se colocará en el lugar correspondiente del diagrama. La flecha discontinua de vuelta
de un mensaje que se envía de un objeto a otro se puede eliminar y se debe sustituir el
texto dispatch, haciendo doble clic sobre él, por el nombre del método correspondiente
con sus parámetros, si es el caso.
en la Figura 6.3, si bien solo se van a incluir los casos de uso Agregar excompañero/a,
Consultar excompañero/a, Agregar cena, Eliminar cena y Agregar asistente. Después, se
creará también el diagrama de clases de la Figura 6.14.
Para ello, se va a crear un nuevo proyecto con el módulo Papyrus SysML de Eclipse. Hay
que indicar que en este caso se desea crear un diagrama de casos de uso, un diagrama de
clases y un diagrama secuencia. Por consiguiente, se deberán activar en la pantalla como
la de la Figura 5.42 de la Unidad 5, las casillas de verificación correspondientes a Use Case
Diagram, Class Diagram y Sequence Diagram.
£ ] Agenda excompañeros
C Agregar excompañero
C Consultar excompañero
Usuario
O Agregar cena
C Eliminar cena
O Agregar asistente
Figura 6.22. Diagrama de casos de uso para la aplicación de una agenda de antiguos
compañeros y compañeras que incluye los casos de uso Agregar excompañero/a,
Consultar excompañero/a, Agregar cena, Eliminar cena y Eliminar asistente.
El siguiente paso es crear el diagrama de clases de la Figura 6.14. Para ello, se puede
consultar el Apartado 5.6.2, en el que se indicó cómo crear diagramas de clases con el
módulo Papyrus SysML de Eclipse, si bien no se añadieron métodos a las clases. Dicha
tarea es lo que se debe hacer ahora.
O Ediciones Paraninfo
Para añadir métodos a una clase incluida en un diagrama, se debe pulsar en el botón *! de
la sección Owned operation del área de propiedades (véase la Figura 5.44). Es necesario
indicar por cada método, su nombre, tipo de valor que devuelve, visibilidad y parámetros.
En el caso de la clase Ventana, para cada método solo es necesario indicar su nombre en
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMAT|CA Y CÍ)/X1
Name. Una vez creados los métodos, para que se puedan visualizar en el diagrama, es
necesario, como en el caso de los atributos, arrastrarlos desde el explorador del modelo.
Si el método requiere parámetros, es necesario, por cada uno de ellos, clicar en el botón +
de la sección Owned parameter. Así, para el método AgregarExcompañero de la clase
Control, se deben añadir tres parámetros. Para el primer parámetro, llamado nom, habrá
que indicar su nombre en Name, que es un parámetro de entrada (valor in) en Direction y
que su tipo es String, como se puede observar en la Figura 6.23.
UML 1 Comments
Figura 6.23. Propiedades del parámetro nom del método AgregarExcompañero de la clase
Control. El nombre, dirección y tipo de dato son las más importantes.
Para el método AgregarExcompañero, se deben añadir de igual modo los otros dos pará-
metros: tel y ema. Como esta función devuelve un valor booleano que indica si el excom-
pañero o la excompañera se ha podido agregar a la agenda, se debe incluir un «cuarto
parámetro» que determine el tipo del valor de retorno. Por este motivo, no se asignará
ningún nombre al parámetro en la casilla Name, pero se indicará en Direction el valor
return y se elegirá el tipo de dato Boolean (véase la Figura 6.24).
Label
UML| Comments
O Ediciones Paraninfo
Figura 6.24. Ventana en la que se muestran las propiedades para el valor de retorno
del método AgregarExcompañero de la clase Control. No es necesario asignarle nombre,
pero se debe indicar en Direction el valor return y se debe indicar su tipo de dato, Boolean.
A Y COMUNICACIÓNES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Una vez incluidos los tres parámetros para el método AgregarExcompañero, e indicado el
tipo de dato del valor de retorno, las propiedades de este método son las que se mues-
tran en la Figura 6.25.
Name AgregarExcompañero
Label
Se deberá obrar de igual modo para los demás métodos de esta clase y para el resto de
clases del diagrama, obteniéndose al final el diagrama de clases de la Figura 6.26.
Ventana Control
1
+ control
+ control
+ excompañero *
E Cena " E Excompañero
+ cena . :
E - fecha: EDate [1] asiste EZ - nombre: String [1]
E - lugar: String [1] EZ - teléfono: String [1]
+ + excompañero EZ — - email:email String
Stei [1]
E + CompararAño( in año: Integer): Boolean
1B + Cena( infec: EDate, in lug: String, n org: String) B + CompararNombre( in nom: String): Boolean
+cena organiza 1
B + EliminarCena() u - MostrarExcompañero()
4 + BuscarAsistente( in asis: String): Boolean + excompañero 4 + Excompañero( in nom: String, in tel: String, in ema: String)
Figura 6.26. Diagrama de clases creado con Papyrus SysML para los casos de uso Agregar excompañero(/a,
Consultar excompañero/a, Agregar cena, Eliminar cena y Agregar asistente de la agenda de antiguos
O Ediciones Paraninfo
compañeros y compañeras.
Seguidamente, se explicará cómo crear diagramas de secuencia con Papyrus, tomando como
ejemplo el diagrama de secuencia para el caso de uso Agregar cena de la Figura 6.11.
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMAT|CA Y CON! v
Con este fin, en primer lugar, hay que colocarse en la pestaña de Eclipse correspon-
diente al diagrama de secuencia. Una vez situados en esa pestaña, lo primero que hay
que hacer es colocar las líneas de vida correspondientes al actor Usuario y a las clases
Ventana, Control, Cena y Excompañero. Para ello, se arrastra el elemento correspondiente
(el actor y las clases) desde el explorador del modelo al área de edición. Se obtiene un
resultado como el que se observa en la Figura 6.27.
Figura 6.27. Líneas de vida necesarias para el diagrama de secuencia correspondiente al caso de uso Agregar
cena. Para colocar las líneas de vida, se debe arrastrar el elemento correspondiente de cada línea de vida
(actor o clase) desde el explorador del modelo al área de edición del diagrama.
Para añadir los mensajes, se hace clic sobre el elemento % Message Sync de la sección
Edges de la paleta (Figura 6.28) situada a la derecha del área de edición.
7 AgendaExcom... X % =a
<7 Palette D
N a ar; --
E Nodes <
? Lifeline
[> Action Execution Specification
[6P Behavior Execution Specification
=.) InteractionUse
] Combined Fragment
2 ] Interaction Operand
[ StateInvariant_—— —
5S Edges <
) Message Sync
) Message Async
+-- Message Reply
--> Message Create
O Ediciones Paraninfo
Luego, se debe arrastrar el ratón desde la línea de vida del emisor a la del receptor, y se
asigna un nombre por defecto al mensaje enviado y al mensaje de retorno (Figura 6.29).
:Usuario :Ventana
Message11
E—
h Message16
Figura 6.29. Por cada mensaje que se envía en un diagrama de secuencia, Papyrus
SysML crea dos mensajes: el mensaje enviado, que en este caso se llama Message11,
y el mensaje de retorno, llamado Message16.
En el campo Signature (Figura 6.30), se debe indicar el método del objeto receptor que ha
de ejecutarse en respuesta al mensaje. Para ello, se hace clic en el botón que presenta los
tres puntos y se elige el método AgregarCena() de la clase Ventana, como se muestra en
la Figura 6.31. Al realizar esta operación, el nombre del mensaje enviado es sustituido por
el método seleccionado.
= Tree $= Flat
4 5 Ventana
4 Agregarfxcompañero (
4 Consultarxcompañero
AgregarCena
[ 0)
48 EliminarCena (
4 AgregarAsistente ()
> El Control
> El Excompañero
» El Cena
Recent selections
[4 AgregarCena Q
O Ediciones Paraninfo
Figura 6.31. Por cada mensaje que se envía en un diagrama de secuencia en Papyrus
SysML, se debe seleccionar el método de la clase receptora que se debe ejecutar en
respuesta a ese mensaje, asignando un valor al campo Signature del mensaje enviado.
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMATICA Y CO/X1 1
Aunque los mensajes de retorno no sean necesarios en este caso, no se pueden elimi-
nar del modelo porque entonces Papyrus SysML borra el rectángulo vertical que repre-
senta el tiempo durante el cual el método está activo. Lo que se puede hacer es selec-
cionar el mensaje de retorno y dejar en blanco el nombre del mensaje (campo Name de
las propiedades del mensaje). Tras hacer esto, para el primer mensaje del diagrama de
secuencia, el resultado es el que se muestra en la Figura 6.32.
79 “AgendaExcompañeros.di X
: Usuario : Control :C : Excompañero
Ea
AgregarCena()
A
|
< _
TE Sequence Diagram |98 Use Case Diagram | BA Class Diagram |
[ Properties X — / Model Validation %7 References € Documentation
% Message11
UmL Name [ Messagel1
Comments Label [
Profile eal
siyle Message sort syne
Figura 6.32. Diagrama de secuencia correspondiente al caso de uso Agregar cena, en el que se muestra
el primer mensaje, que es enviado desde el actor Usuario a la clase Ventana y solicita la ejecución
del método AgregarCena().
Se debe realizar la misma operación para crear el resto del diagrama de secuencia.
Conviene que se alarguen o acorten los rectángulos verticales que representan el tiempo
de activación de cada mensaje antes de añadir posteriores mensajes. Para ello, basta
con arrastrar el extremo inferior de cada rectángulo. Al final se obtiene un diagrama de
secuencia como el que se muestra en la Figura 6.33.
Figura 6.33. Diagrama de secuencia para el caso de uso Agregar cena de la agenda de excompañeros
y excompañeras realizado con el módulo Papyrus SysML de Eclipse.
ij X1Í/ (.OÍ…UNICACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Tabla 6.5. Diferentes elementos que forman parte de los diagramas de colaboración, su símbolo
correspondiente en diagrams.net y la paleta que le corresponde
Elemento Símbolo
: Actor Í UML
: . dispatch
: Mensaje UML
Message
Tras colocar la flecha en el área de edición, se sustituye el texto dispatch por AgregarEx-
compañero().
Para comenzar, será necesario colocar en el área de edición los rectángulos que repre-
sentan los objetos o clases. En Papyrus, los actores se representan también con rectán-
gulos, como los objetos y las clases. Para ello, se arrastran desde el explorador del mo-
delo los elementos del modelo correspondientes: el actor Usuario y las clases Ventana,
Control, Cena y Excompañero. Una vez hecho esto, la única manera de establecer enlaces
entre las clases es mediante el envío de mensajes entre ellas.
Se empieza haciendo clic sobre el elemento Message del área Edges de la paleta (véase
Figura 6.34).
ss
6? Palette ID
Naan-E-
E7 Nodes o
? Lifeline
El Comment
(?) Constraint
$ Duration Observation
Et Time Observation
dj Edges o
--> Message
Z Link
A continuación, se clica sobre la clase que envía el mensaje, en primer lugar, y luego
sobre la clase receptora. En este caso, se comenzará con el mensaje AgregarCena()
enviado desde el actor Usuario a la clase Ventana. Aparecerá entonces un mensaje con
un nombre por defecto que habrá que modificar. En las propiedades del mensaje, en el
campo Signature, se seleccionará el mensaje de la clase receptora (Ventana) correspon-
diente: en este caso, AgregarCena(). A diferencia de lo que ocurría al hacer esto en los
diagramas de secuencia, no se modifica el texto del mensaje, por lo que habrá que es-
O Ediciones Paraninfo
cribirlo en la propiedad Name, como se muestra en la Figura 6.35. Debe recordarse que,
para los diagramas de colaboración, se debe poner antes del nombre del mensaje un nú-
mero, que indica el orden en el que se envía el mensaje en el contexto de este diagrama.
Las propiedades para el primer mensaje del diagrama se mostrarán como se observa en
la Figura 6.35.
A Xf, (OMUNICACIONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
7 *AgendaExcompañeros.di X
P]interaction19 J
1: AgregarCena()
: Usuario h — — l : Ventana : Control
:Cena : Excompañero
<
H Sequence Diagram |;8 Use Case Diagram W BB Class Diagram [$ DColaboraciónAgregarCena X
Comments Label í
Profile =
style Message sort | asynchCall
Figura 6.35. Propiedades del mensaje AgregarCena(), que es el primero del diagrama de colaboración
correspondiente al caso de uso Agregar cena de la agenda de excompañeros y excompañeras.
Después, se establecerán los restantes mensajes entre las clases del diagrama de cola-
boración de igual modo y se conseguirá al final un diagrama de colaboración como el que
se muestra en la Figura 6.36.
EJinteraction19 _)
2: AgregarCena1 (fec, lug)
—
1: AgregarCena: 5: CompararNombre (org
+ Usuario — : Ventana : Control — : Excompañero
4: AgregarCena2 (org)
—
3: CompararAño (año) l6: Cena (fec, lug, org)
l : Cena
|
Figura 6.36. Diagrama de colaboración para el caso de uso Agregar cena de la agenda de antiguos compañeros
y compañeras realizado con el módulo Papyrus SysML de Eclipse.
E Estado: un estado es cada una de las situaciones por las que puede pasar un ob-
jeto, tiempo durante el cual realiza cierta actividad o espera la ocurrencia de algún
evento. Un estado se representa mediante un rectángulo con esquinas redondea-
das. No obstante, hay dos estados especiales durante los cuales el objeto no reali-
Za ninguna actividad; estos se simbolizan de manera distinta (véase la Figura 6.37).
2. El estado final o último estado por el que pasa un objeto, que se representa
como se muestra en la Figura 6.37. No es necesario que en todos los casos
haya un estado final, y también hay que tener en cuenta que podría haber más
de uno.
“ o
Estado inicial Estado final
Para el manejo de esta puerta, se dispone de un mando a distancia con dos botones:
uno para solicitar su apertura y otro para solicitar su cierre. Así, del estado inicial, la
puerta pasa al estado Cerrada. Si en este estado se solicita su cierre, seguirá en el
mismo estado, mientras que si alguien solicita su apertura, pasará al estado Abriendo.
Encontrándose en este estado, cuando se detecte que la puerta ya se ha abierto com-
pletamente, pasará al estado Abierta. Si en el estado Abriendo se solicita su apertura no
O Ediciones Paraninfo
Puerta
- código: int
- nombre: String
abrir ()
. - Ubicación: String
abrir ()
cerrar () + abrir ()
apertura completa
+ cerrar ()
Figura 6.38. Diagrama de estados que representa los estados por los que puede pasar una puerta de garaje.
Sobre las flechas que representan las transiciones, se pueden incluir no solo el evento
que origina la transición, sino también los dos elementos que se indican a continuación:
1. Una condición de guarda, que se evalúa cuando ocurre el evento, de forma que si
la condición es verdadera, se produce la transición, mientras que si es falsa, no
se da la transición. Esta condición se debe especificar entre corchetes después
del nombre del evento.
2. Una acción, que es una operación que se lleva a cabo si se produce la transición
y se corresponde con algún método de la clase para la que se está creando el
diagrama. También puede ser una solicitud para la ejecución de algún método por
parte de otra clase. Se debe escribir esta acción después del evento, con la con-
dición asociada, si es el caso, y después del símbolo de barra (/).
Si se incluyen en el evento una condición de guarda y una acción, el texto que se debe
colocar encima de la flecha correspondiente a la transición puede tener alguna de las
dos siguientes formas, dependiendo de si la acción se corresponde con un método de la
propia clase o de otra clase, respectivamente:
flejando únicamente los estados por los que pasa esta clase en relación con los casos
de uso Agregar excompañero/a y Agregar cena.
La ventana parte de un estado llamado En espera hasta que el usuario o usuaria selec-
ciona una de las opciones del menú.
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMAT|CA Y CO/XV'1 1—
Si se selecciona la opción de menú Agregar cena, pasa al estado Comprobando cena con
el fin de determinar si ya hay una cena ese año. En este caso, se muestra un mensaje
de error y se vuelve al estado de espera. En caso de que no haya cena ese año, se com-
prueba si el nombre de la persona que organiza la cena es correcto, es decir, si ya existe
en la lista de antiguos compañeros y compañeras. Si no existe, se muestra un mensaje
de error, y si existe, se agrega la cena a la lista de cenas y se vuelve al estado de espera.
AgregarExcompañero () /
Control.AgregarExcompañero (nom, tel, ema
No existe /
Excompañero.Excompañero
- Añadiendo
Añadiendo
.ze)?<?“ompañe.
Figura 6.39. Diagrama de estados que representa los estados por los que pasa la clase Ventana
en la agenda de excompañeros y excompañeras en relación con los casos de uso
Agregar excompañero/a y Agregar cena.
Diagrama de estados
Realiza el diagrama de estados correspondiente a la clase Ventana de la agenda de an-
tiguos compañeros y compañeras, reflejando únicamente los estados por los que pasa
esta clase en relación con los casos de uso Consultar excompañero/a y Eliminar cena.
…*A UN'CAUONES 6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO
Solución
Se detectan tres estados: Apagado con puerta cerrada, Apagado con puerta abierta y En
funcionamiento. El estado inicial es el primero de los tres.
En la Figura 6.40 se muestra el diagrama que refleja las situaciones antes descritas.
Botón apertura
Figura 6.40. Diagrama de estados que representa el funcionamiento de un microondas con dos botones:
el de funcionamiento (ON) y el de apertura de la puerta. Este microondas dispone de una luz que debe
permanecer encendida mientras está en funcionamiento o si la puerta está abierta.
1
I FA
[ )N
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO INFORMATICA [*…'—.;/ '
[es excompañero]
O Ediciones Paraninfo
Figura 6.41. Diagrama de actividades que muestra el flujo de control para el caso de uso Agregar cena.
Diagramas de
comportamiento
—
o
=
.
=
A
É
Eu
o
a
=
o
o
C)
D
[22)
S
=
Ss
u
a
-
()
D
=
o
o
Ss
o
D
Te
u
Diagramas de actividades
278
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO ACTIVIDADES FINALES
Actividades de comprobación
6.1. ¿Qué diagramas de los especificados a continuación se deben crear antes en el
proceso de desarrollo de software orientado a objetos?
a) Diagramas de secuencia.
b) Diagramas de clases.
c) Diagramas de colaboración.
d) Diagramas de casos de uso.
6.2. ¿Qué relación entre casos de uso indica que varios de ellos hacen uso de otro caso
de uso de forma que este último incluye actividades comunes a los otros?
a) Relación de uso o inclusión.
b) Relación de comunicación.
c) Relación de extensión.
d) Ninguna de las respuestas anteriores es correcta.
6.4. ¿En qué tipos de diagramas se establecen enlaces entre las clases que se envían
mensajes y se muestran los mensajes intercambiados, precediendo a cada mensa-
je un número que hace referencia al orden del mensaje dentro del diagrama?
a) Diagramas de colaboración.
b) Diagramas de secuencia.
c) Diagramas de casos de uso.
d) Diagramas de estados.
279
ACTIVIDADES FINALES —y rnrianonnenaorassne mc
6.7. En un diagrama de estados:
a) Debe haber un único estado inicial y un único estado final.
b) Debe haber un único estado inicial y puede no haber estado final.
c) Puede no haber estado inicial y debe haber un único estado final.
d) Puede no haber ni estado inicial ni estado final.
6.8. Los diagramas UML que sirven para especificar el flujo de control de las acciones
que se deben realizar para ejecutar un método son:
a) Los diagramas de colaboración.
b) Los diagramas de secuencia.
C) Los diagramas de estados.
d) Los diagramas de actividades.
6.10. ¿Qué diagramas se podrían emplear para mostrar los mensajes intercambiados
entre varios objetos en varios casos de uso?
a) Los diagramas de secuencia.
b) Los diagramas de colaboración.
c) Los diagramas de actividades.
d) Los diagramas de casos de uso.
6.11. ¿En qué diagrama se muestran todos los actores que intervienen en una aplicación?
a) En un diagrama de secuencia.
b) En un diagrama de colaboración.
C) En un diagrama de actividades.
d) En un diagrama de casos de uso.
6.12. ¿En qué diagramas se pueden detectar métodos para incorporarlos a las clases
que forman parte del diagrama de clases?
a) En los diagramas de secuencia.
b) En los diagramas de actividades.
c) En los diagramas de casos de uso.
d) Ninguna de las respuestas anteriores es correcta.
280
6. ELABORACIÓN DE DIAGRAMAS DE COMPORTAMIENTO ACTIVIDADES FINALES
E Actividades de aplicación
6.14. Crea el diagrama de casos de uso que refleje la gestión de los pedidos de una empresa
que vende una serie de productos de acuerdo con la siguiente descripción:
E Cuando un cliente llama por teléfono o se persona en la empresa para realizar un
pedido, le atiende una vendedora, la cual, para poder registrar el pedido, en primer
lugar, le solicita al cliente sus datos personales, para más tarde tomar los datos del
pedido en cuestión. La vendedora acordará con el cliente la forma de pago.
E Losclientes también pueden consultar en cualquier momento el estado de sus pedi-
dos, información que será proporcionada por la vendedora.
E Porotro lado, una vez que la empresa dispone de los productos solicitados por el
cliente, la persona responsable de los envíos se encarga de gestionar su envío al
domicilio del cliente.
6.15. Crea el diagrama de casos de uso para una librería online de acuerdo con la siguiente
descripción y sin emplear relaciones «include» ni «extend»:
E Cualquier persona usuaria puede buscar los libros que desee aunque no esté regis-
trada. Sin embargo, antes de comprar libros, esta persona debe registrarse sumi-
nistrando sus datos personales, preferencias literarias, un nombre de usuario y una
contraseña. Al finalizar el registro, se le envía a dicha persona un correo electrónico
confirmándole su registro.
E Cualquier usuaria o usuario registrado puede pedir los libros que considere, añadién-
dolos al carrito de la compra. Cuando la persona usuaria selecciona la opción Pedir
libros, se le solicita un nombre de usuario y contraseña y, si estos son correctos, se
le muestran los datos de los libros en pantalla y su dirección de envío, que puede ser
modificada. Una vez confirmados estos datos, debe proceder al pago mediante tar-
jeta bancaria, introduciendo los datos de la tarjeta. Si estos datos son correctos, se
procede al cobro y se le muestra un número de pedido para posteriores consultas del
estado del pedido.
E Cualquier usuaria o usuario registrado puede consultar el estado de su pedido, para
lo que debe introducir el nombre de usuario y contraseña y un número de pedido.
6.16. Realiza la descripción del caso de uso Registro para la librería online de la Activi-
dad 6.15.
6.17. Realiza la descripción del caso de uso Pedir libros para la librería online de la Activi-
dad 6.15.
6.18. Modifica el diagrama de casos de uso de la Actividad 6.15, teniendo en cuenta que si al
pedir un libro, un usuario o usuaria no está registrado, se le permite hacerlo en ese mo-
O Ediciones Paraninfo
6.19. Modifica el diagrama de casos de uso de la Actividad 6.18, incorporando alguna relación
«include».
281
ACTIVIDADES FINALES —y rnrnanonnenaonassne omormiwen
6.20. Crea el diagrama de casos de uso para una academia de acuerdo con la siguiente
descripción:
E Esta academia imparte diferentes cursillos a lo largo del año. Cada cursillo tiene
asignado un código, un nombre, una duración en horas, una fecha de inicio, una
fecha de fin y se imparte ciertos días de la semana en un horario determinado. De
la introducción de los datos de cada cursillo se encarga la secretaria de la aca-
demia.
6.21. Crea el diagrama de secuencia para el caso de uso de la Actividad 6.20 relacionado
con la matrícula del alumnado en un cursillo.
6.22. Crea el diagrama de clases que refleje todas las clases con sus atributos y los méto-
dos detectados en el diagrama de secuencia de la Actividad 6.21.
6.23. Crea un diagrama de actividades para el caso de uso Consultar excompañero/a, cuyo
diagrama de secuencia se muestra en la Figura 6.10.
6.24. Crea un diagrama de actividades para el caso de uso Agregar asistente, cuyo diagra-
ma de secuencia se muestra en la Figura 6.13.
6.25. Crea un diagrama de estados que refleje los estados por los que puede pasar un
mensaje de correo electrónico teniendo en cuenta lo siguiente: inicialmente el mensa-
je se encuentra en estado no leído y, desde esta situación, o bien se puede eliminar,
con lo que pasaría a la papelera, o bien se puede leer, en cuyo caso pasaría a la si-
tuación de leído. Desde esta situación, también se puede eliminar, por lo que pasaría
a la papelera. Estando en la papelera, el mensaje se puede eliminar definitivamente.
O Ediciones Paraninfo
En la Figura 6.42, se muestra la clase Email con los mensajes que provocan un cam-
282 bio de estado: /eer(), eliminar() y eliminarDefinitivamente().
Email
- fecha
- emisor
- asunto
- contenido
+ leer()
+ eliminar()
+ eliminarDefinitivamente()
Figura 6.42. Clase Email con métodos para leer el mensaje, eliminarlo
para enviarlo a la papelera y eliminarlo de manera definitiva.
6.26. Crea un diagrama de estados que refleje los estados por los que puede pasar un
préstamo solicitado a una entidad bancaria. Se debe tener en cuenta que el prés-
tamo comienza en estado solicitado. En algún momento se procede a su estudio,
como resultado del cual, puede ser rechazado o aceptado por la entidad bancaria.
Se debe comunicar este estado al cliente, que puede formalizarlo o rechazarlo. En
caso de que lo formalice, a partir de ese momento, cada cierto tiempo, el cliente
procederá a su pago parcial o a su amortización (pago por completo), momento en
el cual el préstamo quedará pagado. En la Figura 6.43, se muestra la clase Présta-
mo con los mensajes que provocan un cambio de estado: estudiar(), aceptarBanco(),
rechazarBanco(), comunicar(), formalizar(), rechazarCliente(), pagar() y amortizar().
Préstamo
- código
- importe
- plazo
- cuota
+ estudiar()
+ aceptarBanco()
+ rechazarBanco()
+ comunicar()
+ formalizar()
+ rechazarCliente()
+ pagar()
+ amortizar()
O Ediciones Paraninfo
M Actividadesde ampliación
6.27. Aveces, en los diagramas de secuencia, es necesario incluir mensajes que se han de
enviar solo en caso de que se cumpla una determinada condición, de manera similar
a una estructura alternativa simple de programación. Busca información sobre cómo
se puede representar esta situación en un diagrama de secuencia.
[
E (m]i=:[0] UML-diagrams.org - https://www.uml-diagrams.org/
=*º','-. (Sitio web en inglés con información sobre todos los diagramas UML)
el E
O Ediciones Paraninfo
modifier_ob.select
bpy . context.scene.objects.active = modifier_ob
print("Selected”" + str(modifier_0b)) % modifier ob is the active ob
rref_ob. sal pa
Parámetro, 192-193
Navegabilidad, véase Relaciones entre Particiones o clases de equivalencia, 94-
clases — Navegabilidad 97, 99
NetBeans Patrones de refactorización en Eclipse,
Actualización de, 73 130-139
Creación de clases en, 58 Cambiar prototipo del método (change
Creación de paquetes en, 58 method signature), 133-134
Creación de proyectos en, 56-57 Convertir variable local en atributo
Desinstalación de módulos (plug-ins) (convert local variable to field),
en, 72 136-137
Edición de programas en, 59 Encapsular atributo (encapsulate
Generación de ejecutables en, 59-60 field), 138
Instalación de, 55-56 Extraer clase (extract class), 133
Instalación de módulos (plug-ins) en, Extraer constante (extract constant),
71-72 135-136
Nodo, 86, 185, 188 Extraer interfaz (extract interface), 132
Nota, 187 Extraer método (extract method),
137-138
(o) Extraer superclase (extract
Object Pascal, 181 superclass), 133
Objeto Extraer variable local (extract local
Comportamiento de un objeto, véase variable), 135
Comportamiento — de un objeto Inline, 134
Definición, 9 Introducir parámetro objeto (introduce
Estado de un objeto, véase Estado — parameter object), 134
de un objeto Mover (move), 132
Ocultamiento, 181 Pull down, 133
Orden de cambio, 148 Pull up, 133
Renombrar (rename), 131
P Usar supertipo donde sea posible
Papyrus SysML en Eclipse (use supertype where possible),
Crear diagramas de casos de uso 133
con, 249-251 Periférico, 3-4
Crear diagramas de clases con, 212- Plan
218 de proyecto, 16
Crear diagramas de colaboración con, de pruebas, 100-101, 165-166
270-271 Planificación, 16, 22, 27, 38
Crear diagramas de secuencia con, Plug-in, véase Módulo o plug-in
262-268 PMD (Programming Mistake Detector),
Instalación de, 69 141-146
Paquete, 187-197 Polimorfismo, 181
O Ediciones Paraninfo
Alonso, F.; Martínez, L.; Segovia, F.J. (2005) — (2008) IEEE Standard for Software
Introducción a la ingeniería del softwa- and System Test Documentation, IEEE
re: Modelo de desarrollo de programas. Std 829-2008. IEEE, Nueva York. doi:
Delta Publicaciones, Madrid. 10.1109/1EEESTD.2008.4578383.
Coad, P.; Yourdon, E. (1991) Object-Orien- — (2009) IEEE Standard for Informa-
ted Design. Prentice-Hall, Nueva York. tion Technology —Systems Design—
Cuevas, G. (coord.); De Amescua, A.; San Software Design Description, IEEE STD
Feliú, T.; Arcilla, M.; Cerrada J.A.; Cal- 1016-2009. IEEE, Nueva York. doi:
vo-Manzano, J.A.; García, M. (2003) 10.1109/1EEESTD.2009.5167255.
Gestión del proceso software. Centro Kruchten, P. (2000) The Rational Unified
de Estudios Ramón Areces, Madrid. Process: An Introduction, 2.* edición.
Fowler, M. (2018) Refactoring: Improving Addison Wesley Longman, Inc., Bos-
the design of existing code, 2.* edición. ton.
The Addison Wesley Signature Se- Maddison, R.N. (1983) Information System
ries, Addison-Wesley, Reading (Mass., Methodologies. Wiley Henden.
EE. UU.). Piattini, M.; Calvo-Manzano, J.A.; Cervera,
IEEE (Institute of Electrical and Electronics J.; Fernández, L. (2007) Análisis y dise-
Engineers) (1998) IEEE Recommended ño detallado de aplicaciones informáti-
Practice for Software Requirements cas de gestión. Ed. Ra-ma, Madrid.
Specifications, IEEE Std 830-1998. Pressman, R.S. (2010) Ingeniería del
O Ediciones Paraninfo
Este libro desarrolla los contenidos del módulo profesional de Entornos de desarrollo, de
los Ciclos Formativos de grado superior en Desarrollo de Aplicaciones Web y Desarrollo
de Aplicaciones Multiplataforma, pertenecientes a la familia profesional de Informática
y Comunicaciones.
Se aborda, desde un punto de vista práctico, el empleo de entornos de desarrollo, como
herramientas esenciales para la creación de programas, así como las tareas de desarrollo
de software previas a la programación (análisis y diseño) y posteriores a esta, como la
optimización del código y las pruebas.
Entre los principales contenidos del libro, cabe destacar los siguientes:
* El proceso de desarrollo de software orientado a objetos.
* Lainstalación y el uso de entornos de desarrollo (Eclipse y NetBeans).
* Laoptimización del código, mediante la refactorización, el empleo de analizadores de
código (PMD) y herramientas para el control de versiones (Git).
* Las pruebas, que tienen por objetivo mejorar la calidad del software, comprobandosi
este funciona correctamente y realiza las funciones encomendadas por el cliente.
* El análisis y el diseño orientado a objetos, que requieren la elaboración de diagramas
UML, como diagramas de clases, de casos de uso y de interacción, entre otros.
ISBN: 978-84-1366-524-5
También en
Paraninfo J
Ebook
ciclos formativos
9 788413 665245
www.paraninfo.es