Desarrollo Ágil Introducción a desarrollo ágil Periodo: 2012 - 2 Inicio: Ago 14, 2012 Termino: Nov 27, 2012 Contacto Majahide Payan Hernandez [email protected] Unit Test Runners NUnit Línea de comandos. Visual Studio Sesiones de pruebas unitarias Contacto Majahide Payan Hernandez [email protected] Desarrollo «Test First» Utilización de plantillas (Cascarones) Una plantilla es algo en lo cual se construirá después La plantilla es la especificación para lo que se va a construir después Remover la plantilla cuando se este listo para lanzar el producto. Contacto Majahide Payan Hernandez [email protected] Construcción de la plantilla Si se construye antes •El software continuamente tiene la forma con que se creo •Por lo tanto la plantilla continuamente se construye solo momentos antes de ser utilizada Contacto Majahide Payan Hernandez [email protected] Desarrollo «Test-Driven» Crear una prueba que falle. • RED Red Hacer que la prueba pase • GREEN Refactor Mejorar la implementación interna sin cambiar el contrato o el comportamiento exterior Green • REFACTOR DEMO Contacto Majahide Payan Hernandez [email protected] Otras técnicas de «Test First» ATDD • Acceptance Test Driven Development • Orientado al Negocio (FitNesse) BDD • Behavior Driven Development • Comportamiento de los componentes Contacto Majahide Payan Hernandez [email protected] Que es una Prueba? «Las pruebas son especificaciones» Los documentos de WORD no pueden probar si el software funciona Contacto Majahide Payan Hernandez [email protected] Configuración de un proyecto de prueba Contacto Majahide Payan Hernandez [email protected] Utilizando Nunit.Framework Atributos para habilitar la funcionalidad de las pruebas unitarias Esta prueba pasa a menos que sea falso DEMO Contacto Majahide Payan Hernandez [email protected] Ejecución de las pruebas Ejecutar todas las pruebas o grupos Se puede hacer «debug» en las pruebas Contacto Majahide Payan Hernandez [email protected] TFD - Assertions Utilizar un solo «assertion» lógico por prueba Es mejor enfocarse en pruebas lógicas y cada uno por separado. Contacto Majahide Payan Hernandez [email protected] Probar el código es importante Intentar tener el código mantenible Saber que hace determinado bloque de código Se tiene una idea erronea sobre las pruebas Identificar bloques de código que puedan ser refactorizados Pensar por que estoy haciendo Copy-Paste Contacto Majahide Payan Hernandez [email protected] Ejemplo Actual <body> <form id="form1" runat="server"> <div> <img id="logo" src="images/sagelogo.jpg"/> <br /> <asp:Label ID="Label1" runat="server" Text="Completed Vs Abandoned orders Report" Font-Names="Arial" Font-Size="X-Large" ForeColor="#ADC329"></asp:Label> <br /> <br /> <table width=200> <tr> <td width=20 bgcolor="#003E21"> &nbsp;</td> <td> <font face=arial>Orders completed</font></td> </tr> <tr> <td width=20 bgcolor="#59923B"> &nbsp;</td> <td> <font face=arial>Orders abandoned</font></td> </tr> <tr> <td width=20> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td width=20> &nbsp;</td> <td> <asp:Button ID="ButtonSwitchGraphType" runat="server" Text="Button" onclick="ButtonSwitchGraphType_Click" /> </td> </tr> <tr> <td width=20> &nbsp;</td> <td> <a href=Default.aspx>Cart Abandonment Report</a> </td> </tr> </table> <br /> 7.5 Millones de Registros 45 seg. A 1:30 mins Tiempo Std Contacto Majahide Payan Hernandez [email protected] <form id="form1" runat="server"> <div> <div> <img id="logo" src="images/SageLogo.jpg" alt="Sage Logo" /> <h1 style="margin-right:10px; float:right; color:#ADC329; fontstyle:italic;">Completed VS Abandoned Orders Report</h1> </div> <div style="clear:both;"></div> <div id="navbar"> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="http://gaqwebcm1.gs.adinternal.com/CsrReport/" Text="Go to CSR Report"></asp:HyperLink> <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="Default.aspx" Text="Detailed Report"></asp:HyperLink> Ejemplo Actual 7.5 Millones de Registros - 10 seg. A 20 segs - 1 seg a 2 seg. <span id="pnlChangeChart" style="float:right; padding-right:10px; display:none;"> <span style="font-weight:bold; color:#fff;">Chart type: </span> <select onchange="cboChartType_Change(this);"> <option>Bars</option> <option>Lines</option> </select> </span> </div> <h3 style="border-bottom:solid 2px #999; color:#999; fontweight:normal;">Last 15 Days</h3> <div id="pnlGeneralChartLoading"> <img src="images/ajax-loader.gif" alt="Loading..." /> </div> <div id="pnlMainChart"></div> <h3 style="border-bottom:solid 2px #999; color:#999; fontweight:normal;">Previous and Actual Month</h3> <div id="pnlChartMLoading"> <img src="images/ajax-loader.gif" alt="Loading..." /> </div> <div id="pnlChar1"></div> </div> </form> Contacto Majahide Payan Hernandez [email protected] Buscar calidad en las pruebas Ejecución Otros factores relevantes Rendimiento Histórico Objetivo Tasa de errores Negocio Relevancia Contacto Majahide Payan Hernandez [email protected] Algunas reglas importantes Repetitivo • Las pruebas no deben de fallar después de las 6:00 • Ejecutar las pruebas Independiente en cualquier orden Contacto Majahide Payan Hernandez [email protected] Como aplicar el diseño? Probar solo los miembros públicos Te hace pensar como lo hace el cliente Extra: hace que las pruebas sean mas robustas Red Refactor Green Contacto Majahide Payan Hernandez [email protected] Puntos a recordar Escribir las pruebas en un proyecto por separado Apegarse al concepto R-G-R Tratar el código con respeto Seguir aprendiendo y practicando Contacto Majahide Payan Hernandez [email protected] Puntos a Considerar en Testing Contacto Majahide Payan Hernandez [email protected] Organización de Proyecto de TEST en VS Assembly Unit Test Assembly .Net Project .Net Project • NamespaceFolder • Class • Comportamiento • Comportamiento • Namespace_testFolder • Class_TestFolder • Test Class • Test Class Contacto Majahide Payan Hernandez [email protected] Integración vs Unit Testing DEMO Objeto 1 Objeto 2 Objeto 3 Pruebas de integración? Método A Método B Método C Pruebas de integración? Contacto Majahide Payan Hernandez [email protected]