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