F) Semana 6: QA, QC, testing, - natigb/Portafolio-de-Datos-II GitHub Wiki

13/05/2020

Calidad de software

La calidad de software se refiere a :

  • La calidad del proceso de crear el software: Seguir un proceso documentado y lineamientos.
  • La calidad del producto.

Se tiene como objetivo asegurar o garantizar que el ciente reciba lo esperado-

Aseguramiento de calidad (QA) y Contorl de calidad (QC)

Aseguramiento de calidad: Conjunto de actividades para asegurar que el desarrollo y el mantenimiento sea adecuado.

Control de calidad: Evalución o verificación de la calidad de un prooducto desarrollado. Si solo se aplicara esta se aplicarian pruebas si tener una vision de como evitar los defectos en el proceso.

Testing: Pruebas del producto final. Es una de las tecnicas para el QC

ISO (International Standard Organization)

Es una organización que se dedica a crear estándares. Define la calidad como el grado en el que un conjunto de caracteristicas inherentes cumplen con requisitos funcionales y no funcionales. Existen muchos estándares relacionados con la calidad de software.

ISO/IEC 9126-1 Software quality: Estándar de calidad dde software aceptado. Tienen com objetivo tomar en cuenta los cesgos que pueden afectar la percepción o entrega de un proyecto de desarrollo de software. Define los atributos de calidad internos (estructura, arquitectura y software: elementos estáticos del software) y los externos ( comportamiento bajo determinadas circunstancias del software):

  • Funcionalidad: que tanto coincide con lo que se espera: precisión, interoperabilidad, seguridad, compliancia(que este conforme lo que se espera que haga), suitability .
  • Confianza: tolerancia a fallas, recuperabilidad, compliancia.
  • Usabilty: que pueda ser utilizado, entendible, aprendible, operativo, atractivo, compliancia
  • Eficiencia: comportamiento en el tiempo, utilización de recursos, eficiente, compliancia.
  • Mantenibilidad: Que el software pueda ser cambiado, analizado, probado, que sea estable, compliancia.
  • Portabilidad: que sea instalable en varios SO, adaptable a entornos, existir con otros softwares o versiones anteriores, reemplazable, compliancia.

La mayoría de veces un software sufre cambios de complejidad, se convierte de bajo mantenimiento, es un misterio para los programadores, etc.

Testing:

El proceso de ejecutar un programa con laintencion de encontrar errores. Si no se prueba el código se dejan errores potenciales que pueden salir más caros, se debe invertir dinero en las etapas de proceso para evitar invertir mas a futuro.

Hay 2 tipos:

  • Caja negra: Se mete un dato y espera el resultado sin conocer lo que está pasando dentro. Se basa en las especificaciones del programa
  • Caja blanca: Se sabe lo que está dentro. Logic driven testing. Se enfoca en ejecutar las partes principales partes del código y prueban todos los principales caminos.

Tiene muchos tipos: instalación, compatibilidad, regresión, seguridad.

También se aplican en distintos niveles:

  • Prueba de unidad: De caja blanca

15/05/2020

Que es un algoritmo

Una serie de pasos finitos de intrucciones precisas que buscan resolver un problema. Es un conjuto de operaciones efectivas y no ambiguas. Se puede representar con un diagrama de flujo, con código, con pseudocódigo. Se puede medir por velocidad de ejecución o que tantos recursos consume (memoria, procesamiento y almacenamiento).

Un algoritmo es:

  • Finito: Termina
  • Definitivo: Cada paso es preciso no hay ambiguedad
  • Tiene un input
  • Output
  • Efectivo: cumple su propósito
  • Deterministicos/unico: Siempre con la misma entrada produce la misma salida

¿Que es el analisis de un algoritmo? Un método para estimar los recursos que consume un algoritmo. Se analizan para:

  • Clasificarlos segun rendimiento o según tareas que resuelven
  • Predecir desempeño, comparar algoritmos o afinar parámetros.
  • Para entender y mejorar implementaciones y algoritmos.

Factores que afectan los algoritmos (Run Time):

  • Hardaware(CPU, memoria y disco duro)
  • Compilador
  • Lenguaje de programación
  • Sistema operativo
  • Programador
  • Tamaño de la entrada
  • Las aplicaciones que están corriendo en la computadora

¿Como medir que tan bueno es un algoritmo? El tiempo en que dura ejecutandose.

¿Como comparar 2 algoritmos? En la misma computadora con la misma carga

** Caracteristicas **

  • Time (CPU)
  • Space (Memoria)
  • Ancho de banda
  • Espacio en disco
  • Perifericos
  • Cualquier otro recurso

** Buenas y malas medidas: **

  • Empírico: benchmark(comparar con uno que ya existe)
  • Simulaciones: datos simulados y casos de prueba
  • Analítico: modelo matemático (tiempo y espacio)

Best approach: Complejidad computacional: En funcion de tiempo y memoria.

1. Time complexity:

Clasifica el tiempo que tarda, representa ksgbk,ank.

¿Que es el tiempo? El real, el del CPU, numero de instrucciones ejecutadas.

Clock speed: Frecuencia del CPU, medida en Herts o GHz, mayor frecuencia, mayor tasa de reloj (+ intrucciones en un ciclo de reloj)

CPU Perfomance: ciclos por instruccion, instrucciones por ciclo, intrucciones por segundo, instrucciones elementales(tiempo constante) o complejas.

Las intrucciones elementales siempre toman el mismo tiempo, la variable T depende del hardware y denota el tiempo que requiere ejecutar una instrucción. Ejemplos: operaciones arimeticas, logicas, bitwise (<<,>>), jumps (return, llamada a métodos), assignments, estructuras indexadas...

Big O

Una notación que expressa el tiempo computacional (complejidad) como el término en la funció que incrementa más rápido relativo al tamaño del problema.

  • Tiempo constante O(1): asignar valor a variable, insertar en array

  • Tiempo logaritmico O(logn): for, búsqueda binaria, insertar o eliminar en heap de memoria

  • Tiempo lineal O(n): un loop se ejecuta n veces, si las intrucciones dentro es O(1) el del loop es N*O(1)

  • Tiempo logaritmico lineal O(n*logn): un log con un lineal, heap sort, merge sort

  • Tiempo cuadrático O(ne2): 2 lineales, busqueda en matriz, quicksort o insertion sort.

⚠️ **GitHub.com Fallback** ⚠️