Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diagrama de clases
Modela cualquier elemento estructural (Clases) del sistema, y sus relaciones. Una clase, sus atributos y sus métodos
(operaciones) se representa así:
El estereotipo sirve para dar una particularidad a la clase, es como declararle un tipo, por tanto, puede haber unas
clases de un estereotipo, otras de otro, etc. Podríamos escribir un diagrama de cualquier tipo de los mencionados
hasta ahora con un diagrama de clases usando estereotipos:
Un ejemplo algo más complejo con otros tipos de relaciones (herencia, composición, etc.) sería este:
Casuística típica del trabajo con diagramas
Tipos de relaciones
Diagramas de Clases
Para ver algunas de las relaciones que se pueden representar en un diagrama de clases, vamos a dibujar un diagrama
de lo que podría ser un sistema de gestión de regalos:
Todas las clases definidas deberían tener atributos y métodos, si una clase no tiene alguno de ellos, posiblemente no
haría falta crearla.
● Estereotipo.
● Navegabilidad. La dirección de la flecha o flechas de la relación especifica desde donde o hasta donde se
puede navegar desde una clase.
● Cardinalidad.
● Restricciones: Se representan con ‘{}’. Por ejemplo: {balance < 5000}.
● Roles: Es el papel que juega la clase dentro de la relación (titular/propiedad, profesor/alumno). No se suele
usar, sobre carga el diagrama.
Subtipos de asociaciones
● Agregación: Una clase se compone de objetos de otras clases. Por ejemplo una factoría que monta coches. El
coche se compone de ciertas partes como ruedas, volante, etc. Los componentes tienen sentido por
separado, pero juntos forman el coche.
● Composición: Una clase crea objetos de otras clases, y éstas no tienen sentido si la clase que las crea. Por
ejemplo los movimientos de una cuenta no tienen sentido si la cuenta deja de existir. Otro ejemplo podría
ser el humo que sale de un coche. El humo no puede existir si no existe el coche.
Interfaces
Un interfaz es un elemento de programación que define métodos sin código. Se representa así:
Se dice que define lo que puede hacer, pero no cómo lo hace. Son los implementadores de la interfaz los que dicen
cómo se hace, es decir, los que implementan una manera propia de realizar los métodos/operaciones definidos por
la interfaz. Un interfaz es como un estándar.
Esto no quiere decir que todos los implementadores lo hagan bien, un implementador puede dejar el método en
blanco, o puede hacerlo mal. Un ejemplo real puede ser una conexión de BBDD en en Java. Se define una interfaz en
las clases estándar de Java, y cada fabricante crea una implementación para usar sus BBDD:
Patrones de diseño
Estructura
• Propósito
• Motivación
• Participantes
• Colaboraciones
• Consecuencias
• Implementación
• Usos conocidos
• Patrones relacionados
Partes esenciales
• Nombre: Comunica el objetivo del patrón en una o dos palabras. Aumenta el vocabulario sobre diseño.
• Problema: Describe el problema que el patrón soluciona y su contexto. Indica cuándo se aplica el patrón.
• Solución: Indica cómo resolver el problema en términos de elementos, relaciones, responsabilidades y
colaboraciones. La solución debe ser lo suficientemente abstracta para poder ser aplicada en diferentes
situaciones.
• Consecuencias: Indica los efectos de aplicar la solución. Son críticas al momento de evaluar distintas
alternativas de diseño.
Clasificación
• Creacionales: abstraen el proceso de creación/instanciación de los objetos. Se los suele utilizar cuando debemos
crear objetos, complejos o no, tomando decisiones dinámicas en momento de ejecución.
• Comportamiento: resuelven cuestiones, complejas o no, de interacción entre objetos en momento de ejecución.
1. Condición o capacidad que necesita el usuario para resolver un problema o alcanzar un objetivo.
2. Condición o capacidad que debe satisfacer o poseer un sistema o un componente de un sistema para satisfacer un
contrato, un estándar, una especificación u otro documento formalmente impuesto.
Requerimientos del usuario: Son declaraciones, en lenguaje natural y en diagramas, de los servicios que se espera
que el sistema proporcione y de las restricciones bajo las cuales debe funcionar.
Requerimientos del sistema: Establecen con detalle las funciones, servicios y restricciones operativas del sistema. El
documento de requerimientos del sistema (algunas veces denominado especificación funcional) debe ser preciso.
Debe definir exactamente qué es lo que se va a implementar.
A su vez, los requerimientos del sistema se clasifican en: Requerimientos funcionales y no funcionales.
Requerimientos Funcionales: “Describe lo que el sistema debe hacer”. Son declaraciones de los servicios que debe
proporcionar el sistema, de la manera en que éste debe reaccionar a entradas particulares y de cómo se debe
comportar en situaciones particulares. En algunos casos, los requerimientos funcionales también pueden declarar
explícitamente lo que el sistema no debe hacer.
Requerimientos No Funcionales: No se refieren directamente a las funciones específicas que proporciona el sistema,
sino a las propiedades emergentes de este. Ejemplo: disponibilidad, tiempo de respuesta, seguridad, capacidad de
almacenamiento. Son restricciones de los servicios ofrecidos por el sistema. Incluyen restricciones de tiempo, sobre
el proceso de desarrollo y estándares. Los requerimientos no funcionales a menudo se aplican al sistema en su
totalidad.
Son los individuos u organismos que ganan o pierden con algún cambio, son impactados positiva o negativamente
independientemente o no de su voluntad. Tienen interés en el resultado.
"El proceso de software siempre involucra transformaciones desde modelos mentales informales hasta una
implementación formal (que detalla cómo operará la solución provista)".
Modelo
¿Qué es un modelo?
Un buen modelo incluye aquellos elementos de gran injerencia y omite aquellos elementos que no son de
importancia para el nivel dado de abstracción.
Cada sistema puede ser descrito desde diferentes enfoques empleando diferentes modelos, donde cada modelo es
una abstracción semántica del sistema Un modelo puede ser estructural, con énfasis en la organización del sistema,
o puede ser conductual, haciendo énfasis en la dinámica del sistema.
“Un modelo de procesos del software es una descripción simplificada de un proceso del software que presenta una
visión (abstracción) de ese proceso. Estos modelos pueden incluir actividades que son parte de los procesos y
productos de software y el papel de las personas involucradas en la ingeniería de software”.
“Se modela para poder comprender mejor el sistema que se está desarrollando”
En software, según el modelo que se elija esto puede afectar profundamente la visión del mundo.
UML
“Es un lenguaje estándar para escribir diseños de software. El UML puede usarse para visualizar, especificar,
construir y documentar los artefactos de un sistema de software intensivo”
UML es bastante independiente del proceso, lo que significa que no está ligado a ningún ciclo de vida de desarrollo
de software en particular. Sin embargo, para obtener el máximo beneficio de UML, se debería considerar un proceso
que fuese:
Diagramas UML
Con UML se construyen modelos a partir de bloques de construcción básicos. Los diagramas son un medio para ver
estos bloques de construcción. Un diagrama es una representación gráfica de un conjunto de elementos, que la
mayoría de la veces se dibuja como un grafo conexo de nodos (elementos) y arcos (relaciones). Los diagramas se
utilizan para visualizar un sistema desde diferentes perspectivas.
Resumen UML
Los estructurales permiten ver los aspectos estructurales de un sistema, tales como los que representan su
esqueleto (skeleton) y su andamiaje (stubs).
Los diagramas dinámicos permiten visualizar, especificar, construir y documentar aspectos de comportamiento de
un sistema. Así como los aspectos dinámicos de una construcción incluyen flujos de aire y tránsito entre las
habitaciones, los aspectos dinámicos de un sistema de software involucran cosas tales como el flujo de mensajes
entre los componentes
Ciclo de vida
(Según el Proceso Unificado) Se pueden definir 4 fases en el ciclo de vida del desarrollo de software: Concepción,
Elaboración, Construcción y Transición. En el diagrama, se representan los ejes: fase y actividad. El área en gris
representa el nivel de atención que requiere esa actividad según la fase.
Fases
Concepción: Es la fase donde surge la idea inicial y debe estar lo suficientemente bien fundamentada.
Construcción: Es la fase cuando el software se lleva desde una base arquitectónica hasta su disponibilidad.
“Los requerimientos para un sistema son la descripción de los servicios proporcionados por el sistema y sus
restricciones operativas. Estos requerimientos reflejan las necesidades de los clientes de un sistema que ayude a
resolver algún problema” Ian Sommerville
“La ingeniería de requerimientos proporciona el mecanismo apropiado para entender lo que desea el cliente,
analizar las necesidades, evaluar la factibilidad, negociar una solución razonable, especificar la solución sin
ambigüedades, validar la especificación y administrar los requerimientos a medida de que se transforman en un
sistema funcional” Roger Pressman.
1. Condición o capacidad que necesita el usuario para resolver un problema o alcanzar un objetivo.
2. Condición o capacidad que debe satisfacer o poseer un sistema o un componente de un sistema para satisfacer un
contrato, un estándar, una especificación u otro documento formalmente impuesto.
Requerimientos del usuario: Son declaraciones, en lenguaje natural y en diagramas, de los servicios que se
espera que el sistema proporcione y de las restricciones bajo las cuales debe funcionar.
Requerimientos del sistema: Establecen con detalle las funciones, servicios y restricciones operativas del
sistema. El documento de requerimientos del sistema (algunas veces denominado especificación funcional)
debe ser preciso. Debe definir exactamente qué es lo que se va a implementar
Clasificación
Requerimientos Funcionales:
“Describe lo que el sistema debe hacer” Son declaraciones de los servicios que debe proporcionar el sistema, de la
manera en que éste debe reaccionar a entradas particulares y de cómo se debe comportar en situaciones
particulares. En algunos casos, los requerimientos funcionales también pueden declarar explícitamente lo que el
sistema no debe hacer.
Requerimientos No Funcionales:
Describen cómo el sistema lo debe hacer. No se refieren directamente a las funciones específicas que proporciona
el sistema, sino a las propiedades emergentes de este. Ejemplo: disponibilidad, tiempo de respuesta, seguridad,
capacidad de almacenamiento. Son restricciones de los servicios ofrecidos por el sistema. Incluyen restricciones de
tiempo, sobre el proceso de desarrollo y estándares.
Calidad
Peter Drucker:
“Calidad es lo que el cliente está dispuesto a pagar en función de lo que obtiene y valora”.
IEEE
● Grado en el que un sistema, componente o proceso satisface necesidades y expectativas de un cliente o usuario.
¿Que es un BUG?
Bug es el término que se utiliza coloquialmente para describir un defecto en un sistema de información.
Error: Una equivocación de una persona al desarrollar alguna actividad de desarrollo de software.
Defecto: Se produce cuando una persona comete un error. (por ej: cuando un diseñador comprende mal un
requerimiento y crea un diseño inadecuado).
Falla: Es un desvío respecto del comportamiento esperado del sistema. Puede producirse en cualquier etapa.
El principal objetivo de Calidad del Software es minimizar la presencia de bugs (en sentido amplio) en el software.
Este es el sentido más básico de conformidad con los requerimientos. Se puede expresar cuantitativamente (medir):
● tasa de defectos: número de defectos / LOC (lines of codes)
Un Buen Diseño
● Debe implementar todos los requerimientos explícitos contenidos en el modelo de requerimientos e incluir a
todos los requerimientos implícitos que desean los participantes.
● La documentación debe ser una guía legible y comprensible para quienes generan el código y para los que lo
prueban y dan el posterior soporte o mantenimiento.
● Debe abordar tanto el dominio de los datos, como las funcionalidades y el comportamiento desde el punto de
vista de la implementación.
● Debe ser modular, es decir, el software debe estar dividido de manera lógica en elementos o subsistemas.
● Debe conducir a estructuras de datos apropiadas para las clases que se van a implementar y que surjan de
patrones reconocibles de datos.
● Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los componentes y el ambiente
externo.
● Debe obtenerse con el empleo de un método repetible motivado por la información obtenida durante el análisis
de los requerimientos del software.
● Debe representarse con una notación que comunique con eficacia su significado
MODELOS DE CALIDAD
McCall:
Fue el primer modelo de calidad en ser presentado en 1977 y se originó motivado por Air Forcé y Dod. Se focaliza en
el producto final identificando atributos claves desde el punto de vista del Cliente. Esto atributos se denominan
factores de calidad y son normalmente atributos externos pero también se incluyen algunos atributos internos.
Organiza los factores en tres ejes o puntos de vista desde los cuales el usuario puede contemplar la calidad de un
producto, basándose en once factores de calidad organizados en torno a los tres ejes y a su vez cada factor se
desglosa en criterios de calidad.
FURPS
Hewlett-Packard en el año 1987 desarrolló un conjunto de atributos de la calidad del software a los que se dio el
acrónimo FURPS: Funcionalidad, Usabilidad, Confiabilidad, Rendimiento y Mantenibilidad.
● La usabilidad considera que el software debe ser fácil de utilizar, sin esfuerzo adicional, por el usuario para quién
está diseñado. Esto significa que debe tener una interfaz de usuario apropiada y una documentación adecuada.
● La confiabilidad se evalúa con la medición de la frecuencia y gravedad de las fallas, la exactitud de los resultados
que salen, el tiempo medio para que ocurra una falla (TMPF), la capacidad de recuperación ante ésta y lo predecible
del programa.
● El rendimiento se mide con base en la velocidad de procesamiento, el tiempo de respuesta, el uso de recursos, el
conjunto y la eficiencia.
● La mantenibilidad combina la capacidad del programa para ser ampliable (extensibilidad), adaptable y servicial
(estos tres atributos se denotan con un término más común: mantenibilidad), y además que pueda probarse, ser
compatible y configurable y que cuente con la facilidad para instalarse en el sistema y para que se detecten los
problemas.
ISO 9126
El modelo de calidad ISO 9126 es un estándar internacional para la evaluación del software. Se basó (principalmente)
en el trabajo de los autores McCall (1977), Boehm (1978) y el modelo FURPS.
● Funcionalidad (Functionality)
● Confiabilidad (Reliability)
● Usabilidad (Usability)
● Eficiencia (Efficiency)
● Mantenibilidad (Maintainability)
● Portabilidad (Portability)
8 Dimensiones de la calidad
En 1987, David A. Garvin publicó en la Harvard Business Review su artículo “Compitiendo en las Ocho Dimensiones
de la Calidad” en donde propone detalladamente un nuevo modelo para la Calidad: la Gestión Estratégica de la
Calidad, convirtiéndose en el más reciente Gurú de la Calidad.
ISO 25000
La serie ISO/IEC 25000:2005 reemplaza a dos estándares relacionados: ISO/IEC 9126 (Software Product Quality) e
ISO/IEC 14598 (Software Product Evaluation).
Su objetivo principal es guiar el desarrollo de los productos de software con la especificación y evaluación de
requisitos de calidad.
Establece criterios para la especificación de requisitos de calidad de productos software, sus métricas y su
evaluación.
La integración de ISO 9126 e ISO 15939 permiten plantear un proceso de 4 pasos:
1. Identificación de los requerimientos relacionados a la calidad del producto, es decir, seleccionar la parte del
modelo de calidad (ISO/IEC 9126-n) que resulta relevante para la evaluación de calidad.
2. Identificación del contexto de interpretación. Es decir, selección de los valores de 227 referencias y determinación
de los target especificados en un contexto determinado
COSTOS
Costos de Calidad
Solucionar defectos compite -en prioridad- con desarrollar nuevas funcionalidades y avanzar en el proyecto.
Postergar la solución de bugs, puede llevar a elevadísimos costos (tanto de tiempo, costo y esfuerzo) cuando se lo
quiera tratar.
Costos de Prevención
Costo de todos aquellos esfuerzos para asegurar la calidad del software y prevenir defectos en todas las fases del
desarrollo de software. Ejemplo: Actividades de QA, definición de procesos, mejora de procesos, etc.
Costos de evaluación
Costo del esfuerzo para descubrir la condición de la calidad del software (evaluaciones planificadas). Ejemplo:
Auditorías, testing, estabilización, etc.
REGLA 1-10-11
La regla 1 – 10 – 100 establece que si no se arregla un problema en el momento en que ocurre, se
volverá más costoso de arreglar más tarde, tanto en términos de dinero como de tiempo.