[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,y unir esas cosas Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,antes de ese plazo Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,haya terminado Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Derecho Dialogue: 0,0:00:00.58,0:00:01.92,Default,,0000,0000,0000,,Así que nos pasamos un montón de tiempo Dialogue: 0,0:00:01.92,0:00:03.32,Default,,0000,0000,0000,,en el último par de conferencias Dialogue: 0,0:00:03.32,0:00:05.82,Default,,0000,0000,0000,,hablando sobre los diferentes tipos de pruebas Dialogue: 0,0:00:05.82,0:00:08.22,Default,,0000,0000,0000,,sobre la unidad de pruebas frente a pruebas de integración Dialogue: 0,0:00:08.22,0:00:10.10,Default,,0000,0000,0000,,acerca de cómo uso RSpec Dialogue: 0,0:00:10.10,0:00:12.50,Default,,0000,0000,0000,,realmente aislar las partes del código que desee probar Dialogue: 0,0:00:12.50,0:00:14.91,Default,,0000,0000,0000,,tienes además, sabes, porque de deberes 3, Dialogue: 0,0:00:14.91,0:00:18.18,Default,,0000,0000,0000,,y otra cosas, que hemos estado haciendo BDD, Dialogue: 0,0:00:18.18,0:00:20.62,Default,,0000,0000,0000,,donde hemos estado usando pepino para activar las historias de usuario Dialogue: 0,0:00:20.62,0:00:22.95,Default,,0000,0000,0000,,en esencia, pruebas de integración y aceptación Dialogue: 0,0:00:22.95,0:00:25.61,Default,,0000,0000,0000,,Has visto pruebas en un par de diferentes niveles Dialogue: 0,0:00:25.61,0:00:27.63,Default,,0000,0000,0000,,Y la meta aquí es una especie de hacer algunas observaciones Dialogue: 0,0:00:27.63,0:00:29.92,Default,,0000,0000,0000,,ustedes saben, vamos a respaldar un poco Dialogue: 0,0:00:29.92,0:00:33.01,Default,,0000,0000,0000,,y ver el panorama Dialogue: 0,0:00:33.01,0:00:34.96,Default,,0000,0000,0000,,Así que esto abarca una especie de material Dialogue: 0,0:00:34.96,0:00:37.01,Default,,0000,0000,0000,,abarca tres o cuatro secciones del libro Dialogue: 0,0:00:37.01,0:00:39.62,Default,,0000,0000,0000,,y quiero que acaban de golpear los puntos altos en Conferencia Dialogue: 0,0:00:39.62,0:00:41.46,Default,,0000,0000,0000,,Por lo tanto una pregunta surge Dialogue: 0,0:00:41.46,0:00:43.25,Default,,0000,0000,0000,,Estoy seguro de que ha llegado para todos ustedes Dialogue: 0,0:00:43.25,0:00:44.53,Default,,0000,0000,0000,,como ha estado haciendo deberes Dialogue: 0,0:00:44.53,0:00:45.70,Default,,0000,0000,0000,,es: "cuánto pruebas es suficiente?" Dialogue: 0,0:00:45.70,0:00:48.50,Default,,0000,0000,0000,,Y, lamentablemente, durante mucho tiempo Dialogue: 0,0:00:48.50,0:00:51.09,Default,,0000,0000,0000,,tipo de si esta pregunta en la industria Dialogue: 0,0:00:51.09,0:00:52.18,Default,,0000,0000,0000,,la respuesta fue básicamente Dialogue: 0,0:00:52.18,0:00:53.18,Default,,0000,0000,0000,,"Tenemos un plazo de envío Dialogue: 0,0:00:53.18,0:00:55.00,Default,,0000,0000,0000,,¿cuánto podemos hacer pruebas Dialogue: 0,0:00:55.00,0:00:56.67,Default,,0000,0000,0000,,eso es cuánto". Dialogue: 0,0:00:56.67,0:00:58.15,Default,,0000,0000,0000,,¿Verdad? Eso es lo que tienes tiempo. Dialogue: 0,0:00:58.15,0:01:00.02,Default,,0000,0000,0000,,Por lo tanto, ustedes saben, eso de voltear un poco Dialogue: 0,0:01:00.02,0:01:01.12,Default,,0000,0000,0000,,Obviamente no es muy buena Dialogue: 0,0:01:01.12,0:01:02.55,Default,,0000,0000,0000,,¿Puede hacer un poco mejor, derecho? Dialogue: 0,0:01:02.55,0:01:03.70,Default,,0000,0000,0000,,Allí están algunas medidas estáticas Dialogue: 0,0:01:03.70,0:01:06.03,Default,,0000,0000,0000,,como el número de líneas de código tiene su app Dialogue: 0,0:01:06.03,0:01:08.22,Default,,0000,0000,0000,,y ¿cuántas líneas de pruebas tienes? Dialogue: 0,0:01:08.22,0:01:10.29,Default,,0000,0000,0000,,Y no es inusual en la industria Dialogue: 0,0:01:10.29,0:01:12.68,Default,,0000,0000,0000,,en una pieza de software comprobada Dialogue: 0,0:01:12.68,0:01:14.57,Default,,0000,0000,0000,,el número de líneas de pruebas Dialogue: 0,0:01:14.57,0:01:17.74,Default,,0000,0000,0000,,ir mucho más allá del número de líneas de código Dialogue: 0,0:01:17.74,0:01:19.75,Default,,0000,0000,0000,,Así, entero múltiplos no son inusuales Dialogue: 0,0:01:19.75,0:01:21.84,Default,,0000,0000,0000,,Y creo que incluso para una especie de, ya saben, Dialogue: 0,0:01:21.84,0:01:23.23,Default,,0000,0000,0000,,código de investigación o trabajos Dialogue: 0,0:01:23.23,0:01:26.86,Default,,0000,0000,0000,,una relación de ustedes saben, tal vez 1.5 no es razonable Dialogue: 0,0:01:26.86,0:01:30.06,Default,,0000,0000,0000,,por lo tanto una veces y media la cantidad de código de prueba Dialogue: 0,0:01:30.06,0:01:32.25,Default,,0000,0000,0000,,como el código de la aplicación Dialogue: 0,0:01:32.25,0:01:34.22,Default,,0000,0000,0000,,Y una gran cantidad de sistemas de producción Dialogue: 0,0:01:34.22,0:01:35.28,Default,,0000,0000,0000,,donde realmente importa sobre pruebas Dialogue: 0,0:01:35.28,0:01:36.92,Default,,0000,0000,0000,,es mucho mayor que Dialogue: 0,0:01:36.92,0:01:38.16,Default,,0000,0000,0000,,Quizás una mejor pregunta Dialogue: 0,0:01:38.16,0:01:39.47,Default,,0000,0000,0000,,¿En lugar de decir: pruebas de cuánto es suficiente? Dialogue: 0,0:01:39.47,0:01:42.49,Default,,0000,0000,0000,,¿es preguntar: Qué buena es la prueba que estoy haciendo ahora? Dialogue: 0,0:01:42.49,0:01:44.35,Default,,0000,0000,0000,,¿Cómo profundo es? Dialogue: 0,0:01:44.35,0:01:45.56,Default,,0000,0000,0000,,Más adelante en este semestre Dialogue: 0,0:01:45.56,0:01:46.57,Default,,0000,0000,0000,,Profesor Sen hablará sobre Dialogue: 0,0:01:46.57,0:01:48.19,Default,,0000,0000,0000,,un poco más acerca de los métodos formales Dialogue: 0,0:01:48.19,0:01:50.86,Default,,0000,0000,0000,,y ordenar lo que es las fronteras de la prueba y depuración Dialogue: 0,0:01:50.86,0:01:52.69,Default,,0000,0000,0000,,Pero un par de cosas podemos hablar Dialogue: 0,0:01:52.69,0:01:54.07,Default,,0000,0000,0000,,basado en lo que ya sabe Dialogue: 0,0:01:54.07,0:01:57.74,Default,,0000,0000,0000,,es algunos conceptos básicos acerca de la cobertura de la prueba Dialogue: 0,0:01:57.74,0:01:59.55,Default,,0000,0000,0000,,Y aunque yo diría Dialogue: 0,0:01:59.55,0:02:01.02,Default,,0000,0000,0000,,ustedes saben, que hemos estado diciendo todo el tiempo Dialogue: 0,0:02:01.02,0:02:03.03,Default,,0000,0000,0000,,métodos formales, realmente no funcionan en grandes sistemas Dialogue: 0,0:02:03.03,0:02:05.33,Default,,0000,0000,0000,,Creo que esa declaración, en mi opinión personal Dialogue: 0,0:02:05.33,0:02:07.01,Default,,0000,0000,0000,,realmente es mucho menos cierto lo que solía ser Dialogue: 0,0:02:07.01,0:02:09.19,Default,,0000,0000,0000,,Creo que hay un número de lugares específicos Dialogue: 0,0:02:09.19,0:02:10.52,Default,,0000,0000,0000,,especialmente en pruebas y depuración Dialogue: 0,0:02:10.52,0:02:12.85,Default,,0000,0000,0000,,donde métodos formales son realmente avanzando rápido Dialogue: 0,0:02:12.85,0:02:15.76,Default,,0000,0000,0000,,y Koushik Sen es uno de los líderes que Dialogue: 0,0:02:15.76,0:02:17.94,Default,,0000,0000,0000,,Por lo que tendrás la oportunidad de conocer más acerca de que más tarde Dialogue: 0,0:02:17.94,0:02:21.44,Default,,0000,0000,0000,,pero parece por el momento, tipo de pan y mantequilla Dialogue: 0,0:02:21.44,0:02:22.73,Default,,0000,0000,0000,,es vamos a hablar de la medición de cobertura Dialogue: 0,0:02:22.73,0:02:24.48,Default,,0000,0000,0000,,porque es donde la goma cumple la carretera Dialogue: 0,0:02:24.48,0:02:26.20,Default,,0000,0000,0000,,en términos de cómo serán evaluados Dialogue: 0,0:02:26.20,0:02:28.63,Default,,0000,0000,0000,,Si estás haciendo esto de verdad Dialogue: 0,0:02:28.63,0:02:29.53,Default,,0000,0000,0000,,¿Qué es algunos aspectos básicos? Dialogue: 0,0:02:29.53,0:02:30.78,Default,,0000,0000,0000,,Aquí es una clase realmente simple que se puede utilizar Dialogue: 0,0:02:30.78,0:02:32.90,Default,,0000,0000,0000,,para hablar sobre diferentes formas de medir Dialogue: 0,0:02:32.90,0:02:34.80,Default,,0000,0000,0000,,¿cómo nuestra prueba cubre este código Dialogue: 0,0:02:34.80,0:02:36.63,Default,,0000,0000,0000,,y existen unos niveles diferentes Dialogue: 0,0:02:36.63,0:02:37.85,Default,,0000,0000,0000,,con terminologías diferentes Dialogue: 0,0:02:37.85,0:02:40.74,Default,,0000,0000,0000,,No es realmente universal a través de todas las casas de software Dialogue: 0,0:02:40.74,0:02:42.64,Default,,0000,0000,0000,,pero un común conjunto de terminología Dialogue: 0,0:02:42.64,0:02:43.65,Default,,0000,0000,0000,,que expone el libro Dialogue: 0,0:02:43.65,0:02:44.69,Default,,0000,0000,0000,,es que podríamos hablar de S0 Dialogue: 0,0:02:44.69,0:02:47.46,Default,,0000,0000,0000,,donde sólo podría significar que has llamado cada método una vez Dialogue: 0,0:02:47.46,0:02:50.45,Default,,0000,0000,0000,,Así que ya sabéis, si llame foo, y se llama bar Dialogue: 0,0:02:50.45,0:02:52.15,Default,,0000,0000,0000,,Que es la cobertura de S0: no terriblemente profundo Dialogue: 0,0:02:52.15,0:02:54.69,Default,,0000,0000,0000,,Es un poco más estrictas S1 Dialogue: 0,0:02:54.69,0:02:56.14,Default,,0000,0000,0000,,se podría decir, que estamos llamando cada método Dialogue: 0,0:02:56.14,0:02:57.29,Default,,0000,0000,0000,,desde cada lugar que podría llamarse Dialogue: 0,0:02:57.29,0:02:58.82,Default,,0000,0000,0000,,Así que ¿qué significa eso? Dialogue: 0,0:02:58.82,0:03:00.08,Default,,0000,0000,0000,,Esto significa, por ejemplo Dialogue: 0,0:03:00.08,0:03:01.12,Default,,0000,0000,0000,,no basta con llamar a bar Dialogue: 0,0:03:01.12,0:03:02.95,Default,,0000,0000,0000,,Tiene que asegurarse de que hay que llamarlo Dialogue: 0,0:03:02.95,0:03:05.58,Default,,0000,0000,0000,,al menos una vez desde aquí Dialogue: 0,0:03:05.58,0:03:07.16,Default,,0000,0000,0000,,así como llamar una vez Dialogue: 0,0:03:07.16,0:03:10.37,Default,,0000,0000,0000,,desde cualquier función exterior podría llamar Dialogue: 0,0:03:10.37,0:03:12.82,Default,,0000,0000,0000,,C0 que es lo que mide SimpleCov Dialogue: 0,0:03:12.82,0:03:15.100,Default,,0000,0000,0000,,aquellos de ustedes que has metido SimpleCov funcionando Dialogue: 0,0:03:15.100,0:03:18.52,Default,,0000,0000,0000,,Básicamente dice que ha ejecutado cada declaración Dialogue: 0,0:03:18.52,0:03:20.04,Default,,0000,0000,0000,,ha tocado cada instrucción en el código una vez Dialogue: 0,0:03:20.04,0:03:22.48,Default,,0000,0000,0000,,Pero la advertencia de allí es que Dialogue: 0,0:03:22.48,0:03:25.59,Default,,0000,0000,0000,,condicionales realmente sólo cuentan como una sola instrucción Dialogue: 0,0:03:25.59,0:03:28.92,Default,,0000,0000,0000,,Así que, si usted, no importa qué rama de este "si" tomó Dialogue: 0,0:03:28.92,0:03:31.75,Default,,0000,0000,0000,,como tocó una de la otra rama Dialogue: 0,0:03:31.75,0:03:33.35,Default,,0000,0000,0000,,ha ejecutado el "si" declaración Dialogue: 0,0:03:33.35,0:03:35.67,Default,,0000,0000,0000,,Así que incluso C0 es todavía, ustedes saben, excedente de superficial Dialogue: 0,0:03:35.67,0:03:37.27,Default,,0000,0000,0000,,Pero, como veremos Dialogue: 0,0:03:37.27,0:03:39.23,Default,,0000,0000,0000,,es la forma que desee leer esta información: Dialogue: 0,0:03:39.23,0:03:41.79,Default,,0000,0000,0000,,Si está recibiendo mala cobertura en el nivel de C0 Dialogue: 0,0:03:41.79,0:03:44.07,Default,,0000,0000,0000,,a continuación, tiene realmente muy mala cobertura Dialogue: 0,0:03:44.07,0:03:46.08,Default,,0000,0000,0000,,Así que si no son amables de decisiones Dialogue: 0,0:03:46.08,0:03:47.37,Default,,0000,0000,0000,,Este nivel simple de cobertura superficial Dialogue: 0,0:03:47.37,0:03:50.02,Default,,0000,0000,0000,,a continuación, la prueba es probablemente deficiente Dialogue: 0,0:03:50.02,0:03:51.92,Default,,0000,0000,0000,,C1 es el siguiente paso que Dialogue: 0,0:03:51.92,0:03:53.72,Default,,0000,0000,0000,,Podríamos decir: Dialogue: 0,0:03:53.72,0:03:55.20,Default,,0000,0000,0000,,Pues bien, tenemos que tener cada rama en ambas direcciones Dialogue: 0,0:03:55.20,0:03:56.62,Default,,0000,0000,0000,,Por eso, cuando estamos haciendo esta declaración de "si" Dialogue: 0,0:03:56.62,0:03:58.67,Default,,0000,0000,0000,,Tenemos que asegurarnos de que Dialogue: 0,0:03:58.67,0:03:59.92,Default,,0000,0000,0000,,hacemos la "si x" parte de una vez Dialogue: 0,0:03:59.92,0:04:05.14,Default,,0000,0000,0000,,y la parte "si no x" al menos una vez Dialogue: 0,0:04:05.14,0:04:08.36,Default,,0000,0000,0000,,C1, usted puede aumentar con cobertura de decisión Dialogue: 0,0:04:08.36,0:04:09.64,Default,,0000,0000,0000,,diciendo: bueno, si somos gonna… Dialogue: 0,0:04:09.64,0:04:12.37,Default,,0000,0000,0000,,Si tenemos statments "si" donde la condición Dialogue: 0,0:04:12.37,0:04:13.89,Default,,0000,0000,0000,,se compone de varios términos Dialogue: 0,0:04:13.89,0:04:15.72,Default,,0000,0000,0000,,Tenemos que asegurarnos de que cada subexpresión Dialogue: 0,0:04:15.72,0:04:17.97,Default,,0000,0000,0000,,ha sido evaluado en ambas direcciones Dialogue: 0,0:04:17.97,0:04:19.68,Default,,0000,0000,0000,,En otras palabras, esto significa que Dialogue: 0,0:04:19.68,0:04:22.41,Default,,0000,0000,0000,,Si vamos a fallar esta declaración de "si" Dialogue: 0,0:04:22.41,0:04:24.35,Default,,0000,0000,0000,,Tenemos que asegurarnos de dejar al menos una vez Dialogue: 0,0:04:24.35,0:04:26.45,Default,,0000,0000,0000,,porque fue falsa en al menos una vez y porque era falso z Dialogue: 0,0:04:26.45,0:04:28.89,Default,,0000,0000,0000,,En otras palabras, cualquier subexpresión podría Dialogue: 0,0:04:28.89,0:04:31.21,Default,,0000,0000,0000,,cambiar independientemente del resultado de la condición Dialogue: 0,0:04:31.21,0:04:34.48,Default,,0000,0000,0000,,tiene que ejercerse en ambas direcciones Dialogue: 0,0:04:36.04,0:04:38.52,Default,,0000,0000,0000,,Y, a continuación, de la que, sabes, muchas personas aspiran a Dialogue: 0,0:04:38.52,0:04:41.26,Default,,0000,0000,0000,,pero hay desacuerdo sobre cuánto más valioso es Dialogue: 0,0:04:41.26,0:04:42.83,Default,,0000,0000,0000,,es que tomar cada ruta a través del código Dialogue: 0,0:04:42.83,0:04:45.54,Default,,0000,0000,0000,,Obviamente, esto es algo difícil porque Dialogue: 0,0:04:45.54,0:04:48.33,Default,,0000,0000,0000,,tiende a ser exponencial en el número de condiciones Dialogue: 0,0:04:48.33,0:04:53.09,Default,,0000,0000,0000,,y en general es difícil Dialogue: 0,0:04:53.09,0:04:55.31,Default,,0000,0000,0000,,para evaluar si has tomado cada ruta a través del código Dialogue: 0,0:04:55.31,0:04:57.02,Default,,0000,0000,0000,,Hay técnicas formales que se pueden utilizar Dialogue: 0,0:04:57.02,0:04:58.83,Default,,0000,0000,0000,,que le diga dónde están los agujeros Dialogue: 0,0:04:58.83,0:05:01.31,Default,,0000,0000,0000,,pero la conclusión es Dialogue: 0,0:05:01.31,0:05:03.05,Default,,0000,0000,0000,,en las casas de software comerciales más Dialogue: 0,0:05:03.05,0:05:04.89,Default,,0000,0000,0000,,diría yo, no hay un consenso completo Dialogue: 0,0:05:04.89,0:05:06.71,Default,,0000,0000,0000,,en cuánto más valioso C2 Dialogue: 0,0:05:06.71,0:05:08.68,Default,,0000,0000,0000,,en comparación con C0 y C1 Dialogue: 0,0:05:08.68,0:05:10.14,Default,,0000,0000,0000,,Por eso, creo, con el propósito de nuestra clase