Archive for the ‘Uncategorized’ Category

Integrar MSBuild con Visual Studio

Sunday, March 22nd, 2009

Aunque no utilicemos Team Foundation Server para hacer Builds, nos puede interesar utilizar MSBuild para automatizar nuestras construcciones. Aunque existen numerosas herramientas para editar los archivos de MSBuild, una primera opción que tenemos a mano es utilizar Visual Studio para editar estos ficheros, para ello basta con abriles como XML utilizando el menu contextual Abrir como… y además obtendremos intellisense.

Otra interesante posibilidad es la de ejecutar esos archivos de MSBuild desde dentro del entorno de Visual Studio. Para ello podemos usar el siguiente truco:

Añadimos un proyecto “Makefile project” de Visual C++ a la solución.

Dentro de este añadimos como nuestro archivo(s) de MSBuild.

Luego desde la pantalla de configuración del proyecto, podemos seleccionar los comandos que queremos lanzar para Build, ReBuild y Clean.

Una vez hecho esto prodremos, desde el menu contextual del proyecto Makefile, lanzar nuestras construcciones de MSBuild…

…y ver los resultados en la pantalla de resultados de salida de Visual Studio.

Importando áreas e iteraciones a Team Foundation Server

Sunday, March 22nd, 2009

Casualidades tiene la vida… justo después de escribir sobre las iteraciones y las áreas en Team Foundation Server, me he visto en la obligación de cargar un montón de áreas (unas ochenta) en mi Team Foundation Server. Quizás hubiese tardado menos haciendolo a mano pero como soy desarrollador, me gusta escribir código, los programas no cometen errores (una vez depurados claro) y quizá me toque volver a hacer esto en el futuro… pues me he escrito una pequeña utilidad que carga áreas e iteraciones desde un fichero de texto en un Team Foundation Server.

La verdad es que gracias a Merrick Chaffer la labor no ha sido muy ardua. Poco más que poner una simple línea de comandos entorno a su clase para crear areas e iteraciones  y leer de un fichero de texto.

El mayor problema que he tenido es que habiendo creado el fichero de areas con el notepad y guardandolo con las opciones por defecto, las areas se estaban creando sin acentos. Todo se ha solucionado guardando el archivo como Unicode, gracias a la sugerencia del vecino de blog y de proyecto Gorka Elexgaray.

Todos los interasados en esta herramienta podeís descargar tanto las fuentes como los binarios. El uso de esta utilidad es muy simple, ejecutando la aplicación sin especificar parámetros se muestra una pequeña ayuda.

Fuente: http://geeks.ms/blogs/rcorral/archive/2006/12/17/importando-areas-e-iteraciones-a-team-foundation-server.aspx

Iteraciones en Team Foundation Server

Sunday, March 22nd, 2009

 

Un punto de confusión habitual en las implantaciones de Team Foundation Server son las áreas y las iteraciones. ¿Qué son? ¿Para qué sirven? ¿Cúantas defino? ¿Cuales defino?.

En este primer post voy a abordar las iteraciones y en uno posterior las areas.

MSF define las iteraciones como un periodo fijo de tiempo en el que programar tareas. Una iteración es generalmente un periodo fijo de entre dos y seis semanas. Las iteraciones generalmente son numeradas consecutivamente y siguen una a otra de manera continua.

A parte de esta definición, que puede ser más o menos acertada, las iteraciones son siempre puntos de control, aprendizaje y planificación. Con independencia de la metodología utilizada, lo que todas las metodologías populares tienen en común, es que al principio de una iteración se planifica el trabajo que se va a abordar a corto plazo y al final de una iteración se sacan conclusiones de la iteración reciente terminada. Este proceso de mirar atrás se debe hacer siempre con el afán de que nos sirva para ir hacia adelante. El final de una iteración siempre coincide con el comienzo de otra, de manera que en ese punto lo que vemos al mirar atrás son los resultados de una iteración y estos resultados son los que nos deben guiar a la hora de planificar la siguiente iteración.

Evidentemente, el proceso descrito, se puede aplicar de manera anidada. Una iteración puede contener a otras. Esto es así porque al principio de un proyecto es habitual no tener claro en un alto nivel de detalle c uales serán nuestras iteraciones, y por lo tanto podemos definir 3 o 4 iteraciones que luego iremos refinando en subiteraciones. Otro motivo para anidar iteraciones es la posibilidad de tener, en desarrollos grandes, diferentes equipos en diferentes iteraciones, pero esto no es habitual.

A veces se tiende a definir iteraciones en función de hitos en lugar de en función de un horizonte temporal. En mi opinión esto es una mala práctica. Supongamos que definimos una iteración cómo “Implementación de los servicios del backend”. Si acumulamos retraso, lo que ocurre es, que cuando a ese punto de control y planificación que es el fin de una iteración, es cuando vemos que estamos retrasados y poco podemos hacer ya. Es claro que parece conveniente realizar periódicamente actividades explicitas de control, aprendizaje y planificación detalla. A la hora de establecer iteraciones es conveniente establecer una meta, “Completar la implementación de los servicios del backend” es sin duda un buen objetivo para una iteración, suponiendo que sea realista para la duración de la iteración.

La duración de las iteraciones es fija en algunas metodologías como Scrum, en otras como MSF se decide como parte de la planificación de la misma.

En la planificación de una iteración debemos:

  • Decidir cuanto durará
  • Establecer que trabajos se realizaran
  • Estimar en detalle estos trabajos
  • Asignar quien realizará estos
  • Establecer una meta para la iteración

Todo ello sin perder de vista los que logramos en la iteración anterior.

Es útil que las iteraciones sean todas de la misma duración en días laborables, porque esto las hace directamente comparables entre sí. Si en la iteración anterior se descubrieron 20 bugs y en la actual 30, algo ha pasado con la calidad de mi proyecto o su control. De todos modos nada en Team Foundation Server liga iteraciones y tiempo.

Un factor que no debemos perder de vista es que la gran mayoría de los informes de Team Foundation Server nos permiten filtrar los datos por iteración. En consecuencia, otro aspecto a tener en cuenta a la hora de definir las iteraciones en Team Foundation Server es con que granularidad nos resultará cómodo manejar las métricasdel proyecto.

                     Fuente: http://geeks.ms/blogs/rcorral/archive/2006/11/27/aacute-reas-e-iteraciones-en-tfs-i.aspx

 

[DSL] COMO CONSUMIR UN DSL A TRAVES DE CODIGO (EXTREMO … EXTREMO)

Sunday, March 22nd, 2009

no es muy usual, pero tal vez en algún momento necesites consumir el contenido de un diagrama creado con Domain Specific Language Tools. Como comenté alguna vez, un diagrama está compuesto de 2 archivos;

  • un archivo xml con el contenido del mismo
  • un archivo xml con la información de visualizacion del diagrama

Como ambos archivos son representaciones xml, se pueden interpretar utilizando diversas tecnologías:

Esta última opción es la más interesante ya que permite aprovechar toda la potencia de un modelo de clases ya adaptado a un diagrama específico. Pero el problema que se presenta es que la creación de estos componentes no es una tarea trivial y mucho menos intuitiva.

Es por eso que las siguientes líneas pueden servirnos de utilidad:

1 using Microsoft.VisualStudio.Modeling.Diagrams; 2 using Microsoft.VisualStudio.Modeling; 3 using System.IO; 4 using System.Xml; 5 6 public <Dsl>RootClassName LoadModel(String fileName) 7 { 8 <Dsl>RootClassName ret = null; 9 Store store = new Store(); 10 store.LoadDomainModels( 11 typeof(CoreDesignSurfaceDomainModel), 12 typeof(<Dsl>DomainModel)); 13 14 Transaction t = store.TransactionManager.BeginTransaction("Loading Dsl Model"); 15 ret = <Dsl>SerializationHelper.Instance.LoadModel(store, fileName, null, null); 16 t.Commit(); 17 18 return ret; 19 }

En el ejemplo anterior lo unico que debemos tener en cuenta que el elemento <Dsl> representa el nombre de nuestro proyecto DSL para que lo reemplacemos por la referencia correspondiente.

Por ejemplo si lo aplicamos al ejemplo de DSL que he madurado en los últimos posts el código quedaría:

/// <summary> /// Loads the model. /// </summary> /// <param name="dslPath">The DSL path.</param> /// <returns></returns> public static ExampleModel LoadModel(string dslPath) { ExampleModel ret = null; DslModeling.Store store = new DslModeling.Store(); store.LoadDomainModels( typeof(DslDiagrams.CoreDesignSurfaceDomainModel), typeof(Dsl15DomainModel)); DslModeling.Transaction t = store.TransactionManager.BeginTransaction("Loading Dsl Model"); ret = Dsl15SerializationHelper.Instance.LoadModel(store, dslPath, null, null); t.Commit(); return ret; }

y para crear un modelo a partir del Helper el codigo sería mas simple aún:

public void TestLoadModel() { string dslPath = "modelo.dsl"; ExampleModel model = Dsl15.DSLHelper.LoadModel(dslPath); }

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.comArchivado en: ,,

# re: [DSL] Como consumir un DSL a traves de codigo (extremo … extremo)

Wednesday, October 10, 2007 7:12 AM by Lucas Ontivero

 

Excelente ElBruno, esta serie está realmente fantástica!. Ahora, una consulta, en tiempos recientes solo he visto 2 DSLs, uno era un diseñador de clases que te permitía relacionar las propiedades con campos de la DB y te generaba el código y otra era una DTE que también te generaba el código. No se si es porque esos son los ejemplos de dsls que provee microsoft o que, pero no he visto hecho nada muy novedoso con estos. Tenes idea de algúna DSL para encarar algún problema específico un poco mas

creativos que los que te comenté y que se esté usando realmente?

Fuente: http://geeks.ms/blogs/elbruno/archive/2007/10/09/dsl-como-consumir-un-dsl-a-traves-de-codigo-extremo-extremo.aspx

Los shares en el gestor de fuentes de Team Foundation Server

Sunday, March 22nd, 2009

Como seguramente ya conoceréis Team System no dispone de la funcionalidad de “shares” que había en Visual Source Safe.

Esta funcionalidad te permitía poder  tener varios ficheros en ubicaciones diferentes pero relacionados. Se crea una relación entre los diferentes ficheros que provoca que cuando se cambie uno se cambien todos los ficheros relacionados.

Si tienes varios proyectos que ceomparten fuentes esta característica te permite que los fuentes estén incluidos en todos los proyectos y que físicamente estén los ficheros en todos los proyectos. Es decir, que si tenemos 5 proyectos y todos comparten varios ficheros, todos estos ficheros estarían en las 5 ubicaciones, pero si cambia uno de ellos se actualizan todos.

Pero…¿ Qué hago si necesto compartir ficheros entre diferentes proyectos?

La primera es fácil. Usar un add-in de Team Foundation Server  de Component Software, TFSLinks. Esta aplicación mantiene la relación entre los ficheros y actualiza todas las referencias automáticamente cuando se hace un check-in.

Otra opción es crear un directorio común a todos los proyectos donde estén los fuentes comunes. Los fuentes no están duplicados, sólo es una única ruta. Los proyectos que necesiten usar estos fuentes deben incluirlos en el proyecto. Creais una nueva carpeta desde visual studio al proyecto y añadis los ficheros comunes usando la opción “Add As Link”. 

De esta manera los fuentes no están en múltiples ubicaciones, están todos localizados en una única ruta, pero los proyectos que los necesiten los pueden usar sin problemas. Lógicamente, si desde un proyecto se modifica el fichero todos los proyectos disponen automáticamente de los cambios, ya que sólo hay una versión del mismo.

Para los que sigáis usando el lenguage de los dioses, C++, decir que estos proyectos no disponen de la opción “Add As Link”. Cuando se añade un fichero a un proyecto sólo existe la opción “Add”, pero no os preocupéis  porque el resultado es el mismo. Lo único que hay que tener en cuenta es que cuando se cree una carpeta dentro del proyecto hay que asegurarse que la opción “SCC Files” del proyecto esté puesta a True.

Si está opción no está activada el fichero no estará gestionado por el control de código fuente de TFS y mostrará un icono como el de la imagen, con el icono “stop”.

Y como última alternativa siempre tenemos la opción de evitar la compartición de ficheros dentro de nuestros proyectos y fomentar el uso de librerías.

fuente: http://geeks.ms/blogs/ilanda/archive/2007/05/27/los-shares-en-el-gestor-de-fuentes-de-team-foundation-server.aspx

Nueva version de Scrum para Team System y version “lightweight”

Sunday, March 22nd, 2009

Seguro que unos cuantos, por no decir muchos, de por aquí ya conocéis Scrum, gracias a los estupendos posts de Rodrigo Corral, así como también conocéis la plantilla que desarrolló la gente de Conchango, bueno pues de esta, que yo he usado, y que no me ha gustado mucho la verdad (especialmente los informes), han sacado la versión 1.2, que podéis descargar de aquí.

Los cambios que han introducido son fundamentalmente en el área de los informes, a ni vel de rendimiento y en la aplicación de instalación de los informes de la plantilla, para permitir actualizar un proyecto ya existente. También incluyen un informe para ver que versión de la plantilla se está usando. Otros cambios, pues la adición de algunos informes en el portal de Sharepoint (Sprint Burndown Chart, Product Burndown Chart, Bug History Chart, Product Cumulative Flow) y poco más, bueno aunque no soy gran fan de esta plantilla habrá que ver estos nuevos cambios. (para más detalles de que hay nuevo mirar aquí).

Y ya que hablo de Scrum, aprovecho para poneros un link a una nueva plantilla de Scum para Team System “ligera” que ha desarrollado (entre otros) Mike Azocar, y que podéis ver aquí, aún no he tenido tiempo de jugar con ella, y no se cuando lo tendré , en cuanto a algún detalle de esta plantilla, bueno, la llaman ligera (según sus autores) porque han intentado eliminar todo aquello que no es imprescindible para mantener los proyectos, y algunas diferencias con la plantilla de Conchango es que, en esta nueva, se usan las iteraciones y las areas para los sprints (esto en principio me gusta más que la aproximación de Conchango), han separado los work ítems de tipo backlog de los defectos, hay un nuevo work ítem para las “user stories” (esto me gusta, incluyen los requerimientos), y por último han creado tipos de work ítem para las revisiones y para los impedimentos. En principio hay cosas que me gustan, como las iteraciones y las “user stories”, quizá también sacar los impedimentos a un tipo de WI aparte, lástima no tener demasiado tiempo para jugar con ella, a ver si alguno os animáis y nos contáis.

Fuente: http://geeks.ms/blogs/lfraile/archive/2007/06/03/nuva-versi-243-n-de-scrum-para-team-system-y-versi-243-n-lightweight.aspx

Una característica poco conocida de VS2005: puntos de interrupción dinámicos

Sunday, March 22nd, 2009

Todos sabemos que para depurar una aplicación una de las herramientas más útiles que tenemos son los puntos de interrupción. Para activar uno basta con colocarse en la línea de código que nos interese inspeccionar y pulsar F9. Ésto coloca un puntito rojo en el lateral del editor que nos indica que posteriormente la ejecución se detendrá allí cuando el código pase por el punto. Con F9 lo desactivamos de nuevo.

Pero… ¿se te ha dado por pulsar con el botón derecho sobre uno de estos puntos de interrupción?:

Tenemos diversas opciones todas muy interesantes y quizá infrautilizadas. Pero si hay una de ellas que poca gente conoce es la última: “Al visitar…”

¿qué diantres es esto?

Pues como su propio nombre indica nos permite especificar qué queremos hacer cuando el depurador llegue a este punto de interrupción. Al elegier esta opción aparece el siguiente diálogo:

Con él podremos indicar que, al pasar por este punto de interrupción se anote en la ventana de depuración mucha información interesante del tipo “Pasé por aquí y la pila de llamadas era esta y me habían llamado desde tal función, etc…”. o podemos ejecutar una macro que nos interese para el proceso de ejecución. Y, sobre todo, podemos decirle qe continúe la ejecución como si no fuera un punto de interrupción, lo cual nos permite continuar de forma transparente pero usando el punto de ruptura como un elemento de diagnóstico muy interesante.

Fuentes: http://geeks.ms/blogs/jalarcon/archive/2007/05/24/una-caracter-237-stica-poco-conocida-de-vs2005-puntos-de-interrupci-243-n-din-225-micos.aspx

Mejorando la gestión de requisitos con RASK

Sunday, March 22nd, 2009

RASK es un Starter Kit para Visual Studio Team System que proporciona una serie de documentos Word, salpimentados con VS Tools for Office, que facilitan la vida del equipo de desarrollo a la hora de agrupar, interpretar, distribuir y sincronizar los requisitos de un proyecto de desarrollo. Es una descarga gratuita.

Como podeís intuir en la captura adjunta, básicamente, la herramienta consiste en un Task Pane que actua como ‘front end’ de una base de datos SQL Server en la que se consolidan todo los requisitos, permitiendonos construir un documento de requisitos unificado a partir de varios. Además estos documentos pueden luego ser vinculados a Work Items de un proyecto alojado en Team Foundation Server y publicados en el sitio de Sharepoint asociado al proyecto, todo ello desde el Task Pane. Una interesante característica es la posibilidad de crear jerarquias de requisitos.

Si os parece interesante esta herramienta, no dudeís en leer estos dos artículos: Using the Office Requirements Authoring Starter Kit (Part 1 of 2) y Using the Office Requirements Authoring Starter Kit (Part 2 of 2)

Además de ser una herramienta que puede resultar útil (aún no lo tengo del todo claro pues recien he comenzado a trastear con ella) es un excelente ejemplo de lo que se puede lograr con VS Tools for Office. El segundo artículo de los anteriores, entra en detalles de como ha sido desarrollado RASK, del que por cierto tenemos a nuestra disposición el código fuente para extenderlo o modificarlo según nuestras necesidades.

Señalar que la instalación es un poco farragosa, puesto que lo que se descarga es el código fuente.

 

Fuente: http://geeks.ms/blogs/rcorral/archive/2007/02/19/mejorando-la-gesti-n-de-requisitos-con-rask.aspx

COMO RESTRINGIR EL ACCESO A LAS FUNCIONALIDADES DE TSWA ?

Sunday, March 22nd, 2009

hace unos días, algunos compañeros del trabajo me preguntaban sobre la posibilidad de restringir ciertas capacidades en el cliente de Team Foundation Server 2008. El modelo de personalización que presenta Team Foundation Server 2008 es muy potente y permite muchas adaptaciones a los escenarios más comunes (aunque obviamente no a todos).

Mientras estaba dándole vueltas a éste tema, me encontré con algunas características del Team System Web Accessque también pueden servir para éste propósito. Por ejemplo, si queremos que un usuario o un grupo de usuarios, cuando accedan a la interfaz web de Team Foundation Server, no tengan acceso a todas las pestañas existentes, podemos realizar esta configuración con 4 simples pasos:

1. Ingresar en Team System Web Access

2. Seleccionar el proyecto sobre el que queremos trabajar (el usuario con el que accedemos debe ser administrador del proyecto).

3. Seleccionar el menú Settings // Team Project // Access Restrictions.

 

4. Definir las políticas de acceso para el usuario o los grupos de usuarios.

 

Las opciones que tenemos para configurar permiten restringir el acceso a:

  • La pestaña de Informes
  • La pestaña de Documentos
  • La pestaña de control de código fuente
  • La pestaña de Compilación

Si pensamos en un entorno de utilización 100% web, este tipo de control realmente es muy útil; y demuestra una vez más lo bien pensado y orientado a usuarios que está Team System Web Access.

 Fuente: http://geeks.ms/blogs/elbruno/archive/2008/02/16/tfs2008-como-restringir-el-acceso-a-las-funcionalidades-de-tswa.aspx

CREANDO WORKITEMS A PARTIR DE TEMPLATES

Sunday, March 22nd, 2009

los workItems en Team Foundation Server 2008 por lo general suelen ser muy útiles, pero como todo formulario de datos, la tarea de llenarlos puede ser un trabajo fastidioso. Si tienes que crear masivamente WorkItems, puedes utilizar Microsoft Excel para esta tarea, pero cuando te toca realizarlo 2 o 3 veces al día, los tienes que crear a mano.

Por suerte, desde el lanzamiento de las PowerTools para Team Foundation Server 2008, tenemos la posibilidad de crear Templates o plantillas de WorkItems donde completaremos los campos básicos o generales que deseemos rellenar en un WorkItem y luego a partir de los mismos, podremos crear WorkItems con valores prederminados.

Para realizar esta tarea, simplemente navegamos el menú Team // WorkItems Templates // Show Template ToolWindow

y podremos ver un nuevo panel, que nos permitirá crear y administrar los templates para la creación de WorkItems.

Si seleccionamos la opción para crear un nuevo template, podremos ver que el formulario de creación pide datos propios del template como son el nombre y la descripción; y adicionalmente los datos de un WorkItem. En mi caso, quiero crear un WorkItem que automáticamente tenga un link con el Sprint nro 8 de trabajo.

 

Una vez creado el template, podremos ver que en la lista de templates aparece nuestro template y si queremos crear un WorkItem a partir del mismo, simplemente hacemos dobleclick en el mismo o desplegamos el menu contextual y seleccionamos la opción Create WorkItem

 

Fuente: http://geeks.ms/blogs/elbruno/archive/2008/03/04/vs2008-creando-workitems-a-partir-de-templates.aspx