Tutorial Visual Paradigm

,
Dejo el enlace a un pequeño tutorial que elaboré hace algún tiempo sobre el uso de la herramienta CASE Visual Paradigm for UML. Espero que al inciado le sirva de ayuda. Paz.

¿Así trabajamos?

,
¿Y si los que construyen aviones, puentes, ferrocarriles o incluso centrales nucleares trabajaran igual que nosotros?



Paz.

Integración continua con CruiseControl.Net

,
¿Cuántas veces hemos escuchado "pues en mi máquina funciona perfectamente!!" o "eso es que has tocado algo!!"?
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.
Para la instalación y configuración de nuestro entorno de integración continua podemos usar Visual Studio Team Foundation Server o CruiseControl.Net por citar las herramientas más difundidas. Desde la ventana de CruiseControlTray añadimos los proyectos controlados bajo integración continua.


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

,
Para orientar de forma visual al profano sobre la temática del blog... aquí vinculo la nube de etiquetas generada automáticamente por wordle.net
Es gratuito y muy vistoso.

 

Paz.

Modelado de Pandereta Consulting

,
Tras largos años de estudio y profundo análisis de la metodología de desarrollo en el sector de las TIC´s, ve la luz el metamodelo que define la forma de trabajar de algunas consultoras en España. Este modelo es extensible y está en constante mantenimiento evolutivo por lo que admite feedbacks de aquellos que se aventuren a refinar la metodología.
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

,
Finalmente me he atrevido a colgar la demo de la herramienta EvalModel. La elaboración de esta herramienta constituyó mi Proyecto Fin de Carrera calificado con Matrícula de Honor por la Escuela Superior de Informática de Ciudad Real.
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