apuntes graphql

lenguaje de consulta, se presenta como una alternativa a rest y esta pensada en la optmizacion de la comunicacion entre el servidor y el cliente.

Traslada la responsabilidad de los datos que se entregan hacia el cliente. Este decide que datos pedir. Logrando evitar solicitudes innecesarias al servidor.

Rest
Es solo una convención: Es una manera de comunicarse entre el servidor y cliente, cada uno tiene sus reglas.
GraphQL
Lenguaje tipado y validable: Le damos una forma de lo que recibe y lo que devolvemos. Ademas que le agrega seguridad

Rest
Servidor expone recursos: Los clientes se tienen que adecuarse a como están expuestos
GraphQL
El cliente define que recibe: Haciendo una consulta, de la estructura que define como respuesta

Rest
Hace overfetching: Envía más información que necesita
GraphQL
Envía lo necesario: Se tiene control total de las respuestas que se esperan del servidor

Rest
Multiples request por vista: Muy costoso en performance, básicamente es una aplicación en blanco que aún no ha cargado datos o tiene custom endpoints
GraphQL
Hace solo un request por vista: Enviados en un solo row

Rest
Documentación ajena al desarrollo: No hay un estándar por lo que depende mucho del desarrollador para mantenerla.
GraphQL
Documentado por definición.
Documentado por definición: Al ser un lenguaje tipado se define un schema que ya esta documentado por definiciòn

Clasificación automática

Un problema de clasificación busca encontrar un sistema que permita identificar automáticamente para cada objeto la clase a la cual pertenece.

  • Un algoritmo usado para enfrentar estos problemas es de los vecinos cercanos (K-NN). El algoritmo usa la distancia para calcular la cercania de un objeto a una clase dada.
  • Árbol de clasificacion:  Algoritmo que toma un atributo , usa este atributo como un nodo raíz, divide el set de entrenamiento de acuerdo al atributo seleccionado y para cada rama resultante este proceso de construcción se realiza recursivamente.
    • El proceso recursivo tiene dos criterios de detención.
    • Entropia y Ganancia se ocupan para seleccionar las mejores variables.

ATRIBUTOS DE CALIDAD

¿Que es un atributo de calidad ?

«Los atributos de calidad son la expectativas de usuario, en general implícitas, de cuán bien funcionará un producto.»
Software Requirements: 3rd Edition (Wiegers, Betty, 2013)

  • Idoneidad Funcional:
    • Completitud Funcional : requerimientos Funcionales vs Funcionalidades implementadas
    • Exactitud Funcional : Resultado esperado vs obtenido
    • Pertinencia Funcional: objetivos cumplidos vs objetivos esperados
  • Eficiencia de Ejecución:
    • Tiempo de comportamiento:Cuanto tarda el sistema y tiempo esperado
    • Uso de Recursos: Consumo de recursos vs consumo esperado
    • Capacidad:limite de tolerancia detectado vs limite de tolerancia esperado(stress test-metricas)
  • Compatibilidad
    • Interoperabilidad: Implementacion de estandares Json SCHEMA, hatedas, SOAP, OPEN API
    • Coexistencia
  • 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

  • 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.

  • 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:
Grado de eficacia y eficiencia con el que un sistema, producto o componente puede transferirse de un hardware, software u otro entorno operacional o de uso a otro. Esta característica se compone de las siguientes subcaracterísticas:

• Adaptabilidad, Grado en el cual un producto o sistema puede ser adaptado efectiva y eficientemente para hardware, software u otros entornos operacionales o de uso diferentes o en evolución.
Ej: Arquitecturas específicas de dominio. Abstracción y separación.

• Instalabilidad, Grado de eficacia y eficiencia con el que un producto o sistema puede instalarse y / o desinstalarse con éxito en un entorno específico.
Ej: Tiendas de aplicaciones.

• Reemplazabilidad, Grado en el cual un producto puede reemplazar otro producto de software especificado para el mismo propósito en el mismo entorno.
Ej: Sistemas distribuidos. Microservicios.

 

DisponibilidadUso de recursosCapacidad de instalaciónIntegridadInteroperabilidadCapacidad de modificaciónEficiencia de ejecuciónPortabilidadMadurezReusabilidadRobustezaProtección de erroresEscalabilidadSeguridadUsabilidadCapacidad de prueba
Disponibilidad++
Uso de recursos+++
Capacidad de instalación+++
Integridad++
Interoperabilidad++++
Capacidad de modificación+++++
Eficiencia de ejecución+
Portabilidad+++
Madurez++++++++
Reusabilidad++++
Robusteza+++++++++
Protección de errores++++
Escalabilidad+++++++
Seguridad++++++
Usabilidad++++
Capacidad de prueba++++++++++