DNM+ Online
dotnetmania 2.0
TFS Data Warehouse: aprendiendo de nuestro TFS
Las acciones que realizamos cuando utilizamos Visual Studio Team System: programar líneas de código, crear y ejecutar pruebas unitarias, realizar acciones de check in/check out, modificar información de work items, etc., generan automáticamente una gran cantidad de datos que luego pueden ser analizados y cruzados entre sí para extraer conclusiones. En este artículo veremos cómo funciona el repositorio de información analítica que posee VSTS y cómo podemos trabajar con el mismo.

Antes de ir al grano, lo mejor es comprender en qué nos puede ayudar VSTS. Cuando traté de explicárselo a Valentino, recordé que hace un tiempo en un trabajo anterior teníamos la sana costumbre de ir a tomar unas cervezas todos los jueves a la salida del trabajo. Lo mejor era que las cervezas las pagaba el que perdía en una competición interna de naipes que jugábamos al mediodía. Como yo soy un poco friki y tenía unos compañeros que ganaban siempre, empecé a analizar el histórico de las partidas utilizando SQL Server y Analysis Services, para ver si podía hacer algo al respecto. Me tiré varios meses estudiando las jugadas, pero nunca llegué a nada, lo cual en realidad era normal: mis amigos hacían trampa delante de mis narices, pero nunca supe verlas. Seguramente se preguntará qué tiene que ver Visual Studio Team System con una historia de naipes y de cerveza; pues que, por lo general, en los equipos de desarrollo sucede el caso opuesto a éste: que estamos tan agobiados por las tareas y los compromisos del día a día, que no podemos ver la información de trabajo que generamos para analizar y aprender de la misma.
Estructura interna de TFS Data Warehouse El modelo interno de información con el que trabaja Team Foundation Server está ampliamente documentado en MSDN, y podrá encontrar más información en http://tinyurl.com/tfswarehouse; no alcanzaría todo un artículo para explicar el mismo en detalle. Sin embargo, para comenzar es necesario tener claro un par de conceptos, que presentaremos a continuación. Dentro del almacén de datos de TFS existen cuatro componentes principales:

•  Almacenamientos operacionales. Son los encargados de registrar la información en línea asociada a cada componente de Visual Studio Team System, como por ejemplo compilaciones, control de versiones, etc. •  Tablas de hechos (Fact Tables). La base de datos contiene un conjunto de tablas que implementa un modelo de datos donde la información está integrada. De esta forma, es mucho más fácil crear informes que utilicen la misma como fuente de datos. •  Cubo OLAP. Integra la información anterior en un modelo OLAP. •  Adaptadores. Son los encargados de manejar varios trabajos diferentes que dan soporte a toda la operativa.

Estos elementos, coordinados entre sí, permiten que el almacenamiento de la información de proceso de Team Foundation Server sea rápido y eficiente. El flujo se podría representar con los siguientes pasos:
1-    Cada base de datos captura la información que le corresponde a su ámbito de trabajo. 2-    Los adaptadores normalizan esta información en un formato estándar en la base de datos. 3-    Los datos del modelo relacional son llevados al modelo OLAP para actualizar la información en el cubo de Analysis Services.

Si ha trabajado con bases de datos, verá que el proceso es un proceso estándar:
Las métricas en Team System de cada herramienta se registran automáticamente en varias bases de datos: TFSActivityLogging, TFSBuild, TFSIntegration, TFSVersionControl, TFSWarehouse, TFSWorkItemTracking, TFSWorkItemTrackingAttachments.
La información almacenada en las base de datos relacionales se procesa en un único cubo OLAP llamado TFSWarehouse (al que no debemos confundir con la base de datos relacional del mismo nombre). Para aquellos que no estén familiarizados con esta tecnología, simplemente comentaremos que un cubo es una estructura que permite visualizar y organizar información agregada. En el mundo de las bases de datos relacionales, una tabla se representa como un conjunto de información en dos ejes. Un cubo OLAP puede representar la información en 2, 3 ó más ejes, y de esta forma podemos analizar esa información correlacionando diferentes ejes y cruzando los datos de los mismos. Existen diferentes herramientas especialmente diseñadas para analizar y presentar información OLAP: Microsoft SQL Reporting Services, Microsoft Excel, etc. Creando nuestro primer informe Por ejemplo, si queremos analizar la información relacionada con los desarrolladores, change sets y work items, como muestra la figura 2, podríamos utilizar Microsoft Excel 2007 para visualizar la misma. Los siguientes pasos nos permitirán crear una hoja de cálculo para visualizar esta información:

1.    Abrir una nueva hoja de cálculo y seleccionar la pestaña "Data". 2.    Seleccionar la opción "From Other Sources" | "From Analysis Services". 3.    Un asistente para la conexión con Analysis Services debe aparecer. 4.    En el primer formulario del asistente, introducir el nombre del servidor Microsoft SQL Server Analysis Services (SSAS). Presionar "Next". 5.    En el segundo formulario del asistente, aparecerá un combo con las bases de datos del servidor de SSAS. Debemos seleccionar "TfsWarehouse" y desmarcar la casilla "Connect to a specific cube or table". Presionar "Next". 6.    Finalmente, en el tercer formulario del asistente podremos ver toda la información de conexión. Presionar "Finish". 7.    A continuación, deberemos seleccionar el elemento con el que trabajaremos en Excel. Para este ejemplo, seleccionaremos el cubo "Team System". Presionar "OK". 8.    Excel nos ofrece una serie de opciones para el tipo de vista con la que trabajaremos. Seleccionamos la opción "PivotTable Report". Presionar "OK". 9.    Dentro del marco de trabajo de Excel, podremos ver que tenemos un nuevo panel llamado "PivotTable Field List", que nos permite seleccionar y trabajar con la información del cubo que hemos seleccionado. 10. Continuando con el objetivo de este ejemplo, en el combo "Show fields related to" seleccionamos el valor "Work Item History". 11. La acción anterior filtra dentro de los elementos del cubo aquellos relacionados con la perspectiva seleccionada. 12. Una vez filtrados, seleccionamos el valor "Work Item History" | "Cumulative Count" y lo arrastramos a la sección "Values" del panel. 13. Desplazándonos un poco hacia abajo, seleccionamos el valor "Assigned To" | "Assigned To.Alias" y lo arrastramos a la sección "Row Labels" del panel. 14. En este momento, podremos ver que dentro de la hoja de trabajo de Excel aparecen los valores correspondientes para la configuración que hemos seleccionado. 15. Dentro del panel de trabajo, seleccionamos el valor "WorkItem" | "Title" y lo arrastramos a la sección "Row Labels" debajo del valor "Alias". 16. Dentro del panel de trabajo, seleccionamos el valor "Changeset" | "Changeset" y lo arrastramos a la sección "Row Labels" debajo del valor "Title". 17. La hoja de trabajo de Excel nos muestra, de una manera jerárquica, los elementos de trabajo con los que ha trabajado cada desarrollador y dentro de cada uno de los mismos, los change sets que se han relacionado. 18. Aprovechando las capacidades de Microsoft Excel, podremos en este momento filtrar el conjunto de datos con el que estamos trabajando, o inclusive ordenar los mismos por un criterio específico. 19. Con los pasos que hemos realizado, hemos creado una hoja donde visualizar los elementos de 3 dimensiones. Pero podemos aprovechar las capacidades de los cubos para agregar n dimensiones.
20. Por ejemplo, si seleccionamos el valor "Date" | "Date.Year Month Date" y lo arrastramos a la sección "Column Labels", podremos ver que nuestra hoja de datos muestra la fecha relacionada para cada elemento relacionado. 21. La figura 3 muestra un ejemplo con la configuración de los pasos anteriores, y un filtro aplicado para visualizar parte de los datos: solo los usuarios Art y Brad, y la información para los meses de febrero y marzo del año 2009.

Existen otras opciones interesantes para analizar datos de una forma rápida con Excel, por ejemplo utilizando los siguientes valores:

•  Values Cummulative Count •  Row Labels Team Project | Team Project.Team Project Work Item History | Cumulative Count Changeset | Changeset • Column Labels Integration Build | Integration Build.Build

Podemos conocer los diferentes work items y change sets que han sido afectados por en cada compilación para cada proyecto. Otro ejemplo muy práctico es utilizar los valores:

• Values Cummulative Completed Work Cummulative Remaining Work • Row Labels Team Project | Team Project.Team Project Area | Area.Area Assigned To | Alias • Column Labels Date | Date.Year Month Date

Para visualizar el trabajo realizado y pendiente para cada proyecto, por área y por persona en determinados períodos de tiempo. Informes de Reporting Services en MSF, Scrum, etc. Además de Excel, otra opción puede ser utilizar una herramienta de generación de informes como SQL Server Reporting Services. Por lo general, estos informes trabajan con la base de datos relacional TfsWarehouse o con el cubo OLAP del mismo nombre. Lamentablemente, el espacio asignado a este artículo no nos permite presentar la funcionalidad y el detalle de los mismos, pero existen diversidad de tutoriales en MSDN con ejemplos completos que nos pueden servir de referencia. Para más información, visite http://tinyurl.com/msdntfscustomreport.

Adaptadores en Team
System Data Warehouse Los adaptadores son ensamblados .NET que realizan diferentes tareas, como por ejemplo manejar el tiempo de refresco de los datos de un cubo, adaptar y crear los campos correspondientes a cada elemento de las guías de proceso, etc. Un ejemplo concreto puede basarse en una personalización en la definición de un work item que agrega un nuevo campo de tipo cadena de caracteres llamado ElBruno.Account a la definición de una tarea. En este escenario, los adaptadores sincronizan esta nueva información de definición de los work items en tiempo real con la base de datos relacional y con el modelo OLAP.
La figura 4 muestra cómo dentro de la base de datos relacional TfsWarehouse, y concretamente dentro de la tabla Work Item, existe un nuevo campo llamado ElBruno_Account donde se almacena la información personalizada sobre la tarea. Servicios y ensamblados de TFS Warehouse Todos los componentes que conforman los servicios propios de TFS Data Warehouse se encuentran en el directorio %\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Warehouse, incluyendo los servicios Web en el directorio Warehouse\v1.0. Por ejemplo, para forzar la actualización de los datos de la base de datos de TFS Data Warehouse podemos seguir los siguientes pasos:

  1. Dentro del servidor de aplicaciones de Team Foundation Server, iniciar una nueva instancia de Internet Explorer
  2. Navegar a la URL http://localhost:8080/Warehouse/v1.0/warehousecontroller.asmx.
  3. En la página "ControllerService" hacer clic en "Run".
  4. En la siguiente página de ejecución, presionar "Invoke". Esta acción provoca una actualización de los datos.
  5. Para conocer el estado del proceso de actualización, desde la página "ControllerService" podemos invocar la operación "GetWarehouseStatus".

Otras de las acciones que podemos realizar utilizando estos servicios es especificar el intervalo de tiempo para el refresco de la base de datos: 1. Repetimos los pasos 1 a 3 del ejemplo anterior. 2. En la página "ControllerService", hacer clic en "ChangeSetting". 3. En el cuadro de texto "settingID", ingresar la cadena "RunIntervalSeconds". 4. En el cuadro de texto "newValue", ingresar la cantidad de segundos con la que queremos definir el refresco de la información. Presionar "Invoke".

Conclusión A lo largo del artículo, hemos visto rápidamente los diferentes componentes del modelo de datos de Team System y cómo trabajan los mismos. Para cerrar este artículo no voy a repasar ningún otro dato técnico, ya que existe mucha información online, pero sí voy a recalcar que una de las grandes ventajas de este modelo es que brinda mucha información y transparencia sobre el estado de los proyectos en Team System. Esta gran cantidad de información y las capacidades que tenemos para analizarla nos deben impulsar a hacerlo y de esa forma aprender de nuestro trabajo diario para solucionar errores en fases tempranas. Es lo mejor que tiene Team System: además de ser una gran suite de herramientas, podemos adaptarla a nuestras necesidades, y podemos aprender de las mismas para ser más eficientes en nuestro trabajo.

blog comments powered by Disqus
autor
referencias