<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="es-es" xmlns="http://www.w3.org/2005/Atom">
  <title>CodeSegment - Carlos Segura Sanz (blog)</title>
  <link rel="alternate" type="text/html" href="http://www.ideseg.com/" />
  <link rel="self" href="http://www.ideseg.com/SyndicationService.asmx/GetAtom" />
  <logo>http://www.ideseg.com/images/cseg_logo.gif</logo>
  <icon>favicon.ico</icon>
  <updated>2008-10-05T12:41:56.0173045+02:00</updated>
  <author>
    <name>Carlos Segura</name>
  </author>
  <subtitle>CodeSegment - Carlos Segura Sanz (blog)</subtitle>
  <id>http://www.ideseg.com/</id>
  <generator uri="http://www.dasblog.net" version="1.9.7174.0">DasBlog</generator>
  <entry>
    <title>EL GIRAO DEL GUILL-E EN PAMPLONA </title>
    <link rel="alternate" type="text/html" href="http://www.ideseg.com/ELGIRAODELGUILLEENPAMPLONA.aspx" />
    <id>http://www.ideseg.com/PermaLink,guid,499c76e0-0e9f-4f57-8074-96d2ed1c9d1b.aspx</id>
    <published>2008-10-05T11:56:37.6360000+02:00</published>
    <updated>2008-10-05T12:11:52.2815229+02:00</updated>
    <category term="NavarraDotNet" label="NavarraDotNet" scheme="http://www.ideseg.com/CategoryView,category,NavarraDotNet.aspx" />
    <content type="html">&lt;p&gt;
El Community Tour 2008 del Guill-e consiste en que,&amp;nbsp;después de varios meses de
un arduo trabajo de coordinación,&amp;nbsp;nos hemos organizado&amp;nbsp;muchos grupos de
usuario (los de &lt;a target="_blank" href="http://www.malagadnug.org/"&gt;Málaga&lt;/a&gt;, &lt;a target="_blank" href="http://www.madriddotnet.com/"&gt;Madrid&lt;/a&gt;, &lt;a target="_blank" href="http://www.valenciadev.net/"&gt;Valencia&lt;/a&gt;, &lt;a target="_blank" href="http://lonetcamp.com/"&gt;Reus&lt;/a&gt;, &lt;a target="_blank" href="http://www.bcndev.net/"&gt;Barcelona&lt;/a&gt;, &lt;a target="_blank" href="http://www.catdotnet.org/"&gt;Igualada&lt;/a&gt;, &lt;a target="_blank" href="http://www.spainnet.org/"&gt;Vic&lt;/a&gt;, &lt;a target="_blank" href="http://andorradotnet.com/"&gt;Andorra&lt;/a&gt;, &lt;a target="_blank" href="http://www.navarradotnet.com/"&gt;Pamplona&lt;/a&gt;, &lt;a target="_blank" href="http://www.gusenet.com/"&gt;Murcia&lt;/a&gt;, &lt;a target="_blank" href="http://clmnet.es/"&gt;Albacete&lt;/a&gt;, &lt;a target="_blank" href="http://www.onobanet.com/"&gt;Huelva&lt;/a&gt;, &lt;a target="_blank" href="http://www.artalde.net/"&gt;Bilbao&lt;/a&gt;, &lt;a target="_blank" href="http://ug.culminis.com/sites/NUGG/"&gt;La
Coruña&lt;/a&gt;, &lt;a target="_blank" href="http://www.baleareson.net/"&gt;Mallorca&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.nuberos.net/"&gt;Cantabria&lt;/a&gt;,&amp;nbsp;&lt;a target="_blank" href="http://www.mobilenug.com/"&gt;Valladolid&amp;nbsp;&lt;/a&gt;y
también &lt;a target="_blank" href="http://www.secondnug.com/"&gt;SecondNug&lt;/a&gt;)&amp;nbsp;y
hemos quedado con el amigo Guillermo Son&amp;nbsp;para que haga una&amp;nbsp;pequeña ;)&amp;nbsp;gira&amp;nbsp;y
venga a hacernos una visita a todos, a enseñarnos las cosas nuevas que ha aprendido
del lenguaje ese en el que no se pierde el tiempo poniendo puntos y comas (expresión
suya).&amp;nbsp;&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Guille nos ha contando que está intentando echar un cable a un chaval que está en
una situación muy apurada y hemos decidido ayudarle también así que la gira es solidaria
con &lt;a target="_blank" href="http://www.elguille.info/solidario/ayudaJuanma/Default.aspx"&gt; Juanma&lt;/a&gt;.
Para animar a la colaboración se sortearán durante la gira un montón de regalos:
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
1&amp;nbsp;Visual Studio 2008 Profesional 
&lt;br&gt;
2&amp;nbsp;suscripciones &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/subscriptions/aa718657.aspx"&gt; MSDN
Premium con Visual Studio Team System 2008 Team Suite&lt;/a&gt; (valorada cada una en más
de 5.000 Euros).&lt;br&gt;
10 Packs de Productividad que incluye Resharper y dotTrace&lt;br&gt;
16 libros de Novedades de Visual Basic 9.0 (uno para cada evento)&lt;br&gt;
16 libros de Novedades de C# 3.0 (uno para cada evento)&lt;br&gt;
65 Suscripciones a la revista dotNetManía (48 de 3 meses y 16 de un año)&lt;br&gt;
&amp;nbsp;&lt;br&gt;
En Pamplona, además&amp;nbsp;tenemos la suerte de volver a contar con David Salgado, que
hará de telonero de lujo y nos hablará de opciones para del desarrollo de un sitio
web .NET.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Os esperamos el día 15 de octubre de 16:30 a 21:00 en el salón de actos de los Centros
de Excelencia Software, polígono industrial Elorz-Mocholí en Noain.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;&lt;img src="content/binary/Guille%20Community%20Tour%202008%20-%20Banner.png" border="0"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;La agenda:&lt;/b&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;b&gt;16:30-17:00&lt;/b&gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bienvenida y registro. Reunión del grupo
de usuarios NavarraDotNet. Orden del día: nuestros saraos 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;17:00-18:30&lt;/b&gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp; Opciones para el desarrollo de un sitio web
.NET, David Salgado 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
Con la llegada del SP1 de .net 3.5, se abre el abanico de opciones a valorar a la
hora de desarrollar un sitio web. Hasta ahora contábamos con &lt;a target="_blank" href="http://asp.net/"&gt; ASP.NET&lt;/a&gt; y
algunas pinceladas de &lt;a target="_blank" href="http://asp.net/"&gt; ASP.NET&lt;/a&gt; AJAX.
A dia de hoy contamos además con una nueva versión de Visual Studio, &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; MVC, &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; Dynamic
Data, &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; Dynamic Services, un soporte
mejorado de &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; AJAX e Internet
Explorer 8 como navegador. Descúbrelos, resuelve tus dudas y decide qué es lo más
adecuado para tus desarrollos. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;18:30- 19:00&lt;/b&gt;:&amp;nbsp;&amp;nbsp;Merienda patrocinada por el CES 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;19:00 -21:00&lt;/b&gt;:&amp;nbsp; El Guille con la comunidad, Guillermo Som 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
Novedades y ejemplos prácticos de Visual Basic 9,&amp;nbsp; ejemplos prácticos de uso
de LINQ. Aprovecha la primera visita que hace elGuille a Pamplona:&amp;nbsp;¡pregúntale
al Guille! 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;br&gt;
Como siempre, la entrada es gratuita previo registro en: 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a target="_blank" href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032389675&amp;amp;Culture=es-ES"&gt; Inscripción
a través de Microsoft&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a target="_blank" href="http://www.cein.es/web/es/inscripciones/index.php?id=8248&amp;amp;tipo=Jornada&amp;amp;titulo=Guille+Community+Tour+2008&amp;amp;fechas=15+de+octubre&amp;amp;actos=0"&gt; Inscripción
a través de CEIN&lt;/a&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;br&gt;
Y tenéis más información y el fantástico cartel que ha hecho nuestro &lt;a target="_blank" href="http://www.navarradotnet.com/post/CartelTeclearNoEsSustituto20080210.aspx"&gt; Sergio
Jimenez&lt;/a&gt; en &lt;a target="_blank" href="http://www.navarradotnet.com/post/el-Guille-en-Pamplona%21%21%21.aspx"&gt; http://www.navarradotnet.com/post/el-Guille-en-Pamplona!!!.aspx&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
(by: Elena)&lt;br&gt;
&lt;img width="0" height="0" src="http://www.ideseg.com/aggbug.ashx?id=499c76e0-0e9f-4f57-8074-96d2ed1c9d1b" /&gt;</content>
  </entry>
  <entry>
    <title>Lanzamiento del SharePoint User Group España (SUGES - www.suges.es)!</title>
    <link rel="alternate" type="text/html" href="http://www.ideseg.com/LanzamientoDelSharePointUserGroupEspa%c3%b1aSUGESWwwsugeses.aspx" />
    <id>http://www.ideseg.com/PermaLink,guid,a1b902af-4485-4912-a999-7572f3125274.aspx</id>
    <published>2008-10-03T12:14:04.2010000+02:00</published>
    <updated>2008-10-05T12:14:04.2017093+02:00</updated>
    <category term="SharePoint-es" label="SharePoint-es" scheme="http://www.ideseg.com/CategoryView,category,SharePoint-es.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <title>HTML clipboard</title>
        <p>
Con motivo del MVP Open Day que tiene lugar hoy en las oficinas de Microsoft Ibérica
en Madrid, tenemos el placer de anunciaros el lanzamiento del <strong><em>SharePoint
Users Group España</em></strong> (<strong><em>SUGES - <a href="http://www.suges.es/">www.suges.es</a></em></strong>). <a target="_blank" href="http://www.suges.es/">SUGES</a> surge
como una iniciativa impulsada por varios MVP's en MOSS (Gustavo Vélez, Carlos Segura,
David Herráiz y Juan Carlos González), así como por varias entidades y empresas TIC
especializadas en plataforma Microsoft (siendo destacada la colaboración del <strong><em>Centro
de Innovación en Integración - CIIN </em></strong>y<strong><em>  SPSProfessional</em></strong> )
con el claro objetivo de impulsar la difusión y conocimiento de la plataforma SharePoint
en España. 
</p>
        <p>
El objetivo del Grupo es fomentar el conocimiento y uso de <strong><em> Windows SharePoint
Services</em></strong> (WSS) y <strong><em>Microsoft Office SharePoint Server </em></strong>(MOSS)
en España. El Grupo nace como una organización nacional, que tiene como meta ayudar
a la formación y desarrollo de<strong><em> Grupos de Usuarios de SharePoint </em></strong>locales. <a target="_blank" href="http://www.suges.es/">SUGES</a> no
pretende reemplazar el valioso trabajo de los grupos locales, sino colaborar en su
labor. Además, regularmente <a target="_blank" href="http://www.suges.es/">SUGES</a> organiza
encuentros y charlas formativas en diferentes sitios de España lo mismo que encuentros
virtuales por medio de video-conferencias y webcasts. 
</p>
        <p>
          <a target="_blank" href="http://www.suges.es/">SUGES</a>no ha sido creado solamente
para organizar conferencias. Tanto desarrolladores como administradores, especialistas
de infraestructura y usuarios finales, pueden participar en cualquiera de las actividades
organizadas por el Grupo. Entre algunas de sus muchas actividades, por ejemplo, <a target="_blank" href="http://www.suges.es/">SUGES</a> mantiene
un sitio para <a href="http://www.codeplex.com/suges">compartir componentes para SharePoint
en Codeplex</a> que pueden ser utilizados libremente por cualquier usuario de SharePoint
en el mundo. Todos los participantes de <a target="_blank" href="http://www.suges.es/">SUGES</a> están
invitados a compartir sus WebParts o cualquier tipo de componente por este medio. 
</p>
        <p>
Concursos de diseño y programación también son organizados por <a target="_blank" href="http://www.suges.es/">SUGES</a>.
De esta forma el Grupo pretende fomentar no solo el conocimiento del Portal, sino
también resaltar personas y compañías que están trabajando con SharePoint. 
</p>
        <p>
Finalmente, <a target="_blank" href="http://www.suges.es/">SUGES</a> tiene un aspecto
social muy importante. Los participantes del Grupo ayudan en el diseño y creación
de Portales basados en SharePoint para organizaciones de ayuda no gubernamentales
(NGOs), y todo tipo de organizaciones sin ánimos de lucro, no solo en España, sino
mundialmente. 
</p>
        <p>
Unirse al grupo es completamente gratis y sin ninguna obligación: todo lo que necesita
hacer es registrarse en este mismo sitio. Una vez registrado, revise la sección de
anuncios para ver las ultimas noticias relativas al grupo, o visite el sitio de Contactos
para compartir sus impresiones con toda la comunidad. En el Calendario puede encontrar
fecha y hora de los próximos eventos, y en Vínculos encontrara información sobre otros
sitios que están trabajando en SharePoint en cualquiera de los idiomas utilizados
en España. Finalmente, en la sección de Recursos encontrara información sobre SharePoint
en general. 
</p>
        <p>
Sugerencias e ideas siempre son bienvenidas. <a target="_blank" href="http://www.suges.es/">SUGES</a> es
para todos los usuarios de SharePoint en España, creado y mantenido por los mismos
usuarios. 
</p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.ideseg.com/aggbug.ashx?id=a1b902af-4485-4912-a999-7572f3125274" />
      </div>
    </content>
  </entry>
  <entry>
    <title>ISPA Asociación Internacional de Usuarios de SgarePoint</title>
    <link rel="alternate" type="text/html" href="http://www.ideseg.com/ISPAAsociaci%c3%b3nInternacionalDeUsuariosDeSgarePoint.aspx" />
    <id>http://www.ideseg.com/PermaLink,guid,82975e25-4d9a-4bff-88a9-c8312ba7988f.aspx</id>
    <published>2008-10-02T12:41:56.0170000+02:00</published>
    <updated>2008-10-05T12:41:56.0173045+02:00</updated>
    <category term="SharePoint-es" label="SharePoint-es" scheme="http://www.ideseg.com/CategoryView,category,SharePoint-es.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
La <em><strong>Asociación Internacional de Profesionales de SharePoint</strong></em>,
ISPA, es la primera organización independiente, sin ánimo de lucro, destinada específicamente
a profesionales de SharePoint de todo el mundo. Se trata de una asociación de profesionales
dedicada a la promoción y adopción global de los productos y tecnologías de Microsoft
SharePoint. 
</p>
        <p>
La organización proporciona soporte y sirve de guía a la comunidad estableciendo conexiones
entre los profesionales de SharePoint, los grupos, los recursos, la educación y la
información. ISPA está dirigido y apoyado por profesionales de todo el mundo y se
centra en concentrar a la comunidad de SharePoint.  ISPA es un trabajo en progreso. <b><em>Su
primera oferta es proveer apoyo a todos los grupos de usuarios a nivel mundial que
se afilien a través de sitios web gratuitos de WSS v3</em></b> . 
</p>
        <p>
Uno de sus objetivos es intercambiar información entre los líderes de los grupos de
usuarios proporcionándoles acceso a espacios cooperativos en los que pueden interactuar,
compartir recursos, ideas, prácticas y en los que pueden servirse de apoyo mutuamente,
lo que aumentará las probabilidades de éxito de cada grupo. 
</p>
        <p>
ISPA ha designado a Evangelistas Regionales, líderes de comunidades que han mostrado
un fuerte compromiso previamente con la promoción de la comunidad de SharePoint, y
que se han comprometido a llevar el mensaje ISPA a través de su región particularmente. 
</p>
        <p>
Estos evangelistas son contactos locales clave que están disponibles para trabajar
con grupos locales de profesionales de SharePoint y grupos de usuarios para promover
la comunidad de SharePoint. Si estás interesado en formar un grupo de usuarios, pertenecer
a uno ya existente o necesitas guía, el evangelista regional de ISPA es un gran recurso
que estará disponible para ayudarte. 
</p>
        <p>
Finalmente, como todo el mundo sabe, ninguna comunidad está completa sin un sitio
web, e ISPA está orgulloso de anunciar el lanzamiento de su sitio oficial, <a href="http://exchange2003.com.es/exchweb/bin/redir.asp?URL=http://www.sharepointpros.org">www.sharepointpros.org</a>.
Aunque el sitio web está en etapas tempranas de desarrollo, los planes para soporte
multiidioma y una emocionante funcionalidad que servirá de ayuda a cualquier involucrado
en el proyecto están ya en el horizonte. 
</p>
        <p>
Si tienes ideas para IISPA, quieres formar un grupo de usuarios o estás buscando asistencia,
visita la nueva página de IISPA o contacta con <a href="mailto:contactus@sharepointpros.org">contactus@sharepointpros.org</a>. 
</p>
        <p>
Creemos que se puede lograr en comunidad lo que resulta imposible conseguir individualmente. 
</p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.ideseg.com/aggbug.ashx?id=82975e25-4d9a-4bff-88a9-c8312ba7988f" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Programando a cuatro manos: Unit Test para SharePoint</title>
    <link rel="alternate" type="text/html" href="http://www.ideseg.com/ProgramandoACuatroManosUnitTestParaSharePoint.aspx" />
    <id>http://www.ideseg.com/PermaLink,guid,9eeff04d-3486-4b25-ba85-e613192eb371.aspx</id>
    <published>2008-09-21T22:36:02.4330000+02:00</published>
    <updated>2008-09-21T23:58:30.1982674+02:00</updated>
    <category term="SharePoint-es" label="SharePoint-es" scheme="http://www.ideseg.com/CategoryView,category,SharePoint-es.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">Aquí continúa el drama de Unit Test para
SharePoint. Esta vez hemos reunido esfuerzos entre nosotros, Carlos Segura (http://www.ideseg.com
) y Gustavo Velez (http://www.gavd.net ), para intentar sacar algo en claro. Programadores
del mundo de SharePoint, uníos! ...<br /><br />
Unit Test, SharePoint y que es lo importante:<br /><br />
Testeo Unitario es una técnica de programación que permite asegurar que lo que se
ha programado hoy cumple las condiciones exigidas, y que las seguirá cumpliendo en
el futuro, cuando se hagan modificaciones en el código fuente. Existe numerosa información
al respecto, tanto en libros de texto como en internet, así que no repetiremos las
bases de la técnica; en resumen, es deseable que se 
<br />
cumplan algunas condiciones:<br /><br />
- El código de Pruebas Unitarias debe ser independiente de cualquier FrameWork que
se esté utilizando para garantizar que no hay dependencias, es decir, circunstancias
que no se puedan repetir en el futuro. En nuestro caso, no se desea tener que utilizar
una instancia de SharePoint para ejecutar el testeo, pues es prácticamente imposible
crear dentro de algunos meses/años un sistema de SharePoint que sea exactamente igual
al utilizado originalmente<br /><br />
- El código de Pruebas debe ser fácil y rápido de escribir. El (valioso) tiempo de
programación se debe utilizar para programar la funcionalidad, no para programar el
sistema de pruebas<br /><br />
- El código de prueba tiene que ser igual para todos los desarrolladores en el equipo
de desarrollo. Esto tiene que ver con el primer punto: si no existen dependencias
(configuraciones, por ejemplo) con el FrameWork utilizado, no hay riesgos de que dos
desarrolladores obtengan diferentes resultados. O que el sistema de compilación automática
produzca resultados impredecibles (Night Build, Continuous Build, Regretion e Integration
Test)<br /><br />
Unit Test es comúnmente utilizado en desarrollo de software, y existen varias herramientas
que lo facilitan. Visual Studio (versión profesional y superior) provee todas las
herramientas necesarias para generar Unit Test con un clic; si no se dispone de una
de estas versiones de Visual Studio, existen herramientas gratuitas que pueden hacer
el mismo trabajo (NUnit, http://www.nunit.org/, xUnit, http://www.codeplex.com/xunit
y TestDriven, http://www.testdriven.net/ por ejemplo).<br /><br />
Cuando se desean hacer Pruebas Unitarias para SharePoint es necesario utilizar técnicas
suplementarias que permitan crear “imágenes fantasmas” de sus clases. Esto se puede
conseguir de diferentes formas, por medio de Mocking o Stubbing, por ejemplo 
<br /><br />
•  <a href="http://geeks.ms/blogs/gvelez/archive/2007/08/04/mocks-mocking-mockers-y-sharepoint.aspx">http://geeks.ms/blogs/gvelez/archive/2007/08/04/mocks-mocking-mockers-y-sharepoint.aspx</a><br />
•  <a href="http://geeks.ms/blogs/gvelez/archive/2007/08/12/stubs-stubbing-stubbers-y-sharepoint.aspx">http://geeks.ms/blogs/gvelez/archive/2007/08/12/stubs-stubbing-stubbers-y-sharepoint.aspx</a><br />
•  <a href="http://www.ideseg.com/SharePointPruebasUnitarias1.aspx">http://www.ideseg.com/SharePointPruebasUnitarias1.aspx</a><br /><br />
Otras técnicas, como la utilización de Plantillas o Copias de Seguridad son utilizables,
pero no cumplen las condiciones ideales indicadas al principio.<br /><br />
Mocking es una técnica que permite crear objetos “falsos” de un determinado FrameWork,
y luego “convencer” al código a probar que tiene que usar los objetos falsos, y no
los que obtendrán del FrameWork en su trabajo real. Esta técnica permite cumplir todas
las condiciones indicadas. Desafortunadamente, por la forma de programación de SharePoint
no es posible usar Mockers tradicionales. 
<br /><br />
La nueva versión de <a href="http://www.typemock.com">TypeMock </a>(versión 5.0, http://www.typemock.com
) permite crear objetos mock que funcionan bajo estas condiciones, haciéndolo ideal
para crear Unit Test para SharePoint. Desafortunadamente, <a href="http://www.typemock.com">TypeMock </a>es
una herramienta comercial, pero se puede bajar del sitio indicado una versión de prueba
completamente funcional por 30 días.<br /><br />
Otra de las motivaciones para usar TypeMock, es que el equipo de SharePoint Guidance
está usando TypeMock en sus ejemplos; el porqué es simple, a pesar de que existen
otras alternativas en el mercado, y algunas de uso libre, ninguna de ellas es capaz
de mockear clases selladas o clases que no tienen un constructor público. La API de
SharePoint cuenta con innumerables clases y una gran parte de ellas están selladas
y carecen de constructores públicos por lo que TypeMock es la única alternativa por
el momento.<br /><br />
Mockeando a SharePoint<br /><br />
1 - El caso más sencillo: mockear a SPSIte y SPWeb. El método a probar tiene la siguiente
forma:<br /><br /><pre class="csharpcode"><span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">string</span> TestMock_01()
{ String strReturn = String.Empty; <span class="kwrd">try</span> { <span class="kwrd">using</span>(SPSite
mySite = <span class="kwrd">new</span> SPSite(<span class="str">"http://MiServidor"</span>))
{ <span class="kwrd">using</span>(SPWeb myWeb = mySite.OpenWeb()) { strReturn = myWeb.MasterUrl;
} } } <span class="kwrd">catch</span> (System.Exception ex) { strReturn = ex.ToString();
} <span class="kwrd">return</span> strReturn; }</pre>
Y el método de Pruebas Unitarias con TypeMock seria:<br /><pre class="csharpcode"><span class="kwrd">public</span><span class="kwrd">void</span> TestMethod1()
{ <span class="kwrd">using</span> (RecordExpectations recorder = RecorderManager.StartRecording())
{ SPSite mySiteMocked = <span class="kwrd">new</span> SPSite(<span class="str">""</span>);
SPWeb myWebMocked = RecorderManager.CreateMockedObject&lt;SPWeb&gt;(); recorder.ExpectAndReturn(mySiteMocked.OpenWeb(),
myWebMocked); recorder.ExpectAndReturn(myWebMocked.MasterUrl, <span class="str">"abcd.master"</span>).RepeatAlways();
} <span class="kwrd">string</span> expected = <span class="str">"abcd.master"</span>; <span class="kwrd">string</span> actual;
actual = Program.TestMock_01(); Assert.AreEqual(expected, actual); }</pre><br />
Bajo el estamento “using” se crean objetos SPSite y SPWeb “falsos”. Todos los objetos
creados bajo el “recorder” serán después utilizados como objetos de trabajo en la
función a testear, en lugar de los objetos “reales” obtenidos del FrameWork de SharePoint.
Esto permite garantizar que en el ejemplo, no importa qué tipo de configuración tenga
la instalación actual de SharePoint, siempre se le va a “hacer creer” al método a
testear que la página maestra del Web se llama “abcd.master”.<br /><br />
Luego de crear los objetos mockeados, se inician las variables a esperar (expected),
se ejecuta el método a probar y el resultado se compara con lo esperado.<br /><br />
2 - Yendo algo más lejos: mockeando colecciones. Cuando se desea utilizar la misma
sintaxis para crear objetos mockeados de colecciones se encuentran diferentes dificultades. 
En las colecciones de SharePoint se ha mantenido el diseño existente en versiones
anteriores por lo que funcionan como lo hacían en Net 1.1: una clase que implementa
IEnumerable  y una clase anidada que implementa IEnumerator; para poder recorrer
colecciones de objetos mockeados se debe reproducir este comportamiento y lo que a
priori puede parecer fácil en realidad no lo es…<br /><br />
En primer lugar se debe mantener una colección de objetos paralela a través del cual
podamos devolver un enumerador; se puede ver un ejemplo de esta técnica en (<a href="http://dotnetforum.dk/blogs/mac/archive/2007/12/21/first-steps-with-typemock-and-the-sharepoint-api.aspx">http://dotnetforum.dk/blogs/mac/archive/2007/12/21/first-steps-with-typemock-and-the-sharepoint-api.aspx</a>),
lo cual nos obliga en cierta manera a crear métodos para reproducir las colecciones
de objetos de SharePoint. 
<br /><br />
En parte motivados por esto y por la necesidad de poder realizar los tests de la manera
más sencilla posible hemos creado un conjunto de clases envoltorio que nos permitirán
extender los objetos a mockear de SharePoint de una manera más elegante.<br /><br />
Por ejemplo, para el siguiente método a probar, en el que se necesita recorrer la
colección de Listas en el Web de más alto nivel:<br /><div class="csharpcode"><pre class="alt"><span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">string</span> TestMock_02()</pre><pre>        {</pre><pre class="alt"><span class="kwrd">string</span> strReturn = String.Empty;</pre><pre> </pre><pre class="alt"><span class="kwrd">try</span></pre><pre>            {</pre><pre class="alt"><span class="kwrd">using</span> (SPSite mySite = <span class="kwrd">new</span> SPSite(<span class="str">"http://MiServidor"</span>))</pre><pre>                {</pre><pre class="alt"><span class="kwrd">using</span> (SPWeb myWeb
= mySite.OpenWeb())</pre><pre>                    {</pre><pre class="alt"><span class="kwrd">int</span> intTeller =
0;</pre><pre><span class="kwrd">foreach</span> (SPList oneList <span class="kwrd">in</span> myWeb.Lists)</pre><pre class="alt">                        {</pre><pre>                            Debug.WriteLine(oneList.Title);</pre><pre class="alt">                            intTeller++;</pre><pre>                        }</pre><pre class="alt"> </pre><pre>                        strReturn = intTeller.ToString();</pre><pre class="alt">                    }</pre><pre>                }</pre><pre class="alt">            }</pre><pre><span class="kwrd">catch</span> (Exception ex)</pre><pre class="alt">            {</pre><pre>                strReturn = ex.ToString();</pre><pre class="alt">            }</pre><pre> </pre><pre class="alt"><span class="kwrd">return</span> strReturn;</pre><pre>        }</pre></div><br />
Se puede utilizar un método de prueba con la siguiente sintaxis:<br /><div class="csharpcode"><pre class="alt">        [TestMethod]</pre><pre><span class="kwrd">public</span><span class="kwrd">void</span> TestMethod2()</pre><pre class="alt">        {</pre><pre>            MockSPSite mockSite = <span class="kwrd">new</span> MockSPSite(<span class="str">"TestSite"</span>); <span class="rem">//
1</span></pre><pre class="alt">            MockSPWeb mockWeb = <span class="kwrd">new</span> MockSPWeb(<span class="str">"TestWeb"</span>); <span class="rem">//
2</span></pre><pre> </pre><pre class="alt">            MockSPList mockList0 = <span class="kwrd">new</span> MockSPList(<span class="str">"MyList0"</span>); <span class="rem">//
3</span></pre><pre>            MockSPList mockList1 = <span class="kwrd">new</span> MockSPList(<span class="str">"MyList1"</span>); </pre><pre class="alt">            MockSPList mockList2 = <span class="kwrd">new</span> MockSPList(<span class="str">"MyList2"</span>);</pre><pre>            mockWeb.Lists = <span class="kwrd">new</span> MockSPListCollection(<span class="kwrd">new</span>[] <span class="rem">//
4</span></pre><pre class="alt">               {</pre><pre>                   mockList0,</pre><pre class="alt">                   mockList1,</pre><pre>                   mockList2</pre><pre class="alt">               });</pre><pre> </pre><pre class="alt">            mockSite.ExpectGetAlways(<span class="str">"RootWeb"</span>,
mockWeb.GetInstance()); <span class="rem">//5</span></pre><pre> </pre><pre class="alt">            SPWeb WebMocked = mockWeb.GetInstance();    <span class="rem">//
6</span></pre><pre> </pre><pre class="alt"><span class="kwrd">using</span> (RecordExpectations recorder
= RecorderManager.StartRecording()) <span class="rem">// 7</span></pre><pre>            {</pre><pre class="alt">                SPSite SiteMocked = <span class="kwrd">new</span> SPSite(<span class="str">""</span>); <span class="rem">//
8</span></pre><pre>                recorder.ExpectAndReturn(SiteMocked.OpenWeb(), WebMocked);    <span class="rem">//
9</span></pre><pre class="alt">            }</pre><pre> </pre><pre class="alt"><span class="kwrd">string</span> expected = <span class="str">"3"</span>; <span class="rem">//
10</span></pre><pre><span class="kwrd">string</span> actual;</pre><pre class="alt">            actual = Program.TestMock_02();</pre><pre>            Assert.AreEqual(expected, actual);</pre><pre class="alt">        }</pre></div><br />
Aquí se pueden distinguir tres zonas con código:<br /><br />
-    En la primera parte, líneas 1 a 7 se crean todos los objetos “falsos”
necesarios. Líneas 1 y 2 crean objetos del tipo SPSite y SPWeb. Las líneas bajo el
numero 3 crean tres Listas mockeadas y en la línea 4 se agregan las Listas a la Colección
de Listas del objeto SPWeb mockeado. En la línea 5 se agrega a su vez el objeto SPWeb
como la Web de nivel superior del objeto SPSite mockeado y finalmente, en la línea
6 se crea un objeto del tipo SPWeb nuevo basado en el objeto SPWeb mockeado. Esto
es necesario para el código en la segunda zona, que no permite utilizar objetos mockeados
directamente<br /><br />
-    En la segunda zona, líneas 7 a 9, se crean los objetos que se
le van a entregar a la clase a testear por medio de un “recorder” de TypeMock. En
la línea 8 se crea un objeto SPSite que va a substituir el SPSite en la clase a testear,
y en la línea 9 se le asigna el valor del objeto SPWeb mockeado  con las Listas
creadas en la primera parte.<br /><br />
-    La tercera zona, desde la línea 10, incluyen el código para los
valores esperados y los valores que regresan del método a testear y los comparan en
la aserción.<br />
La primera parte del código utiliza las clases envoltorio comentadas anteriormente
(MockSPSite, MockSPWeb, etc). Estas clases tienen la forma:<br /><br /><div class="csharpcode"><pre class="alt"><span class="kwrd">namespace</span> SPTypeMock.Core</pre><pre>{</pre><pre class="alt"><span class="kwrd">public</span><span class="kwrd">class</span> MockSPSite
: MockSP&lt;SPSite&gt;</pre><pre>    {</pre><pre class="alt"><span class="kwrd">public</span> MockSPSite(<span class="kwrd">string</span> url)
: <span class="kwrd">base</span>(<span class="kwrd">true</span>)</pre><pre>        {</pre><pre class="alt"><span class="kwrd">if</span> (<span class="kwrd">string</span>.IsNullOrEmpty(url))</pre><pre>            {</pre><pre class="alt"><span class="kwrd">throw</span><span class="kwrd">new</span> ArgumentNullException(<span class="str">"url"</span>);</pre><pre>            }</pre><pre class="alt"> </pre><pre>            Mock.ExpectGetAlways(<span class="str">"Url"</span>, url);</pre><pre class="alt">        }</pre><pre>    }</pre><pre class="alt">}</pre></div><br /><br />
Estas clases sirven para simplificar la creación de los objetos mockeados, y no son
más que herencias de tipos definidos (SPSite en este caso), con algunos constructores
específicos y métodos para conectar sus colecciones de objetos. Las clases de envoltura
permiten reutilizar el código una y otra vez, sin que la escritura de las pruebas
signifique el tener que escribir mas código que el código a testear (una de las condiciones
señaladas al principio).<br /><br />
Todas estas clases se encuentran en la biblioteca <b>SPTypeMock </b>que podéis encontrar
en <b><a href="http://www.codeplex.com/SPTypeMock">CodePlex</a></b><br /><br /><b>SPTypeMock </b>usa dos clases, la primera es <font color="#000080">MockSP&lt;T&gt;</font> que
es una clase abstracta desde la cual mockearemos los objetos de SharePoint, la única
peculiaridad de esta clase está en el constructor, que  tiene un parámetro bolean,
que se encarga de añadir la propiedad ID de la clase; las clases de SharePoint tienen
un ID, en la mayoría de ellas  es un Guid, pero en otras como SPListItem es un
int.<br /><br />
La propiedad Mock de esta clase nos da acceso al objeto mock que se encuentra en el
interior, debemos usar esta propiedad para establecer las expectativas.<br /><br />
El método GetInstance, se encarga de devolvernos una instancia real del objeto mockeado. 
<br /><br />
La segunda clase es <font color="#000080">MockSPCollection&lt;TCollection,TItem&gt;</font> que
es otra clase abstracta desde la cual heredaremos las colecciones de SharePoint. MockSPCollection,
hereda a  su vez de List&lt;TItem&gt; de modo que así conseguimos tener la colección
paralela necesaria para trabajar con las colecciones de SharePoint.<br /><br />
Disponemos de dos constructores uno que se encargará de crear colecciones vacías y
otro al que podemos pasarle una lista de elementos que formarán parte de la colección.
Al obtener una instancia de la colección por medio de GetInstance(), establecemos
que la interfaz IEnumerable será obtenida de la lista; también aquí nos encargamos
de mockear el index por defecto que será a través de un int.<br /><br />
Si las colecciones que deseamos usar tienen otros índices como SPListCollection, que
tiene un índice por título de la lista y otro por Guid, podemos sobrescribir el método
CustomIndex en las clases heredadas implementando dicha funcionalidad.<br /><br />
No todo es perfecto...<br /><br />
No todo ha sido solucionado, algunos problemas quedan aún por resolver:<br /><br />
-    La instalación de TypeMock no permite seleccionar un directorio
de instalación, lo que limita la utilización de programas de compilación automático,
como Cruise Control por ejemplo<br /><br />
-    Los objetos mockeados creados en las dos primeras zonas de la
clase de prueba son creados en un Thread diferente al utilizado por SharePoint al
crear los objetos en el método a testear. Esto tiene como consecuencia que si se desea
destruir los objetos al final del método a probar (por medio de un “using” para el
SPSite y/o el SPWeb, o por medio de un “Dispose()” al final del método), SharePoint
producirá un error en sus logs indicando “ERROR: request not found in the TrackedRequests.
We might be creating and closing webs on different threads” 
<br /><br />
-    Es necesario crear aun muchas más clases de envoltorio<br /><br /><p></p><img width="0" height="0" src="http://www.ideseg.com/aggbug.ashx?id=9eeff04d-3486-4b25-ba85-e613192eb371" /></div>
    </content>
  </entry>
  <entry>
    <title>Retorno de la inversión de la calidad dek software en las PYMES</title>
    <link rel="alternate" type="text/html" href="http://www.ideseg.com/RetornoDeLaInversi%c3%b3nDeLaCalidadDekSoftwareEnLasPYMES.aspx" />
    <id>http://www.ideseg.com/PermaLink,guid,422900f6-7ede-43ca-94d4-0758f90e2db8.aspx</id>
    <published>2008-09-15T16:24:37.1340000+02:00</published>
    <updated>2008-09-17T16:25:08.6338485+02:00</updated>
    <category term="Misc" label="Misc" scheme="http://www.ideseg.com/CategoryView,category,Misc.aspx" />
    <category term="NET Development" label="NET Development" scheme="http://www.ideseg.com/CategoryView,category,NET%2BDevelopment.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
El miércoles día 17 daré una ponencia sobre “<b>Testing, reducción de costes de no
calidad</b>” en los cursos de veranos organizados por la <a href="http://www.fundacion.unavarra.es/">Universidad
Pública de de Navarra</a>, el curso se llama “<b>Retorno de la inversión de la calidad
del software en las pymes</b>”. 
<br /><br />
Una de las preocupaciones que tienen las organizaciones que desarrollan software es
mejorar sus resultados financieros apoyándose en la mejora de los procesos de desarrollo
siguiendo modelos de buenas prácticas como por ejemplo CMMI. Estas empresas se involucran
en iniciativas de mejora estimando que van a conseguir una mejora suficiente, pero
sin conocer a priori el retorno de inversión. 
<br /><br />
En este curso se presenta la metodología ROI para evaluar las iniciativas de mejora
en las que las empresas se involucran para mejorar sus procesos de desarrollo. 
<br /><br />
A su vez, se cuenta con la presentación de experiencias de empresas involucradas actualmente
en iniciativas de mejora y empresas acreditadas en el modelo CMMI. Finalmente, se
presenta ejemplos prácticos para conseguir mejorar el retorno de inversión en las
organizaciones que desarrollan o que contratan el desarrollo, por actividades de testing.<br /><br />
El programa del curso podéis descargarlo desde <a href="http://www.fundacion.unavarra.es/Formacion/FormacionContinua/Documentos/cv2008roi.pdf"><b>aquí</b></a></p>
        <img width="0" height="0" src="http://www.ideseg.com/aggbug.ashx?id=422900f6-7ede-43ca-94d4-0758f90e2db8" />
      </div>
    </content>
  </entry>
</feed>