Tutorial Visual Paradigm
¿Así trabajamos?
Paz.
Integración continua con CruiseControl.Net
Bien, pues cosas de ese estilo deben estar atadas y bien atadas si aplicamos integración continua en el desarrollo de nuestro proyecto con CruiseControl.Net.
La integración continua bien aplicada nos asegura que el proyecto se encuentra en un estado estable y consistente a cada compilación que se haga sobre el mismo. Dichas compilaciones son planificadas; son lo más frecuente posible y se realizan en un entorno diseñado para tal cometido; es decir, el entorno de integración continua no va a ser nuestra máquina que utilizamos para desarrollo.
Después de cada compilación se deben obtener informes de todo lo realizado por el entorno de integración continua.
Complementando a la integración continua se establecen las tareas de compilación con otras herramientas como NAnt o MSBuild. Como condiciones para que la compilación sea satisfactoria, se recomienda que se pasen todas las pruebas unitarias de NUnit para garantizar que el proyecto funciona bien. Tras realizar todo lo anterior y obtener una compilación satisfactoria, se deben programar las tareas de despliegue en el entorno o entornos en los que se tiene que desplegar o ejecutar el proyecto que dependiendo de donde nos encontremos serán integración, preproducción o producción.
Es cierto que la configuración de todo el entorno al principio puede resultar tediosa pero una vez preparado el entorno de integración continua nos alegraremos a cada subida a producción que se realice.
Las ventajas de aplicar integración continua son:
- Minimización del tiempo dedicado a la integración del sistema.
- Testing automático.
- Detección temprana de bugs.
- Disponibilidad de la última versión en todo momento.

La configuración de las tareas de las compilaciones de integración continua se configuran en el fichero ccnet.config que se encuentra dentro de la carpeta de instalación de CruiseControl.Net. Como la edición de un fichero de configuración puede resultar poco amigable, contamos con una herramienta de edición del fichero de configuración algo más intuitiva; la aplicación es CCNetConfig.

Desde la ventana de CCNetConfig podemos desplegar un árbol con todas las tareas y parámetros que se pueden configurar para nuestro proyecto.
Una vez preparado CruiseControl.Net, y si nos cercioramos de que todo funciona, sólo nos queda congratularnos y estar tranquilos con el desarrollo del proyecto.
Paz.
Temática del blog
Es gratuito y muy vistoso.
Paz.
Modelado de Pandereta Consulting
Desde aquí mi más afectuoso saludo a todos aquellos que se sientan identificados con alguna de estas simpáticas clases.
Ahí queda el modelo para disfrute del personal.
Demo de EvalModel
EvalModel es una herramienta flexible que permite la realización de evaluaciones haciendo uso de modelos como CMMI o ISO 15504.
EvalModel está desarrollado con WPF, C#, NHibernate, Visual Paradigm, Sql Server 2005, NUnit y ChartFX entre otras tecnologías.
Aprovecho este post para agradecer la labor y el apoyo incondicional del Dr. Félix Óscar García Rubio, director y mentor de este proyecto.
Pruebas con TestDriven.Net, NUnit y NCover
Para la realización de las pruebas unitarias vamos a hacer uso del Add-In para Visual Studio denominado TestDriven.Net; este Add-In integra perfectamente en el entorno de desarrollo el framework de testeo para .Net NUnit y el entorno de ejecución de pruebas de cobertura Coverage (NCover).
El Add-In puede ser descargado de forma gratuita desde la página web oficial del proyecto: http://www.testdriven.net/
Para la realización de un sencillo ejemplo de prueba unitaria primero crearemos una clase con algún método que probar. Se propone la creación de la clase Persona que tendrá un único atributo para definir la edad de la persona. Como restricción, supondremos que una persona siempre va a tener una edad comprendida entre 0 y 100 años, además se definirá un método que indique si la persona es joven, es decir, si tiene una edad inferior a 30 años.
En adelante, realizaremos los pasos necesarios para la construcción de la clase y las pruebas asociadas a la clase:
1. Creación del proyecto: Para la construcción de la clase Persona, crearemos primeramente un proyecto de librería de clases que contendrá bajo su espacio de nombres a dicha clase. Desde el entorno Visual Studio hacer clic en Archivo/Nuevo/Proyecto
Se selecciona el tipo de proyecto de librería de clases:
2. Definición de la clase Persona: Una vez creado el proyecto, se añade al proyecto la clase Persona y se definen los atributos y métodos especificados.
using System;
using System.Collections.Generic;
using System.Text;
namespace LibreriaEjemplo
{
public class Persona
{
private int _Edad;
///
/// Obtiene la edad de la persona.
///
public int Edad
{
get { return _Edad; }
}
///
/// Método constructor vacío de la persona.
///
public Persona()
{
}
///
/// Establece la edad de la persona que tiene
/// que estar comprendida entre 0 y 100 años.
///
public void SetEdad(int Edad)
{
if (Edad < 0 || Edad > 100)
{
throw new ArgumentException();
}
else
{
this._Edad = Edad;
}
}
///
/// Devuelve true si la persona tiene una
/// edad inferior a 30 años.
///
///
public Boolean EsJoven()
{
return this.Edad <>
}
}
}
3. Definición de la clase de testing con NUnit. Una vez creada la clase a probar, se define otra clase que contendrá los métodos de testing; estos métodos serán ejecutados por el framework NUnit. La clase de testing en este caso es PersonaTesting. Se deberá añadir la referencia a la librería nunit.framework.dll para poder ejecutar los métodos de prueba.
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
namespace LibreriaEjemplo
{
[TestFixture]
public class PersonaTesting
{
private Persona _Dummy;
public Persona Dummy
{
get { return _Dummy; }
set { _Dummy = value; }
}
///
/// Método que se ejecuta antes de cada método de prueba.
///
[SetUp]
public void Init()
{
this.Dummy = new Persona();
}
///
/// Método que se ejecuta después de cada método de prueba.
///
[TearDown]
public void End()
{
}
[Test]
public void SetEdadTest1()
{
this.Dummy.SetEdad(50);
Assert.IsTrue(this.Dummy.Edad == 50);
}
[Test]
public void SetEdadTest2()
{
this.Dummy.SetEdad(100);
Assert.IsTrue(this.Dummy.Edad == 100);
}
[Test]
public void SetEdadTest3()
{
this.Dummy.SetEdad(0);
Assert.IsTrue(this.Dummy.Edad == 0);
}
[Test]
public void SetEdadTest4()
{
try
{
this.Dummy.SetEdad(-10);
Assert.Fail();
}
catch (ArgumentException ex)
{
Assert.IsNotNull(ex);
}
catch
{
Assert.Fail();
}
}
[Test]
public void SetEdadTest5()
{
try
{
this.Dummy.SetEdad(110);
Assert.Fail();
}
catch (ArgumentException ex)
{
Assert.IsNotNull(ex);
}
catch
{
Assert.Fail();
}
}
[Test]
public void EsJovenTest1()
{
this.Dummy.SetEdad(10);
Assert.IsTrue(this.Dummy.EsJoven());
}
[Test]
public void EsJovenTest2()
{
this.Dummy.SetEdad(50);
Assert.IsFalse(this.Dummy.EsJoven());
}
[Test]
public void EsJovenTest3()
{
this.Dummy.SetEdad(30);
Assert.IsFalse(this.Dummy.EsJoven());
}
}
}
4. Ejecución de pruebas unitarias. Una vez codificada la clase de testing, se procede a la ejecución de la misma mediante NUnit. Para lanzar la interfaz gráfica de usuario de NUnit con la prueba cargada, se debe hacer clic con el botón derecho sobre el ítem de proyecto en el explorador de soluciones, después, seleccionar Test with/ NUnit 2.4
Aparecerá el entorno NUnit. En la ventana se muestran los métodos de prueba que se van a ejecutar.
Haciendo clic en el botón Run se lanzará la ejecución de las pruebas; una vez ejecutadas, los métodos muestran de forma iconográfica el resultado de la prueba.
5. Ejecución de pruebas de cobertura. Tras ejecutar las pruebas unitarias, se ejecuta el entorno Coverage para comprobar que todo el código bajo prueba se ha ejecutado. Para ejecutar Coverage, hacer clic con el botón derecho sobre el ítem del proyecto en el explorador de soluciones y seleccionar Test with / Coverage.
Aparece la ventana de Coverage con los resultados de las pruebas de cobertura.
En la ventana de Coverage se muestran los porcentajes de código ejecutado. En la parte inferior derecha de la ventana aparece el código decorado con fondo azul indicando los fragmentos de código que se han ejecutado y en rojo los que no.
El código fuente de estas pruebas puede ser descargado desde aquí: SkyDrive


