Presentación sobre Build de una capacitación teórico-práctica de cuatro días sobre Microsoft TFS que di a desarrolladores, analistas funcionales, testers y PMs.
Presentation about Build of a both theoretical and practical training course of four days on Microsft TFS given to developers, functional analysts, testers and PMs.
2. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Agenda
• Conceptos
− TFS Build (Build Automation)
− MSBuild
• Componentes
• Configuraciones para otras tecnologías (VB)
− MSBuild en TFS
• Build Definitions
• Demo de Build
• Resumen
3. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Repaso: Proceso de Check-In
12V59
12
4
12
Changeset 12
WorkItem 158
Validar
Políticas
1
Motor de Políticas
de Checkin
Pruebas
WorkItems
Personalizada
AnálisisEstático
Publicar
Cambios
2
Evento de
Checkin
Actualizar
Work Items
3
Envío de Mail
4
Link
Workspace
5. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Team Build
Ejecución de un build
Obtener fuentes
del TFS
Generar Build
Report y notificar
Publicar el Build
Output
Actualizar Work
Items
Build (incluido el
Code Analysis)
Correr Tests y
obtener Coverage
6. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Team Build
Arquitectura
Cliente Team Foundation
Capa de Aplicación
Servidor de
Build
Crear build type
Iniciar build
Ver Reportes
Team Build Web Services
MSBuild
Recurso
compartido
Capa de Datos
Código
Work items
Team Build data
Team
Foundation
warehouse
7. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Conceptos
Build es el conjunto de pasos necesarios para obtener un producto de software.
No se limita a compilar!
Build automation es el acto de automatizar este conjunto de pasos,
generalmente relacionado con:
• compilar codigo fuente
• armado de paquetes o versiones
• ejecucion de pruebas
• despliegue en ambientes de testing y/o producción
• generación de documentación
El objetivo es lograr que estas tareas sean repetibles de manera consistente, y
lo mejor, es que podamos delegarlo a una herramienta que lo haga por nosotros
8. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Integración Continua
• Práctica de desarrollo de software donde los miembros de
un equipo integran su trabajo frecuentemente, al menos
una vez por día.
• Cada integración es verificada por un build
automatizado para detectar problemas de integración tan
pronto como sea posible.
• Permite al equipo de QA realizar verificaciones tempranas
del producto sin depender de despliegues manuales.
9. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Nightly Build
• Consiste en ejecutar el proceso completo de Build todas
las noches con el objetivo de asegurar que el sistema se
encuentra en estado consistente.
• El resultado de un nightly-build debe ser un entegable
concreto, capaz de ser deployado.
• Ventajas:
− Comenzar a trabajar todos los días sobre suelo firme.
− Si ocurren problemas de integración, saber exactamente la causa
para solucionarlo cuanto antes
10. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing
• Procedimiento usado para validar el correcto
funcionamiento de un módulo de código (clase o
componente)
• Codificar casos de prueba para cada una de las
funcionalidades y métodos
− Se prueba cada parte por separado para verificar que cada parte
funciona correctamente
− Si un cambio provoca una regresión, ésta puede ser rápidamente
identificada y corregida
− Cada caso de prueba es independiente del resto (principalmente a
nivel de datos)
• Realizado por desarrolladores (no por usuarios)
11. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing - Ventajas
• Facilita el Cambio
− Permite refactorizar el código garantizando que el
módulo aún funciona correctamente
• Simplifica la Integración
− Pueden ser utilizados en un testing de tipo bottom-up
(se verifican primero las partes y luego al suma de ellas)
• Documentación
− Proveen una especie de “documentación viva”.
− Describen cómo se debe usar (y cómo no) el módulo de
código y su API
− Evolucionan a medida que evoluciona el código
12. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing - Desventajas
• Sólo se verifica la funcionalidad de las pruebas
unitarias
• No es posible capturar todos los errores
− Errores de integración
− Problemas de performance
• No es simple anticipar todas las posibles
combinaciones de entradas a la unidad que se
está probando
• No permite probar todas las capas fácilmente
13. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing en TFS
[TestClass]
public class CuentasTest
{
[TestMethod]
public void SaldoTest(){
Cuenta cta = new Cuenta();
cta.Depositar(1000);
Assert.AreEqual(1000, cta.Saldo);
}
}
Atributo que agrupa Tests
Atributo que define un Test
Evaluaciones de condiciones funcionales del test
14. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
using Nunit.Framework;
[TestFixture]
public class CuentasTest{
[Test]
public void SaldoTest(){
Cuenta cta = new Cuenta();
cta.Depositar(1000);
Assert.AreEqual(1000, cta.Saldo);
}
}
Unit Test con NUnit
Namespace de Nunit
Atributo que agrupa Tests
Atributo que define un Test
Evaluaciones de condiciones funcionales del test
15. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Code Coverage
• Es una actividad propia del testing Caja Blanca
• Utilizada en conjunto con Unit Testing
• Su resultado representa el porcentaje de alcance
sobre el software objetivo de las pruebas unitarias
− El cálculo se basa en el conjunto de líneas de código
fuente que fueron alcanzadas por la ejecución de las
pruebas unitarias
16. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Tipos de Code Coverage
• Function coverage – Fueron ejecutadas todas
las funciones del programa?
• Statement coverage – Fue ejecutada cada línea
del archivo fuente?
• Condition coverage – Fueron ejecutadas todas
las condiciones de evaluación y sus caminos
alternativos?
17. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Build Automation
• Utiliza como motor de compilación a MSBuild.
• Trabaja sobre Team Projects.
• Se configura mediante Build Definitions utilizando
los Build Agents.
18. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
MSBuild
• Plataforma de compilación
• Configuraciones mediante archivo XML
− *.sln y *.*proj
• Contenido
− Elementos
− Propiedades
− Tareas
− Destinos
• Extendido por la community agregando nuevas tareas
que facilitan el tratamiento de otras plataformas.
− http://msbuildextensionpack.codeplex.com/
19. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elementos (Items)
• Representan entradas en el sistema de generación.
• Se agrupan en colecciones de elementos basadas en los
nombres de colección definidos por el usuario.
• Se hace referencia a las colecciones de elementos
mediante la sintaxis @(NombreColeccion).
• Ej: @(Archivos)
<ItemGroup>
<Archivos Include="pics/sunny.png;pics/rain.png" />
<Archivos Include="pics/**/*.png" />
</ItemGroup>
20. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Propiedades
• Representan pares clave/valor que se pueden utilizar
para configurar.
• Se declaran creando un elemento con el nombre de la
propiedad como elemento secundario de un
elemento PropertyGroup.
• Se hace referencia a las propiedades con la sintaxis
$(PropertyName).
• Ej: $(Foo)
<PropertyGroup>
<Foo>Bar</Foo>
</PropertyGroup>
21. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elementos vs Propiedades
• Los elementos se almacenan en colecciones,
mientras que las propiedades contienen un valor
escalar único.
• Los elementos no se pueden quitar de las
colecciones de elementos, mientras que se
puede modificar el valor de las propiedades una
vez definido.
• Los elementos pueden contener metadatos y
utilizar la notación %(ItemMetadata), mientras
que las propiedades no pueden.
22. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Tareas
• Las tareas son unidades reutilizables de código
ejecutable.
• MSBuild se distribuye con un gran número de
tareas comunes, como Copy, MakeDir y Error.
• Listado de tareas:
− http://msdn.microsoft.com/es-es/library/7z253716(v=vs.90).aspx
• Ejemplo:
<MakeDir Directories="$(BuildDir)" />
23. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Destinos (Targets)
• Unidad mínima de ejecución
• Agrupan tareas en un orden particular
• Exponen secciones del archivo de proyecto como
puntos de entrada en el proceso de generación
<Target Name=“CrearCarpetas">
<MakeDir Directories="$(BuildDir)" />
</Target>
24. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Dependencia de Targets
• Los destinos pueden describir relaciones entre
ellos y llevar a cabo análisis de dependencia.
<Target Name=“Tarea1“>
...
</Target>
<Target Name=“Tarea2“>
...
</Target>
<Target Name="Copiar“ DependsOnTargets=“Tarea1;Tarea2" >
...
</Target>
25. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Condiciones
• MSBuild admite condiciones
− 'stringA' == 'stringB„
− 'stringA' != 'stringB„
− <, >, <=, >=
− Exists('stringA')
− ! , And, Or
• Agrupaciones con ( )
• Ejemplo
<Error Text="Error al compilar" Condition="'$(ErrorCode)‘ > '0'" />
26. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elemento Choose
• El elemento Choose contiene una serie de
elementos When con atributos Condition que se
comprueban de forma ordenada de arriba abajo
hasta que uno aparece evaluado como true.
• Si más de un elemento When resulta evaluado
como true, sólo se utilizará el primero.
• Se evaluará un elemento Otherwise, en caso de
encontrarse presente, si ninguna condición en un
elemento When resulta evaluada como true.
28. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Tarea Exec
• Ejecuta el programa o comando especificado con
los argumentos especificados.
− http://msdn.microsoft.com/es-es/library/x8zx72cd(v=vs.90).aspx
<Target Name="EjecutarBat">
<Exec Command='"ejecutar.bat"' ContinueOnError='true'>
<Output TaskParameter="ExitCode“ PropertyName="ErrorCode"/>
</Exec>
<Message Text="The exit code is $(ErrorCode)"/>
</Target>
29. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Registrar librerías
• Mediante la tarea Exec se ejecuta el comando:
−regsvr32
• Parámetros
−/s Sin notificación
−/u Quitar del registro
• Ejemplo
<Target Name="RegisterProjects">
<Message Text=“Registrando dlls..."/>
<Exec Command="regsvr32 /s nombredll.dll"/>
</Target>
30. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Extension pack
• Incluye tareas adicionales.
• Se deben incluir las extension pack.
− http://msbuildextensionpack.codeplex.com/
• Ejemplos
− Compilar VB6
− Comprimir
<MSBuild.ExtensionPack.VisualStudio.VB6
TaskAction="Build" Projects="@(Item_Group)"/>
<MSBuild.ExtensionPack.Compression.Zip
TaskAction="Create" CompressFiles="@(FilesToZip)"
ZipFileName="C:newZipByFile.zip"/>
31. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Ejecución de MSBuild
• Ejecución por línea de comando:
• Las opciones de la línea de comandos permiten
establecer propiedades, ejecutar destinos
específicos y especificar registradores.
• Por ejemplo, se ejecuta el archivo
MyProj.proj con la propiedad Configuration
establecida en Debug.
MSBuild.exe MyProj.proj /property:Configuration=Debug
32. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Ejemplo
<Project ToolsVersion="3.5" DefaultTargets="CompilarProyectos"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="compilarProyecto1">
<Exec Command='"proyecto1.bat"' ContinueOnError='true'>
<Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
</Exec>
<Message Text="Compilacion Proyecto 1 / Exit code: $(ErrorCode)"/>
<Error Text="Error while executing BAT file" Condition="'$(ErrorCode)' > '0'" />
<OnError ExecuteTargets="MessageErrorHandler"/>
</Target>
<Target Name="compilarProyecto2">
<Exec Command='"proyecto2.bat"' ContinueOnError='true'>
<Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
</Exec>
<Message Text="Compilacion Proyecto 2 / Exit code: $(ErrorCode)"/>
<Error Text="Error while executing BAT file" Condition="'$(ErrorCode)' > '0'" />
<OnError ExecuteTargets="MessageErrorHandler"/>
</Target>
<Target Name="CompilarProyectos" DependsOnTargets="compilarProyecto1;compilarProyecto2">
</Target>
<!--Error Handler-->
<Target Name="MessageErrorHandler">
<Message Text="Ha ocurrido un error al ejecutar la compilacion. Por favor revise el log."/>
</Target>
</Project>
33. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Build Definitions
• Contiene las instrucciones que indican:
− Cual es el código del proyecto a compilar
− Como debe ejecutarse
− Operaciones adicionales
34. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Crear Build Definitions
35. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Listado de Builds
36. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Reportes
37. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Target de TFS
• TFS posee targets pre-definidos para realizar las
tareas de TFS Build
• Se deben importar en el proyecto:
<Import
Project="$(MSBuildExtensionsPath)MicrosoftVisualStudioT
eamBuildMicrosoft.TeamFoundation.Build.targets" />
38. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Sobre-escribir targets de TFS
• Para integrar la compilación VB6 se requiere
sobre-escribir las targets nativos de TFS:
− CoreCompile
− AfterDropBuild
<Target Name="CoreCompile"
DependsOnTargets="CompileVB6Projects"></Target>
<Target Name="AfterDropBuild"
DependsOnTargets="ZipBin;Copiar;Limpiar"></Target>
39. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Propiedades en TFS
• Pares de clave y valor que puede utilizar para
configurar las compilaciones de TFS.
− http://msdn.microsoft.com/en-us/library/aa337598(v=vs.90).aspx
• Estas propiedades se pueden modificar en el
archivo TFSBuild.proj para:
− Pasar valores a tareas y destinos de TFS Build
− Invalidar algunas acciones de compilación
• Ejemplos
− RunTest
− SkipWorkItemCreation
41. Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Resumen
• Build como proceso repetitivo
• Distintos escenarios de Build
− Integrado al check-in, Unit testing, nightly build, code
coverage
− Build por branch, build específicos
• TFS Build y MS Build