y unir esas cosas
antes de ese plazo
haya terminado
Derecho
Así que nos pasamos un montón de tiempo
en el último par de conferencias
hablando sobre los diferentes tipos de pruebas
sobre la unidad de pruebas frente a pruebas de integración
acerca de cómo uso RSpec
realmente aislar las partes del código que desee probar
tienes además, sabes, porque de deberes 3,
y otra cosas, que hemos estado haciendo BDD,
donde hemos estado usando pepino para activar las historias de usuario
en esencia, pruebas de integración y aceptación
Has visto pruebas en un par de diferentes niveles
Y la meta aquí es una especie de hacer algunas observaciones
ustedes saben, vamos a respaldar un poco
y ver el panorama
Así que esto abarca una especie de material
abarca tres o cuatro secciones del libro
y quiero que acaban de golpear los puntos altos en Conferencia
Por lo tanto una pregunta surge
Estoy seguro de que ha llegado para todos ustedes
como ha estado haciendo deberes
es: "cuánto pruebas es suficiente?"
Y, lamentablemente, durante mucho tiempo
tipo de si esta pregunta en la industria
la respuesta fue básicamente
"Tenemos un plazo de envío
¿cuánto podemos hacer pruebas
eso es cuánto".
¿Verdad? Eso es lo que tienes tiempo.
Por lo tanto, ustedes saben, eso de voltear un poco
Obviamente no es muy buena
¿Puede hacer un poco mejor, derecho?
Allí están algunas medidas estáticas
como el número de líneas de código tiene su app
y ¿cuántas líneas de pruebas tienes?
Y no es inusual en la industria
en una pieza de software comprobada
el número de líneas de pruebas
ir mucho más allá del número de líneas de código
Así, entero múltiplos no son inusuales
Y creo que incluso para una especie de, ya saben,
código de investigación o trabajos
una relación de ustedes saben, tal vez 1.5 no es razonable
por lo tanto una veces y media la cantidad de código de prueba
como el código de la aplicación
Y una gran cantidad de sistemas de producción
donde realmente importa sobre pruebas
es mucho mayor que
Quizás una mejor pregunta
¿En lugar de decir: pruebas de cuánto es suficiente?
¿es preguntar: Qué buena es la prueba que estoy haciendo ahora?
¿Cómo profundo es?
Más adelante en este semestre
Profesor Sen hablará sobre
un poco más acerca de los métodos formales
y ordenar lo que es las fronteras de la prueba y depuración
Pero un par de cosas podemos hablar
basado en lo que ya sabe
es algunos conceptos básicos acerca de la cobertura de la prueba
Y aunque yo diría
ustedes saben, que hemos estado diciendo todo el tiempo
métodos formales, realmente no funcionan en grandes sistemas
Creo que esa declaración, en mi opinión personal
realmente es mucho menos cierto lo que solía ser
Creo que hay un número de lugares específicos
especialmente en pruebas y depuración
donde métodos formales son realmente avanzando rápido
y Koushik Sen es uno de los líderes que
Por lo que tendrás la oportunidad de conocer más acerca de que más tarde
pero parece por el momento, tipo de pan y mantequilla
es vamos a hablar de la medición de cobertura
porque es donde la goma cumple la carretera
en términos de cómo serán evaluados
Si estás haciendo esto de verdad
¿Qué es algunos aspectos básicos?
Aquí es una clase realmente simple que se puede utilizar
para hablar sobre diferentes formas de medir
¿cómo nuestra prueba cubre este código
y existen unos niveles diferentes
con terminologías diferentes
No es realmente universal a través de todas las casas de software
pero un común conjunto de terminología
que expone el libro
es que podríamos hablar de S0
donde sólo podría significar que has llamado cada método una vez
Así que ya sabéis, si llame foo, y se llama bar
Que es la cobertura de S0: no terriblemente profundo
Es un poco más estrictas S1
se podría decir, que estamos llamando cada método
desde cada lugar que podría llamarse
Así que ¿qué significa eso?
Esto significa, por ejemplo
no basta con llamar a bar
Tiene que asegurarse de que hay que llamarlo
al menos una vez desde aquí
así como llamar una vez
desde cualquier función exterior podría llamar
C0 que es lo que mide SimpleCov
aquellos de ustedes que has metido SimpleCov funcionando
Básicamente dice que ha ejecutado cada declaración
ha tocado cada instrucción en el código una vez
Pero la advertencia de allí es que
condicionales realmente sólo cuentan como una sola instrucción
Así que, si usted, no importa qué rama de este "si" tomó
como tocó una de la otra rama
ha ejecutado el "si" declaración
Así que incluso C0 es todavía, ustedes saben, excedente de superficial
Pero, como veremos
es la forma que desee leer esta información:
Si está recibiendo mala cobertura en el nivel de C0
a continuación, tiene realmente muy mala cobertura
Así que si no son amables de decisiones
Este nivel simple de cobertura superficial
a continuación, la prueba es probablemente deficiente
C1 es el siguiente paso que
Podríamos decir:
Pues bien, tenemos que tener cada rama en ambas direcciones
Por eso, cuando estamos haciendo esta declaración de "si"
Tenemos que asegurarnos de que
hacemos la "si x" parte de una vez
y la parte "si no x" al menos una vez
C1, usted puede aumentar con cobertura de decisión
diciendo: bueno, si somos gonna…
Si tenemos statments "si" donde la condición
se compone de varios términos
Tenemos que asegurarnos de que cada subexpresión
ha sido evaluado en ambas direcciones
En otras palabras, esto significa que
Si vamos a fallar esta declaración de "si"
Tenemos que asegurarnos de dejar al menos una vez
porque fue falsa en al menos una vez y porque era falso z
En otras palabras, cualquier subexpresión podría
cambiar independientemente del resultado de la condición
tiene que ejercerse en ambas direcciones
Y, a continuación, de la que, sabes, muchas personas aspiran a
pero hay desacuerdo sobre cuánto más valioso es
es que tomar cada ruta a través del código
Obviamente, esto es algo difícil porque
tiende a ser exponencial en el número de condiciones
y en general es difícil
para evaluar si has tomado cada ruta a través del código
Hay técnicas formales que se pueden utilizar
que le diga dónde están los agujeros
pero la conclusión es
en las casas de software comerciales más
diría yo, no hay un consenso completo
en cuánto más valioso C2
en comparación con C0 y C1
Por eso, creo, con el propósito de nuestra clase