COMPLEMENTO PRESENTACIÓN 8 Espacio del problema: Detalla qué voy a resolver sin entrar en el detalle de cómo. Espacio de la solución: Entra en detalle de cómo resolver en función al problema que detectamos y tratando de evitar resolver problemas que no queremos resolver. Una vez que entendemos el espacio del problema y el espacio de la solución, vamos a entrar a analizar los requerimientos de nuestro sistema. Requerimientos de producto: Los podemos dividir en 3. Capa de requerimientos de negocio, son reglas del negocio que alimentan los requerimientos del negocio. Capa de usuario, tienen que ver en cómo el usuario se desenvuelve usando el sistema, qué atributos del sistema se deben poner por encima de otros. Capa Funcional, se ven alimentados por requerimientos del sistema, ¿qué cosas tienen que pasar operativamente? Esta capa se ve afectada por las restricciones que pueden afectar operativamente a lo funcional. Requerimientos de proyecto: Tienen que ver más con el rol de gestor de proyectos, se usan para dar prioridad a los requerimientos del producto. Estos dos mundos de requerimientos hablan de las prioridades del equipo de trabajo del proyecto. Requerimientos de producto: Requerimientos funcionales: Tienen que ver con las historias de usuarios, que hablan sobre específicamente lo que hace el sistema, por ejemplo que usuario ingrese al sistema. Requerimientos no funcionales: son aquellos que agregan cualidades al sistema, por ejemplo que el ingreso de ese usuario sea de manera segura. La Idoneidad Funcional es lo que conecta a lo que el usuario quiere hacer (tareas u objetivos a resolver con el sistema) y como están implementadas funcionalmente en nuestro sistema. Tres sub-características: Idoneidad funcional. Es lo que conecta a lo que el usuario quiere hacer, sus objetivos o las tareas que tiene que resolver con el sistema, y cómo están implementadas funcionalmente en nuestro sistema. Completitud Funcional. Cuán completa está la implementación con respecto a lo que se espera que haga el sistema. COMPLEMENTO PRESENTACIÓN 8 Podemos medirla viendo cuáles fueron los requerimientos funcionales pedidos y cuántos fueron ya implementados. Exactitud Funcional Cuán preciso es el sistema para implementar lo que está implementando. Podemos comparar el resultado esperado con el resultado querido Pertinencia Funcional Cuán alineado está lo que se implementó con lo que se necesita. La podemos tratar de evaluar a través de cuánto se cumplieron los objetivos y cuántos objetivos estábamos esperando que se puedan cumplir Ejemplos: Completitud: Login con redes sociales. ¿cuáles? implementación incremental. Exactitud: Reportes históricos. Límites de análisis por volúmen de datos. Pertinencia: Sistemas CRUD en su evolución Eficiencia de ejecución Trata sobre cuán bueno, cuán eficiente es el sistema a la hora de responder a lo que el usuario necesita, y a su vez, teniendo los recursos que el sistema necesita, cuánto los aprovecha o desaprovecha. Tiempo a comportamiento. Nos dice cuán bueno es el sistema respondiendo al usuario, específicamente, cuánto tarda el sistema y cuánto esperamos que ese sistema tarde. Uso de recursos. Cuánto el sistema aprovecha sus recursos en sus contextos, ya sea RAM, CPU o Disco. Capacidad. Habla sobre cuánto soporta el sistema en cantidad de pedidos. Ejemplos: Tiempo a Comportamiento: Videojuegos online. Latencia. Uso de recursos: Grandes volúmenes de datos. Reportes. Capacidad: Email marketing. Sistemas de tickets. Compatibilidad Agrupa los atributos que tienen que ver con cuánto el sistema coexiste o interopera con otros sistemas, es decir, cuánto puede el sistema vivir en un contexto más grande. Caracteristicas: COMPLEMENTO PRESENTACIÓN 8 Interoperabilidad. Cuán fácil es comunicarse con este sistema, cuánto este sistema define su forma de comunicación e incluso cuánto puede después comunicarse con otros. Coexistencia. Cuánto el sistema soporta o no estar en un contexto dado con otros sistemas también. Ejemplos: Interoperabilidad: API- pública, SAS, plataforma de pagos, ecommerce que nos permita programar su API Coexistencia: Herramienta de (Transacciones), que lo que este haciendo en un esquema de BD no afecte. Usabilidad. Grado en el cual un producto o sistema puede ser utilizado por usuarios específicos para alcanzar objetivos específicos con efectividad, eficiencia y satisfacción en un contexto de uso específico. Esta característica se compone de las siguientes subcaracterísticas: Reconocimiento de idoneidad. Grado en el cual los usuarios pueden reconocer si un producto o sistema es apropiado para sus necesidades. Ej: Appro. recog: Wordpress usado para cualquier cosa que no sea blog. • Curva de aprendizaje. Grado en que un producto o sistema puede ser utilizado por usuarios específicos para lograr objetivos específicos de aprender a utilizar el producto o sistema con efectividad, eficiencia, ausencia de riesgo y satisfacción en un contexto de uso específico. Ej: Lenguaje de gestos en aplicaciones móviles. • Operabilidad. Grado en el cual un producto o sistema tiene atributos que hacen que sea fácil de operar y controlar. Ej: Formularios largos o de múltiples pasos. Sistemas gubernamentales. • Protección de errores. de usuario Grado en el que un sistema protege a los usuarios contra errores. EJ: Sistemas de pago, incertidumbre en el estado del pago. • Estética de la interfaz de usuario. Grado en el cual una interfaz de usuario permite una interacción agradable y satisfactoria para el usuario. Ej: UI vs UX. • Accesibilidad. Grado al cual un producto o sistema puede ser utilizado por personas con la más amplia gama de características y capacidades para alcanzar un objetivo específico en un contexto de uso específico. Ej: imágenes con texto, sin alt. Contenido redundante o mal marku. COMPLEMENTO PRESENTACIÓN 8 Confiabilidad Atributos que tienen que tienen que ver con el uso normal del sistema a través del tiempo: • Madurez, El grado en que un sistema, producto o componente satisface necesidades de confiabilidad bajo operación normal. Ej: Sistemas de compras. Sistemas bancarios. • Disponibilidad, Grado en el cual un sistema, producto o componente es operacional y accesible cuando se requiere su uso. Ej: SLAs, contratos de servicio. Sistemas con eventos de carga pico puntuales. • Tolerancia a fallos, Grado en el que un sistema, producto o componente funciona según lo previsto a pesar de la presencia de fallas de hardware o software. Ej Aplicaciones móviles. • Capacidad de recuperación, Grado en el que, en caso de interrupción o falla, un producto o sistema puede recuperar los datos directamente afectados y restablecer el estado deseado del sistema. Ej Sistemas distribuidos, configuraciones auto-escalables en la nube. Puede estar conectado a la mantenibilidad. Seguridad: Es grado en que un producto o sistema protege la información y los datos para que las personas u otros productos o sistemas tengan el grado de acceso a los datos apropiado para sus tipos y niveles de autorización. Esta característica se compone de las siguientes subcaracterísticas: • Confidencialidad, Grado en el cual un producto o sistema asegura que los datos solo sean accesibles para aquellos autorizados a tener acceso. Ej: Redes sociales. • Integridad, Grado en el que un sistema, producto o componente impide el acceso no autorizado o la modificación de programas o datos de computadora. Ej: Sistemas bancarios. • Comprobación de hecho, Grado en que se puede demostrar que las acciones o eventos tuvieron lugar, para que los eventos o acciones no puedan ser repudiados más tarde. Ej: Firmas digitales. Logs de auditoría. • Traza de responsabilidad, Grado en el que las acciones de una entidad se pueden rastrear de manera única a la entidad. Ej: Logs de auditoría. • Autenticidad, Grado en el cual se puede probar que la identidad de un sujeto o recurso es la reclamada. Ej: Autenticación de 2 factores. Correo electrónico, número de teléfono. Datos biométricos. COMPLEMENTO PRESENTACIÓN 8 Mantenibilidad Esta característica representa el grado de efectividad y eficiencia con la que un producto o sistema puede ser modificado para mejorarlo, corregirlo o adaptarlo a los cambios en el entorno y en los requisitos. Esta característica se compone de las siguientes subcaracterísticas: • Modularidad, Grado en el cual un sistema o programa de computadora se compone de componentes discretos tales que un cambio en un componente tiene un impacto mínimo en otros componentes. Ej: Patrones de arquitectura. Sistemas distribuídos. • Reusabilidad, Grado en el cual un activo puede ser utilizado en más de un sistema, o en la construcción de otros activos. Ej: Código de código abierto. • Analizabilidad, Grado de efectividad y eficiencia con el cual es posible evaluar el impacto en un producto o sistema de un cambio intencional a una o más de sus partes, o diagnosticar un producto por deficiencias o causas de fallas, o identificar partes a ser modificadas . Ej: Conexión entre código y requerimiento (pepinillo) • Modificabilidad, Grado en que un producto o sistema puede ser modificado de manera efectiva y eficiente sin introducir defectos o degradar la calidad del producto existente. Ej: Cobertura de código en tests. • Testabilidad, Grado de eficacia y eficiencia con el que se pueden establecer los criterios de prueba para un sistema, producto o componente y se pueden realizar pruebas para determinar si se han cumplido esos criterios. Ej: Funciones puras: ayuda efectos secundarios. Principio de responsabilidad única. Buenas prácticas de diseño. Portabilidad: Se mide como la cantidad de entornos en los que puede correr nuestro sistema. Adaptabilidad: La podemos medir según la cantidad de dependencias a entornos específicos. Ej: Frameworks. Sistemas operativos. Capacidad de Instalación: Se miden los números de pasos a seguir para acceder a un servicio dentro del sistema y en los contextos donde se puede reproducir el acceso a dicho sistema. Ej: Estándares de Google Appstore para poner una aplicación en su tienda. Capacidad de Reemplazo: Como cuales son los requerimientos que nuestro sistema cumple o como cumplen con esos requerimientos los estándares actuales y como nuestro sistema aprovecha ese entorno actual y reemplazarlo efectivamente. Ej: Sistemas monolíticos vs Sistemas distribuidos