Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 51

Tema 1 - Desarrollo de software:

El desarrollo de software es un proceso que implica la creación, diseño, implementación,


prueba y mantenimiento de programas informáticos y sistemas. Este proceso se puede dividir
en varias etapas y sigue prácticas y metodologías específicas para garantizar la calidad y
eficiencia del software.

▪ Concepto de programa informático.


Un programa informático, también conocido como software, es un conjunto de
instrucciones lógicas y directivas que una computadora sigue para realizar una tarea o
función específica. Estos programas están escritos en lenguajes de programación y
pueden variar en complejidad desde simples scripts hasta aplicaciones de software
completas o sistemas operativos.

▪ Código fuente, código objeto y código ejecutable; máquinas


virtuales.

Código Fuente:

● Definición: El código fuente es el conjunto de instrucciones escritas en un


lenguaje de programación específico por un programador humano.
● Formato: Puede estar escrito en lenguajes de alto nivel como Java, C++,
Python, etc.
● Ejemplo: En Java, el código fuente puede estar en archivos con extensión
.java.

Código Objeto:

● Definición: El código objeto es el resultado de la compilación del código fuente.


Es una representación intermedia del programa, que aún no es ejecutable
directamente por la máquina.
● Formato: Puede ser en forma de código intermedio (como el bytecode en Java)
o en código de máquina (instrucciones específicas de la arquitectura de la
máquina).
● Ejemplo: En Java, el código objeto es el bytecode compilado que se almacena
en archivos con extensión .class.

Código Ejecutable:

● Definición: El código ejecutable es el programa que puede ser ejecutado por la


máquina. En muchos casos, este es el resultado de la compilación y enlace de los
códigos fuente y objeto.
● Formato: En sistemas operativos como Windows, puede ser un archivo .exe,
en Linux un binario ejecutable, etc.
● Ejemplo: En Java, después de compilar y vincular, el código ejecutable podría
ser el archivo .jar (archivo de Java) o el código de máquina nativo generado en
tiempo de ejecución por la máquina virtual Java (JVM).
Máquinas Virtuales:

● Definición: Una máquina virtual es un software que simula el comportamiento


de una máquina física y permite la ejecución de programas escritos para esa
máquina virtual.
● Propósito: Proporciona portabilidad al permitir que el mismo código fuente sea
ejecutado en diferentes sistemas operativos y arquitecturas de hardware.
● Ejemplo: En Java, la Máquina Virtual de Java (JVM) ejecuta el bytecode
generado por el compilador Java. En .NET, el Common Language Runtime
(CLR) ejecuta programas escritos para el Common Intermediate Language
(CIL).

▪ Tipos de lenguajes de programación.


Existen diversos tipos de lenguajes de programación, cada uno diseñado para propósitos
específicos y con características particulares. Aquí hay una clasificación general de los
tipos de lenguajes de programación:
1. Lenguajes de Bajo Nivel:

● Lenguaje de Máquina:
o Compuesto por instrucciones directamente ejecutables por la CPU. Representa
el nivel más bajo de abstracción.
● Ensamblador:
o Utiliza mnemónicos y abreviaturas para representar las instrucciones de
máquina. Proporciona un nivel de abstracción más alto que el lenguaje de
máquina.

2. Lenguajes de Alto Nivel:

● Lenguajes Procedurales:
o Basados en procedimientos y secuencias de instrucciones. Ejemplos: C, Pascal.
● Lenguajes Orientados a Objetos:
o Basados en el concepto de objetos que contienen datos y métodos. Ejemplos:
Java, C++, Python.
● Lenguajes Funcionales:
o Se centran en las funciones y la programación declarativa. Ejemplos: Haskell,
Lisp, Scala.
● Lenguajes de Script:
o Diseñados para escribir scripts rápidamente y se ejecutan interpretados.
Ejemplos: Python, JavaScript, Ruby.

3. Lenguajes de Bajo y Alto Nivel (Híbridos):

● C#:
o Combina características de lenguajes de bajo y alto nivel. Desarrollado por
Microsoft.
▪ Características de los lenguajes más difundidos.
1. Java:

● Portabilidad: Diseñado para ser independiente de la plataforma, lo que significa que el


código Java puede ejecutarse en diferentes sistemas operativos sin modificaciones.
● Orientado a Objetos: Se basa en un paradigma de programación orientado a objetos,
facilitando la organización y estructuración del código.

2. Python:

● Sintaxis Clara y Concisa: Su sintaxis es legible y fácil de aprender, lo que facilita la


escritura de código rápido y eficiente.
● Diversidad de Aplicaciones: Utilizado en desarrollo web, ciencia de datos, inteligencia
artificial, automatización, entre otros.

3. JavaScript:

● Lenguaje de Script del Lado del Cliente: Utilizado principalmente para desarrollo web
y ejecutado en el navegador del cliente.
● Asincronía: Soporta operaciones asíncronas, lo que es crucial para el desarrollo web
interactivo.

4. C++:

● Eficiencia de Bajo Nivel: Combina características de bajo y alto nivel, permitiendo un


control cercano del hardware mientras ofrece abstracciones de alto nivel.
● Orientado a Objetos: Soporta programación orientada a objetos, lo que facilita la
creación y manipulación de objetos.

5. C#:

● Diseñado para la Plataforma .NET: Integra estrechamente con el entorno .NET de


Microsoft y se utiliza principalmente para desarrollo de aplicaciones Windows y web.
● Orientado a Objetos: Proporciona un enfoque orientado a objetos similar a Java.

6. PHP:

● Lenguaje del Lado del Servidor: Diseñado específicamente para el desarrollo web del
lado del servidor.
● Integración con Bases de Datos: Ofrece integración fácil con bases de datos, como
MySQL.

7. Ruby:

● Filosofía de la Convención sobre la Configuración: Se adhiere al principio de que las


convenciones predefinidas son preferibles a la configuración manual.
● Sintaxis Elegante: Con un enfoque en la legibilidad y la simplicidad, Ruby tiene una
sintaxis elegante.
▪ Ciclo de vida del desarrollo de Software

1. Requisitos:
o Se recopilan y documentan los requisitos del software, es decir, las
funciones y características que debe tener el sistema para satisfacer las
necesidades del cliente.
2. Diseño:
o Se crea la arquitectura y el diseño del sistema con base en los requisitos.
Esto incluye la estructura del software, la interfaz de usuario, las bases de
datos, y otros aspectos técnicos.
3. Implementación (Codificación):
o Se escribe el código del software utilizando un lenguaje de
programación. Aquí es donde se traduce el diseño en una aplicación
funcional.
4. Pruebas:
o Se realizan pruebas para asegurarse de que el software funciona según lo
previsto. Esto incluye pruebas unitarias, de integración y pruebas de
sistema.
5. Despliegue:
o El software se implementa y pone en funcionamiento en el entorno de
producción para que los usuarios finales lo utilicen.
6. Mantenimiento:
o Se realizan actualizaciones, correcciones de errores y mejoras para
asegurar que el software siga siendo útil y eficiente a lo largo del tiempo.
▪ Arquitectura de una aplicación.
1. Arquitectura Monolítica:

● La aplicación se construye como una sola unidad. Todos los componentes están
interconectados y desplegados juntos.
● Es fácil de entender y desarrollar, pero puede volverse difícil de mantener a medida
que la aplicación crece.

2. Arquitectura de Microservicios:

● Divide la aplicación en servicios independientes y distribuibles. Cada servicio es


autónomo y puede comunicarse con otros a través de API.
● Favorece la escalabilidad y la independencia de desarrollo, pero introduce la
complejidad de gestionar múltiples servicios.

3. Arquitectura Orientada a Servicios (SOA):

● Los servicios son componentes independientes que se comunican a través de


mensajes. Cada servicio realiza una función específica.
● Favorece la reutilización y la flexibilidad, pero también puede ser compleja de
gestionar.

4. Arquitectura sin Servidor (Serverless):

● La lógica de la aplicación se ejecuta en entornos sin servidor. Los desarrolladores se


centran en el código, mientras que la infraestructura es gestionada por el proveedor
de servicios en la nube.
● Facilita la escalabilidad automática, pero puede tener limitaciones en términos de
tiempo de ejecución y dependencias.

5. Arquitectura de Capas:

● Organiza la aplicación en capas lógicas, como la capa de presentación, la capa de lógica


de negocio y la capa de acceso a datos (Patron Model View Controller).
● Facilita la modularidad y el mantenimiento, pero puede introducir dependencias entre
capas.

6. Arquitectura Hexagonal (Puertos y Adaptadores):

● Divide la aplicación en núcleo (dominio) y adaptadores (interfaz de usuario, bases de


datos). Los adaptadores se conectan al núcleo a través de puertos.
● Promueve la independencia de la interfaz de usuario y las tecnologías de persistencia.
-Patrones Diseño.
Los patrones de diseño son soluciones probadas para problemas de diseño comunes.
Algunos patrones importantes incluyen:
1. Patrón Singleton:

● Garantiza que una clase tenga una única instancia y proporciona un punto de acceso
global a ella.

2. Patrón Factory:

● Define una interfaz para crear objetos, pero permite a las subclases alterar el tipo de
objetos que se crearán.

3. Patrón Observer:

● Define una dependencia uno a muchos entre objetos, de modo que cuando un objeto
cambia su estado, todos sus dependientes son notificados y actualizados
automáticamente.

4. Patrón Strategy:

● Define una familia de algoritmos, encapsula cada uno de ellos y los hace
intercambiables. Permite que el cliente elija el algoritmo apropiado en tiempo de
ejecución.

5. Patrón Decorator:

● Añade nuevas funcionalidades a un objeto existente sin alterar su estructura. Utiliza la


composición en lugar de la herencia.

6. Patrón MVC (Modelo-Vista-Controlador):

● Divide una aplicación en tres componentes principales: el Modelo (lógica y datos), la


Vista (interfaz de usuario) y el Controlador (manejo de eventos y lógica).

7. Patrón Chain of Responsibility:

● Permite pasar solicitudes a lo largo de una cadena de manejadores. Cada manejador


decide si procesa la solicitud o la pasa al siguiente en la cadena.

8. Patrón Command:

● Encapsula una solicitud como un objeto, permitiendo parametrizar clientes con


operaciones, encolar solicitudes y soportar operaciones que pueden deshacerse.

Estos son solo algunos ejemplos de patrones de diseño comunes. La elección de la


arquitectura y los patrones de diseño dependerá de los requisitos específicos del
proyecto y las necesidades del desarrollo.
▪ Proceso de obtención de código ejecutable a partir del código
fuente;herramientas implicadas.
La secuencia principal es escribir el código fuente (.java), compilarlo en bytecode (.class),
empaquetarlo si es necesario en un (.jar) y luego ejecutarlo en la JVM.

1. Escritura del Código Fuente:

● Los programadores escriben el código fuente en lenguaje Java utilizando un editor de


texto o un entorno de desarrollo integrado (IDE) como Eclipse, IntelliJ, o NetBeans.

2. Compilación del Código Fuente:

● Utilizando el compilador de Java (javac), el código fuente (.java) se compila en


archivos de bytecode (.class). Este bytecode es ejecutable en la máquina virtual Java
(JVM).

bash
javac MiPrograma.java
Esto generará el archivo MiPrograma.class.
3. Empaquetado (Opcional):

● Si la aplicación es compleja y consta de varios archivos de clase, se puede empaquetar


en un archivo JAR (Java Archive) para facilitar la distribución y ejecución.

bash
jar cvf MiPrograma.jar MiPrograma.class
Esto creará un archivo JAR llamado MiPrograma.jar que puede ejecutarse en una
JVM.
4. Ejecución del Código Bytecode en la JVM:

● El código bytecode generado se ejecuta en la Máquina Virtual Java (JVM). Para


ejecutar la aplicación, se utiliza el comando java seguido del nombre de la clase
principal (que contiene el método main).

bash
java MiPrograma
Esto inicia la JVM y ejecuta la aplicación Java.

5. Pruebas y Depuración:

● Antes de distribuir la aplicación, es fundamental realizar pruebas y depuración para


garantizar su correcto funcionamiento.

6. Generación de Documentación (Opcional):

● Se puede utilizar Javadoc para generar documentación a partir del código fuente Java,
facilitando la comprensión y el mantenimiento.
bash
javadoc -d docs MiPrograma.java
Esto creará documentación en el directorio docs.
Este es un resumen básico del proceso. Es importante señalar que la máquina virtual
Java (JVM) es esencial para la ejecución de aplicaciones Java y proporciona
portabilidad, ya que permite que el mismo código bytecode se ejecute en diferentes
plataformas que tienen una JVM compatible.

Tema 2 - Instalación y uso de entornos de


desarrollo:
● Funciones de un entorno de desarrollo.

Un entorno de desarrollo de software (IDE, por sus siglas en inglés) es una herramienta
integral que proporciona un conjunto de funciones y características destinadas a facilitar
y mejorar el proceso de desarrollo de software. Las funciones de un entorno de
desarrollo son variadas y están diseñadas para ayudar a los programadores a escribir,
depurar y mantener código de manera eficiente. Aquí hay algunas funciones comunes
de un entorno de desarrollo:

1. Editor de Código:
o Proporciona un editor de texto avanzado con funciones como resaltado
de sintaxis, autocompletado y formato de código.
o Facilita la escritura y edición de código fuente.
2. Compilación y Construcción:
o Permite compilar y construir proyectos de software.
o Proporciona herramientas para gestionar dependencias y generar
ejecutables.
3. Depuración:
o Ofrece herramientas de depuración para detectar y corregir errores en el
código.
o Permite establecer puntos de interrupción, inspeccionar variables y
seguir la ejecución del programa paso a paso.
4. Gestión de Proyectos:
o Facilita la creación, apertura y gestión de proyectos de software.
o Proporciona herramientas para organizar y gestionar archivos y recursos.
5. Control de Versiones:
o Integración con sistemas de control de versiones como Git, SVN, etc.
o Permite realizar operaciones como commit, push, pull y fusionar ramas.
6. Navegador Integrado:
o Proporciona un explorador de archivos y una interfaz para navegar por la
estructura del proyecto.
o Facilita la búsqueda y apertura de archivos.
7. Herramientas de Refactorización:
o Ofrece funciones de refactorización para mejorar la estructura del código
sin cambiar su comportamiento.
o Ejemplos incluyen la extracción de métodos, renombrar variables, etc.
8. Integración de Pruebas:
o Facilita la ejecución de pruebas unitarias y la integración con marcos de
pruebas.
o Proporciona informes de resultados de pruebas.
9. Autocompletado y Ayuda Contextual:
o Ofrece sugerencias automáticas de código mientras se escribe.
o Proporciona información contextual y documentación sobre funciones y
clases.
10. Generación de Documentación:
o Facilita la generación de documentación del código fuente.
o Puede integrarse con herramientas de generación de documentación
como Javadoc.
11. Soporte para Lenguajes y Frameworks Específicos:
o Ofrece soporte específico para diferentes lenguajes de programación y
frameworks.
o Puede incluir integración con herramientas específicas del ecosistema de
desarrollo.
12. Personalización y Extensiones:
o Permite la personalización del entorno según las preferencias del
programador.
o Ofrece soporte para la instalación de extensiones y complementos.

● Instalación y desinstalación de módulos adicionales.

En Eclipse, los módulos adicionales son generalmente conocidos como "plugins". Estos
plugins proporcionan funcionalidades adicionales y extensiones al entorno de
desarrollo. La instalación de plugins en Eclipse es bastante sencilla y se puede realizar a
través del Eclipse Marketplace o manualmente utilizando el instalador de software.

Método 1: Instalación desde Eclipse Marketplace

1. Abre Eclipse.
2. Ve a Help > Eclipse Marketplace en el menú.
3. En la ventana de Eclipse Marketplace, puedes buscar y seleccionar los plugins
que deseas instalar.
4. Haz clic en el botón "Go to the Marketplace" si aún no estás allí.
5. Busca el plugin que deseas instalar, y haz clic en el botón "Go to the full listing"
para obtener más información.
6. Haz clic en "Install" para iniciar el proceso de instalación.
7. Sigue las instrucciones en pantalla para completar la instalación.

Método 2: Instalación Manual

1. Abre Eclipse.
2. Ve a Help > Eclipse Marketplace en el menú.
3. En la ventana de Eclipse Marketplace, busca y anota el nombre del plugin que
deseas instalar.
4. Ve a Help > Install New Software... en el menú.
5. En la ventana "Available Software", haz clic en el enlace "Add..." para agregar
un nuevo repositorio de software.
6. Ingresa un nombre para el repositorio y en la dirección, coloca la URL del sitio
del plugin o del repositorio.
7. Haz clic en "OK" y espera a que Eclipse cargue el contenido del nuevo
repositorio.
8. Selecciona el plugin que deseas instalar y haz clic en "Next".
9. Sigue las instrucciones en pantalla para completar la instalación.

Recuerda que algunos plugins pueden tener dependencias específicas o requerir


versiones específicas de Eclipse, así que asegúrate de leer la documentación del plugin
antes de intentar la instalación.

● Uso básico de un entorno de desarrollo.


El uso básico de un entorno de desarrollo Java implica la creación, edición, compilación y
ejecución de programas Java.

Paso 1: Instalación de Eclipse

Si aún no tienes Eclipse instalado, puedes descargarlo desde el sitio oficial de Eclipse
(https://www.eclipse.org/ide/) y seguir las instrucciones de instalación.

Paso 2: Crear un Proyecto Java

1. Abre Eclipse.
2. Ve a File > New > Java Project.
3. Ingresa un nombre para tu proyecto, por ejemplo, "MiPrimerProyectoJava".
4. Haz clic en "Finish" para crear el proyecto.

Paso 3: Crear una Clase Java

1. En la ventana "Package Explorer" de Eclipse, haz clic derecho en la carpeta "src" dentro
de tu proyecto.
2. Selecciona New > Class.
3. Ingresa un nombre para tu clase, por ejemplo, "MiClaseJava".
4. Marca la opción "public static void main(String[] args)" para agregar el método main.
5. Haz clic en "Finish" para crear la clase.

Paso 4: Escribir y Ejecutar un Programa Java Simple

En tu clase recién creada, puedes escribir un programa simple. Por ejemplo:

java
public class MiClaseJava {
public static void main(String[] args) {
System.out.println("Hola, Mundo!");
}
}

1. Guarda el archivo (Ctrl + S o Cmd + S).


2. Haz clic derecho en el editor de código y selecciona Run As > Java Application.

Verás la salida "Hola, Mundo!" en la consola de Eclipse.

● Generación de ejecutables.

En Eclipse, no generas un ejecutable directamente como lo harías con algunos lenguajes


compilados, como C o C++. En Java, el código fuente se compila en archivos de
bytecode, que se ejecutan en la máquina virtual Java (JVM). Sin embargo, puedes
exportar tu proyecto Java en un formato que pueda ser ejecutado de manera
independiente en una máquina que tenga instalada la JVM. A continuación, te explico
cómo hacerlo:

Exportar un Archivo JAR Ejecutable en Eclipse:

1. Abre tu Proyecto en Eclipse:


o Asegúrate de tener abierto Eclipse y tu proyecto.
2. Selecciona tu Proyecto:
o Haz clic derecho en el proyecto que deseas exportar en el explorador del
proyecto.
3. Elige "Export":
o Selecciona File > Export en el menú.
4. Selecciona "Runnable JAR file":
o En el cuadro de diálogo de Exportación, expande la carpeta "Java" y selecciona
"Runnable JAR file". Haz clic en "Next".
5. Selecciona tu Clase Principal:
o En el campo "Launch configuration", selecciona la clase que contiene el
método main que quieres que se ejecute cuando se inicie el JAR.
6. Especifica la Ruta de Exportación y el Nombre del Archivo:
o Elige una carpeta de destino y proporciona un nombre para el archivo JAR.
7. Configuración de Bibliotecas:
o Puedes elegir cómo manejar las bibliotecas en el archivo JAR. Normalmente,
seleccionas "Extract required libraries into generated JAR" para incluir todas
las bibliotecas necesarias en el JAR.
8. Haz clic en "Finish":
o Haz clic en "Finish" para completar el proceso de exportación.

Después de completar estos pasos, tendrás un archivo JAR ejecutable que puede ser
ejecutado en cualquier máquina con la JVM instalada. Puedes ejecutar el JAR desde la
línea de comandos usando el comando java -jar TuArchivo.jar.

Recuerda que para que tu aplicación sea verdaderamente portátil, cualquier biblioteca
externa que estés utilizando debe estar disponible en la máquina de destino. Además, es
posible que debas proporcionar instrucciones adicionales para ejecutar tu aplicación
según la configuración específica de tu proyecto.
Tema 3 -Diseño y realización de pruebas:
● Planificación de Pruebas.
La planificación de pruebas de software es un proceso crucial para garantizar la calidad
del software. Pasos a seguir:

1. Entender Requisitos y Documentación:

 Revisar y comprender los requisitos del software.


 Analizar la documentación del proyecto para obtener una visión clara de la
arquitectura y funcionalidad.

2. Definir Objetivos de Pruebas:

 Establecer objetivos claros y medibles para las pruebas.


 Identificar las características críticas y los escenarios de uso importantes.

3. Identificar Tipos de Pruebas:

 Determinar los tipos de pruebas necesarios (pruebas funcionales, no funcionales, de


rendimiento, de seguridad, etc.).
 Priorizar las pruebas según la criticidad y los riesgos asociados.

4. Selección de Herramientas y Ambientes:

 Seleccionar las herramientas de prueba adecuadas.


 Configurar los entornos de prueba, incluyendo hardware y software.

5. Diseño de Casos de Prueba:

 Crear casos de prueba detallados que cubran todos los escenarios relevantes.
 Asegurarse de que los casos de prueba sean repetibles y verificables.

6. Estrategia de Ejecución:

 Definir la estrategia de ejecución de pruebas, incluyendo secuencia y dependencias.


 Planificar la asignación de recursos y el cronograma de ejecución.

7. Gestión de Datos de Prueba:

 Preparar conjuntos de datos de prueba relevantes y realistas.


 Asegurarse de que los datos de prueba sean anónimos y cumplan con regulaciones de
privacidad.

8. Configuración de Ambiente de Pruebas:

 Preparar el ambiente de prueba con configuraciones específicas.


 Garantizar que el ambiente de prueba sea similar al de producción cuando sea posible.

9. Ejecución de Pruebas:

 Ejecutar casos de prueba según el plan.


 Registrar resultados y documentar cualquier problema encontrado.

10. Reportar y Seguimiento:

 Generar informes de prueba que sean claros y comprensibles.


 Priorizar y asignar problemas encontrados para su resolución.
 Seguir el progreso de la corrección de errores.

11. Criterios de Éxito y Finalización:

 Definir criterios claros para el éxito de las pruebas.


 Establecer cuándo se considera completa la fase de pruebas.

12. Revisión y Mejora Continua:

 Realizar revisiones retrospectivas después de cada ciclo de pruebas.


 Identificar áreas de mejora y ajustar la estrategia de prueba para futuros ciclos.

13. Automatización de Pruebas:

 Evaluar la posibilidad de automatizar pruebas repetitivas y críticas.


 Implementar scripts de prueba automatizados según sea necesario.

14. Pruebas de Regresión:

 Planificar pruebas de regresión para garantizar que las nuevas funciones no afecten las
existentes.

15. Validación y Aprobación:

 Obtener validación y aprobación del cliente o partes interesadas.

16. Documentación:

 Mantener documentación actualizada de todas las actividades de prueba.

Recuerda que la planificación de pruebas debe ser flexible y adaptarse según las
necesidades y cambios en el proyecto. Además, la colaboración con otros equipos y
partes interesadas es esencial para una planificación de pruebas efectiva.
Ejemplo: Planificación de pruebas para un sistema de comercio electrónico:

Planificación de Pruebas de Software: Sistema de Comercio Electrónico


1. Objetivos de las Pruebas:

 Verificar la funcionalidad del Sistema de Comercio Electrónico.


 Validar la seguridad de las transacciones y la protección de datos.
 Evaluar el rendimiento del sistema durante picos de tráfico.
 Asegurar la compatibilidad con varios navegadores y dispositivos.

2. Alcance:

 Módulos incluidos: Catálogo de productos, Carrito de compras, Proceso de pago,


Gestión de pedidos.
 No incluido en esta fase: Integración con sistemas de envío externos.

3. Tipos de Pruebas:

 Pruebas Funcionales
o Pruebas de Casos de Uso
o Pruebas de Interfaz de Usuario
o Pruebas de Integración
o Pruebas de Aceptación del Usuario (UAT)
 Pruebas No Funcionales
o Pruebas de Rendimiento
o Pruebas de Seguridad
o Pruebas de Compatibilidad de Navegadores y Dispositivos
o Pruebas de Estrés

4. Cronograma:

 Fase de Preparación (Semana 1-2):


o Revisión de Requisitos y Documentación.
o Configuración del Ambiente de Pruebas.
o Creación de Escenarios de Pruebas.
 Fase de Ejecución (Semana 3-6):
o Ejecución de Pruebas Funcionales.
o Ejecución de Pruebas No Funcionales.
o Automatización de Pruebas de Regresión.
o Pruebas de Rendimiento y Compatibilidad.
 Fase de Informes y Seguimiento (Semana 7-8):
o Generación de Informes de Pruebas.
o Seguimiento y Resolución de Defectos.
o Revisión de Resultados con el Equipo de Desarrollo.

5. Recursos:

 Personal:
o Un Líder de Pruebas.
o Cuatro Ingenieros de Pruebas.
 Herramientas:
o Selenium y TestNG para pruebas de interfaz de usuario.
o Apache JMeter para pruebas de rendimiento.
o OWASP ZAP para pruebas de seguridad.

6. Ambiente de Pruebas:

 Servidor de Pruebas: Ubuntu Server 20.04.


 Base de Datos: MySQL.
 Navegadores Compatibles: Chrome, Firefox, Safari, Edge.
 Dispositivos: PC, tabletas y teléfonos móviles.

7. Criterios de Éxito:

 Todos los casos de prueba funcional se ejecutan sin errores.


 El tiempo de carga de la página de pago es inferior a 3 segundos.
 Menos del 2% de defectos críticos sin resolver al final de la fase de pruebas.

8. Riesgos y Mitigaciones:

 Riesgo: Variaciones en la carga del servidor.


o Mitigación: Realizar pruebas de estrés y escalabilidad en diferentes
condiciones de carga.
 Riesgo: Problemas de seguridad en transacciones.
o Mitigación: Implementar controles de seguridad y realizar pruebas de
penetración.

9. Revisión y Mejora Continua:

 Realizar una revisión retrospectiva al final de la fase de pruebas.


 Identificar áreas de mejora y ajustar la estrategia de pruebas para futuros ciclos.

● Tipos de pruebas: Funcionales, estructurales,


regresión.
1. Pruebas Funcionales:

Las pruebas funcionales evalúan si el software cumple con los requisitos funcionales y
especificaciones del usuario. Se centran en verificar las funciones y características del
sistema desde la perspectiva del usuario. Algunos tipos comunes de pruebas funcionales
incluyen:

 Pruebas de Casos de Uso: Validan que el software realiza las acciones


esperadas en diferentes escenarios de uso.
Ejemplo: En un sistema de comercio electrónico, verificar que el proceso de
compra, desde la selección de productos hasta el pago, funciona correctamente.

 Pruebas de Interfaz de Usuario (UI): Verifican la interfaz gráfica del usuario,


la navegación y la experiencia del usuario.

Ejemplo: En una aplicación web, verificar que todos los botones, enlaces y
formularios se muestran correctamente y son funcionales en diferentes
navegadores.

 Pruebas de Integración: Comprueban la interoperabilidad entre diferentes


componentes o módulos del sistema.

Ejemplo: En un sistema bancario, verificar que la información se actualiza


correctamente en todas las cuentas relacionadas cuando se realiza una
transferencia de fondos.

 Pruebas de Aceptación del Usuario (UAT): Son realizadas por los usuarios
finales para confirmar que el sistema cumple con sus expectativas.

Ejemplo: En un sistema de gestión de proyectos, confirmar que los usuarios


finales pueden crear, modificar y cerrar tareas según sus necesidades.

2. Pruebas Estructurales (o Pruebas No Funcionales):

Las pruebas estructurales evalúan aspectos internos del software, como el código fuente,
la arquitectura y el rendimiento. Estas pruebas se centran en asegurar que el software
funcione de manera eficiente y confiable. Algunos ejemplos de pruebas estructurales
incluyen:

 Pruebas de Unidad: Verifican que cada unidad de código individual funcione


correctamente.

Ejemplo: Para una función que suma dos números, se ejecuta una prueba con
valores conocidos y se verifica si la suma es correcta.

 Pruebas de Rendimiento: Evalúan la capacidad del sistema para manejar


cargas de trabajo específicas y su capacidad de respuesta.

Ejemplo: Medir el tiempo de respuesta de una página web bajo diferentes


niveles de tráfico simulado.

 Pruebas de Seguridad: Buscan identificar vulnerabilidades y asegurar que el


software es resistente a amenazas de seguridad.

Ejemplo: En una aplicación bancaria en línea, comprobar que la información


confidencial del usuario está protegida contra ataques como la inyección SQL.

 Pruebas de Estrés: Evalúan el comportamiento del sistema bajo condiciones


extremas o situaciones inusuales.
Ejemplo: Realizar pruebas para determinar cómo el sistema maneja un gran
número de usuarios concurrentes o una carga de trabajo intensa.

3. Pruebas de Regresión:

Las pruebas de regresión se centran en asegurar que las nuevas modificaciones o


adiciones al software no hayan introducido errores en las funcionalidades existentes.
Estas pruebas son críticas cuando se realizan actualizaciones o cambios en el código.
Algunos tipos de pruebas de regresión son:

 Pruebas de Regresión Automatizadas: Utilizan scripts automáticos para


volver a ejecutar casos de prueba existentes después de cambios en el código.
 Pruebas de Retroceso (Backward Compatibility): Verifican que las nuevas
versiones del software sean compatibles con versiones anteriores.
 Pruebas de Impacto: Evalúan cómo los cambios afectan otras áreas del
sistema.

La combinación de estos tipos de pruebas es esencial para garantizar un software de


calidad. La elección de qué pruebas aplicar depende de la naturaleza del proyecto y los
requisitos específicos del software.

● Procedimientos y casos de prueba.


Ejemplo de la gestión de un carrito de compras:

Procedimientos:
1. Añadir Producto al Carrito:

 Objetivo: Verificar que los usuarios pueden añadir productos al carrito correctamente.
 Procedimiento:
1. Navegar a la página de un producto.
2. Hacer clic en el botón "Añadir al Carrito".
3. Verificar que el producto se añade al carrito.
4. Confirmar que la cantidad en el icono del carrito se actualiza.

2. Modificar Cantidad en el Carrito:

 Objetivo: Confirmar que los usuarios pueden ajustar la cantidad de productos en el


carrito.
 Procedimiento:
1. Ir al carrito de compras.
2. Modificar la cantidad de un producto.
3. Verificar que el total del carrito se actualiza correctamente.

3. Eliminar Producto del Carrito:

 Objetivo: Asegurar que los usuarios pueden eliminar productos del carrito.
 Procedimiento:
1. Ir al carrito de compras.
2. Eliminar un producto.
3. Verificar que el producto se elimina del carrito.

Casos de Prueba:
Caso de Prueba 1: Añadir Producto al Carrito

 Precondición: La página del producto está disponible.


 Pasos:
1. Navegar a la página del producto.
2. Hacer clic en "Añadir al Carrito".
 Resultado Esperado: El producto se añade al carrito y la cantidad en el icono del
carrito se actualiza.

Caso de Prueba 2: Modificar Cantidad en el Carrito

 Precondición: Al menos un producto está en el carrito.


 Pasos:
1. Ir al carrito de compras.
2. Modificar la cantidad de un producto.
 Resultado Esperado: La cantidad se actualiza y el total del carrito refleja el cambio.

Caso de Prueba 3: Eliminar Producto del Carrito

 Precondición: Al menos un producto está en el carrito.


 Pasos:
1. Ir al carrito de compras.
2. Eliminar un producto.
 Resultado Esperado: El producto se elimina del carrito y la cantidad en el icono del
carrito se ajusta.

● Herramientas de depuración.
● Pruebas de Código: Cubrimiento, valores límite,
clases de equivalencia, entre otras.
1. Pruebas de Cubrimiento:

 Objetivo: Asegurarse de que todas las líneas de código sean ejecutadas durante las
pruebas.

Caso de Prueba:

 Criterios de Aceptación:
o Utilizar herramientas de análisis de cubrimiento como JaCoCo o Cobertura.
o Verificar que al menos el 90% de las líneas de código están cubiertas por las
pruebas.
o Identificar y corregir áreas no cubiertas.

2. Pruebas de Valores Límite:

 Objetivo: Evaluar el comportamiento del software en los límites de su entrada.

Caso de Prueba:

 Escenario:
o Para una función que acepta números enteros entre 1 y 100, probar con
valores 1, 50, 100.
o Verificar que el software maneje correctamente los límites inferior y superior.
o Probar con valores fuera de este rango y verificar la respuesta del software.

3. Pruebas de Clases de Equivalencia:

 Objetivo: Dividir el conjunto de datos de entrada en clases de equivalencia y probar


representantes de cada clase.

Caso de Prueba:

 Escenario:
o Para una función que acepta números enteros, dividir los números en clases
de equivalencia (negativos, cero, positivos).
o Seleccionar un representante de cada clase para realizar pruebas.
o Verificar que el software maneje adecuadamente cada clase.

● Normas de calidad.
Existen diversas normas y estándares de calidad de software que son reconocidos
internacionalmente. Estas normas establecen pautas y buenas prácticas para el
desarrollo, mantenimiento y evaluación de la calidad del software. Aquí hay algunas de
las normas más relevantes:

1. ISO/IEC 9126 (Reemplazada por ISO/IEC 25010):

 Objetivo:
o Proporcionar un marco para la calidad del software con enfoque en
características como funcionalidad, fiabilidad, usabilidad, eficiencia,
mantenibilidad y portabilidad.
 Notas:
o La norma ISO/IEC 9126 ha sido reemplazada por la norma ISO/IEC 25010, que
proporciona una estructura más actualizada y aborda nuevas tecnologías y
prácticas de desarrollo.
2. ISO/IEC 25010: SQuaRE (Software Quality Requirements and
Evaluation):

 Objetivo:
o Establecer un modelo de calidad para el software y sistemas de información,
considerando características de calidad y subcaracterísticas.
 Notas:
o Se centra en características como la funcionalidad, la seguridad, la usabilidad,
la eficiencia y otras.

3. ISO/IEC 12207: Procesos del Ciclo de Vida del Software:

 Objetivo:
o Establecer procesos para el ciclo de vida del software, incluyendo adquisición,
suministro, desarrollo, operación y mantenimiento.
 Notas:
o Proporciona una estructura para la gestión de procesos y actividades a lo largo
del ciclo de vida del software.

4. ISO/IEC 15504 (SPICE - Software Process Improvement and


Capability Determination):

 Objetivo:
o Proporcionar un marco para la evaluación y mejora de procesos de software.
 Notas:
o Ayuda a las organizaciones a evaluar la capacidad de sus procesos y mejorar la
eficacia y eficiencia del desarrollo de software.

5. CMMI (Capability Maturity Model Integration):

 Objetivo:
o Proporcionar un conjunto de mejores prácticas para mejorar los procesos de
desarrollo y mantenimiento de software.
 Notas:
o Divide la mejora del proceso en niveles de madurez, desde inicial hasta
optimizado.

6. IEEE 730: Estándar para la Gestión de Calidad del Software:

 Objetivo:
o Establecer estándares para la gestión de la calidad del software, incluyendo la
planificación, supervisión y evaluación.
 Notas:
o Proporciona directrices para el desarrollo de planes de gestión de calidad del
software.

7. IEEE 829: Estándar para Documentación de Pruebas de Software:

 Objetivo:
o Establecer estándares para la documentación de pruebas de software,
incluyendo planes de prueba, casos de prueba y procedimientos de prueba.
 Notas:
o Proporciona pautas para la documentación efectiva de actividades de prueba.

Estas normas son utilizadas en la industria del software para garantizar la calidad y
eficiencia en los procesos de desarrollo. La elección de una norma específica puede
depender de la industria, los requisitos del cliente y la naturaleza del proyecto.

● Pruebas unitarias; herramientas.


 JUnit (Java):

 Descripción:
o JUnit es una popular herramienta de prueba unitaria para aplicaciones
Java.
 Características:
o Anotaciones para definir pruebas.
o Asserts para verificar resultados.
o Integración con IDEs como Eclipse y IntelliJ.

 NUnit (.NET):

 Descripción:
o NUnit es un marco de prueba unitaria para aplicaciones .NET (C# y otros
lenguajes de .NET).
 Características:
o Anotaciones y atributos para definir pruebas.
o Asserts para validar resultados.
o Soporte para pruebas parametrizadas.

 Pytest (Python):

 Descripción:
o Pytest es un marco de prueba para aplicaciones Python.
 Características:
o Sintaxis sencilla y fácil de aprender.
o Detección automática de pruebas.
o Soporte para fixtures y mocks.

 Mocha (JavaScript):

 Descripción:
o Mocha es un marco de prueba para JavaScript (Node.js y el navegador).
 Características:
o Soporte para pruebas asíncronas.
o Configuración fácil y flexible.
o Integración con bibliotecas como Chai y Sinon.

 PHPUnit (PHP):

 Descripción:
o PHPUnit es un marco de prueba unitaria para aplicaciones PHP.
 Características:
o Soporte para pruebas de unidades y pruebas de integración.
o Integración con herramientas de CI/CD.

● Automatización de pruebas.
 Selenium:

 Uso:
o Automatización de pruebas de navegadores web.
 Características:
o Soporte para múltiples navegadores.
o Integración con varios lenguajes de programación.

 Appium:

 Uso:
o Automatización de pruebas de aplicaciones móviles (iOS, Android).
 Características:
o Soporte para pruebas nativas, híbridas y basadas en web.

 JUnit y TestNG:

 Uso:
o Automatización de pruebas unitarias en Java.
 Características:
o Anotaciones para definir pruebas.
o Integración con IDEs y herramientas de construcción.

 Robot Framework:

 Uso:
o Automatización de pruebas de aceptación y pruebas de robot.
 Características:
o Sintaxis fácil de leer.
o Soporte para pruebas web, móviles y de API.
● Documentación de pruebas.
La documentación de pruebas de software es esencial para registrar y comunicar
información sobre las pruebas realizadas en un proyecto. Proporciona una referencia
clave para el equipo de desarrollo, los probadores y otros interesados, ayudando a
comprender el alcance, los resultados y los detalles de las pruebas realizadas. Esta es la
estructura general de la documentación de pruebas de software:

1. Plan de Pruebas:

 Descripción:
o Un documento que describe la estrategia general de pruebas para el proyecto.
 Contenido:
o Objetivos de las pruebas.
o Alcance y exclusión.
o Recursos necesarios.
o Cronograma de pruebas.
o Estrategia de pruebas (pruebas unitarias, de integración, etc.).
o Criterios de aceptación.

2. Casos de Prueba:

 Descripción:
o Documentos individuales que describen escenarios de prueba específicos.
 Contenido:
o Título y descripción del caso de prueba.
o Pasos de prueba detallados.
o Datos de entrada.
o Resultados esperados.
o Condiciones previas y posteriores.

3. Suite de Pruebas:

 Descripción:
o Un conjunto de casos de prueba relacionados que se ejecutan conjuntamente.
 Contenido:
o Lista de casos de prueba incluidos.
o Propósito de la suite de pruebas.
o Información sobre la configuración necesaria.

4. Informe de Ejecución de Pruebas:

 Descripción:
o Un resumen de los resultados de las pruebas ejecutadas.
 Contenido:
o Resumen general de resultados (éxito, falla, no ejecutado).
o Descripciones detalladas de los problemas encontrados.
o Estadísticas de cobertura.
o Información sobre la configuración de prueba utilizada.
5. Registro de Defectos:

 Descripción:
o Documento que registra los problemas encontrados durante las pruebas.
 Contenido:
o Identificación única del defecto.
o Descripción del defecto.
o Pasos para reproducir el defecto.
o Prioridad y gravedad.
o Estado del defecto (abierto, asignado, cerrado, etc.).

6. Matriz de Rastreo de Requisitos:

 Descripción:
o Un documento que muestra la relación entre los requisitos y los casos de
prueba.
 Contenido:
o Lista de requisitos.
o Enlaces a los casos de prueba que prueban cada requisito.

7. Documentación de Configuración de Pruebas:

 Descripción:
o Detalles sobre la configuración del entorno de prueba.
 Contenido:
o Hardware y software requeridos.
o Configuración de red.
o Configuración del sistema operativo.

8. Scripts de Prueba Automatizados:

 Descripción:
o Documentación de los scripts utilizados en pruebas automatizadas.
 Contenido:
o Descripción de la funcionalidad probada.
o Instrucciones de ejecución.
o Manejo de datos de prueba.

9. Documentación de Rendimiento:

 Descripción:
o Información detallada sobre las pruebas de rendimiento realizadas.
 Contenido:
o Resultados de las pruebas de carga.
o Información sobre la escalabilidad del sistema.

10. Documentación de Seguridad:

 Descripción:
o Información detallada sobre las pruebas de seguridad realizadas.
 Contenido:
o Resultados de las pruebas de penetración.
o Identificación de posibles vulnerabilidades.

Optimización y documentación - Refactorización.


La refactorización de software es el proceso de modificar el código fuente de un
programa sin cambiar su comportamiento externo con el objetivo de mejorar su calidad,
mantenibilidad y eficiencia. La refactorización ayuda a reducir la deuda técnica y a
hacer que el código sea más comprensible y fácil de mantener. Aquí hay algunas
técnicas comunes de refactorización:

 Extracción de métodos:

o Objetivo: Dividir un método grande en métodos más pequeños y


específicos.
o Beneficios: Mejora la legibilidad y facilita la reutilización del código.

// Antes
void procesarDatos() {
// código extenso
}

// Después
void procesarDatos() {
procesarParte1();
procesarParte2();
}

void procesarParte1() {
// código específico de la parte 1
}

void procesarParte2() {
// código específico de la parte 2
}

 Eliminación de código duplicado:

 Objetivo: Reducir la duplicación de código para mejorar la coherencia y


facilitar futuras modificaciones.
 Beneficios: Menos propenso a errores y cambios más rápidos.

// Antes
void operacion1() {
// código común
// operación específica 1
}

void operacion2() {
// código común
// operación específica 2
}

// Después
void operacionComun() {
// código común
}

void operacion1() {
operacionComun();
// operación específica 1
}

void operacion2() {
operacionComun();
// operación específica 2
}

 Renombrar variables y métodos:

 Objetivo: Utilizar nombres descriptivos que reflejen mejor la funcionalidad.


 Beneficios: Mejora la comprensión del código.

// Antes
int x = 10;

// Después
int numeroIntentos = 10;

 Uso de patrones de diseño:

 Objetivo: Aplicar patrones de diseño para mejorar la estructura y la flexibilidad


del código.
 Beneficios: Mejora la modularidad y facilita la expansión futura.

-Limitaciones de la Refactorización
 Costo de tiempo y recursos:

 Descripción: La refactorización puede ser un proceso que consume tiempo y


recursos. A veces, la presión del tiempo en un proyecto puede limitar la cantidad
de refactorización que se puede realizar.
 Consideración: Es importante equilibrar el beneficio a largo plazo de una base
de código más limpia con las restricciones de tiempo y recursos del proyecto.

 Riesgo de introducir errores:

 Descripción: Durante la refactorización, existe el riesgo de introducir errores en


el código existente. Si no se realizan pruebas adecuadas después de la
refactorización, podrían surgir problemas.
 Consideración: Es fundamental realizar pruebas exhaustivas después de cada
refactorización. Las pruebas automáticas pueden ayudar a identificar
rápidamente posibles problemas.

 Requerimientos de conocimiento:

 Descripción: La refactorización efectiva requiere un conocimiento profundo del


sistema existente. Los desarrolladores deben entender cómo interactúan
diferentes partes del código para realizar cambios seguros y significativos.
 Consideración: Se debe fomentar la documentación adecuada y el intercambio
de conocimientos entre miembros del equipo para facilitar la refactorización.

 Impacto en el tiempo de lanzamiento:

 Descripción: La refactorización puede interferir con los plazos de lanzamiento


del producto si no se planifica cuidadosamente. Los cambios significativos en el
código pueden requerir tiempo adicional de prueba.
 Consideración: La planificación cuidadosa, la identificación de áreas críticas y
la priorización de la refactorización pueden ayudar a minimizar el impacto en los
plazos de lanzamiento.

-Patrones de refactorización más usuales.


Los patrones de refactorización son soluciones generales para problemas comunes que
surgen durante el proceso de refactorización de código.

 Extract Method:

 Descripción: Consiste en tomar un fragmento de código y convertirlo en un


método separado.
 Cuándo usarlo: Cuando se encuentra un bloque de código que realiza una tarea
específica y puede ser reutilizado en otras partes del código.

 Inline Method:

 Descripción: Contrario a "Extract Method", este patrón implica eliminar un


método y colocar su lógica directamente en el lugar donde se llama.
 Cuándo usarlo: Cuando un método es tan simple que no agrega claridad y su
existencia solo complica el código.

 Move Method:

 Descripción: Mover un método de una clase a otra para mejorar la cohesión y


reducir la dependencia.
 Cuándo usarlo: Cuando un método se relaciona más con otra clase que con la
clase actual.
 Rename Method:

 Descripción: Cambiar el nombre de un método para que refleje mejor su


funcionalidad.
 Cuándo usarlo: Cuando el nombre actual del método no es claro o no describe
adecuadamente lo que hace.

 Introduce Parameter Object:

 Descripción: Agrupar parámetros relacionados en un objeto para reducir la lista


de argumentos de un método.
 Cuándo usarlo: Cuando un método tiene muchos parámetros, especialmente si
algunos de ellos son relacionados entre sí.

-Analizadores de código
Los analizadores de software son herramientas que examinan el código fuente de un
programa para identificar patrones, errores, inconsistencias y otras características que
pueden afectar la calidad, el rendimiento y la seguridad del software. Estos analizadores
pueden automatizar la detección de problemas potenciales y proporcionar
retroalimentación a los desarrolladores. Aquí hay algunos tipos comunes de
analizadores de software:

1. Analizadores de Estilo de Código:


o Propósito: Evalúan el código en función de las convenciones de estilo y
las pautas de codificación.
o Ejemplos: ESLint, Pylint, Checkstyle, JSparrow
2. Analizadores Estáticos de Código (Static Code Analyzers):
o Propósito: Examinan el código fuente sin ejecutarlo y buscan posibles
problemas como variables no utilizadas, código inalcanzable, entre otros.
o Ejemplos: SonarQube, PMD, ReSharper.
3. Analizadores de Seguridad:
o Propósito: Identifican vulnerabilidades de seguridad en el código, como
posibles ataques de inyección SQL, XSS, etc.
o Ejemplos: SonarQube (también incluye análisis de seguridad), Fortify,
OWASP Dependency-Check.
4. Analizadores de Rendimiento:
o Propósito: Evalúan el código en busca de posibles cuellos de botella y
problemas de rendimiento.
o Ejemplos: jSparrow, VisualVM, Performance Analyzer de Xcode.
5. Analizadores de Complejidad Ciclomática:
o Propósito: Calculan la complejidad del código basándose en la cantidad
de caminos de ejecución posibles.
o Ejemplos: McCabe Complexity Checker.
6. Analizadores de Dependencias:
o Propósito: Identifican dependencias entre componentes de software y
evalúan la coherencia de las dependencias.
o Ejemplos: Dependency-Check, JDepend.
7. Analizadores de Cobertura de Código:
o Propósito: Evalúan qué porcentaje del código fuente ha sido ejecutado
por las pruebas.
o Ejemplos: JaCoCo, Istanbul (para JavaScript/Node.js), codecov.io.
8. Analizadores de Diagramas UML:
o Propósito: Generan diagramas UML (Unified Modeling Language) a
partir del código fuente.
o Ejemplos: Enterprise Architect, PlantUML.
9. Analizadores de Licencias de Software:
o Propósito: Identifican las licencias de software utilizadas en las
dependencias del proyecto.
o Ejemplos: FOSSA, Black Duck.
10. Analizadores de Copia de Código (Duplicación de Código):
o Propósito: Identifican fragmentos de código duplicados en el código
fuente.
o Ejemplos: CPD (Copy-Paste Detector) de PMD.
11. Analizadores de Documentación de Código:
o Propósito: Evalúan la calidad y la coherencia de la documentación del
código.
o Ejemplos: Doxygen, Javadoc.

● Control de versiones.
Instalar VisualSVNServer
https://www.visualsvn.com/server/download/
Instalar SVN Subversion y su conector
https://eclipse.dev/subversive/installation-instructions.php

Alternativa, instalar Subclipse. Subclipse proporciona integración de SVN en el entorno


de desarrollo Eclipse. Aquí tienes los pasos básicos para instalar Subclipse:

1. Abrir Eclipse:
o Inicia Eclipse en tu sistema.
2. Instalar Subclipse:
o Ve a Help -> Eclipse Marketplace en la barra de menú.
3. Buscar Subclipse:
o En el cuadro de diálogo del Marketplace, busca "Subclipse" en el cuadro
de búsqueda.
4. Instalar Subclipse:
o En los resultados de la búsqueda, deberías encontrar "Subclipse" en la
lista. Haz clic en Go to the full listing y luego haz clic en el botón
Go to the Subclipse Installation para instalar Subclipse.
5. Seleccionar Componentes:
o En la página de instalación, selecciona los componentes que deseas
instalar. Asegúrate de seleccionar "Subclipse" y "SVNKit" (o "JavaHL"
si prefieres usar la biblioteca nativa de JavaHL).
6. Aceptar Términos de Licencia:
o Acepta los términos de licencia y haz clic en Finish para completar la
instalación.
7. Reiniciar Eclipse:
o Después de la instalación, Eclipse te pedirá que reinicies la aplicación.
Acepta reiniciar para aplicar los cambios.
8. Configurar Repositorios SVN:
o Una vez reiniciado Eclipse, puedes configurar tus repositorios SVN:
 Abre la perspectiva SVN Perspective seleccionando Window ->
Perspective -> Open Perspective -> Other... -> SVN
Repository Exploring.
9. Agregar Repositorio SVN:
o Haz clic derecho en el área SVN Repositories y selecciona New ->
Repository Location.
o Ingresa la URL de tu repositorio SVN y sigue los pasos para agregarlo.

Después de estos pasos, deberías tener Subclipse instalado y configurado en tu entorno


Eclipse. Puedes utilizar la perspectiva SVN Repository Exploring para acceder y
gestionar tus repositorios SVN directamente desde Eclipse. Además, podrás realizar
operaciones como commit, update, merge y otras funciones de SVN directamente desde
la interfaz de Eclipse.

Documentación adicional SVN_Subversive_v1.1.pdf

Estructura de las herramientas de control de


versiones.
1. Repositorio SVN:

 Descripción: Es el almacenamiento centralizado que contiene la historia completa del


proyecto, incluidas todas las versiones y cambios realizados a lo largo del tiempo.

2. Tronco (Trunk):

 Descripción: Representa la línea principal de desarrollo en el repositorio. Contiene la


versión principal del proyecto y es el punto de partida para ramas y desarrollo.

3. Ramas (Branches):

 Descripción: Son copias independientes del tronco o de otras ramas. Se utilizan para el
desarrollo de características aisladas o para abordar problemas específicos sin afectar
directamente al código en el tronco.

4. Etiquetas (Tags):

 Descripción: Son puntos específicos en la historia del proyecto que se utilizan para
marcar versiones importantes o estables. A diferencia de las ramas, las etiquetas
suelen ser inmutables y se utilizan para referenciar versiones específicas del código.
5. Copia de Trabajo (Working Copy):

 Descripción: Es una copia local de una parte del repositorio, que puede incluir el
tronco, ramas o etiquetas. Los desarrolladores trabajan en sus copias locales y realizan
cambios antes de enviarlos de vuelta al repositorio central.

6. Commit (Confirmar):

 Descripción: Representa un conjunto de cambios realizados por un usuario en su copia


de trabajo local. Cada commit crea una nueva revisión en el historial del repositorio.

7. Update (Actualizar):

 Descripción: Actualiza la copia de trabajo local con los cambios más recientes del
repositorio central. Es utilizado para sincronizar el trabajo local con la versión más
reciente del código en el repositorio.

8. Checkout (Clonar un Repositorio):

 Descripción: Crea una copia de trabajo local descargando una versión específica del
código desde el repositorio. Es la acción inicial que se realiza al comenzar a trabajar en
un proyecto.

9. Conflictos:

 Descripción: Ocurren cuando dos o más usuarios realizan cambios en la misma parte
de un archivo. Resolver conflictos implica reconciliar manualmente las diferencias para
que la versión resultante sea coherente.

10. Log (Registro de Cambios):

 Descripción: Mantiene un registro detallado de todos los cambios realizados en el


repositorio, incluyendo quién hizo el cambio, cuándo y qué archivos se modificaron.

11. Merge (Mezcla):

 Descripción: Combina los cambios realizados en una rama de vuelta al tronco


principal. Es utilizado para consolidar el trabajo realizado en diferentes ramas.

● Documentación. Uso de comentarios.


Alternativas. Documentación de clases.
Herramientas.
La documentación es un componente crucial en el desarrollo de software, ya que
proporciona información esencial para entender, utilizar y mantener el código. A
continuación, se abordan algunos aspectos relacionados con la documentación, el uso de
comentarios y se presentan algunas alternativas, así como herramientas comunes para
documentar clases.

Documentación:

1. Comentarios en el Código:
o Propósito: Los comentarios en el código son anotaciones que explican el
propósito de ciertas secciones de código.
o Uso adecuado: Deben ser claros y concisos, proporcionando información útil
sin redundancias innecesarias.
2. Documentación de Clases:
o Propósito: La documentación de clases describe el propósito, la funcionalidad
y el uso de una clase en particular.
o Uso adecuado: Debe incluir una descripción general, detalles de los métodos,
atributos y ejemplos de uso.

Uso de Comentarios:

 Comentarios de una Línea:

// Este es un comentario de una línea en Java

 Comentarios de Múltiples Líneas:

/*
* Este es un comentario
* de múltiples líneas en Java
*/

 Comentarios para Javadoc:

/**
* Descripción detallada de la clase o método.
* Puede incluir etiquetas Javadoc específicas.
*/

Para generar comentarios JavaDoc se utiliza los siguientes elementos clave:

 /** */:
Este comentario especial se coloca encima de la declaración de la
clase o método y es reconocido por la herramienta Javadoc.
 @author: Indica el autor de la clase o del método.
 @version: Especifica la versión de la clase o del método.

Elementos clave para variables, en constructores y métodos.

 @param: Se utiliza para describir un parámetro de un método.


 @return: Se utiliza para describir el valor de retorno de un método.
Para generar el JavaDoc en eclipse, botón derecho, export, JavaDoc

Alternativas a Comentarios Directos:

1. Documentación Inline:
o Colocar información directamente en el código.

// La función suma dos números


int sum(int a, int b) {
return a + b;
}

1. Documentación Externa:
o Utilizar documentos externos, como archivos README o documentos de
diseño, para explicar el propósito y uso general del código.

Documentación de Clases (Ejemplo con Javadoc en Java):


import java.util.ArrayList;

import java.util.List;

/**

* La clase GestorProyectos representa un sistema para gestionar


proyectos. Permite la creación, modificación y visualización de
proyectos.

* @author Tu Nombre

* @version 1.0

*/

public class GestorProyectos {

/**

* Lista que almacena los proyectos gestionados por el sistema.

*/

private List<Proyecto> listaProyectos;

/**

* Constructor de la clase GestorProyectos. Inicializa la lista de


proyectos.

*/

public GestorProyectos() {
this.listaProyectos = new ArrayList<>();

/**

* Agrega un nuevo proyecto al sistema.

* @param nuevoProyecto El proyecto que se va a agregar.

*/

public void agregarProyecto(Proyecto nuevoProyecto) {

this.listaProyectos.add(nuevoProyecto);

/**

* Busca un proyecto por su nombre en el sistema.

* @param nombre Nombre del proyecto a buscar.

* @return El proyecto encontrado o null si no se encuentra.

*/

public Proyecto buscarProyectoPorNombre(String nombre) {

for (Proyecto proyecto : listaProyectos) {

if (proyecto.getNombre().equals(nombre)) {

return proyecto;

return null;

}
/**

* Modifica la descripción de un proyecto existente.

* @param nombre Nombre del proyecto a modificar.

* @param nuevaDescripcion Nueva descripción para el proyecto.

* @return true si la modificación fue exitosa, false si el


proyecto no fue encontrado.

*/

public boolean modificarDescripcionProyecto(String nombre, String


nuevaDescripcion) {

for (Proyecto proyecto : listaProyectos) {

if (proyecto.getNombre().equals(nombre)) {

proyecto.setDescripcion(nuevaDescripcion);

return true;

return false;

/**

* Muestra la lista completa de proyectos en el sistema.

*/

public void mostrarListaDeProyectos() {

System.out.println("Lista de Proyectos:");

for (Proyecto proyecto : listaProyectos) {

System.out.println(proyecto);

// Otros métodos de gestión de proyectos pueden ir aquí...

Ejercicio: dadas las siguientes clases java, crear un package con


vuestros datos nombre.apellido1.apellido2, declara el package dentro
de la clase y realiza los comentarios JavaDoc, genera después la
documentación JavaDoc. Para generar el JavaDoc en eclipse, botón derecho, export,
JavaDoc. Después sube las clases al repositorio SVN del profesor,
https://172.30.105.11/svn/repo
Análisis y Diseño Orientado a Objetos. Elaboración
de diagramas de clases:
El diagrama de clases es uno de los diagramas incluidos en UML 2.5
clasificado dentro de los diagramas de estructura y, como tal, se utiliza para
representar los elementos que componen un sistema de información desde un
punto de vista estático.y Video

Es importante destacar que, por esta misma razón, este diagrama no incluye la
forma en la que se comportan a lo largo de la ejecución los distintos elementos,
esa función puede ser representada a través de un diagrama de
comportamiento, como por ejemplo un diagrama de secuencia o un diagrama
de casos de uso.

El diagrama de clases es un diagrama puramente orientado al modelo de


programación orientado a objetos, ya que define las clases que se utilizarán
cuando se pase a la fase de construcción y la manera en que se relacionan las
mismas. Se podría equiparar, salvando las distancias, al famoso diagrama de
modelo Entidad-Relación (E/R), no recogido en UML, tiene una utilidad similar:
la representación de datos y su interacción. Ambos diagramas muestran el
modelo lógico de los datos de un sistema.

Elementos de un diagrama de clases


El diagrama UML de clases está formado por dos elementos: clases, relaciones
e interfaces.

Clases
Las clases son el elemento principal del diagrama y representa, como su
nombre indica, una clase dentro del paradigma de la orientación a objetos. Este
tipo de elementos normalmente se utilizan para representar conceptos o
entidades del «negocio». Una clase define un grupo de objetos que
comparten características, condiciones y significado. La manera más rápida
para encontrar clases sobre un enunciado, sobre una idea de negocio o, en
general, sobre un tema concreto es buscar los sustantivos que aparecen en el
mismo. Por poner algún ejemplo, algunas clases podrían ser: Animal, Persona,
Mensaje, Expediente… Es un concepto muy amplio y resulta fundamental
identificar de forma efectiva estas clases, en caso de no hacerlo
correctamente se obtendrán una serie de problemas en etapas posteriores,
teniendo que volver a hacer el análisis y perdiendo parte o todo el trabajo que
se ha hecho hasta ese momento.
Bajando de nivel una clase está compuesta por tres elementos: nombre de la
clase, atributos, funciones. Estos elementos se incluyen en la
representación (o no, dependiendo del nivel de análisis).

Para representar la clase con estos elementos se utiliza una caja que es
dividida en tres zonas utilizando para ello lineas horizontales:

 La primera de ellas se utiliza para el nombre de la clase. En caso de que


la clase sea abstracta se utilizará su nombre en cursiva.

 La segunda, por otra parte, se utiliza para escribir los atributos de la


clase, uno por línea y utilizando el siguiente formato:

visibilidad nombre_atributo : tipo = valor-inicial { propiedades }

Aunque esta es la forma «oficial» de escribirlas, es común simplificando


únicamente poniendo el nombre y el tipo o únicamente el nombre.

 La última de las zonas incluye cada una de las funciones que ofrece la
clase. De forma parecida a los atributos, sigue el siguiente formato:

visibilidad nombre_funcion { parametros } : tipo-devuelto { propiedades }

De la misma manera que con los atributos, se suele simplificar indicando


únicamente el nombre de la función y, en ocasiones, el tipo devuelto.

Tanto los atributos como las funciones incluyen al principio de su descripción la


visibilidad que tendrá. Esta visibilidad se identifica escribiendo un símbolo y
podrá ser:

 (+) Pública. Representa que se puede acceder al atributo o función


desde cualquier lugar de la aplicación.

 (-) Privada. Representa que se puede acceder al atributo o función


únicamente desde la misma clase.

 (#) Protegida. Representa que el atributo o función puede ser accedida


únicamente desde la misma clase o desde las clases que hereden de ella
(clases derivadas).

En caso de que un atributo o función sea estático, se representa en el


diagrama subrayando su nombre. Una característica estática se define como
aquella que es compartida por cada clase y no instanciada para cada uno de
los objetos de esa clase. Es un concepto muy común.

Un ejemplo de clase podría ser el siguiente:

Ejemplo de notación de una clase

Relaciones
Una relación identifica una dependencia. Esta dependencia puede ser entre
dos o más clases (más común) o una clase hacía sí misma (menos común,
pero existen), este último tipo de dependencia se denomina dependencia
reflexiva. Las relaciones se representan con una linea que une las clases, esta
línea variará dependiendo del tipo de relación

Relación reflexiva
Las relaciones en el diagrama de clases tienen varias propiedades, que
dependiendo la profundidad que se quiera dar al diagrama se representarán o
no. Estas propiedades son las siguientes:

 Multiplicidad. Es decir, el número de elementos de una clase que


participan en una relación. Se puede indicar un número, un rango… Se
utiliza n o * para identificar un número cualquiera.
 Nombre de la asociación. En ocasiones se escribe una indicación de la
asociación que ayuda a entender la relación que tienen dos clases.
Suelen utilizarse verbos como por ejemplo: «Una empresa contrata a n
empleados»

Ejemplo de relación Empresa-Empleado

Tipos de relaciones

Un diagrama de clases incluye los siguientes tipos de relaciones:

 Asociación.
 Agregación.
 Composición.
 Dependencia.
 Herencia.

Asociación

Este tipo de relación es el más común y se utiliza para representar


dependencia semántica. Se representa con una simple linea continua que une
las clases que están incluidas en la asociación.

Un ejemplo de asociación podría ser: «Una mascota pertenece a una


persona».
Ejemplo de asociación

Agregación

Es una representación jerárquica que indica a un objeto y las partes que


componen ese objeto. Es decir, representa relaciones en las que un objeto es
parte de otro, pero aun así debe tener existencia en sí mismo.

Se representa con una línea que tiene un rombo en la parte de la clase que es
una agregación de la otra clase (es decir, en la clase que contiene las otras).

Un ejemplo de esta relación podría ser: «Las mesas están formadas por tablas
de madera y tornillos o, dicho de otra manera, los tornillos y las tablas forman
parte de una mesa». Como ves, el tornillo podría formar parte de más objetos,
por lo que interesa especialmente su abstracción en otra clase.

Ejemplo de agregación
Composición

La composición es similar a la agregación, representa una relación jerárquica


entre un objeto y las partes que lo componen, pero de una forma más
fuerte. En este caso, los elementos que forman parte no tienen sentido de
existencia cuando el primero no existe. Es decir, cuando el elemento que
contiene los otros desaparece, deben desaparecer todos ya que no tienen
sentido por sí mismos sino que dependen del elemento que componen.
Además, suelen tener los mismos tiempo de vida. Los componentes no se
comparten entre varios elementos, esta es otra de las diferencias con la
agregación.

Se representa con una linea continua con un rombo relleno en la clase que es
compuesta.

Un ejemplo de esta relación sería: «Un vuelo de una compañía aerea está
compuesto por pasajeros, que es lo mismo que decir que un pasajero está
asignado a un vuelo»

Ejemplo de composición

Dependencia

Se utiliza este tipo de relación para representar que una clase requiere de
otra para ofrecer sus funcionalidades. Es muy sencilla y se representa con
una flecha discontinua que va desde la clase que necesita la utilidad de la otra
flecha hasta esta misma.

Un ejemplo de esta relación podría ser la siguiente:


Ejemplo de dependencia

Herencia

Otra relación muy común en el diagrama de clases es la herencia. Este tipo de


relaciones permiten que una clase (clase hija o subclase) reciba los
atributos y métodos de otra clase (clase padre o superclase). Estos
atributos y métodos recibidos se suman a los que la clase tiene por sí misma.
Se utiliza en relaciones «es un».

Un ejemplo de esta relación podría ser la siguiente: Un pez, un perro y un gato


son animales.

Ejemplo de herencia

En este ejemplo, las tres clases (Pez, Perro, Gato) podrán utilizar la función
respirar, ya que lo heredan de la clase animal, pero solamente la clase Pez
podrá nadar, la clase Perro ladrar y la clase Gato maullar. La clase Animal
podría plantearse ser definida abstracta, aunque no es necesario.
Interfaces
Una interfaz es una entidad que declara una serie de atributos, funciones y
obligaciones. Es una especie de contrato donde toda instancia asociada a una
interfaz debe de implementar los servicios que indica aquella interfaz.

Dado que únicamente son declaraciones no pueden ser instanciadas.

Las interfaces se asocian a clases. Una asociación entre una clase y una
interfaz representa que esa clase cumple con el contrato que indica la interfaz,
es decir, incluye aquellas funciones y atributos que indica la interfaz.

Su representación es similar a las clases, pero indicando arriba la palabra


<<interface>>.

Notación de interfaz

Cómo dibujar un diagrama de clases


Los diagramas de clase van de la mano con el diseño orientado a objetos. Por
lo tanto, saber lo básico de este tipo de diseño es una parte clave para poder
dibujar diagramas de clase eficaces.

Este tipo de diagramas son solicitados cuando se está describiendo la vista


estática del sistema o sus funcionalidades. Los pasos a seguir para construir
estos diagramas son los siguientes:

 Identificar los nombres de las clase


El primer paso es identificar los objetos primarios del sistema. Las clases
suelen corresponder a sustantivos dentro del dominio del problema.
 Distinguir las relaciones
El siguiente paso es determinar cómo cada una de las clases u objetos
están relacionados entre sí. Busca los puntos en común y las
abstracciones entre ellos; esto te ayudará a agruparlos al dibujar el
diagrama de clase.
 Crear la estructura
Primero, agrega los nombres de clase y vincúlalos con los conectores
apropiados, prestando especial atención a la cardinalidad o las herencias.
Deja los atributos y funciones para más tarde, una vez que esté la
estructura del diagrama resuelta.
Ejemplo:

Representa mediante un diagrama de clases la siguiente especificación:

-Una aplicación necesita almacenar información sobre empresas, sus empleados y sus
clientes.

-Empleados y clientes se caracterizan por su nombre y edad.

-Los empleados tienen un sueldo bruto.

-Los empleados que son directivos tienen una categoría y un conjunto de empleados
subordinados.

-De los clientes se necesita conocer su teléfono de contacto.

-La aplicación necesita mostrar los datos de empleados y clientes.


Ejercicio 1

Ejercicio2

Ejercicio 3
Ejercicio 4: elaborar el diagrama de clases de la siguiente clase java.
// Clase Libro
public class Libro {
// Atributos
private String titulo;
private String autor;
private int añoPublicacion;

// Constructor
public Libro(String titulo, String autor, int añoPublicacion) {
this.titulo = titulo;
this.autor = autor;
this.añoPublicacion = añoPublicacion;
}

// Métodos getter y setter


public String getTitulo() {
return titulo;
}

public void setTitulo(String titulo) {


this.titulo = titulo;
}

public String getAutor() {


return autor;
}

public void setAutor(String autor) {


this.autor = autor;
}
public int getAñoPublicacion() {
return añoPublicacion;
}
public void setAñoPublicacion(int añoPublicacion) {
this.añoPublicacion = añoPublicacion;
}
// Otros métodos
public void mostrarInformacion() {
System.out.println("Título: " + titulo);
System.out.println("Autor: " + autor);
System.out.println("Año de Publicación: " + añoPublicacion);
}
}

Ejercicio 5: Se desea diseñar un diagrama de clases sobre la información de


las reservas de una empresa dedicada al alquiler de automóviles, teniendo en
cuenta que:

• Un determinado cliente puede tener en un momento dado hechas varias


reservas.

• De cada cliente se desean almacenar su DNI, nombre, dirección y teléfono.


Además dos clientes se diferencian por un código único.

• Cada cliente puede ser avalado por otro cliente de la empresa.

• Una reserva la realiza un único cliente pero puede involucrar varios coches.

• Es importante registrar la fecha de inicio y final de la reserva, el precio del


alquiler de cada uno de los coches, los litros de gasolina en el depósito en el
momento de realizar la reserva, el precio total de la reserva y un indicador de si
el coche o los coches han sido entregados.

• Todo coche tiene siempre asignado un determinado garaje que no puede


cambiar. De cada coche se requiere la matricula, el modelo el color y la marca.

• Cada reserva se realiza en una determinada agencia.


Ejercicio 6: Se desea diseñar un diagrama de clases de un Hotel.

• El hotel tiene un nombre y un número de estrellas. Posee tres tipos de


habitaciones: sencilla, doble y suit y dos tipos de clientes: habituales y
esporádicos. Cada reserva almacena: la fecha de entrada y el número de días
que será ocupada la habitación.
• Al cliente se le toman los siguientes datos: el nombre, la dirección y
su teléfono.
• Las habitaciones tienen distinto precio y distinto número, y además es posible
mostrar una foto de cada una de ellas al cliente.
• En la habitación sencilla el cliente puede elegir si es exterior o no, en la
habitación doble si la cama es de matrimonio o sencilla y en la suit la
posibilidad de bañera, sauna y mirador.
• Los clientes que son habituales reciben un trato especial, es decir, una
reducción en el precio de la habitación con respecto al cliente esporádico.
• A los esporádicos el hotel les ofrece la posibilidad de darles información sobre
las ofertas.

Ejercicio 7 – Tienda de fotografia


Representa mediante un diagrama de clases la siguiente especificación
relacionada con los alquileres de cámaras en una tienda de fotografía.
La tienda alquila cámaras fotográficas analógicas.
Las cámaras se caracterizan por su marca, modelo y soporte flash (si,
no).
Cada cámara es compatible con uno o más tipos de películas.
Las películas se caracterizan por su marca, nombre, sensibilidad ISO (50,
100, 200, 400, 800, 1600) y formato (35mm, 110mm, 120mm).
Para cada marca con la que trabaja la tienda se conoce la dirección del
servicio de reparación más cercano.
La tienda dispone de varios ítems de cada modelo de cámara.
Cada ítem tiene una pegatina con una referencia, y puede estar en la
tienda, alquilado, con retraso o en reparación.
Los clientes pueden tener un máximo de 1 cámara en alquiler.
Cada cámara se alquila un máximo de 7 días, por cada día de retraso, se
impone una “multa” de un mes sin posibilidad de coger una nueva
cámara.
Ejercicio 8 - Peliculas
Representa mediante un diagrama de clases la siguiente especificación
sobre las personas que participan en una película
De cada película se almacena el título, la sinopsis, el año, el género
al que pertenece (drama, comedia, acción, terror, romance, aventura, sci-
fi) y el país.
Sobre las personas que participan en la película es necesario
conocer el nombre, los apellidos, la fecha de nacimiento y la
nacionalidad.
Una persona puede participar en una película como actor, director,
productor o guionista.
Una película tiene al menos un director y un guionista.
Una persona se considera actor si ha actuado al menos en una
película.
Una película puede tener asociados varios trailers que son editados
por una o más personas. No puede existir el trailer de una película hasta
que existe la película.

Ejercicio 9 – Series
Representa mediante un diagrama de clases la siguiente especificación
relacionada con un sistema para gestionar series
Las series se caracterizan por su título, año de inicio, sinopsis y
género al que pertenece (acción, aventura, animación, comedia,
documental, drama, horror, musical, romance, ciencia ficción)
Las series se organizan en temporadas ordenadas que tienen una
fecha de producción y una fecha de estreno de televisión a nivel mundial.
Cada temporada está a su vez formada por capítulos ordenados
que tienen un título, una duración y una sinopsis.
Los usuarios se caracterizan por su nombre y apellidos, dirección
de correo electrónico y fecha de nacimiento.
El usuario puede marcar las series como favoritas.
Si un usuario ha visto algún capítulo de una temporada el sistema
la marca como empezada, si ha visto todos los capítulos de la temporada
la marca como vista y un usuario en cualquier momento puede dar una
temporada como cancelada, es decir, indicar que la deja de seguir.
Además, el sistema registra qué capítulos ha visto el usuario.
Ejercicio 10 – Gestión de pedidos
Representa mediante un diagrama de clases la siguiente especificación
relacionada con una aplicación de gestión de pedidos
Dicha aplicación debe guardar la información de los pedidos que
realizan sus clientes y la fecha en que se formalizan.
Los pedidos constan habitualmente de varios productos.
El coste total del pedido se calcula a partir de los precios
individuales de cada producto, así como de la cantidad e impuestos
asociados a cada uno.
Es importante mantener información sobre las existencias de cada
producto con el fin de poder informar al cliente si habrá retrasos en la
entrega del pedido.
El pedido podrá pagarse de una vez o en varios pagos.
Las formas de pago posible son
Tarjeta de crédito (fecha de caducidad, número, VISA o MASTERCARD)
Efectivo (moneda)
Cheque (nombre, entidad bancaria)
El pedido podrá estar en uno de los siguientes estados: pendiente,
pagado, procesando, enviado y entregado.
Análisis y Diseño Orientado a Objetos. Elaboración
de diagramas de comportamiento:
● Tipos. Campo de aplicación.

● Diagramas de casos de uso. Actores, escenario, relación de comunicación.

● Diagramas de secuencia. Línea de vida de un objeto, activación, envío de mensajes.

● Diagramas de colaboración. Objetos, mensajes.

● Diagramas de actividades. Actividades, transiciones, decisiones y combinaciones.

● Diagramas de estado. Estados, eventos, señales, transiciones.

También podría gustarte