Setting up MSBuild with NUnit, NCover and NCoverExpxlorer
1. Introduction
The following guide will help you to create and execute an MSBuild configuration that will run tests with NUnit and also provide a NCover coverage report. The most challenging part was working with the free community edition for the tools, .NET 4.0, and also setting up the environment on a Windows 7 64 bit laptop.
2. Getting the right tools and know them
We need to download the right tools at the right version, I will provide a brief description of each
NUnit (2.6.0.12051)
This tool will help us to run our unit tests. You can download it from here: http://nunit.org/index.php?p=download. If you go to the bin folder, you will see two versions of the nunit-console application, we will be using nunit-console-x86.exe
NCover (1.5.8)
It will generate a coverage.xml file, that indicates how much code has been tested on our project. It has a community free option, which is the last option at the following link: http://www.ncover.com/download/current. You need to register in order to download it.
NCoverExplorer (1.4.0.7)
Helps us to create an HTML report file from the coverage.xml generated with NCover. The free version is available at: http://www.kiwidude.com/dotnet/DownloadPage.html
You will need to extract the files at a specific location.
NCoverExplorer Extras (1.4.0.5)
This package contains a couple of plugins that can help us with tasks in MSBuild, which can be downloaded also from: http://www.kiwidude.com/dotnet/DownloadPage.html
- NCoverExplorer.MSBuildTasks.dll
- NCoverExplorer.NAntTasks.dll
We’ll see how do we link these in the MSBuild file. I recommend you to put the extras folder in the same directory you installed NCoverExplorer
TestDriven.Net (3.3.2779)
As an alternative, you can download and install TestDriven.Net, which contains the three applications described above, you can get it here: http://www.testdriven.net/download.aspx
Note that, still you will need to get the NCoverExtras for the MSBuild task plugins
I recommend using TestDriven, since it also installs you a nice add-on for Visual Studio, which helps you to run tests easily. I will use TestDriven for the rest of the tutorial
3. Doing it
I suggest to go to https://github.com/aharita/calculator while reading the rest, so you can examine the complete source code. In this section I will explain some of the troubles I got into, and how to solve them. Some of those are particular to .NET 4.0 and having Windows 7 64 bit
MSBuild example file
We need to add three tasks in our MSBuild file
<UsingTask TaskName="NCoverExplorer.MSBuildTasks.NCoverExplorer" AssemblyFile="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer\NCoverExplorer.Extras\bin\NCoverExplorer.MSBuildTasks.dll"/> <UsingTask TaskName="NCoverExplorer.MSBuildTasks.NCover" AssemblyFile="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer\NCoverExplorer.Extras\bin\NCoverExplorer.MSBuildTasks.dll"/> <UsingTask TaskName="NCoverExplorer.MSBuildTasks.NUnitProject" AssemblyFile="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer\NCoverExplorer.Extras\bin\NCoverExplorer.MSBuildTasks.dll"/>
We also need to add the proper sections for handling NUnit, NCover and NCoverExplorer
<Target Name="NUnitSimple"> <Exec Command=""C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.6\nunit-console-x86.exe" "C:\Users\aharita\Documents\GitHub\calculator\Calculator.Tests\bin\Debug\Calculator.Tests.dll""/> </Target> <Target Name="NCoverSimple"> <NCover ToolPath="C:\Program Files (x86)\TestDriven.NET 3\NCover\1.5.8\" CommandLineExe="C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.6\nunit-console-x86.exe" CommandLineArgs="C:\Users\aharita\Documents\GitHub\calculator\Calculator.Tests\bin\Debug\Calculator.Tests.dll" /> </Target> <Target Name="NCoverExplorerSimple" DependsOnTargets="NCoverSimple"> <NCoverExplorer ToolPath="C:\Program Files (x86)\TestDriven.NET 3\NCoverExplorer" ProjectName="Calculator Operations Tests" XmlReportName="CoverageSummary.xml" HtmlReportName="CoverageSummary.html" CoverageFiles="C:\Users\aharita\Documents\GitHub\calculator\coverage.xml" /> </Target>
Build.bat helper file
I also have a build.bat file that helps you to run msbuild with the build.xml MSBuild configuration
set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.xml
4. Troubleshooting
There are some problems that you might have while trying to do the setup, the most common ones are:
Profiler connection not established.
The full error is:
</pre> Profiled process terminated. Profiler connection not established. error MSB6006: "NCover.Console.exe" exited with code 1. <pre>
Solution is:
- You need to use nunit-console-x86.exe on all the MSBuild references
- You need to execute the following in the same command window you execute your msbuild script
- set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
You can see the example file provided on GitHub
Empty coverage.xml file
Sometimes, you will end up with an empty coverage.xml file, some solution to this:
- Open nunit-console-x86.exe.config and change it as follows:
</pre> <startup useLegacyV2RuntimeActivationPolicy="true"> <!-- Comment out the next line to force use of .NET 4.0 --> <supportedRuntime version="v4.0.30319" /> <supportedRuntime version="v2.0.50727" /> </startup> <pre>
4. Resources
Hopefully, this guide will be helpful and you won’t have the same headaches as I had trying to do the setup. Following are some links resources that helped me through the problem.
https://github.com/aharita/calculator
http://www.kiwidude.com/blog/2007/04/ncover-problems-fixes-part-1.html
http://kiwidudeuk.blogspot.mx/2007/04/ncover-problems-fixes-part-2.html
Configurar SSL en Ubuntu 10.04 y Apache2
A continuación se listarán los comandos necesarios para instalar y configurar apache, así como el módulo SSL
Nota:Todo está por default y es solo para propósitos de aprendizaje
# Instalamos Apache
sudo aptitude install apache2
# Habilitamos el módulo SSL de apache
sudo a2enmod ssl
# Habilitamos la configuración SSL por default
sudo a2ensite default-ssl
# Reiniciamos el servidor
sudo /etc/init.d/apache2 restart
Eso es lo mínimo necesario, y podemos probar que funciona entrando a https://127.0.0.1
Si deseamos crear nuestro propio certificado, debemos seguir los siguientes pasos
# Crear un directorio y hacer todas las siguientes operaciones ahí
# Creamos las llaves
sudo openssl genrsa -des3 -out server.key 1024
# Creamos el certificado con la llave
sudo openssl req -new -key server.key -out server.csr
# Creamos nuestro certificado, contestando las preguntas que nos indique
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
# Abrimos el archivo de configuracion default-ssl, reemplazamos y añadimos la siguiente configuracion
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /directorio/donde/guardaste/el/certificado/server.crt
SSLCertificateKeyFile /directorio/donde/guardaste/el/certificado/server.key
# Reiniciamos el servidor
sudo /etc/init.d/apache2 restart
Todo fue basado de este sitio:
http://beginlinux.com/blog/2009/01/ssl-on-ubuntu-810-apache2/
Ruby getter y setter
A continuación se muestran 3 maneras de hacer un getter y setter en Ruby
# 1. Utilizando funciones normales class Persona def set_nombre(nombre) @nombre = nombre end def get_nombre @nombre end end p = Persona.new p.set_nombre("Alfonso") x = p.get_nombre puts x # 2. Sin tener que mandar un parámetro # al setter class Persona def set_nombre=(nombre) @nombre = nombre end def get_nombre @nombre end end p = Persona.new p.set_nombre = "Harita" x = p.get_nombre puts x # 3. Utilizando attr_reader, attr_writer # y/o attr_accessor class Persona attr_accessor :nombre end p = Persona.new p.nombre = "WooT" x = p.nombre puts x
Calculadora básica en Ruby
Pues aquí la calculadora que nos pidieron :D
Supongo que despues será más compleja
# Contiene las funciones basicas de una calculadora class Calculadora # Se declaran las variables de la clase attr_accessor :x, :y def suma temp = x + y puts "La suma de es: #{temp}" end def resta temp = x - y puts "La resta es: #{temp}" end def multiplicacion temp = x * y puts "La multiplicacion es: #{temp}" end def division temp = x / y puts "La division es: #{temp}" end def modulo temp = x % y puts "El modulo es: #{temp}" end def potencia temp = x ** y puts "La potencia es: #{temp}" end end # Hacemos un objeto y utilizamos sus atributos y metodos calc = Calculadora.new calc.x = 3.0 calc.y = 2.0 calc.suma calc.resta calc.multiplicacion calc.division calc.modulo
Ahora comere…
Hola! quiero presentarles un sitio en el que estoy trabajando actualmente
Es un sitio donde encontrarás una lista de restaurantes, los menus que ofrecen y sus precios! Te invito a checarlo… :)
Índices en bases de datos
Índice en base de datos
- Estructura de datos que mejora la velocidad de las operaciones
- Se utiliza sobre campos donde se hagan frecuentes búsquedas
- Pueden ser creados utilizando una o más columnas
- Son construidos sonre árboles B, B+, B* o sobre mezclas de ellos
Ventajas de utilizar índices
- Se evita una búsqueda en la tabla completa
- Se evita la sobrecarga de CPU, disco y concurrencia
- Se evitan las lecturas secuenciales
- Mayor rapidez en la ejecución de consultas
Desventajas al utilizar índices
- Desventaja para las tablas que utilizan frecuentemente un insert, delete o update ya que los índices se actualizan cada que se modifica una columna
- Ocupan espacio, a veces más que los propios datos
Ejercicio
Para demostrar la rapidez de una consulta al utilizar índices, se creó una base de datos y se agregó aproximadamente 1 millón de registros
En la siguiente foto podemos observar el tiempo que tarda una consulta sin índice en una tabla con más de 1 millón de registros, el cual es de 45 segundos en total:
Podemos observar como el tiempo ha disminuido considerablemente cuando utilizamos índices en nuestra tabla, bajando el tiempo de consulta a 6 segundos aproximadamente:
Si desean descargar la práctica para hacer pruebas. Los tiempos pueden variar dependiendo de la velocidad de CPU y la memoria Ram que tenga la computadora
¿Qué es el tiempo?
Para los griegos de la época clásica el tiempo era un dios: Cronos
Tiempo
- Relación que se establece entre dos o más fenómenos, sucesos, cuerpos u objetos
- Duración de los fenómenos… época, siglo
- Duración de las cosas sujetas a mudanza
- Aspecto mensurable de la duración
- El número, o la medida, del movimiento según antes y después
La administración
- Viene del latín ad-ministrare, o ministrare, que se deriva de minister el cual viene de manus, que significa la mano o las manos
- Administrar era “servir (con las manos) a o para”
La administración del tiempo
- Es el arte de hacer que sirva para el beneficio de las personas y de las sociedades
- Como el tiempo no existe en sí, la administración del tiempo es la administración de sí mismo
Tiempos
- Tiempo físico: Fenómeno aplicable a la realidad objetiva y por encima de las vicisitudes de los seres humanos
- Tiempo psicológico: Experiencia subjetiva, como vivencia, como interiorización sujeta a toda la gama de los caracteres, de los caprichos y de las neurosis
- Tiempo lineal
- Tiempo cíclico
Experiencia del tiempo
- Corporal
- La vida fisiológica es una sucesión de ritmos: la inspiración y la espiración, el hambre y la saciedad, la atención y la dispersión, el cansancio y el descanso
- Se vive el tiempo en el paso de las estaciones cada año, en las variaciones del cuerpo a través de la infancia y de la asolescencia, en la fuerza de la juventud, en la resistencia de la madurez, en el debilitamiento progresivo de la vejez y en el curso evolutivo de las enfermedades
- Psicológica
- Sentimos el fluir de los acontecimientos: 10 minutos alegres son una experiencia temporal muy diferente de 10 minutos de extrema tensión o dolor
- Tomamos distancia con respecto a los hechos pasados, localizándolos en el tiempo: “Hace una semana”, “hace tres meses”
- Social
- Dejamos de ver 15 años a un compañero de escuela y al encontrárnoslo, advertimos y casi palpamos el paso del tiempo
- Comparamos nuestra ciudad o barrio con lo que era hace 20 años
Enemigo o desperdiciador del tiempo
- Cualquier circunstancia que se opone a la consecución de nuestros objetivos, o simplemente, que nos aparta de nuestros valores
Objetivos y plan de desarrollo de un proyecto
Referencias:
http://cv.uoc.edu/UOC/a/moduls/90/90_156/programa/main/viu/dis_i_pla/viu09.htm
http://www.monografias.com/trabajos15/objetivos-organizacionales/objetivos-organizacionales.shtml
http://www.ie.itcr.ac.cr/mhernandez/Formulacion%20Proyectos%202006/Objetivos%20No.6.ppt
http://www.mailxmail.com/curso-gestion-proyectos/desarrollo-plan-proyecto
http://www.liderdeproyecto.com/manual/areas_de_conocimiento_del_pmbok.html
Factores claves en la definición del objetivo del proyecto
- Debe responder a la pregunta ¿Qué pretende nuestro trabajo?
- Deben estar muy bien definidos, congruentes entre si, claros
- No pueden sobrar o faltar objetivos, tiene que ajustarse exactamente al alcance del trabajo
- Deben ser alcanzables
- Deben ser cuantificables
- Deben ser finitos
- Deben tener un indicador
Identificar los elementos que componen la estructura del plan de desarrollo de un proyecto
- Se empieza por definir la principal unidad de trabajo que debe ser llevado a cabo
- Se determina el tiempo requerido para completar cada fase del proyecto
- Se determina la secuencia que deben seguir las distintas fases del proyecto
- Se determina el tiempo y los gastos de cada fase del proyecto, siendo el resultado igual al presupuesto total disponible
- Se determinan las necesidades de personal
- Se determina la normativa y los procedimientos habituales a seguir durante el desarrollo del proyecto
- Se establecen las pautas y los detalles de un posible plan de contingencia
- Administración de la Integración de Proyectos
- Procesos requeridos para asegurar que los elementos de un proyecto esten coordinados apropiadamente
- Consiste del desarrollo de un plan de proyecto, ejecución del plan de proyecto, y el control de cambios en general
- Administración del Alcance del Proyecto
- Proceso requerido para asegurar que el proyecto incluya todo trabajo requerido, y sólo el trabajo requerido, para completar el proyecto de manera exitosa
- Consiste de la iniciación, planeación del alcance, definición del alcance, verificación del alcance, y control de cambio al alcance
- Administración del Tiempo del Proyecto
- Procesos requeridos para asegurar la terminación a tiempo del proyecto
- Consiste en la definición de las actividades, secuencia de las actividades, estimación de duración de las actividades, desarrollo del cronograma y control de la programación
- Administración de los Costos del Proyecto
- Procesos requeridos para asegurar que el proyecto es completado dentro del presupuesto aprobado
- Consiste en la planificación de recursos, estimación de costos, presupuesto de costos, y control de costos
- Administración de la Calidad del Proyecto
- Procesos requeridos para asegurar que el proyecto va a satisfacer las necesidades para lo cual fue desarrollado
- Consiste en la planeación de la calidad, aseguramiento de la calidad, y control de calidad
- Administración de los Recursos Humanos del Proyecto
- Procesos requeridos para hacer el uso más eficiente de las personas involucradas en el proyecto
- Consiste en la planeación organizacional, adquisición de staff, y desarrollo del equipo
- Administración de las Comunicaciones del Proyecto
- Procesos requeridos para asegurar la generación apropiada y a tiempo, colección, diseminación, almacenamiento, y la disposición final de la información del proyecto
- Consiste en la planeación de la comunicación, distribución de la información, reportes de desempeño, y el cierre administrativo
- Administración de Riesgo del Proyecto
- Procesos concernientes con la identificación, análisis, y respuesta al riesgo del proyecto
- Consiste en la identificación del riesgo, cuantificación del riesgo, desarrollo de la respuesta al riesgo, y en el control de la respuesta al riesgo
- Administración de la Procuración del Proyecto
- Procesos requeridos para adquirir bienes y servicios de fuera de la organización ejecutora
- Consiste en la planeación de la gestión de la procuración, planear la solicitación, la solicitación, selección de proveedores, administración de contratos, y cierre de contratos
MoProSoft en sistemas de calidad
Referencias:
http://dl.getdropbox.com/u/1955604/Tareas/Sistemas%20de%20calidad%20en%20TI/MoProSoft_profesora.pptx
http://dl.getdropbox.com/u/1955604/Tareas/Sistemas%20de%20calidad%20en%20TI/MoProSoft_alumnos.ppt
MoProSoft
- Conjunto de mejoras prácticas para el desarrollo del software
- Enfocado al punto de vista organizacional
- Significa “Modelo de Procesos para la Industria del Software”
- Norma Mexicana apropiada a las características de tamaño de empresas mexicanas de desarrollo y mantenimiento de software
Finalidad del modelo
- Proporcionar un modelo basado en las mejores prácticas internacionales
- Fácil de entender y aplicar
- No costoso
- Base para alcanzar evaluaciones exitosas como ISO o CMMI
Categorías de procesos
- Categoría de alta dirección (DIR)
- Gestión de negocios: Establecer la razón de ser de la organización, sus objetivos y las condiciones para lograrlos
- Categoría de gerencia (GER)
- Gestión de procesos: Establecer los procesos de la organización, definir, plantear e implantar mejoras
- Gestión de proyectos: Asegurar que los proyectos contribuyan al cumplimiento de los objetivos y estrategias de la organización
- Gestión de recursos: Conseguir y dotar a la organización de los recursos humanos, infraestructura, ambiente de trabajo y proveedores. Crear y mantener la base de conocimientos
- Bienes, servicios e infraestructura: Proporcionar proveedores de bienes, servicios e infraestructura que satisfagan los requisitos de adquisición de procesos y proyectos
- Recursos humanos y ambiente de trabajo: Proporcionar los recursos humanos adecuados para cumplir las responsabilidades asignadas a los roles dentro de la organización, así como la evaluación del ambiente de trabajo
- Conocimiento de la organización: Mantener disponible y administrar la base de conocimiento que contiene la información y los productos generados por la organización
- Categoría de operación (OPE)
- Administración de proyectos específicos: Establecer y llevar a cabo sistemáticamente las actividades que permitan cumplir con los objetivos de un proyecto en tiempo y costos esperados
- Desarrollo y mantenimiento de software: Realización sistemática de las actividades de análisis, diseño, construcción, integración y pruebas de productos de software nuevos o modificados, cumpliendo con los requerimientos especificados
Beneficios
- Estructura de administración común en muchas organizaciones
- Inicia un camino a la adopción de los modelos ISO 9000 o CMMI
- Permite a las PyMes obtener acceso a las prácticas de ingeniería de software de clase mundial
- Sirve para implementar un programa de mejora continua
Implementación
- Se evalúa la situación actual de la organización por un evaluador certificado por la NYCE (Normalización y Certificación Electrónica)
- Se analizan los objetivos, metas, características de los proyectos, el personal y las tecnologías utilizadas, con el fin de diseñar un programa de mejora a la medida
ISO/IEC 9126 – ISO 10006:2003 – ISO/IEC 27000
Referencias:
- http://en.wikipedia.org/wiki/ISO_9126
- http://es.wikipedia.org/wiki/ISO/IEC_9126
- http://www.iso25000.com/index.php/9126
- http://en.wikipedia.org/wiki/ISO_10006
- http://en.wikipedia.org/wiki/ISO/IEC_27000-series
- http://www.27000.org/
- http://www.iso27000.es/
- http://www.ilustrados.com/publicaciones/EEEAEFlVAuKVsqJlbz.php
- http://dl.getdropbox.com/u/1955604/Tareas/Sistemas%20de%20calidad%20en%20TI/ISO%20Presentaciones.pptx
ISO/IEC 9126
- Estándar internacional para la evaluación del Software
- Supervisado por el proyecto SQuaRE, ISO 25000:2005
- Provee un entorno para que las organizaciones definan un modelo de calidad para el producto de software
- Distingue entre fallo y no conformidad
- Está basado en investigaciones de multiples modelos de calidad durante los últimos 30 años
Está dividido en varias partes:
- Modelo de calidad – Clasifica la calidad del software en un conjunto estructurado de características y sub-características de la siguiente manera
- Funcionalidad – Las funciones satisfacen lo indicado o implica necesidades
- Fiabilidad – Capacidad del software de mantener su nivel de prestación bajo condiciones y un tiempo establecido
- Usabilidad – Esfuerzo necesitado para el uso
- Eficiencia – Nivel de desempeño del software y cantidad de recursos necesitados
- Mantenibilidad – Facilidad de extender, modificar o corregir errores
- Portabilidad – Capacidad de ser transferido de una plataforma a otra
- Métricas externas – Son las aplicables al software en ejecución
- Métricas internas – Son las que no dependen de la ejecución del software
- Calidad en las métricas de uso – Solo disponible cuando el producto final es usado en condiciones reales
- Vista en uso
- Efectividad – Facilitar al usuario alcanzar objetivos con precisión y completitud
- Productividad – Permitir a los usuarios gastar la cantidad apropiada de recursos
- Seguridad – Cumplir con los niveles de riesgo permitidos
- Satisfacción – Cumplir con las expectativas de los usuarios
ISO 10006:2003
- Directrices para la calidad en la gestión de proyectos
- Aplicable a proyectos pequeños o grandes, de larga o pequeña duración
- No es una guía de administración de proyectos en sí
- Es un documento guía, y no utilizado para una certificación o registro
- Hace recomendaciones sobre la gestión de la información generada por la realización del proyecto
- Se deben seguir los siguientes pasos por la organización
- Identificar la información crítica
- Organizar el sistema de colección de la información (Información dentro del proyecto e información del entorno y el cliente)
- Validar y almacenar la información
- Organizar un sistema que asegure su uso
Ventajas
- Reduce la variedad y tipos de productos
- Reduce inventarios y costos de producción
- Mejora la gestión y el diseño de productos
- Mejora la comercialización de los productos
- Agiliza los procesos pedidos
Desventajas
- No entra en las fases del proyecto ni describe los procesos necesarios para su ejecución
- No incluye los procesos de gestión de la calidad y, por lo tanto, da a entender que estos procesos no forman parte de la gestión del proyecto
ISO/IEC 27000
- Estándares de seguridad publicados por la ISO (Organización Internacional para la Estandarización) y la IEC (Comisión Electrónica Internacional)
- Contiene las mejores prácticas recomendadas en seguridad de la información para desarrollar, implementar y mantener especificaciones para los sistemas de gestión de la seguridad de la información (SGSI)
- ISO/IEC 27000 – Vocabulario estándar para el SGSI
- ISO/IEC 27001 – Certificación que deben obtener las organizaciones. Especifica los requisitos para la implantación del SGSI. Es la más importante de la familia. Adopta un enfoque de gestión de riesgos y promueve la mejora continua de procesos
- ISO/IEC 27002 – Código de buenas prácticas para la gestión de seguridad de la información
- ISO/IEC 27003 – Directrices para la implementación de un SGSI. Es el soporte de la norma ISO/IEC 27001
- ISO/IEC 27004 – Métricas para la gestión de seguridad de la información
- ISO/IEC 27005 – Gestión de riesgos en seguridad de la información. Proporciona recomendaciones y lineamientos de métodos y técnicas de evaluación de riesgos de seguridad en la información
- ISO/IEC 27006:2007 – Requisitos para la acreditación de las organizaciones que proporcionan la certificación de los sistemas de gestión de la seguridad de la información
- ISO/IEC 27007 – Guía para auditar al SGSI
La seguridad de la información, según ISO 27001
- Confidencialidad – La información no se revela a individuos, entidades o procesos no autorizados
- Integridad – Mantenimiento de exactitud y completitud de la información y sus métodos de proceso
- Disponibilidad – Acceso a individuos, entidades o procesos autorizados cuando lo requieran