<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marianocifre</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marianocifre"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/Marianocifre"/>
		<updated>2026-04-21T12:35:32Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Tests_De_JUnit_Parametrizados&amp;diff=5042</id>
		<title>Tests De JUnit Parametrizados</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Tests_De_JUnit_Parametrizados&amp;diff=5042"/>
				<updated>2010-05-05T20:30:41Z</updated>
		
		<summary type="html">&lt;p&gt;Marianocifre: Parámetros - Tipos de datos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hay situaciones en las que debemos correr un tests varias veces pero con diferente juego de datos. Para estos casos [[JUnit]] tiene el Runner ''org.junit.runners.Parameterized'' que permite que escribamos el caso de test separado del juego de datos. &lt;br /&gt;
&lt;br /&gt;
Los tipos de datos soportados por el momento son String o variables primitivas (eg: int, char, etc)&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
Supongamos el test de una clase que convierte un número de una base en otra. En lugar de escribir varios métodos @Test, se escribe un sólo método @Test que JUnit correrá con cada juego de datos. &lt;br /&gt;
&lt;br /&gt;
Clase a testear: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public class Calculadora {&lt;br /&gt;
    ...&lt;br /&gt;
    public static String calcular(String numero, int baseOrigen, int baseDestino) {&lt;br /&gt;
        ...&lt;br /&gt;
        //calcula el resultado&lt;br /&gt;
        return resultado;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Valores que se eligen para el test: &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 313px; height: 124px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Número&amp;lt;br&amp;gt; &lt;br /&gt;
| Base&amp;amp;nbsp;Origen&amp;lt;br&amp;gt; &lt;br /&gt;
| Base Destino&amp;lt;br&amp;gt; &lt;br /&gt;
| Salida&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 2&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 2&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 255&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 16&amp;lt;br&amp;gt; &lt;br /&gt;
| FF&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| AB&amp;lt;br&amp;gt; &lt;br /&gt;
| 16&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 171&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 255&amp;lt;br&amp;gt; &lt;br /&gt;
| 10&amp;lt;br&amp;gt; &lt;br /&gt;
| 2&amp;lt;br&amp;gt; &lt;br /&gt;
| 11111111&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Este sería el test &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import static org.junit.Assert.assertEquals;&lt;br /&gt;
&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.Collection;&lt;br /&gt;
&lt;br /&gt;
import org.junit.Test;&lt;br /&gt;
import org.junit.runner.RunWith;&lt;br /&gt;
import org.junit.runners.Parameterized;&lt;br /&gt;
import org.junit.runners.Parameterized.Parameters;&lt;br /&gt;
&lt;br /&gt;
@RunWith(Parameterized.class)&lt;br /&gt;
public class CalculadoraSecuenciaTest {&lt;br /&gt;
&lt;br /&gt;
    private String numero;&lt;br /&gt;
    private int baseOrigen;&lt;br /&gt;
    private int baseDestino;&lt;br /&gt;
    private String resultado;&lt;br /&gt;
    &lt;br /&gt;
    @Parameters&lt;br /&gt;
    public static Collection&amp;lt;Object[]&amp;gt; data() {&lt;br /&gt;
        Object[][] data = {&lt;br /&gt;
                //Numero        BaseOrigen      BaseDestino     Resultado&lt;br /&gt;
                {   &amp;quot;10&amp;quot;,           2,              10,           &amp;quot;2&amp;quot;           },&lt;br /&gt;
                {   &amp;quot;255&amp;quot;,          10,             16,           &amp;quot;FF&amp;quot;          },&lt;br /&gt;
                {   &amp;quot;AB&amp;quot;,           16,             10,           &amp;quot;171&amp;quot;         },&lt;br /&gt;
                {   &amp;quot;255&amp;quot;,          10,             2,            &amp;quot;11111111&amp;quot;    }&lt;br /&gt;
        };&lt;br /&gt;
        return Arrays.asList(data);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public CalculadoraSecuenciaTest(&lt;br /&gt;
            String numero, int baseOrigen, int baseDestino, String resultado) {&lt;br /&gt;
&lt;br /&gt;
        this.numero = numero;&lt;br /&gt;
        this.baseOrigen = baseOrigen;&lt;br /&gt;
        this.baseDestino = baseDestino;&lt;br /&gt;
        this.resultado = resultado;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void calcular_conNumeroYBases_retornaResultado() {&lt;br /&gt;
        String resultadoObtenido = Calculadora.calcular(numero, baseOrigen, baseDestino);&lt;br /&gt;
        assertEquals(resultado, resultadoObtenido);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Como funciona  ===&lt;br /&gt;
&lt;br /&gt;
#Se indica a JUnit que utilice el Runner Parameterized con la anotación @RunWith. &lt;br /&gt;
##Con este Runner JUnit instanciará la clase de test tantas veces como juego de datos tenga. &lt;br /&gt;
#Se define un constructor que recibe los parametros de cada juego de datos. &lt;br /&gt;
##Cada vez que el Runner instancia la clase le pasa un nuevo juego de datos por el constructor. &lt;br /&gt;
#Se define un metodo con la anotación @Parameters (Por convención lo llamamos &amp;quot;data&amp;quot;). &lt;br /&gt;
##En este método creamos una matriz en donde cada fila representa a un juego de datos. &lt;br /&gt;
##Se debe respetar el orden de columnas con la definición del constructor. &lt;br /&gt;
##La matriz se devuelve como una List de Object[]. &lt;br /&gt;
#Por último, se crea el metodo marcado como @Test. &lt;br /&gt;
##Este método se ejecutará una vez por cada juego de datos. &lt;br /&gt;
##Es posible definir más de un método @Test.&lt;br /&gt;
&lt;br /&gt;
== Ver también  ==&lt;br /&gt;
*[[JUnit]] &lt;br /&gt;
*[http://junit.org/apidocs/index.html?org/junit/runners/Parameterized.html Javadoc oficial de la clase Parameterized]&lt;br /&gt;
*[http://www.dosideas.com/java/743-test-secuencial-con-selenium-y-junit.html Test Secuancial con Selenium y JUnit]&lt;br /&gt;
*[[TwiP]]&lt;br /&gt;
&lt;br /&gt;
[[Category: JUnit]]&lt;/div&gt;</summary>
		<author><name>Marianocifre</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Prueba_Unitaria&amp;diff=5036</id>
		<title>Prueba Unitaria</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Prueba_Unitaria&amp;diff=5036"/>
				<updated>2010-05-03T13:09:19Z</updated>
		
		<summary type="html">&lt;p&gt;Marianocifre: Link a Prueba De Integracion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado. Luego, con la [[Prueba De Integracion]], se podrá asegurar el correcto funcionamiento del sistema o subsistema en cuestión.&lt;br /&gt;
&lt;br /&gt;
La idea es escribir casos de prueba para cada función no trivial o método en el módulo de forma que cada caso sea independiente del resto. Esto último es la esencia de una prueba unitaria: se prueba al componente de forma aislada a todos los demás.&lt;br /&gt;
&lt;br /&gt;
Para funcionar, un test unitario no debería utilizar ningún framework de aplicación ni requerir una dependencia externa: ni Spring, ni Struts, ni una base de datos, ni un application server, ni un EJB deployado, ni ningún otro servicio cualquiera funcionando.&lt;br /&gt;
&lt;br /&gt;
Así, el testeo unitario se encarga de probar el funcionamiento aislado de la clase. Todas las dependencias que tenga la clase bajo test deberían ser simuladas usando distintos [[Mock Object]].&lt;br /&gt;
&lt;br /&gt;
==Características==&lt;br /&gt;
Para que una prueba unitaria sea buena se deben cumplir los siguientes requisitos:&lt;br /&gt;
&lt;br /&gt;
* Automatizable: no debería requerirse una intervención manual. Esto es especialmente útil para [[Integracion Continua]].&lt;br /&gt;
* Completas: deben cubrir la mayor cantidad de código.&lt;br /&gt;
* Repetibles o Reutilizables: no se deben crear pruebas que sólo puedan ser ejecutadas una sola vez. También es útil para [[Integracion Continua]].&lt;br /&gt;
* Independientes: la ejecución de una prueba no debe afectar a la ejecución de otra.&lt;br /&gt;
* Profesionales: las pruebas deben ser consideradas igual que el código, con la misma profesionalidad, documentación, etc.&lt;br /&gt;
&lt;br /&gt;
Aunque estos requisitos no tienen que ser cumplidos a rajatabla, se recomienda seguirlos o de lo contrario las pruebas pierden parte de su función.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Herramientas Para Pruebas Unitarias]]&lt;br /&gt;
* [[Automatizacion De Pruebas Unitarias]]&lt;br /&gt;
* [[Test Driven Development]]&lt;br /&gt;
* [[Mock Object]]&lt;br /&gt;
* [[Spring Test]]&lt;br /&gt;
* [[Testing De Aplicaciones]]&lt;br /&gt;
* [http://es.wikipedia.org/wiki/Prueba_unitaria Prueba unitaria en la Wikipedia]&lt;br /&gt;
* [http://www.theserverside.com/tt/articles/article.tss?l=DesigntoUnitTest Design to unit test]&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;/div&gt;</summary>
		<author><name>Marianocifre</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Interrupciones_En_Scrum&amp;diff=4974</id>
		<title>Interrupciones En Scrum</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Interrupciones_En_Scrum&amp;diff=4974"/>
				<updated>2010-04-10T16:37:32Z</updated>
		
		<summary type="html">&lt;p&gt;Marianocifre: Corrección menor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scrum]]&lt;br /&gt;
El proceso de [[Scrum]] habla de tener un mínimo de interferencia durante el [[Sprint]], de manera que los [[Miembros Del Equipo De Scrum]] puedan abocarse completamente al cumplimiento del objetivo del [[Sprint]]. El [[Scrum Master]] es el responsable de quitar estos impedimientos del camino, de manera de no afectar la velocidad del equipo.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, en la práctica, es común que, mientras el equipo está trabajando en su [[Sprint]], tengan que dar soporte a producción por diversos temas. Estas interrupciones pueden parecer interferencias que afecten al equipo, pero son impedimentos importantes para los usuarios del sistema y para el [[Dueño Del Producto]]. De hecho, de poco le servirá al [[Dueño Del Producto]] que se agregue nueva funcionalidad al sistema si el producto actual no funciona correctamente.&lt;br /&gt;
&lt;br /&gt;
===Tipos de interrupciones===&lt;br /&gt;
&lt;br /&gt;
Durante el proceso de [[Scrum]] pueden surgir diferentes tipos de interrupciones, que atentan contra la entrega de software para el [[Sprint]] en curso. Estas interrupciones puede ser:&lt;br /&gt;
* Soporte técnico que no puede ser resuelto por la primer línea de soporte de la empresa&lt;br /&gt;
* Tareas de mantenimiento del sistema.&lt;br /&gt;
* Pedidos de investigación de comportamientos extraños en el sistema.&lt;br /&gt;
* Pedidos de información del sistema que no se consiguen facilmente, y requieren la dedicación de un desarrollador.&lt;br /&gt;
* Problemas en el entorno productivo (por ejemplo, mala performance o caidas) que requieren la atención de desarrolladores.&lt;br /&gt;
&lt;br /&gt;
==Gestión de interrupciones==&lt;br /&gt;
&lt;br /&gt;
Todos estos aspectos (y algunos más) puede ser potencialmente más importantes que completar nuevas historias. Entonces, ¿cómo manejar estas interrupciones en el [[Sprint]]?&lt;br /&gt;
&lt;br /&gt;
Hay varias formas de llevar adelante las interrupciones, y depende de la cultura de la empresa y las características de la propia interrupción.&lt;br /&gt;
&lt;br /&gt;
*'''Usar dos Backlog''': tener un backlog para las características del producto, y otro para temas relacionados al soporte de producción. El [[Dueño Del Producto]] define la cantidad de trabajo que se realiza en cada backlog. En este escenario, se puede llevar un gráfico burn-down para el backlog del producto, y un gráfico burn-up para el soporte a producción.&lt;br /&gt;
&lt;br /&gt;
*'''Bugs como historias''': se ubican las interrupciones como historias dentro del backlog del producto, y se estiman de la misma manera, incluso los problemas productivos. El [[Dueño Del Producto]] luego las prioriza según sus necesidades, y elige acorde.&lt;br /&gt;
&lt;br /&gt;
*'''Emergencias''': son interrupciones que deben ser resueltas en forma inmediata. El [[Scrum Master]] y el [[Dueño Del Producto]] son quienes mejor pueden juzgar una emergencia. Si el tema es una emergencia real, el [[Dueño Del Producto]] puede jugar la &amp;quot;carta de emergencia&amp;quot;, siempre y cuando sea consciente del costo de hacerlo: no llegar a completar los items planificados y, quizás, hacer peligrar el objetivo del Sprint.&lt;br /&gt;
&lt;br /&gt;
====Atención de las interrupciones====&lt;br /&gt;
Otro tema importante a resolver es quién deberá trabajar en las interrupciones. El soporte de producción puede ser aburrido, y en general nadie del equipo quiere hacerlo. Es por esto que tener un equipo dedicado al soporte no es buena idea. Además, un equipo dedicado a soporte genera una división de las tareas, con la confusión que esto trae.&lt;br /&gt;
&lt;br /&gt;
Una opción es contar con un &amp;quot;rol de soporte&amp;quot; que vaya cambiando de Sprint a Sprint, o semanalmente. Esto ayuda a reforzar el sentido de equipo, y como beneficio adicional aumenta el conocimiento general del sistema.&lt;br /&gt;
&lt;br /&gt;
Otra opción para atender las interrupciones es utilizar el concepto de &amp;quot;Sacrificar una persona&amp;quot;. con este concepto, la solución del problema se asigna a una persona que se dedica en forma exclusiva a la interrupción. Si bien esta persona queda &amp;quot;sacrificada&amp;quot;, el resto del equipo puede seguir progresando en su actividad principal.&lt;br /&gt;
&lt;br /&gt;
En resumen, cuando llegue el momento de gestionar interrupciones, considerar el ubicarlas en el backlog del producto, y priorizarlas. Esto ayuda a asegurarse de que el equipo siempre esté realizando el trabajo correcto. De todas formas, si la interrupción es una emergencia, entonces ocurrirá un costo para el Sprint, y la decisión dependerá de evaluar este costo versus una resolución inmediata.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Proceso De Desarrollo Con Scrum]]&lt;br /&gt;
* [http://www.infoq.com/news/2008/07/interruption-driven-development Interruption Driver Development]&lt;/div&gt;</summary>
		<author><name>Marianocifre</name></author>	</entry>

	</feed>