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:
- Dentro del servidor de aplicaciones de Team Foundation Server,
iniciar una nueva instancia de Internet Explorer
- Navegar a la URL
http://localhost:8080/Warehouse/v1.0/warehousecontroller.asmx.
- En la página "ControllerService" hacer clic en "Run".
- En la siguiente página de ejecución, presionar "Invoke". Esta
acción provoca una actualización de los datos.
- 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.