Desarrollo Ágil Introducción a desarrollo ágil Periodo: 2012 - 2 Inicio: Ago 14, 2012 Termino: Nov 27, 2012 Contacto Majahide Payan Hernandez majahide.payan@xpesd.com Unit Test Runners NUnit Línea de comandos. Visual Studio Sesiones de pruebas unitarias Contacto Majahide Payan Hernandez majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com Que es una Prueba? «Las pruebas son especificaciones» Los documentos de WORD no pueden probar si el software funciona Contacto Majahide Payan Hernandez majahide.payan@xpesd.com Configuración de un proyecto de prueba Contacto Majahide Payan Hernandez majahide.payan@xpesd.com 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 majahide.payan@xpesd.com Ejecución de las pruebas Ejecutar todas las pruebas o grupos Se puede hacer «debug» en las pruebas Contacto Majahide Payan Hernandez majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com <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 majahide.payan@xpesd.com Buscar calidad en las pruebas Ejecución Otros factores relevantes Rendimiento Histórico Objetivo Tasa de errores Negocio Relevancia Contacto Majahide Payan Hernandez majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com Puntos a Considerar en Testing Contacto Majahide Payan Hernandez majahide.payan@xpesd.com 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 majahide.payan@xpesd.com 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 majahide.payan@xpesd.com