<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>teamsystem.es</title>
    <description />
    <link>http://www.teamsystem.es/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>es-ES</language>
    <blogChannel:blogRoll>http://www.teamsystem.es/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Jesus Jimenez</dc:creator>
    <dc:title>teamsystem.es</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/teamsystem-es" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>&amp;iquest;Es importante hacer Check-in cada d&amp;iacute;a?</title>
      <description>&lt;p&gt;A raíz de un Workshop que hice este martes en Microsoft, me he decidido a escribir un post, que aunque tiene su parte técnica, es más bien una filosofía. Una de las prácticas recomendadas por &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; en su articulo &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;Continuous Integration&lt;/a&gt; (revisión de Mayo 2006) es que se realice al menos un Check-in de código en el repositorio al día y esta sugerencia tiene varias razones con las que yo estoy bastante de acuerdo. &lt;br&gt;&lt;br&gt;En primer lugar, si depositamos código en el repositorio al menos una vez al día, nuestro código estará seguro ante una catástrofe en nuestro equipo, si llevásemos una semana sin subir nada al repositorio y por cualquier motivo se estropease nuestro disco duro sería bastante duro tener que volver a repetir todo el trabajo, sin embargo subiendo el código al menos una vez al día éste pasaría a formar parte del backup diario de nuestro repositorio con lo que en el peor de los casos perderíamos solo el trabajo del último día. Además mientras menos cantidad de código subamos al repositorio cada vez, menos costosa será la integración del mismo con el código que ya hay en el repositorio, es decir, menos tiempo entre cada subida == menos código que integrar == menos problemas de integración. &lt;br&gt;&lt;br&gt;Por otro lado, el subir código, no una, sino varias veces al día, da una sensación de progreso increíble. Es algo más psicológico, pero el ir cerrando pequeñas tareas da la sensación de rendir mucho y eso es positivo. El problema muchas veces viene dado por que se estiman tareas que duran más de un día y obviamente subir algo incompleto al repositorio y que pueda causar inestabilidad no es buena idea. En estos casos lo mejor sería intentar por todos los medios dividir esas tareas en subtareas, para que el tiempo de cada una de ellas este por debajo de un día y así poder usar es práctica. &lt;br&gt;&lt;br&gt;Entorno a esta idea, y solo para trastear un poco con la API de Team Foundation Server, he desarrollado una pequeña utilidad (por ahora en versión 0.1) que teniendo una solución abierta en Visual Studio detecta si la solución esta enlazada a Team Foundation Server y si es así obtiene cada uno de los proyectos de la misma y mira los Check-ins que hubo sobre cada uno de los ficheros en las últimas 24 horas. Es una versión muy de pruebas aún, y tengo que ver cual es la forma óptima de obtener los ultimos check-ins del repositorio, pero para soluciones de un tamaño medio funciona a la perfección.&lt;br&gt;&lt;br&gt;No es el objetivo de este post entrar en los detalles técnicos de como esta hecha, pero es una clase, que quitando comentarios, ronda las 160 ó 170 lineas, así que la complejidad no es mucha y es fácil de entender. Yo la tengo configurada como una herramienta externa dentro de Visual Studio y le paso como parametro directamente la ruta de la solución que esta abierta, así es mucho más cómodo que ejecutarla desde línea de comando. Os dejo una captura para que la veáis, y por su puesto un zip con el código fuente.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;img height="307" alt="Check-in cada dia - Imagen 1" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/EsimportantehacerCheckincadada_12E6D/Check-in%20cada%20dia%20-%20Imagen%201_220ee03a-3f6c-416a-8900-2edd67e77a01.png" width="532"&gt; &lt;br&gt;&lt;br&gt;Y aquí tenéis el zip con el código fuente: &lt;a href="http://www.teamsystem.es/files/CheckCIConsole.zip"&gt;CheckCISolution.zip&lt;/a&gt; &lt;br&gt;&lt;br&gt;Se aceptan sugerencias!!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/T77cDY_gsQo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/T77cDY_gsQo/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/12/iquest3bEs-importante-hacer-Check-in-cada-diacute3ba.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=3427c738-bbd4-4c15-9faf-031bc0c6c93e</guid>
      <pubDate>Thu, 04 Dec 2008 22:16:38 +0200</pubDate>
      <category>Control de versiones</category>
      <category>General</category>
      <category>Herramientas</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=3427c738-bbd4-4c15-9faf-031bc0c6c93e</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=3427c738-bbd4-4c15-9faf-031bc0c6c93e</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/12/iquest3bEs-importante-hacer-Check-in-cada-diacute3ba.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=3427c738-bbd4-4c15-9faf-031bc0c6c93e</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=3427c738-bbd4-4c15-9faf-031bc0c6c93e</feedburner:origLink></item>
    <item>
      <title>Nuevo modelo de distribuci&amp;oacute;n de componentes de cliente</title>
      <description>&lt;p&gt;Distribuir los componentes de cliente al equipo de cada desarrollador era uno de los aspectos de Team System sobre los que Microsoft había tenido algunas quejas y han intentado mejorar en ese aspecto. Por componentes de cliente entendemos las dlls de las políticas de checkin y las dlls de los custom controls para los tipos de workitems personalizados. &lt;br&gt;&lt;br&gt;Pues bien, por un lado las políticas de checkin debían estar en cada máquina y además las rutas de la ubicación de las dlls debían estar incluidas en el registro&amp;nbsp; de Windows para que Visual Studio pudiese localizarlas. Otra opción es que las dlls de las políticas estén en la carpeta "&amp;lt;ApplicationData&amp;gt;\Microsoft\Team Foundation\", cosa que he aprendido indagando el funcionamiento de las Power Tools, todo hay que decirlo, porque no creo que hayan añadido esa funcionalidad como parte de esta release de las Power Tools. Independientemente de eso, la realidad es que esto no ha cambiado, lo que ha cambiado ha sido la forma de distribuirlas. Antes la distribución se hacia mediante un paquete de instalación que dejase las dlls en una ubicación y que insertase una clave en el registro indicando dicha ubicación o bien podíamos realizar estos dos pasos de forma manual, el fin era que TFS reconociese esas dlls como políticas y que no diesen error cuando intentábamos hacer checkin en un proyecto. &lt;br&gt;&lt;br&gt;Respecto a los custom controls para los tipos de workitems personalizados la estrategia era similar, aunque no había que insertar nada en el registro si que había que dejar la dll del custom control y un fichero de metadatos .wicc en una ruta especifica, en definitiva, la forma de hacerlo era mediante un paquete de instalación o haciendo el despliegue de forma manual. &lt;br&gt;&lt;br&gt;La buena noticia es que, una de las nuevas características incluidas en la ultima versión de las Power Tools ha sido una que permite almacenar estos componentes de cliente en el control de código fuente de Team Foundation Server en un directorio especial y luego hacer que se instalen en cada cliente de forma automática si el usuario tiene esta funcionalidad activada. En primer debemos activar esta nueva funcionalidad y para ello tenemos que pulsar sobre la carpeta Team Members con el botón derecho y seleccionar la opción "Personal Settings". &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="447" alt="PowerTools - Imagen 10" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/Nuevomodelodedistribucindecomponentesdec_109D/PowerTools%20-%20Imagen%2010_3e631b3f-3852-4682-a808-37db33f6279f.png" width="324"&gt; &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;En la pantalla que aparece tenemos varias opciones, pero de momento solo nos centraremos en dos de ellas. La primera, con el texto "Install downloaded custom components", nos permite activar la instalación automática para los componentes de cliente que tengamos en la carpeta especial que comentaba anteriormente y en la que se guardaran los componentes. La segunda de las opciones habilita la validación de los StrongNames de cada uno de los componentes antes de ser instalados. Para llevar a cabo la validación de los StrongNames de los assemblies es necesario que almacenemos todas las claves con las que han sido firmados los assemblies en la ruta "&amp;lt;ApplicationData&amp;gt;\Microsoft\Team Foundation Server\StrongNameKeys". De esta forma se evita que alguien pueda distribuir una dll con código malicioso, por lo tanto es altamente recomendable que si marcamos la casilla para instalar automáticamente los componentes de cliente lo hagamos también con la verificación de los StrongNames. &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="336" alt="PowerTools - Imagen 11" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/Nuevomodelodedistribucindecomponentesdec_109D/PowerTools%20-%20Imagen%2011_6c7a10a8-6af4-4b87-8cda-bd0afbe10dc6.png" width="540"&gt; &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;Por último respecto a esta pantalla solo comentaros que hay un botón con el texto "Download Now" con el que podemos forzar la descarga de los componentes simplemente pulsándolo. Este botón hará un "Get Latest Version" de la carpeta especial que os comentaba y copiará automáticamente los assemblies a la ubicación que les corresponde para que Visual Studio pueda encontrarlos cuando lo requiera. &lt;br&gt;&lt;br&gt;Con esto habríamos terminado con la configuración que tiene que ver con el despliegue automático de componentes de cliente, ahora solo nos quedaría almacenarlos en el control de código fuente. Si habéis instalado ya las Power Tools, probablemente habréis observado que ahora en el control de código fuente tenemos una carpeta nueva que se llama "TeamProjectConfig". En esta carpeta se guarda la configuración referente a los equipos que hayamos creado, distribuida en varios ficheros. &lt;br&gt;&lt;br&gt;Para almacenar los componentes de cliente en el control de código fuente y permitir que Visual Studio los instale si tenemos marcada la casilla anterior lo único que tenemos que hacer es crear dos carpetas, cada una de ellas para un tipo componente, "CheckinPolicies" y "CustomControls". Es importante indicar que si tenemos marcada la casilla para la instalación automática, los componentes de cliente se instalarán cada vez que le demos al botón "Download Now". &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="306" alt="PowerTools - Imagen 12" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/Nuevomodelodedistribucindecomponentesdec_109D/PowerTools%20-%20Imagen%2012_b1fc5ec3-c609-4af3-8607-12e5e05d2083.png" width="535"&gt; &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;Por último, si necesitamos tener diferentes versiones de un mismo componente para diferentes versiones de Team Foundation Server, es necesario crear subcarpetas dentro de las carpetas que he comentado anteriormente, utilizando el nombre "1.0" para TFS 2005, "2.0" para TFS 2008 y "3.0" para TFS2010. &lt;br&gt;&lt;br&gt;Bajo mi punto de vista esta ha sido una gran mejora, ya que la distribución de los componentes de cliente era un tema un poco tedioso. Aún me quedan algunas pruebas por hacer (sobre todo con los StrongName y políticas que usen dlls adicionales) pero en principio, un 10 para el equipo de desarrollo porque me parece una mejora que facilitará mucho el despliegue de las políticas de checkin y los controles personalzados.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/4CKqEMgy9xI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/4CKqEMgy9xI/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/11/Nuevo-modelo-de-distribucioacute3bn-de-componentes-de-cliente.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=b4c6d51d-626b-4a7a-ba07-974247dfe77d</guid>
      <pubDate>Wed, 12 Nov 2008 23:45:01 +0200</pubDate>
      <category>Herramientas</category>
      <category>Team Build</category>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=b4c6d51d-626b-4a7a-ba07-974247dfe77d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=b4c6d51d-626b-4a7a-ba07-974247dfe77d</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/11/Nuevo-modelo-de-distribucioacute3bn-de-componentes-de-cliente.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=b4c6d51d-626b-4a7a-ba07-974247dfe77d</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=b4c6d51d-626b-4a7a-ba07-974247dfe77d</feedburner:origLink></item>
    <item>
      <title>Un poco m&amp;aacute;s de Power Tools</title>
      <description>&lt;p&gt;En el último post contaba algunas de las funcionalidades de la nueva versión del las Power Tools para Team Foundation Server 2008. La verdad es que me centré únicamente en la configuración personalizada que podíamos definir para cada equipo, pero a pesar de que deje entrever las nuevas acciones que podíamos realizar sobre los miembros del equipo en una de las imágenes, nos las comente. &lt;br&gt;&lt;br&gt;En esta versión han incluido una serie de acciones relacionadas con el control de código fuente. En primer lugar una acción para ver el historial de checkins de un usuario. Esta acción "Show Checkin History", abre una ventana que muestra un listado de todos los changesets que ha generado el usuario en cuestión. Desde esta lista podemos ir al detalle de cada changeset y ver toda la información del mismo; ficheros que se protegieron en el servidor, comentarios, notas de checkin, etc...&lt;/p&gt;&lt;br&gt; &lt;p style="text-align: center"&gt;&lt;img height="382" alt="PowerTools - Imagen 6" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/UnpocomsdePowerTools_11B55/PowerTools%20-%20Imagen%206_5fa3700f-484d-4ab8-8735-53d6f3e6ba19.png" width="538"&gt; &lt;/p&gt; &lt;p&gt;&lt;br&gt;Otra de las nuevas acciones es la de poder ver los shelvesets de un usuario cuando pulsamos con el botón derecho sobre él. La opción se llama "Show Shelvesets" y nos muestra una lista desde la que podemos acceder a todo el detalle de cada shelveset. Además, una vez hayamos abierto la ventana, podemos utilizarla para ver los shelvesets de cualquier usuario, tan solo tenemos que introducir el nombre del usuario y pulsar sobre "Find". Desde esta ventana se pueden además eliminar y deshacer shelvesets, lo cual plantea una comodidad interesante si se quiere implantar un modelo de revisión de código antes de que se deposite en el repositorio.&lt;/p&gt;&lt;br&gt; &lt;p style="text-align: center"&gt;&lt;img height="331" alt="PowerTools - Imagen 7" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/UnpocomsdePowerTools_11B55/PowerTools%20-%20Imagen%207_4f1e6932-62d3-43af-883c-a5069078f0f9.png" width="500"&gt; &lt;/p&gt; &lt;p&gt;&lt;br&gt;Por ultimo en lo que respecta al control de código fuente, tenemos la opción "Show Pending Changes" que permite visualizar todos los ficheros que tiene cambiados el usuario en ese momento. Si pulsamos sobre alguno de los ficheros con el botón derecho veremos que se pueden hacer una serie de acciones típicas de control de código, Checkout, Undo o ver el Historial del fichero por ejemplo.&lt;/p&gt;&lt;br&gt; &lt;p style="text-align: center"&gt;&lt;img height="215" alt="PowerTools - Imagen 8" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/UnpocomsdePowerTools_11B55/PowerTools%20-%20Imagen%208_c5ebd04d-7801-4b97-8958-27b2109d9719.png" width="527"&gt;&lt;/p&gt;&lt;br&gt; &lt;p&gt;Además, al igual que la funcionalidad que mostraba los shelvesets, la visualización de los datos es configurable. En esta ventana tenemos un enlace llamado "Modify Query" y que cuando pulsamos sobre el nos permite modificar ciertos parámetros para volver a consultar al control de código fuente. Podemos definir la ruta de servidor sobre la que queremos mirar los ficheros que están desprotegidos y definir si queremos hacerlo solo sobre esa ruta o hacerlo de forma recursiva. También podemos especificar los tipos de ficheros que queremos comprobar con un wildcard del estilo *.* ó *.cs por ejemplo. Además podemos filtrar por un usuario concreto o simplemente ver los ficheros desprotegidos para todos los usuarios.&lt;/p&gt;&lt;br&gt; &lt;p style="text-align: center"&gt;&lt;img height="284" alt="PowerTools - Imagen 9" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/UnpocomsdePowerTools_11B55/PowerTools%20-%20Imagen%209_44ed0f9a-cc93-475e-9ff8-f4d61fdddf92.png" width="472"&gt; &lt;/p&gt;&lt;br&gt; &lt;p&gt;La verdad es que han incluido funcionalidades muy interesantes, no son revolucionarias pero ayudan o simplifican bastante algunas tareas.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/t3bV84eWJZw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/t3bV84eWJZw/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/11/Un-poco-maacute3bs-de-Power-Tools.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=1f4542da-928e-4f11-aab0-79a50b470813</guid>
      <pubDate>Mon, 10 Nov 2008 22:17:18 +0200</pubDate>
      <category>Herramientas</category>
      <category>Team Foundation Server</category>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=1f4542da-928e-4f11-aab0-79a50b470813</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=1f4542da-928e-4f11-aab0-79a50b470813</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/11/Un-poco-maacute3bs-de-Power-Tools.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=1f4542da-928e-4f11-aab0-79a50b470813</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=1f4542da-928e-4f11-aab0-79a50b470813</feedburner:origLink></item>
    <item>
      <title>Team Foundation Server Power Tools October 2008</title>
      <description>&lt;p&gt;Como ya apuntaba Luis el otro día en &lt;a href="http://www.lfraile.net/"&gt;su blog&lt;/a&gt;, ya ha salido la release de Octubre 2008 de las Power Tools para TFS. En esta versión, que el equipo de producto la considera una "major release", se han incluido varias cosas nuevas, algunas de ellas muy interesantes. Podéis descargar esta ultima versión y consultar la relación de funcionalidades incluidas &lt;a href="http://msdn.microsoft.com/en-us/tfs2008/bb980963.aspx#2008"&gt;aquí&lt;/a&gt;.&lt;br&gt;&lt;br&gt;La funcionalidad que más llama la atención de esta release, es que se ha añadido a los team projects un nuevo nodo llamado Team Members. Este nuevo nodo nos va a servir para organizar e identificar la gente que trabaja en el proyecto, pudiendo añadir usuarios dentro de este nodo directamente o creando equipos dentro de éste. La verdad es que a simple vista no parece gran cosa pero puede facilitar mucho el uso de la herramienta ya que se pueden configurar una serie de elementos concretos para cada equipo.&lt;br&gt;&lt;br&gt;Una de mis dudas respecto al tema de Team Members es si esta funcionalidad sería meramente organizativa o si por lo contrario se podrían asignar permisos a grupos. Tras crear el primer grupo mis dudas quedaron resueltas, cuando creas un Subteam dentro de Team Members esto crea un grupo de usuarios a nivel de Team Project dentro de TFS por lo que si se pueden asignar permisos determinados a cada grupo, aunque Microsoft recomienda que estos grupos solo sean usados como contenedores y que no apliquemos permisos sobre ellos para que no se produzcan comportamientos que no queramos relacionados con la seguridad.&lt;br&gt;&lt;br&gt;En primer lugar deberíamos crear una estructura de equipos que identifiquen los diferentes roles, por ejemplo: Developers y Testers. Para crear un nuevo equipo simplemente pulsamos con el botón derecho sobre Team Members y les damos a "New Subteam" y añadimos un nombre una descripción para el equipo.&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="447" alt="PowerTools - Imagen 1" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/TeamFoundationServerPowerToolsOctober200_FFFD/PowerTools%20-%20Imagen%201_fa47e14f-ccea-41a5-ac5e-0e5bf18b3f25.png" width="373"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Obviamente el día a día de los developers y los testers es diferente y , dejando de lado el tema de la seguridad, tener reflejados estos grupos bajo Team Members nos da la posibilidad de personalizar un poco el entorno para cada uno de los grupos. Si pulsamos con el botón derecho sobre cualquiera de los grupos, por ejemplo Developers, vemos una opción que se llama "Team Settings...". Desde esta opción abrimos un cuadro de diálogo donde se pueden configurar cuatro elementos diferentes.&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;h5&gt;Workspace Templates&lt;/h5&gt; &lt;p&gt;Esta funcionalidad nos permite crear una serie de plantillas de workspaces a nivel de Team Project y asignar una diferente a cada equipo. La creación de la plantilla del workspace lo único que hace es que nos permite crear el mapeo de rutas locales con rutas del control de código fuente y guardarlo para que pueda ser usado por el resto del equipo. De esta forma, cuando llega alguien nuevo en el equipo solo tiene que pulsar sobre su equipo con el botón derecho y darle a "Create Workspace" y esto usará la plantilla que se haya definido para ese equipo. Si esta opción no aparece en el menú contextual significará que no se ha definido una plantilla para la creación de Workspaces en ese equipo.&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="295" alt="PowerTools - Imagen 2" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/TeamFoundationServerPowerToolsOctober200_FFFD/PowerTools%20-%20Imagen%202_305c1934-2a78-4fc7-ac37-3d3e6ea2bd8f.png" width="535"&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;/p&gt; &lt;h5&gt;&lt;br&gt;Individual Queries&lt;/h5&gt; &lt;p style="float: left"&gt;Esta opción nos permite seleccionar consultas de elementos de trabajo de entre todas las consultas de equipo que contengan la macro @me y añadirlas al menú contextual que aparece cuando pinchas con el botón derecho sobre cada miembro de un equipo. De esta forma se consigue filtrar un poco las consultas para que se pueda acceder a ellas más rápido.&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="572" alt="PowerTools - Imagen 3" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/TeamFoundationServerPowerToolsOctober200_FFFD/PowerTools%20-%20Imagen%203_41a1b99a-5a91-43de-b139-66d93a2cc3a1.png" width="377"&gt; &lt;/p&gt; &lt;h5&gt;Team Queries&lt;/h5&gt; &lt;p&gt;Esta opción es similar a la anterior, pero permite seleccionar un conjunto de las consultas de equipo y hacerlas más accesibles para un grupo. Por ejemplo el equipo de Developers usará más las consultas relacionadas con el desarrollo y los Testers usarán más las consultas relacionadas con los bugs, de esta forma se asignan cada grupo de consultas a un Team y aparecerán al pulsar sobre el grupo en cuestión con el botón derecho.&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="532" alt="PowerTools - Imagen 4" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/TeamFoundationServerPowerToolsOctober200_FFFD/PowerTools%20-%20Imagen%204_dc61e771-3803-4afa-be90-a5284a2198df.png" width="372"&gt;&lt;/p&gt; &lt;h5&gt;Team Links&lt;/h5&gt; &lt;p&gt;Por ultimo, también podemos añadir una serie de direcciones Url que puedan ser de interés para todo el equipo, como puede ser el portal del proyecto, enlaces a documentación online o recursos, en definitiva, cualquier Url que pueda resultar útil. Una vez añadidas aparecerán en el menú contextual al igual que el resto de elementos que hemos ido viendo, aunque en esta ocasión agrupados en un menú llamado "Web Links".&lt;br&gt;&lt;/p&gt; &lt;p style="text-align: center"&gt;&lt;img height="495" alt="PowerTools - Imagen 5" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/TeamFoundationServerPowerToolsOctober200_FFFD/PowerTools%20-%20Imagen%205_38f18cf4-f186-4613-b8ee-e9c16db673c2.png" width="443"&gt;&lt;/p&gt; &lt;p&gt;La verdad es que el equipo de producto tiene razón, esta ha sido una "major release", ya que estas cosas que hemos visto son solo el principio. Espero poder contaros algo más sobre el resto de funcionalidades que me han parecido interesantes en los próximos días.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/hy-fhkRP7lk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/hy-fhkRP7lk/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/11/Team-Foundation-Server-Power-Tools-October-2008.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=50289667-3166-45b3-854c-cf0f6336d800</guid>
      <pubDate>Sun, 09 Nov 2008 23:57:02 +0200</pubDate>
      <category>Herramientas</category>
      <category>Team Foundation Server</category>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=50289667-3166-45b3-854c-cf0f6336d800</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=50289667-3166-45b3-854c-cf0f6336d800</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/11/Team-Foundation-Server-Power-Tools-October-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=50289667-3166-45b3-854c-cf0f6336d800</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=50289667-3166-45b3-854c-cf0f6336d800</feedburner:origLink></item>
    <item>
      <title>&amp;iquest;Necesitamos m&amp;aacute;s plantillas de proceso?</title>
      <description>&lt;p&gt;Uno de los puntos fuertes de Visual Studio Team System es que cuando creamos nuestros proyectos nos permite seleccionar la metodología con la que se gestionará el mismo. La metodología que elijamos marcará como distribuiremos y planificaremos todas las tareas necesarias para llevar a cabo el proyecto. Ya que existen una gran cantidad de metodologías y para hacer el producto lo mas versátil posible, se dotó a VSTS con un mecanismo para poder crear nuevas plantillas que definieran los procesos de cualquier metodología. Al producto la acompañan dos plantillas de proceso diferentes, la de MSF for Agile y MSF for CMMI, pero existen muchas otras plantillas, algunas creadas por Microsoft, como eScrum u otras de terceros como puede ser la famosa Scrum For Team System de Cochango. Algunas de estas plantillas han sido creadas como proyectos de código abierto, otras son simplemente gratuitas y también las hay de pago.&lt;br&gt;&lt;br&gt;A pesar de la gran cantidad de plantillas que existen, la gran mayoría de ellas bajo mi punto de vista (y que conste que no soy un experto en metodologías ni mucho menos) están mas enfocadas al ciclo de creación de un nuevo software que al mantenimiento del mismo. Si bien Scrum por ejemplo puede ser utilizado para la gestión de Bugs, ya que solo dice como hay que organizarse no que estamos organizando, la realidad es que el departamento de desarrollo de nuevas aplicaciones y el de mantenimiento de las mismas se gestionan de formas muy diferentes normalmente. Por ejemplo, en muchas ocasiones los que nos dedicamos a la consultoría llegamos a un cliente hacemos un desarrollo a medida y es el cliente final el que se encarga de su mantenimiento.&lt;br&gt;&lt;br&gt;Una vez que esta aplicación esta lista y pasa a un estado de mantenimiento, la mayoría de tareas que se hacen, basándome en mi experiencia, es bug fixing. Suele existir un grupo de personas que se encargan de trasladar los bugs encontrados por los usuarios al equipo de mantenimiento y estos en base a su criticidad, impacto o tipo asignan prioridades para la resolución de los mismos. En este punto el proceso se convierte en algo parecido a una cola donde se van apilando bugs y se van desapilando en base a su prioridad, ya no existen áreas e iteraciones, o sprints, no existe una fecha final, ni unos requisitos específicos, solo que corrijan los bugs de la versión que hay en producción y que los usuarios puedan utilizar el producto. Quizá esta visión este mas enfocada a esa gran cantidad de herramientas que poseen las compañías para la gestión interna de sus procesos y menos a un software que se venda como producto a un usuario final, pero este escenario que planteo es muy común y creo que todos lo hemos visto o vivido.&lt;br&gt;&lt;br&gt;Llegados a este punto la pregunta es, ¿necesitamos nuevas plantillas de proceso?&lt;br&gt;&lt;br&gt;A mí se me ha planteado este escenario recientemente y tras evaluar como gestionarlo con Scrum o con cualquier otra metodología, mi decisión ha sido crear una nueva plantilla de proceso. Para llegar a esta decisión me plantee una serie de preguntas y analice como de factibles eran con cada una de las opciones, plantilla nueva o una existente.&lt;br&gt;&lt;br&gt;Por ejemplo, ¿cuando finaliza el desarrollo? ¿tenemos un objetivo claro?. Ante estas dos preguntas las respuestas son que no tenemos una fecha de fin ni un objetivo claro que alcanzar, solo que se corrijan los bugs que se encuentren. Si usasemos una plantilla existente de una metodología no podríamos crear sprints o áreas e iteraciones, porque no hay un objetivo tangible que alcanzar ni en una fecha concreta. En este aspecto, mi opinión es que al no haber un objetivo claro ni puntos en el tiempo que vayan marcando hitos, una metodología que se base en estas cosas no es adecuada, por lo tanto usar una plantilla ya existente es bastante complicado.&lt;br&gt;&lt;br&gt;Pero si obviasemos el aspecto que he comentado anteriormente y optasemos por una plantilla existente, nos surgirían otros temas como por ejemplo si nos sirven o no los tipos de WorkItems de la plantilla. Ahora necesitamos información de otro tipo, como los datos aportados por el usuario, si sabe como replicar el bug, comentarios entre los que recogen los bugs que encuentran los usuarios y los desarrolladores, en definitiva, un montón de datos adicionales que requerirían de la personalización o creación de un nuevo tipo de Work Item.&lt;br&gt;&lt;br&gt;O también los tipos de reportes que necesitaría. En este aspecto ya no tienen mucho que ver los reportes que pueda aportarme una plantilla de Scrum como en Burndown chart o el Project Velocity de MSF Agile. Ahora quizás necesite ver cual es la tipología de los bugs, o el volumen de bugs solucionados por fechas, o porque no, el número de bugs que soluciona cada desarrollador, cuantos bugs se han rechazado, un punto de vista quizás mas enfocado al pasado-presente, que al presente-futuro que aportan las metodologías donde se tiene un objetivo que alcanzar.&lt;br&gt;&lt;br&gt;A raíz de esto es muy probable que ponga posts relacionados con la creación y edición de plantillas de proceso, pero si me gustaría que antes de crear una plantilla de proceso os hagais estas y más preguntas para determinar si realmente necesitáis una plantilla de proceso. Yo a día de hoy aun no estoy seguro de si la decisión es correcta o no y eso lo iré viendo con el tiempo, por eso me gustaría lanzaros varias preguntas, ¿que opináis vosotros de todo este asunto? ¿os parece correcto usar Visual Studio Team System para este tipo de gestión? ¿creéis que es necesaria la creación de mas plantillas de proceso?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/p1eZbps2X6s" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/p1eZbps2X6s/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/10/iquest3bNecesitamos-maacute3bs-plantillas-de-proceso.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=146aeb42-a806-4ae5-b40f-96f773cd1bc2</guid>
      <pubDate>Sun, 26 Oct 2008 19:45:49 +0200</pubDate>
      <category>Team System</category>
      <category>Opinión</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=146aeb42-a806-4ae5-b40f-96f773cd1bc2</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=146aeb42-a806-4ae5-b40f-96f773cd1bc2</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/10/iquest3bNecesitamos-maacute3bs-plantillas-de-proceso.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=146aeb42-a806-4ae5-b40f-96f773cd1bc2</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=146aeb42-a806-4ae5-b40f-96f773cd1bc2</feedburner:origLink></item>
    <item>
      <title>Mejorar el rendimiento de nuestras Builds</title>
      <description>&lt;p&gt;Una de las prácticas de la Integración Continua que recomienda Martin Fowler es la de mantener lo más rápidas posibles nuestras Builds, aunque también podemos hacer aplicable esta práctica a todas nuestras Builds, no solo las de Integración Continua. Normalmente uno de los pasos en los que más suelen tardar las Builds es a la hora de obtener el código del repositorio y preparar el entorno para compilar, teniendo que limpiar el contenido de la última Build, regenerar el Workspace y obtener la ultima versión del código. &lt;br&gt;&lt;br&gt;Tal y como ya contó el gran &lt;a href="http://www.lfraile.net/"&gt;Luis Fraile&lt;/a&gt; en &lt;a href="http://www.lfraile.net/post/Configuraci2433bn-de-Builds-incrementales-en-Team-Build.aspx"&gt;un post hace tiempo&lt;/a&gt;, lo ideal para mejorar el rendimiento es evitar que se realicen estos pasos que he comentado anteriormente añadiendo una serie de propiedades dentro de nuestro fichero TFSBuild.proj para hacer lo que se denomina Builds Incrementales. Este tipo de Builds se configuran para que solo se obtengan los ficheros modificados sobre los últimos que ya había en el Working Directory del Build Agent con lo cual se ahorra bastante tiempo. Si habéis leído el post de Luis (lectura recomendada), con Team Build 2005 se utilizaban 3 propiedades para configurar este tipo de Builds Incrementales. &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SkipClean&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SkipClean&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SkipInitializeWorkspace&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SkipInitializeWorkspace&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ForceGet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ForceGet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;En Team Build 2008 han simplificado este proceso, que era bastante utilizado, por una sola propiedad llamada IncrementalBuild que simplemente tenemos que establecer a "true" y hará el mismo efecto que las 3 propiedades que teníamos que establecer en la versión anterior. &lt;br&gt;&lt;br&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;IncrementalBuild&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;IncrementalBuild&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;    
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br&gt;Simplemente con esto ya tendríamos nuestras Builds configuradas y probablemente hayamos ganado algo de velocidad a nivel global en el proceso de la Build.&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/808PyA8NFyg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/808PyA8NFyg/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/10/Mejorar-el-rendimiento-de-nuestras-Builds.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=1baece8a-4eef-47a6-b825-a9708dab0110</guid>
      <pubDate>Wed, 22 Oct 2008 01:01:01 +0200</pubDate>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=1baece8a-4eef-47a6-b825-a9708dab0110</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=1baece8a-4eef-47a6-b825-a9708dab0110</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/10/Mejorar-el-rendimiento-de-nuestras-Builds.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=1baece8a-4eef-47a6-b825-a9708dab0110</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=1baece8a-4eef-47a6-b825-a9708dab0110</feedburner:origLink></item>
    <item>
      <title>ALM Workshops: Integraci&amp;oacute;n continua con TFS 2008</title>
      <description>&lt;p&gt;Tras el evento que celebró Microsoft Ibérica la semana pasada en Madrid , el ALM Sessions 08, donde se impartieron multitud de sesiones, obviamente acerca de ALM, llegan una serie de Workshops llamados los ALM Workshops. Esta serie de eventos, que se celebrarán en Madrid y Barcelona durante Octubre, Noviembre y Diciembre, no hacen mas ampliar considerablemente (de 45 minutos a 4 horas) los contenidos presentados en dicho evento. A pesar de que no participe como ponente en ese evento (llegamos tarde), si que voy a ser ponente en uno de esos Workshops. &lt;br&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Este próximo Miércoles tendrá lugar el primero de esos Workshops y yo voy a ser el encargado de darlo. En él hablaré de como adoptar la Integración Continua con Team Foundation Server 2008. El enfoque será bastante practico y la intención es pasar la mayor parte del tiempo con Visual Studio y configurando todo el entorno para adoptar la Integración Continua de la forma más eficiente posible. Por aquí os dejo los datos de registro y la url por si alguno quiere/puede asistir. &lt;br&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="text-align: left"&gt;&lt;strong&gt;Evento:&lt;/strong&gt; &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032391362&amp;amp;Culture=es-ES"&gt;Workshop ILITIA: Integración Continua con Team Foundation Server 2008&lt;/a&gt; &lt;br&gt;&lt;strong&gt;Fecha:&lt;/strong&gt; Miercoles 22 de Octubre, de 10:00h a 14:00h &lt;br&gt;&lt;strong&gt;Lugar:&lt;/strong&gt; Oficinas de Microsoft Ibérica en Pozuelo de Alarcón, Madrid &lt;br&gt;&lt;strong&gt;Coste del evento:&lt;/strong&gt; 30€&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/F4aVttao6Bc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/F4aVttao6Bc/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/10/alm-workshops-integraci-243-n-continua-con-tfs-2008.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=75acac19-161b-4697-b01b-1d2ee18a5ba0</guid>
      <pubDate>Mon, 20 Oct 2008 23:30:47 +0200</pubDate>
      <category>Evento</category>
      <category>Team Build</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=75acac19-161b-4697-b01b-1d2ee18a5ba0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=75acac19-161b-4697-b01b-1d2ee18a5ba0</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/10/alm-workshops-integraci-243-n-continua-con-tfs-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=75acac19-161b-4697-b01b-1d2ee18a5ba0</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=75acac19-161b-4697-b01b-1d2ee18a5ba0</feedburner:origLink></item>
    <item>
      <title>Laboratorios Virtuales de Visual Studio Team System 2008</title>
      <description>&lt;p&gt;Yo no soy muy partidario de poner posts con simplemente con links sin generar algún tipo de valor adicional, pero en esta ocasión voy a hacer una excepción. A finales de Marzo de este año Microsoft publico una máquina virtual muy completa con la versión RTM de Visual Studio Team System 2008 y de la que ya &lt;a href="http://www.teamsystem.es/post/2008/09/Evento-en-MadNUG.aspx"&gt;he hablado anteriormente&lt;/a&gt;. Junto a esta máquina virtual se publicaron también una serie de laboratorios con los que se podían ver y aprender muchas de las nuevas características del producto.&lt;/p&gt;&lt;br&gt; &lt;p&gt;Pues bien, hoy he visto (y hasta ahora no había tenido constancia de ello) que algunos de estos laboratorios y otros nuevos están disponibles online, y que sin necesidad de descargar nada podéis realizarlos tranquilamente desde vuestro PC, en casa o en la oficina. Así que si más demora aquí os dejo los enlaces a estos laboratorios para podáis hacerlos.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9490204"&gt;Building Quality Code with VSTS 2008 Development Edition (Part 1: Managed Code)&lt;/a&gt;  &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9512208"&gt;Building Quality Code with VSTS 2008 Development Edition (Part 2: Native Code)&lt;/a&gt;  &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9490205"&gt;Introduction to Database Development with VSTS 2008 Database Edition&lt;/a&gt;  &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9512209"&gt;Managing your Team Development Efforts with Team System 2008&lt;/a&gt;  &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9513784"&gt;Version Control and Integration with Team System 2008&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Y bueno por si esto os parece poco, aprovecho también para dejaros unos enlaces a una serie de Web Casts que se han publicado los chicos del programa de partners y que están bastante bien:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.isvinnovation.com/Directory/SeriesDescription.aspx?CourseId=60"&gt;Microsoft® Visual Studio® Team System 2008&lt;/a&gt; : Serie de 6 Web Casts de una hora de duración cada uno que da un repaso a cada una de las versiones de VSTS así como a Team Foundation Server. Estos Web Casts están clasificados como nivel avanzado.  &lt;li&gt;&lt;a href="http://www.isvinnovation.com/SeriesDescription.aspx?CourseId=45"&gt;Microsoft Visual Studio Team System 2008&lt;/a&gt; : Serie de otros 6 Web Casts de una hora de duración, y que en esta ocasión además de repasar las distintas versiones de VSTS y Team Foundation Server, ofrece una introducción a ALM. Estos son algo más leves en cuanto a contenidos, son de nivel intermedio.  &lt;li&gt;&lt;a href="http://www.isvinnovation.com/SeriesDescription.aspx?CourseId=29"&gt;Visual Studio Team Systems Web Seminar Series&lt;/a&gt; : Y por ultimo, una serie de Web Seminars, mucho más introductorios y que hacen un recorrido por las novedades del producto analizando cada una de las versiones de VSTS. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Y para concluir (y os prometo que ya paro de poner enlaces :-)) os dejo también la url de la pagina de eventos y web casts dedica a Visual Studio Team System donde se van publicando los nuevos Web Casts y laboratorios que van sacando del producto, ya hay incluso un Web Cast planeado para Marzo de 2009.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Visual Studio Team System- Power in Simplicity" href="http://www.microsoft.com/events/series/msdnvsts.aspx"&gt;Visual Studio Team System- Power in Simplicity&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Espero que os sean de ayuda todos estos recursos de formación.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/sgZHgrqCgjM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/sgZHgrqCgjM/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/10/Laboratorios-Virtuales-de-Visual-Studio-Team-System-2008.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=e4cbbb8d-9da7-46fc-9aa4-41d9f5101886</guid>
      <pubDate>Tue, 07 Oct 2008 23:11:17 +0200</pubDate>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=e4cbbb8d-9da7-46fc-9aa4-41d9f5101886</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=e4cbbb8d-9da7-46fc-9aa4-41d9f5101886</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/10/Laboratorios-Virtuales-de-Visual-Studio-Team-System-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=e4cbbb8d-9da7-46fc-9aa4-41d9f5101886</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=e4cbbb8d-9da7-46fc-9aa4-41d9f5101886</feedburner:origLink></item>
    <item>
      <title>Excluir el c&amp;oacute;digo generado de la cobertura de c&amp;oacute;digo</title>
      <description>&lt;p&gt;Una de las características que nos proporciona Visual Studio Team System es la Cobertura de código, que nos ayuda a saber que cantidad de código funcional cubren nuestras pruebas unitarias. El volumen de código que cubren nuestras pruebas es representado de forma porcentual y como cabe esperar lo ideal es mantener este porcentaje lo más alto posible, pero muchas veces debido al código que genera Visual Studio en algunas ocasiones, este porcentaje nunca alcanza el 100%.&lt;/p&gt;&lt;br&gt; &lt;p&gt;Cubrir el 100% del código con nuestras pruebas unitarias es una tarea muy difícil pero si además tenemos código generado, que no debemos probar, y que también es contabilizado, podemos perder la perspectiva del nivel de cobertura que estamos alcanzando con nuestras pruebas. Lo ideal sería, al igual que se puede hacer con las reglas de Análisis estático de código, excluir el código generado del informe de cobertura de código, ¿no?.&lt;/p&gt; &lt;p&gt;&lt;br&gt;Pues bien, a pesar de que no es una funcionalidad tal cual, es más bien un Workaround, existe la forma de excluir el código generado para que no contabilice cuando se esta realizando la cobertura de código, incluso hacer que el código generado no aparezca en el reporte de cobertura de código. El Tip/Trick/Hack o como queráis llamarlo surge a raíz de como es realizada la medición de la cobertura, que se basa en el Debugger para saber porque líneas de código se ha pasado, con lo que si conseguimos que el Debugger no pase por el código generado evitamos que ese código sea contabilizado, pero voy a dejar ya de dar tanto detalle y vamos a ver un poco de código.&lt;/p&gt; &lt;p&gt;&lt;br&gt;Partiendo de un proyecto de librería de clases recién creado, tenemos una clase con el código que sigue:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;br&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Managers
{
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManagerClass
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Book&lt;/span&gt;&amp;gt; GetBooksByName(&lt;span style="color: blue"&gt;string &lt;/span&gt;bookName)
        {
            &lt;span style="color: blue"&gt;return null&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;Este código no hace absolutamente nada, con lo que si generamos un test unitario con el código que se muestra a continuación deberíamos obtener una cobertura del 100%, ¿no? &lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]
&lt;span style="color: blue"&gt;public void &lt;/span&gt;GetBooksByNameExpectedNull()
{
    &lt;span style="color: green"&gt;// Arrange
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManagerClass &lt;/span&gt;target = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ManagerClass&lt;/span&gt;();

    &lt;span style="color: green"&gt;// Act
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Book&lt;/span&gt;&amp;gt; val1 = target.GetBooksByName(&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Empty);

    &lt;span style="color: green"&gt;// Assert
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsNull(val1);
}&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;Sin embargo tras ejecutar la prueba unitaria, obtenemos a nivel de ensamblado un 28,57% de cobertura, lo cual resulta un poco extraño. Si miramos el reporte de la cobertura de código vemos que el espacio de nombres Managers si tiene una cobertura del 100%, pero tenemos un tal Managers.Properties que representa una parte importante de nuestro código y que no esta probado, lo que hace que la media porcentual caiga en picado. &lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img height="221" alt="ExcluirCoberturaDeCodigo-1" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/Excluirelcdigogeneradodelacoberturadecdi_13FF5/ExcluirCoberturaDeCodigo-1_f7ae48e0-965b-4443-bad7-483e34cf79af.png" width="535"&gt; &lt;/p&gt;
&lt;p&gt;&lt;br&gt;La clase Settings dentro de Managers.Properties es código generado por Visual Studio y en este ejemplo representa un porcentaje muy alto de todo el código que hay en el proyecto, lo que hace que al no estar probado, nuestro índice de cobertura sea muy bajo. Para excluir este código de la medición lo único que tenemos que hacer es abrir el fichero Settings.cs y añadir, en este caso a nivel de clase, el atributo DebbugerNonUserCode o DebuggerHidden, con lo que el depurador no pasará por ese código y no se incluirá en el reporte. &lt;br&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Diagnostics;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Managers.Properties 
{    
    [&lt;span style="color: blue"&gt;global&lt;/span&gt;::System.Runtime.CompilerServices.&lt;span style="color: #2b91af"&gt;CompilerGeneratedAttribute&lt;/span&gt;()]
    [&lt;span style="color: blue"&gt;global&lt;/span&gt;::System.CodeDom.Compiler.&lt;span style="color: #2b91af"&gt;GeneratedCodeAttribute&lt;/span&gt;(
        &lt;span style="color: #a31515"&gt;"Microsoft.VisualStudio.Editors.SettingsDesigner." &lt;/span&gt;+
        &lt;span style="color: #a31515"&gt;"SettingsSingleFileGenerator"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"9.0.0.0"&lt;/span&gt;)]
    [&lt;span style="color: #2b91af"&gt;DebuggerNonUserCode&lt;/span&gt;] &lt;span style="color: green"&gt;/* Atributo para la exclusion */&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;    &lt;span style="color: blue"&gt;internal sealed partial class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Settings 
        &lt;/span&gt;: &lt;span style="color: blue"&gt;global&lt;/span&gt;::System.Configuration.&lt;span style="color: #2b91af"&gt;ApplicationSettingsBase 
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;private static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Settings &lt;/span&gt;defaultInstance = 
            ((&lt;span style="color: #2b91af"&gt;Settings&lt;/span&gt;)(&lt;span style="color: blue"&gt;global&lt;/span&gt;::System.Configuration.
            &lt;span style="color: #2b91af"&gt;ApplicationSettingsBase&lt;/span&gt;.Synchronized(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Settings&lt;/span&gt;())));
        
        &lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Settings &lt;/span&gt;Default 
        {
            &lt;span style="color: blue"&gt;get 
            &lt;/span&gt;{
                &lt;span style="color: blue"&gt;return &lt;/span&gt;defaultInstance;
            }
        }
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;Como podéis comprobar en la siguiente imagen ya no hay rastro de Managers.Properties y nuestro porcentaje a nivel de ensamblado ya es real. &lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img height="179" alt="ExcluirCoberturaDeCodigo-2" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/Excluirelcdigogeneradodelacoberturadecdi_13FF5/ExcluirCoberturaDeCodigo-2_90aa74df-87c4-49b2-84d0-eecf0579eb38.png" width="535"&gt; &lt;/p&gt;
&lt;p&gt;&lt;br&gt;Este es un ejemplo muy básico, y la proporción entre código funcional y código generado hace que no probar el código generado tenga mucho impacto, pero muestra como conseguir el objetivo del post perfectamente. Si lo probáis en un proyecto en el que tengais DataSets, o referencias a servicios Web podréis observar el resultado real.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;Por ultimo, solo comentar que si decidimos usar este método para obtener una cobertura de código real, debemos tener presente que el código que este marcado con este atributo no cuenta en ningún aspecto para el depurador, con lo que si necesitamos poner un punto de interrupción en este código, éste será obviado por completo. Además si Visual Studio necesitara regenerar el código, por ejemplo una referencia a un servicio Web o un DataSet, como es lógico los atributos se borrarán y el código volverá a aparecer en el reporte de cobertura.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/b4v5t6ehjgw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/b4v5t6ehjgw/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/10/Excluir-el-codigo-generado-de-la-cobertura-de-codigo.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=a29ab892-afc8-48f4-86a4-232083ab5dc3</guid>
      <pubDate>Fri, 03 Oct 2008 01:02:44 +0200</pubDate>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=a29ab892-afc8-48f4-86a4-232083ab5dc3</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=a29ab892-afc8-48f4-86a4-232083ab5dc3</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/10/Excluir-el-codigo-generado-de-la-cobertura-de-codigo.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=a29ab892-afc8-48f4-86a4-232083ab5dc3</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=a29ab892-afc8-48f4-86a4-232083ab5dc3</feedburner:origLink></item>
    <item>
      <title>Diccionarios para el An&amp;aacute;lisis est&amp;aacute;tico de c&amp;oacute;digo (II)</title>
      <description>&lt;p&gt;En el post anterior hab&amp;#237;amos visto la estructura de un diccionario personalizado para el An&amp;#225;lisis est&amp;#225;tico de c&amp;#243;digo, pero en la mayor&amp;#237;a de los casos puede llegar a ser un aut&amp;#233;ntico incordio tener que crearlo sin ning&amp;#250;n tipo de ayuda, ya que se trata de un fichero Xml sin m&amp;#225;s. Una de las cosas que podemos hacer en Visual Studio es tener referenciados una lista de esquemas Xsd que nos aportan intellisense a la edici&amp;#243;n de los ficheros, as&amp;#237; que bas&amp;#225;ndonos en el fichero de diccionario que acompa&amp;#241;a a Visual Studio vamos a generar un Xsd para que nos ayude en la edici&amp;#243;n de este tipo de archivos. Para generar un Xsd, tan solo tenemos que abrir el fichero Xml en Visual Studio e irnos al men&amp;#250; XML y seleccionar la opci&amp;#243;n Generate Schema. Este esquema nos servir&amp;#225; como base y con unas peque&amp;#241;as modificaciones en los n&amp;#250;meros de ocurrencias de los nodos y a&amp;#241;adiendo el &amp;quot;Target Namespace&amp;quot; ya lo tendremos listo para utilizar. Como yo ya lo tengo hecho, lo he colgado para que lo pod&amp;#225;is descargar directamente. (&lt;a href="http://www.teamsystem.es/files/CodeAnalysisDictionary.xsd"&gt;CodeAnalysisDictionary.xsd&lt;/a&gt;)&lt;/p&gt;  &lt;br /&gt;  &lt;p style="text-align: center"&gt;&lt;img height="344" alt="DiccionariosPersonalizados - Imagen 2" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/DiccionariosparaelAnalisisestaticodecodi_16A/DiccionariosPersonalizados%20-%20Imagen%202_fdcb8cdb-63b3-4e59-9a7f-b4bade63d800.png" width="536" /&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;Una vez hemos creado el esquema lo &amp;#250;nico que tenemos que hacer para dar soporte a la edici&amp;#243;n de los ficheros de diccionarios es agregar el esquema generado a la lista de esquemas de Visual Studio desde la opci&amp;#243;n de men&amp;#250; &amp;quot;XML -&amp;gt; Schemas...&amp;quot; y veremos como ya nos aparece en la lista y como tiene el Target Namespace que le hemos asignado: &amp;quot;http://microsoft.com/schemas/VisualStudio/CodeAnalysis&amp;quot;.&lt;/p&gt;  &lt;br /&gt;  &lt;p style="text-align: center"&gt;&lt;img height="339" alt="DiccionariosPersonalizados - Imagen 3" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/DiccionariosparaelAnalisisestaticodecodi_16A/DiccionariosPersonalizados%20-%20Imagen%203_f55546e3-8e25-4ab6-bbc5-4c94061ce60b.png" width="543" /&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;Y por &amp;#250;ltimo, ya solo nos quedar&amp;#237;a crear un fichero Xml, poner el valor &amp;quot;http://microsoft.com/schemas/VisualStudio/CodeAnalysis&amp;quot; al atributo &amp;quot;xmlns&amp;quot; del nodo ra&amp;#237;z y Viol&amp;#225;! ya tenemos intellisense para la edici&amp;#243;n de nuestros ficheros de diccionarios.&lt;/p&gt;  &lt;br /&gt;  &lt;p style="text-align: center"&gt;&lt;img height="241" alt="DiccionariosPersonalizados - Imagen 4" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/DiccionariosparaelAnalisisestaticodecodi_16A/DiccionariosPersonalizados%20-%20Imagen%204_1ca5757b-2006-4567-921b-1fa9e58e9677.png" width="541" /&gt;&amp;#160; &lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;Por &amp;#250;ltimo, y para no extenderme mucho m&amp;#225;s, solo comentaros que una vez tengamos creado nuestro fichero Xml con todos los t&amp;#233;rminos, no es necesario que lo copiemos a cada uno de los proyecto, lo cual nos complicar&amp;#237;a un poco el tema del mantenimiento en caso de que quisi&amp;#233;semos a&amp;#241;adir nuevos t&amp;#233;rminos al fichero, por lo que una de las soluciones para este caso pasa por poner el fichero Xml a nivel de soluci&amp;#243;n y a&amp;#241;adir el fichero a cada proyecto, pero no como un fichero f&amp;#237;sico, sino como un link al fichero, para solo tener un fichero y que sea f&amp;#225;cil de mantener.&lt;/p&gt;  &lt;br /&gt;  &lt;p style="text-align: center"&gt;&lt;img height="395" alt="DiccionariosPersonalizados - Imagen 5" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/DiccionariosparaelAnalisisestaticodecodi_16A/DiccionariosPersonalizados%20-%20Imagen%205_73e190a3-45b0-45d3-bd8e-b3cc0fd78eb8.png" width="468" border="0" /&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p style="text-align: left"&gt;Y con esto concluye este segundo post dedicado a la creaci&amp;#243;n y uso de diccionarios personalizados para el An&amp;#225;lisis est&amp;#225;tico de c&amp;#243;digo, espero que os sea de ayuda.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/FEzzcNtyTqk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/FEzzcNtyTqk/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/09/Diccionarios-para-el-Anaacute3blisis-estaacute3btico-de-coacute3bdigo-(II).aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=d6687cb5-5d2c-49b9-8c76-f2604e123ce9</guid>
      <pubDate>Mon, 29 Sep 2008 01:06:49 +0200</pubDate>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=d6687cb5-5d2c-49b9-8c76-f2604e123ce9</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=d6687cb5-5d2c-49b9-8c76-f2604e123ce9</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/09/Diccionarios-para-el-Anaacute3blisis-estaacute3btico-de-coacute3bdigo-(II).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=d6687cb5-5d2c-49b9-8c76-f2604e123ce9</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=d6687cb5-5d2c-49b9-8c76-f2604e123ce9</feedburner:origLink></item>
    <item>
      <title>Diccionarios para el Analisis de estatico de codigo (I)</title>
      <description>&lt;p&gt;Una de las mejoras que incluye Visual Studio Team System 2008 es el soporte para diccionarios propios en cuanto a la ejecuci&amp;#243;n de las reglas de an&amp;#225;lisis de c&amp;#243;digo est&amp;#225;tico se refiere. A pesar de que es una de las funcionalidades que aparece en la mayor&amp;#237;a de las listas de nuevas caracter&amp;#237;sticas del producto no es del todo f&amp;#225;cil encontrar informaci&amp;#243;n detallada acerca de como funciona.    &lt;br /&gt;    &lt;br /&gt;Solo para refrescar un poco la memoria, os comento que el An&amp;#225;lisis est&amp;#225;tico de c&amp;#243;digo, es una funcionalidad que ofrece Visual Studio Team System desde la versi&amp;#243;n 2005 y que antes pod&amp;#237;amos utilizar desde una herramienta externa llamada FxCop. Esta funcionalidad nos permite definir un conjunto de reglas que ser&amp;#225;n verificadas sobre nuestro c&amp;#243;digo y que var&amp;#237;an en cuanto a objetivo. Podemos encontrar reglas relacionadas con el rendimiento, el dise&amp;#241;o de nuestras APIs, la portabilidad de nuestro c&amp;#243;digo, mantenibilidad o el caso sobre el que me centrar&amp;#233; en esta entrada, el nombrado de los elementos p&amp;#250;blicos de nuestro c&amp;#243;digo, ya sean interfaces, clases, m&amp;#233;todos o propiedades.     &lt;br /&gt;    &lt;br /&gt;Visual Studio Team System viene acompa&amp;#241;ado de una serie de reglas de nombrado que podemos activar a voluntad y que van desde sugerirnos no utilizar guiones bajos o el correcto uso de may&amp;#250;sculas y min&amp;#250;sculas, hasta que no usemos variables en los m&amp;#233;todos con el mismo nombre que los miembros de una clase. Pero si prestamos atenci&amp;#243;n a las reglas de nombrado (Naming Rules), estas nos sugieren muchas cosas relacionadas con los nombres que usamos para los elementos p&amp;#250;blicos de nuestro c&amp;#243;digo y se basa en el diccionario de palabras de Word para realizar el an&amp;#225;lisis, aunque no es necesario tener Word instalado ya que dentro de la carpeta del An&amp;#225;lisis est&amp;#225;tico de c&amp;#243;digo viene incluido ya el diccionario. Sin embargo para los casos en los que este diccionario no sea suficiente se nos permite tener un diccionario personalizado de palabras contra el que el motor de An&amp;#225;lisis est&amp;#225;tico de c&amp;#243;digo realizar&amp;#225; las comprobaciones necesarias.&lt;/p&gt;  &lt;p&gt;Para a&amp;#241;adir un diccionario personalizado lo &amp;#250;nico que tenemos que hacer es agregar un fichero Xml a nuestro proyecto y cambiar el valor de la propiedad Build Action del fichero y ponerlo a CodeAnalysisDictionary, de esta forma cuando se ejecute el an&amp;#225;lisis est&amp;#225;tico de c&amp;#243;digo se verificar&amp;#225;n la palabras contra el diccionario que acabamos de crear.&lt;/p&gt;  &lt;br /&gt;  &lt;p style="text-align: center"&gt;&lt;img height="334" alt="DiccionariosPersonalizados - Imagen 1" src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/DiccionariosparaelAnlisisdeestticodecdig_1EC/DiccionariosPersonalizados%20-%20Imagen%201_3cfdf46c-077e-4ccd-a8d8-4cd2483ef7b5.png" width="314" /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;El fichero Xml tiene una estructura determinada y en &amp;#233;l se nos permite a&amp;#241;adir una lista de palabras validas, no validas, palabras en desuso y su alternativa actual, una lista de palabras compuestas, una lista de excepciones para palabras compuestas y por ultimo una lista de excepciones para acr&amp;#243;nimos de palabras, aunque veremos cada uno de los puntos en detalle. Si quer&amp;#233;is ver un fichero Xml completo bien formado y documentado os recomiendo que vay&amp;#225;is a la ruta &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop&amp;quot; donde pod&amp;#233;is encontrar un fichero llamado &amp;quot;CustomDictionary.xml&amp;quot; que viene con el propio Visual Studio. A continuaci&amp;#243;n os describo cada unos de los tipos de listas que podemos encontrar dentro de este fichero:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Palabras reconocidas&lt;/strong&gt;: Lista de palabras que a pesar de no estar en el diccionario interno no provocar&amp;#225;n un error del tipo CA1704. Esta lista de palabras no es sensible a may&amp;#250;sculas y min&amp;#250;sculas y debemos evitar a&amp;#241;adir palabras compuestas en esta lista.       &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Recognized&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;accessor&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;accessors&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;acos&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;      
      &lt;/span&gt;...
      &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;xsi&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;xsl&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;xslt&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Recognized&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Palabras no reconocidas&lt;/strong&gt;: Lista de palabras que a pesar de estar incluidas en el diccionario se quiere evitar su uso. Estas palabras, al igual que las reconocidas, no son sensibles a may&amp;#250;sculas y min&amp;#250;sculas y debemos evitar introducir palabras en desuso en esta lista. En caso de que usemos alguna de las palabras incluidas en esta lista provocaremos que la reglas CA1704 genere un Warning o un Error en base a nuestra configuraci&amp;#243;n. 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Unrecognized&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;cb&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ch&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;gt&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;idx&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &lt;/span&gt;...
      &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;tw&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;val&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Word&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Unrecognized&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;strong&gt;T&amp;#233;rminos en desuso&lt;/strong&gt;: La lista de t&amp;#233;rminos en desuso, como cabe esperar, contiene una lista de palabras que no deber&amp;#237;an usarse, pero adem&amp;#225;s prove de una palabra alternativa que se deber&amp;#237;a usar. En caso de que una de las palabras de la lista este en nuestro c&amp;#243;digo y sea de visibilidad p&amp;#250;blica har&amp;#225; que la regla CA1726 no sea valida. Los t&amp;#233;rminos de esta lista no son sensibles a may&amp;#250;sculas y min&amp;#250;sculas, pero la palabra alternativa sugerida deber&amp;#237;a tener una nomenclatura Pascal-Case y en caso de que no tengamos palabra sugerida simplemente podremos dejarla en blanco. 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Deprecated&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;EnterpriseServices&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;complus&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Canceled&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;cancelled&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Indexes&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;indices&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;LogOn&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;login&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;LogOff&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;logout&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;SignIn&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;signon&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;SignOut&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;signoff&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;flag&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;PreferredAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;flags&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Deprecated&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Palabras compuestas&lt;/strong&gt;: La lista de palabras compuestas y la alternativa asociada es usada por la regla CA1702 y el motivo de esta lista es que aun siendo palabras compuestas existen en el diccionario como palabras &amp;#250;nicas pero sin embargo deber&amp;#237;an ser usadas como dos palabras con el correspondiente uso de may&amp;#250;sculas y min&amp;#250;sculas. Por ejemplo la palabra &amp;quot;Filename&amp;quot; existe en el diccionario, pero el uso correcto trat&amp;#225;ndose de c&amp;#243;digo deber&amp;#237;a ser &amp;quot;FileName&amp;quot;. Cualquier palabra que se encuentre en esta lista es automaticamente a&amp;#241;adida a la lista de palabras DiscreteExceptions que veremos a continuaci&amp;#243;n, ya que si no estuviesen a&amp;#241;adidas nunca llegar&amp;#237;an a generar un error y no se podr&amp;#237;a sugerir la alternativa correspondiente. 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Compound&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutoScrolls&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;autoscrolls&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutoComplete&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;autocomplete&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutoCompletes&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;autocompletes&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutoSave&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;autosave&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutoSaves&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;autosaves&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;JavaScript&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;javascript&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term &lt;/span&gt;&lt;span style="color: red"&gt;CompoundAlternate&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;JScript&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;jscript&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Compound&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Excepciones discretas&lt;/strong&gt;: Como he comentado anteriormente, en esta lista se encuentran las palabras que a pesar de estar en el diccionario son palabras compuestas y dado que las listas no diferencian entre may&amp;#250;sculas y min&amp;#250;sculas, se a&amp;#241;aden en esta lista las palabras para que la regla CA1702 no genere un falso positivo y sugiera al usuario cambiar la &amp;quot;AutoComplete&amp;quot; por la palabra &amp;quot;AutoComplete&amp;quot;. 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DiscreteExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;onset&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;inset&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;byname&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;setout&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;countertype&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Term&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DiscreteExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Words&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Acr&amp;#243;nimos&lt;/strong&gt;: Por &amp;#250;ltimo, si bien las listas anteriores eran listas de palabras, esta lista es de acr&amp;#243;nimos. En ella incluiremos abreviaturas que por un motivo u otro no deban seguir las reglas de nombrado est&amp;#225;ndares, como por ejemplo el acr&amp;#243;nimo del n&amp;#250;mero matem&amp;#225;tico &amp;quot;Pi&amp;quot;, que seg&amp;#250;n los est&amp;#225;ndares de nombrado al ser de dos letras deber&amp;#237;a ir en may&amp;#250;sculas, como &amp;quot;IO&amp;quot; por ejemplo. 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronyms&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CasingExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Pi&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Na&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &amp;lt;!-- &lt;/span&gt;&lt;span style="color: green"&gt;NaN &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;NESW&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &amp;lt;!-- &lt;/span&gt;&lt;span style="color: green"&gt;North East South West &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;NWSE&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronym&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &amp;lt;!-- &lt;/span&gt;&lt;span style="color: green"&gt;North West South East &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CasingExceptions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Acronyms&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Dictionary&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creo que con esto os pod&amp;#233;is hacer una idea de la potencia que tienen estos diccionarios personalizados pero como a&amp;#250;n me quedan algunas cosas que contar que os pueden resultar interesantes he decidido hacer una segunda parte de este post donde hablar&amp;#233; de como compartir un diccionario entre proyectos y de como dar soporte a la edici&amp;#243;n de estos ficheros.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/zeWLai0gzMg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/zeWLai0gzMg/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/09/Diccionarios-para-el-Analisis-de-estatico-de-codigo-(I).aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=5e2b9c5f-4df5-4cf2-990f-f4aa76f3fcf9</guid>
      <pubDate>Fri, 26 Sep 2008 00:14:00 +0200</pubDate>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=5e2b9c5f-4df5-4cf2-990f-f4aa76f3fcf9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=5e2b9c5f-4df5-4cf2-990f-f4aa76f3fcf9</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/09/Diccionarios-para-el-Analisis-de-estatico-de-codigo-(I).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=5e2b9c5f-4df5-4cf2-990f-f4aa76f3fcf9</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=5e2b9c5f-4df5-4cf2-990f-f4aa76f3fcf9</feedburner:origLink></item>
    <item>
      <title>Evento en Mad.NUG</title>
      <description>&lt;p&gt;El jueves de la&amp;#160; semana pasada participe como ponente en un evento de &lt;a href="http://madriddotnet.com"&gt;Mad.NUG&lt;/a&gt; y quer&amp;#237;a agradecer a todos los que fuisteis vuestra asistencia. La verdad es que a pesar de estar algo nervioso al principio creo que consegu&amp;#237; transmitir lo que pretend&amp;#237;a. Del evento surgieron algunos temas que me gustar&amp;#237;a comentar, pero no antes sin dejaros por aqu&amp;#237; el enlace a la presentaci&amp;#243;n que hice: &lt;a href="http://www.teamsystem.es/files/Gestion_del_Codigo_Fuente_con_VSTS_2008.pptx"&gt;Gesti&amp;#243;n del c&amp;#243;digo fuente con Visual Studio Team System 2008&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;En primer lugar, uno de los comentarios que me hicieron fue que todo lo que ense&amp;#241;&amp;#233; estaba muy bien, pero que en el momento de tener que hacer una demostraci&amp;#243;n a quien tiene la capacidad de decidir econ&amp;#243;micamente si se implanta el producto o no, har&amp;#237;an falta entornos ya montados que pudiesen usarse. A pesar de que al final de la presentaci&amp;#243;n comente qu&amp;#233; hab&amp;#237;a utilizado para realizar las demostraciones, no dije que el servidor de Team Foundation Server 2008 que utilice, es una m&amp;#225;quina virtual que Microsoft tiene disponible para ser descargada en MSDN Download Center en la siguiente url: &lt;a href="http://go.microsoft.com/?linkid=8048142"&gt;http://go.microsoft.com/?linkid=8048142&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Esta m&amp;#225;quina virtual esta montada sobre un Windows 2003 EE SP2 y viene con Visual Studio Team Suite 2008, Team Foundation Server 2008, Office 2007 SP1, Team Explorer 2008, Visual Studio 2005 y todos los prerequisitos de Team Foundation Server (SPS y SQL Server 2005). Adem&amp;#225;s tambi&amp;#233;n esta disponible otra m&amp;#225;quina virtual solo con Team Foundation Server 2008 y Team Explorer &amp;#250;nicamente, ya que la anterior ocupa unos 5GB, lo cual puede resultar algo lento de descargar. Pod&amp;#233;is descargar esta m&amp;#225;quina virtual algo m&amp;#225;s reducida desde la siguiente url: &lt;a href="http://go.microsoft.com/?linkid=8048143"&gt;http://go.microsoft.com/?linkid=8048143&lt;/a&gt;&amp;#160;&amp;#160; &lt;br /&gt;    &lt;br /&gt;Otra de las cosas que me comentaron fue como se podr&amp;#237;a afrontar una estrategia de Branching si uno de los proyectos fuese de tipo Web Application, que al hacer Branching y tener varias veces el mismo proyecto en un mismo equipo causar&amp;#237;a problemas con los sitios Web o directorios virtuales de nuestro servidor IIS local. Tras indagar un poco y con la ayuda de &lt;a href="http://www.lfraile.net"&gt;Luis Fraile&lt;/a&gt; (vamos &amp;#233;l ha sido quien ha dado con el comportamiento en estos casos) vimos que no hay ning&amp;#250;n problema en este escenario. Al abrir el sitio web de un Branch, si el sitio Web ya existe en el IIS te da la opci&amp;#243;n de sobrescribir el contenido del mismo o de crear uno nuevo, pero como me parece un tema muy interesante voy a escribir una entrada en los pr&amp;#243;ximos d&amp;#237;as al respecto, explicando de una forma m&amp;#225;s detallada el proceso.     &lt;br /&gt;    &lt;br /&gt;En definitiva, muchas gracias a todos los asistentes por venir y por supuesto a &lt;a href="http://madriddotnet.com"&gt;Mad.NUG&lt;/a&gt; por dejarme compartir las cosas que voy aprendiendo sobre Team System.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/x0picqrKA1o" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/x0picqrKA1o/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/09/Evento-en-MadNUG.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=a7314d58-1374-4d3f-bd72-b12c450551ca</guid>
      <pubDate>Tue, 23 Sep 2008 20:33:02 +0200</pubDate>
      <category>Evento</category>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=a7314d58-1374-4d3f-bd72-b12c450551ca</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=a7314d58-1374-4d3f-bd72-b12c450551ca</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/09/Evento-en-MadNUG.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=a7314d58-1374-4d3f-bd72-b12c450551ca</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=a7314d58-1374-4d3f-bd72-b12c450551ca</feedburner:origLink></item>
    <item>
      <title>Gestión del código fuente con VSTS 2008</title>
      <description>&lt;p&gt;
Hacia ya bastante que no escrib&amp;iacute;a nada por aqu&amp;iacute;, y muchos podr&amp;eacute;is pensar que me he pegado unas vacaciones de esc&amp;aacute;ndalo, pero ha sido justo lo contrario, no paro y tengo m&amp;aacute;s cosas que hacer para los pr&amp;oacute;ximos meses que ya os ir&amp;eacute; contando. Cuando pase esta semana habr&amp;eacute; quitado de mi lista uno de los hitos importantes que es una sesi&amp;oacute;n sobre la gesti&amp;oacute;n del c&amp;oacute;digo fuente con Visual Studio Team System 2008 que voy a dar en el &lt;a href="http://madriddotnet.com/"&gt;Grupo de Usuarios de .Net de Madrid (Mad.NUG)&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
El evento se celebrar&amp;aacute; este pr&amp;oacute;ximo Jueves d&amp;iacute;a 18 a las 19:00h en la oficinas de Microsoft Ib&amp;eacute;rica en Madrid, pero para no replicar la informaci&amp;oacute;n os remito directamente a la pagina del grupo de usuarios donde podr&amp;eacute;is encontrar la url de registro al evento y una peque&amp;ntilde;a descripci&amp;oacute;n de los temas que tratar&amp;eacute;. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://madriddotnet.spaces.live.com/blog/cns!6453107D41F04C68!146.entry"&gt;Gesti&amp;oacute;n del c&amp;oacute;digo fuente con VSTS 2008&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Espero veros por all&amp;iacute;, pero si por alg&amp;uacute;n motivo no pod&amp;eacute;is ir, no os preocup&amp;eacute;is que se colgar&amp;aacute; la presentaci&amp;oacute;n y el material de las demos tanto aqu&amp;iacute; como en la p&amp;aacute;gina del grupo de usuarios.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Un saludo.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/CSHkLFGMM_g" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/CSHkLFGMM_g/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/09/Gestion-del-codigo-fuente-con-VSTS-2008.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=173acd35-4cc4-4067-8457-09126dee8cef</guid>
      <pubDate>Mon, 15 Sep 2008 21:52:00 +0200</pubDate>
      <category>Evento</category>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=173acd35-4cc4-4067-8457-09126dee8cef</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=173acd35-4cc4-4067-8457-09126dee8cef</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/09/Gestion-del-codigo-fuente-con-VSTS-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=173acd35-4cc4-4067-8457-09126dee8cef</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=173acd35-4cc4-4067-8457-09126dee8cef</feedburner:origLink></item>
    <item>
      <title>Añadir iconos de documentos en Team System Web Access</title>
      <description>&lt;p&gt;
Probablemente la mayor&amp;iacute;a de vosotros ya conozcais Team System Web Access, pero para el que no lo conozca decirle que es frontal Web para Team Foundation Server que nos permite consultar, crear y modificar mucha informaci&amp;oacute;n sin tener instalado ning&amp;uacute;n software en nuestro equipo. Esta especialmente pensado para los roles dentro de un equipo que no se dedican a escribir c&amp;oacute;digo o que no tienen porque usar Visual Studio como su herramienta de trabajo diario. En definitiva, una maravilla! 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Pues bien, para los que ya lo hay&amp;aacute;is usado, sabr&amp;eacute;is que una de las cosas que nos permite TSWA es acceder a la documentaci&amp;oacute;n que tengamos almacenada en nuestros Team Projects. Desde la pesta&amp;ntilde;a de &amp;quot;Documents&amp;quot; podemos navegar por la estructura de directorios de nuestros documentos, subir nuevos ficheros o carpetas, la verdad es que va realmente bien, pero hay un peque&amp;ntilde;o detalle, que a pesar no ser nada funcional le quita &amp;quot;glamour&amp;quot; a esta herramienta. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Esta claro que el n&amp;uacute;mero de tipos de documentos diferentes que podemos almacenar aqu&amp;iacute; es infinito, podemos almacenar ficheros con la extensi&amp;oacute;n que queremos. Por defecto en TSWA vienen iconos para 100 tipos de ficheros diferentes, Word, Excel, Pdf, Zip, Html, etc... Pero siempre habr&amp;aacute; alguno que no se haya contemplado y como icono para ese tipo de documento aparecer&amp;aacute; un feo logo de Windows. Sin ir m&amp;aacute;s lejos las nuevas extensiones de documentos de Microsoft Office 2007 no est&amp;aacute;n contempladas, as&amp;iacute; que si subimos un fichero con extensi&amp;oacute;n &amp;quot;.docx&amp;quot; por ejemplo nos aparecer&amp;aacute; ese icono gen&amp;eacute;rico de extensi&amp;oacute;n desconocida. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="text-align: center"&gt;
&amp;nbsp;&lt;img src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/AadiriconosdedocumentosenTeamSystemWebAc_ABD2/A%C3%B1adir%20Iconos%20de%20documentos%20a%20TSWA%20-%20Imagen%201_e2314c5a-df77-4a82-a22c-bc646658cc9c.png" alt="A&amp;ntilde;adir Iconos de documentos a TSWA - Imagen 1" width="507" height="385" /&gt; 
&lt;/p&gt;
&lt;p style="text-align: center"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
A&amp;ntilde;adir nuevos iconos de extensiones de ficheros en TSWA es extremadamente sencillo, pero no existe ning&amp;uacute;n opci&amp;oacute;n desde la UI para hacerlo, as&amp;iacute; que tenemos que tocar a mano sobre la carpeta de instalaci&amp;oacute;n de TSWA. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Dentro de la carpeta de instalaci&amp;oacute;n de TSWA, normalmente &amp;quot;&lt;strong&gt;C:\Program Files\Microsoft Visual Studio 2008 Team System Web Access\&lt;/strong&gt;&amp;quot; hay una estructura de directorios que contienen todos los ficheros del proyecto Web, la cache y algunas otras carpetas que no debemos tocar. La ruta que a nosotros nos interesa es la ruta donde se almacenan las imagenes de las extensiones de los ficheros que es: &amp;quot;&lt;strong&gt;Web\Resources\Images\Documents\FileIcons&lt;/strong&gt;&amp;quot;. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
En esta carpeta encontramos un mont&amp;oacute;n de ficheros .gif de 16x16 para cada una de las extensiones de ficheros de documentos que est&amp;aacute;n contempladas en TSWA. Lo &amp;uacute;nico que tenemos que hacer es poner aqu&amp;iacute; los ficheros con el icono para las extensiones desconocidas como &amp;quot;.docx&amp;quot;. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
El nombrado de los ficheros sigue el patr&amp;oacute;n &amp;quot;IC[Extension].GIF&amp;quot;, por lo que para a&amp;ntilde;adir la extensi&amp;oacute;n &amp;quot;.docx&amp;quot; tendr&amp;iacute;amos que crear un fichero con el nombre &amp;quot;ICDOCX.GIF&amp;quot;. Curiosamente dentro de la instalaci&amp;oacute;n de TSWA hay una carpeta donde existen casi 1000 im&amp;aacute;genes de extensiones de ficheros y tenemos las im&amp;aacute;genes para los ficheros de Office 2007. Solo tenemos que ir a la carpeta &amp;quot;&lt;strong&gt;Web\Resources\Images\FileExt&lt;/strong&gt;&amp;quot;, copiar de ah&amp;iacute; los iconos que necesitemos, llevarlos a la carpeta de iconos de documentos y nombrarlos seg&amp;uacute;n el patr&amp;oacute;n que hemos descrito antes. Si no metemos la pata en ning&amp;uacute;n sitio el resultado debe ser este: 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="text-align: center"&gt;
&amp;nbsp;&lt;img src="http://www.teamsystem.es/image.axd?picture=WindowsLiveWriter/AadiriconosdedocumentosenTeamSystemWebAc_ABD2/A%C3%B1adir%20Iconos%20de%20documentos%20a%20TSWA%20-%20Imagen%202_a4dae3c4-cef7-4924-a937-cfbb3a569fc4.png" alt="A&amp;ntilde;adir Iconos de documentos a TSWA - Imagen 2" width="507" height="385" /&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
En definitiva, es un proceso muy sencillo, pero a la vez critico ya que tenemos que tocar a mano la carpeta de instalaci&amp;oacute;n de TSWA y cualquier descuido puede terminar en que tengamos que reinstalar la herramienta. As&amp;iacute; que, &amp;iexcl;&amp;iexcl; tened cuidado con lo que toc&amp;aacute;is !! :-D 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/Vp9Tn-VghIo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/Vp9Tn-VghIo/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/07/Anadir-iconos-de-documentos-en-Team-System-Web-Access.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=d6a86c4f-33e4-4eca-bfaa-1697ac67cbb7</guid>
      <pubDate>Sat, 19 Jul 2008 13:09:00 +0200</pubDate>
      <category>Herramientas</category>
      <category>Team System Web Access</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=d6a86c4f-33e4-4eca-bfaa-1697ac67cbb7</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=d6a86c4f-33e4-4eca-bfaa-1697ac67cbb7</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/07/Anadir-iconos-de-documentos-en-Team-System-Web-Access.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=d6a86c4f-33e4-4eca-bfaa-1697ac67cbb7</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=d6a86c4f-33e4-4eca-bfaa-1697ac67cbb7</feedburner:origLink></item>
    <item>
      <title>Paquete de Check-In Policies: check-in policies pack v1.0</title>
      <description>&lt;p&gt;
Una de las cosas que suele ocurrir normalmente en las implantaciones de Team Foundation Server es que se quieran activar una serie de pol&amp;iacute;ticas check-in&amp;nbsp; que no vienen incluidas en el producto por lo que necesitamos distribuir estas pol&amp;iacute;ticas a cada una de las m&amp;aacute;quinas de los desarrolladores.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Dada la capacidad de extensibilidad de Team Foundation Server existe un gran numero de pol&amp;iacute;ticas de Check-In que han sido creadas por la comunidad. Muchas de estas pol&amp;iacute;ticas son realmente buenas y cada administrador de TFS se hace con una serie de ellas que hacen cumplir las necesidades de la compa&amp;ntilde;&amp;iacute;a. A mi por ejemplo me gustan mucho la &lt;a href="http://www.codeplex.com/TFSCCPolicy"&gt;Code Comment CheckIn Policy (CCCP)&lt;/a&gt; de Christhop Wille, la de &lt;a href="http://blog.nwcadence.com/2007/11/14/get-latest-before-check-in-policy/"&gt;Get Latest Before Check-In&lt;/a&gt; de Steven Borg o la pol&amp;iacute;tica de &lt;a href="http://teamfoundation.blogspot.com/2008/05/source-analysis-for-c-checkin-policy.html"&gt;Source Analysis for C#&lt;/a&gt; de Eugene Zakhareyev.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Desgraciadamente estas pol&amp;iacute;ticas son de tres autores diferentes y aunque dos de ellas poseen un instalador, es un poco tedioso tener que distribuirlas por separado. La mejor opci&amp;oacute;n al respecto ser&amp;iacute;a crear un instalador de pol&amp;iacute;ticas que instale todas las pol&amp;iacute;ticas necesarias y nos permita hacerlo de forma c&amp;oacute;moda o porque no, poder hacerlo dentro del protocolo de instalaci&amp;oacute;n de equipos de desarrollo que existe en muchas compa&amp;ntilde;&amp;iacute;as.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Para ello lo que vamos a hacer es crear un paquete personalizado de Check-In Policies. Para crear el instalador voy a utilizar WiX (Windows Installer Xml) un framework opensource que permite generar ficheros de instalaci&amp;oacute;n MSI bas&amp;aacute;ndose en ficheros Xml. Adem&amp;aacute;s WiX es una de las nuevas caracter&amp;iacute;sticas de Rosario, la pr&amp;oacute;xima versi&amp;oacute;n de Visual Studio. He intentado hacerlo utilizando la &amp;uacute;ltima CTP de Rosario, pero dado que es una m&amp;aacute;quina virtual e iba un poco lento, al final lo he hecho desde Visual Studio 2008 instal&amp;aacute;ndome Votive, un paquete que permite la creaci&amp;oacute;n de proyectos de WiX desde esta versi&amp;oacute;n de Visual Studio.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Dado que esto no pretende ser un tutorial de WiX voy a centrarme en el proceso necesario para desplegar una Check-In Policy a un equipo de desarrollo. En primer lugar, comentar que las pol&amp;iacute;ticas de Check-In son dlls resultantes de crear un proyecto de tipo Class Library y hacer que una clase herede de la clase PolicyBase incluida en el assembly Microsoft.TeamFoundation.VersionControl.Client. Esta clase PolicyBase implementa dos interfaces IPolicyDefinition e IPolicyEvaluation y por lo tanto nuestra clase tambi&amp;eacute;n los debe implementar. Estos dos interfaces son usados dentro de la arquitectura de TFVC y permiten que se ejecute el c&amp;oacute;digo que se haya definido en las pol&amp;iacute;ticas creadas. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Una vez creada una pol&amp;iacute;tica de Check-In son solo dos los pasos necesarios para integrarla dentro de Visual Studio y para que se pueda activar: Copiarla a una carpeta en el equipo de destino e introducir una clave en el registro de Windows en &amp;quot;&lt;em&gt;HKLM\SOFTWARE\Microsoft\VisualStudio\9.0\TeamFoundation \SourceControl\Checkin Policies&lt;/em&gt;&amp;quot; que informe a Visual Studio de que existe una nueva pol&amp;iacute;tica en la ruta donde se copi&amp;oacute; la dll.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Finalmente el paquete resultante contiene las siguiente pol&amp;iacute;ticas:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Power Tools 2008 Check-In Policies 
	&lt;ul&gt;
		&lt;li&gt;Changeset Comments Policy &lt;/li&gt;
		&lt;li&gt;Custom Path Policy &lt;/li&gt;
		&lt;li&gt;Forbidden Pattern Policy &lt;/li&gt;
		&lt;li&gt;WorkItem Query Policy &lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Code Comment Checking Policy v3.0.0.1 &lt;/li&gt;
	&lt;li&gt;Get Latest Before Check-in Policy &lt;/li&gt;
	&lt;li&gt;Source Analysis for C# Check-In Policy &lt;/li&gt;
	&lt;li&gt;Time That Task Check-In Policy &lt;/li&gt;
	&lt;li&gt;Merge / Branch Only Check-In Policy &lt;/li&gt;
	&lt;li&gt;Check for Comment Policy &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Pod&amp;eacute;is descargar el archivo MSI de &lt;a href="http://www.teamsystem.es/files/CheckInPoliciesPackSetup.v1.0.msi"&gt;aqu&amp;iacute;&lt;/a&gt; y el c&amp;oacute;digo fuente de &lt;a href="http://www.teamsystem.es/files/CheckInPoliciesPack_SourceCode.zip"&gt;aqu&amp;iacute;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Referencias: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://wix.sourceforge.net/"&gt;WiX Project&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;&lt;a href="http://wix.sourceforge.net/votive.html"&gt;Votive&lt;/a&gt; (Necesario para abrir el c&amp;oacute;digo fuente desde VS2008) &lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.wixwiki.com/"&gt;WiX Wiki&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/teamsystem-es/~4/-cJl1ZzSWbM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/teamsystem-es/~3/-cJl1ZzSWbM/post.aspx</link>
      <author>gsus</author>
      <comments>http://www.teamsystem.es/post/2008/07/Paquete-de-Check-In-Policies-check-in-policies-pack-v10.aspx#comment</comments>
      <guid isPermaLink="false">http://www.teamsystem.es/post.aspx?id=c4082d38-aaf5-4966-845e-024db6654fa9</guid>
      <pubDate>Wed, 16 Jul 2008 21:54:00 +0200</pubDate>
      <category>Control de versiones</category>
      <category>Team Foundation Server</category>
      <category>Team System</category>
      <dc:publisher>gsus</dc:publisher>
      <pingback:server>http://www.teamsystem.es/pingback.axd</pingback:server>
      <pingback:target>http://www.teamsystem.es/post.aspx?id=c4082d38-aaf5-4966-845e-024db6654fa9</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.teamsystem.es/trackback.axd?id=c4082d38-aaf5-4966-845e-024db6654fa9</trackback:ping>
      <wfw:comment>http://www.teamsystem.es/post/2008/07/Paquete-de-Check-In-Policies-check-in-policies-pack-v10.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.teamsystem.es/syndication.axd?post=c4082d38-aaf5-4966-845e-024db6654fa9</wfw:commentRss>
    <feedburner:origLink>http://www.teamsystem.es/post.aspx?id=c4082d38-aaf5-4966-845e-024db6654fa9</feedburner:origLink></item>
  </channel>
</rss>
