<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Håkan Alexander</title>
        <link>http://blog.avegagroup.se/HakanAlexander/Default.aspx</link>
        <description>Another Subtext Powered Blog</description>
        <language>sv-SE</language>
        <copyright>Håkan Alexander</copyright>
        <managingEditor>hakan.alexander@avega.se</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <image>
            <title>Håkan Alexander</title>
            <url>http://blog.avegagroup.se/images/RSS2Image.gif</url>
            <link>http://blog.avegagroup.se/HakanAlexander/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Outsource och IT-support</title>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2009/09/02/outsource-och-it-support.aspx</link>
            <description>&lt;p&gt;På mina uppdrag i stora organisationer som har en väl utvecklad och outsourcead IT-support och helpdesk har jag funderat lite över ett fenomen. Supporten har ingen vilja eller incitament att vara hjälpsamma och på riktigt vilja lösa problemen. Jag inser att jag generaliserar och att avvikelser såklart finns men jag ser ett mönster.&lt;/p&gt;  &lt;p&gt;Såklart tjänar man på att ha goda rutiner och standardiserade förfaranden för hur applikation, rättigheter och dylikt installeras. Men leverantörerna som är upphandlade att stödja organisationen i hanteringen av datorer och programvara är det i konkurrens och ett av dom billigaste anbuden är den troliga vinnaren. Leverantören vill naturligtvis utföra uppdraget med en rimlig vinst, han är troligen inte så motiverad att utveckla sina system och göra dem mer användarvänliga.&lt;/p&gt;  &lt;p&gt;Som jag har uppfattat det i mitt användande av dessa tjänster är att dom på supporten är mer intresserade av att stänga ärendet än att verkligen lösa problemet. Har man skrivit i något felaktigt i förfrågan så stängs ärendet och man ombeds göra en ny. Och de verktygen/systemen där man som användare förväntas göra sin anmälan lämna mycket övrigt att önska. Ett sådant var den värsta användarupplevelsen jag någonsin sett! Och jag har sett ett och annat. Dessa är utformade på ett sätt så att det passar den som skall utföra uppgiften och är därmed nästan oanvändbara för den lekman som behöver hjälpen. På ett ställe där jag behövde rättigheter i en utvecklingsmiljö tog det mig med hjälp av 4 andra som var väl insatta i det system jag behövde rättigheter flera timmar att hitta fram till rätt nod i det träd av applikationer/rättigheter och annat. Och då hade jag först gjort ett felaktigt försök som genererat ett stängt ärende. Jag är ändå systemutvecklare och datoranvändare sedan 25 år så många av termerna är jag ändå van vid, trots det så är det svårt att förstå.&lt;/p&gt;  &lt;p&gt;Bra statistik för både leverantör och kund! IT-supporten hanterar många ärenden och dom gör det effektivt. Och kunden har fått mycket för sina pengar, billigt per ärende.&lt;/p&gt;  &lt;p&gt;Men dessa dolda kostnader som inte syns? Användare sitter och väntar och kan inte komma vidare, ibland i flera dagar. Hjälp av andra behöver man ta så att det stör deras arbete också.&lt;/p&gt;  &lt;p&gt;Jag undrar om det kommer en våg av managementkonsulter och börjar mäta denna typ av kostnader inom ett par år?&lt;/p&gt;&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/123.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2009/09/02/outsource-och-it-support.aspx</guid>
            <pubDate>Wed, 02 Sep 2009 18:32:11 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/123.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2009/09/02/outsource-och-it-support.aspx#feedback</comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/123.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/123.aspx</trackback:ping>
        </item>
        <item>
            <title>Varje system skall &amp;auml;ga sitt eget data</title>
            <category>Läsvärt</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2009/05/14/varje-system-skall-aga-sitt-eget-data.aspx</link>
            <description>En mycket intressant och läsvärd post om problemen med att dela data mellan olika applikationer.   &lt;br /&gt;  &lt;br /&gt;&lt;a href="http://devlicio.us/blogs/casey/archive/2009/05/14/commercial-suicide-integration-at-the-database-level.aspx"&gt;Commercial Suicide - Integration at the Database Level av Jak Charlton&lt;/a&gt;   &lt;br /&gt;  &lt;br /&gt;Rekommenderad läsning!   &lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/102.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2009/05/14/varje-system-skall-aga-sitt-eget-data.aspx</guid>
            <pubDate>Thu, 14 May 2009 10:04:35 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/102.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2009/05/14/varje-system-skall-aga-sitt-eget-data.aspx#feedback</comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/102.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/102.aspx</trackback:ping>
        </item>
        <item>
            <title>BDD med NUnit</title>
            <category>TDD</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2009/02/20/bdd-med-nunit.aspx</link>
            <description>&lt;p&gt;"BDD is TDD done right" har någon sagt och jag är benägen att stämma in i den kören. Jag har inte jättelång erfarenhet av testdriven utveckling men 2 saker har hjälpt mig mycket i att minska underhållet av testerna när man lägger till funktionalitet till metoder som redan har tester.&lt;br /&gt;
&lt;br /&gt;
1. Att bara ha ett logiskt test i varje testmetod. Tex att bara ha ett mockat object och låt de andra objekten som skall interagera vara stubbar som bara hjälper till att sätt upp förutsättningarna för att kunna testa interaktionen med det mockade objektet. Visst kan man ha flera asserts i en testmetod men de skall testa samma sak, man kanske kollar att metoden inte returnerar null och sedan att den returnerar rätt värde/objekt men 2 asserts men det är bara för att underlätta när det går fel genom att felmeddelandet blir tydligare.&lt;br /&gt;
&lt;br /&gt;
2. Att med hjälp av klassnamn och metodnamn för testerna utförlig beskriva vad som testas, i c# kan både klassnamn och metodnamn vara 512 tecken långa så det kan bli en ordentlig menig. Detta gör man för att så detaljerat som möjligt beskriva det beteende som testas så att den som senare får ett felande test med hjälp av den texten kan förstå vad som testas utan att behöva analysera varken testkod eller kod under test. För i ärlighetens namn så är det inte roligt att läsa någon annans kod eller sin egen gamla heller för den delen.&lt;br /&gt;
&lt;br /&gt;
Om man med hjälp av testklasser och testmetoder kan beskriva vad som testas så får man ett bra underlag för vad system kan och gör. Med lite xslt transformering kan testresultatet bli en riktigt läsbar upplevelse och alltid aktuell dokumentation.&lt;/p&gt;
&lt;p&gt;Här finns ett enkelt exempel. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;xml&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;version&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;1.0&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;encoding&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;UTF-8&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;version&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;1.0&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;smallcase&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;'abcdefghijklmnopqrstuvwxyz'&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;uppercase&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;'ABCDEFGHIJKLMNOPQRSTUVWXYZ'&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;match&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;test-results&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;html&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;![CDATA[&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;            body { font : 1em verdana; }&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;            li { list-style-type : none; padding-top:0.5em; }&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;            li li { padding-top:0; font-size : .9em; }&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;            li.failed { color:red; }&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: gray"&gt;          &lt;/span&gt;&lt;span style="COLOR: blue"&gt;]]&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;style&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;body&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ul&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:apply-templates&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;//test-suite&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ul&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;body&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;html&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;match&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;test-suite&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:if&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;test&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;not(contains(@name, '\'))&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;@name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;li&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;context&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;remove-under-score&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$context&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ul&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:for-each&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;.//test-case&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;test-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;test-case&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;full-method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;@name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;              &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:element&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;li&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:if&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;test&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;@success = 'False'&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:attribute&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;                  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;'failed'&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:attribute&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;              &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:if&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$test-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:element&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:for-each&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ul&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;li&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:if&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;test-case&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;full-method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;remove-namespace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;full-method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$full-method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;method-sentence&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;remove-under-score&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;- &lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:text&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$method-sentence&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;remove-under-score&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;translate($text, '_', ' ')&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;remove-namespace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;class-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;full-method-name&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;namespace-end&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;concat($class-name, '.')&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;substring-after($full-method-name, $namespace-end)&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;remove-keywords&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;removed-Behavior&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string-replace-all&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string($text)&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string('Behavior')&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;by&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string('')&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;removed-Tests&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string-replace-all&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string($removed-Behavior)&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string('Tests')&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;by&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string('')&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:variable&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$removed-Tests&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string-replace-all&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;by&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:choose&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:when&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;test&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;contains($text, $replace)&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;substring-before($text, $replace)&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$by&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;string-replace-all&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;substring-after($text, $replace)&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$replace&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:with-param&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;by&lt;/span&gt;"&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$by&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:call-template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:when&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:value-of&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;select&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;$text&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:choose&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:template&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/73.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2009/02/20/bdd-med-nunit.aspx</guid>
            <pubDate>Fri, 20 Feb 2009 21:24:20 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/73.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2009/02/20/bdd-med-nunit.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/73.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/73.aspx</trackback:ping>
        </item>
        <item>
            <title>Gränssnittsprototyper</title>
            <category>Tools</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2009/02/18/granssnittsprototyper.aspx</link>
            <description>&lt;p&gt;När du vill göra gränssnittsprototyper att diskutera runt kan jag verkligen rekomendera &lt;a href="http://www.balsamiq.com/products/mockups"&gt;Balsamiq Mockups&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;På ett kick skapar man prototyper som fungerar riktigt bra att diskutera utifrån. Dom är tillräckligt prydliga för att  ge ett bra intryck men samtidigt inte så detaljerade att det börjar diskuteras färgdetaljer och liknande.&lt;/p&gt;
&lt;p&gt;Exempel från &lt;a href="http://www.balsamiq.com"&gt;www.balsamiq.com&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.balsamiq.com/images/wiki.gif" /&gt;&lt;/p&gt;
&lt;p&gt;För mig som inte har någon större känsla för färg och form, och dessutom tecknar illa, funkar Balsamiq utmärkt.&lt;/p&gt;&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/68.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2009/02/18/granssnittsprototyper.aspx</guid>
            <pubDate>Wed, 18 Feb 2009 19:45:17 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/68.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2009/02/18/granssnittsprototyper.aspx#feedback</comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/68.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/68.aspx</trackback:ping>
        </item>
        <item>
            <title>Validering och entiteter</title>
            <category>ASP.NET MVC</category>
            <category>DDD</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2009/01/27/validering-och-entiteter.aspx</link>
            <description>&lt;p&gt;Jag har funderat en del runt hur man skall validera inmatat data på ett smidigt sätt i ASP.NET MVC. Det finns massor med bloggar att läsa i ämnet samt ett och annat ramverk som kan generera klientvalidering med javascript. Dessa ramverk förutsätter att man använder attribut på entiteternas egenskaper för att beskriva vilka regler som gäller för den specifika egenskapen. &lt;/p&gt;
&lt;p&gt;Men vad är det man vill åstadkomma med reglerna för en egenskap? Som jag ser det så vill man skydda sin domän mot att felaktig data kommer in i systemet. Då behöver man antingen använda aspekter för att validera tilldelningen av data eller skriva valideringen i tilldelningskoden vilket ger duplicering. Som jag ser det är det bästa sättet att skydda domänen mot felaktigt data är att använda Value Objects i stället för Value Types. Tex: Ett UserName objekt i stället för attributen [Required][MinLength(8)][MaxLength(20)] på en egenskap av typen String. &lt;a href="http://stochastyk.blogspot.com/2008/05/value-objects-in-domain-driven-design.html"&gt;Mer om Value Objects här&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I mitt tycke är det denna väg man vill gå för att så tidigt som möjligt detektera felaktigt data samt att skydda domänen mot det. Återstår "bara" att få det att fungera smidigt i ASP.NET MVC controllerna.&lt;/p&gt;&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/63.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2009/01/27/validering-och-entiteter.aspx</guid>
            <pubDate>Tue, 27 Jan 2009 09:52:42 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/63.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2009/01/27/validering-och-entiteter.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/63.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/63.aspx</trackback:ping>
        </item>
        <item>
            <title>Integrationstest mot databas</title>
            <category>TDD</category>
            <category>NHibernate</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/10/integrationstest-mot-databas.aspx</link>
            <description>&lt;p&gt;Jag fick en kommentar från Karl på min blogg om &lt;a href="http://blog.avegagroup.se/HakanAlexander/archive/2008/11/29/dataaccess-och-kundnytta.aspx"&gt;Dataaccess och kundnytta&lt;/a&gt; där han undrade om hur jag gjorde integrationstester mot databasen så jag skriver om det.&lt;/p&gt;
&lt;p&gt;Det viktigaste är att man har känt data i databasen när man skall göra dessa integrationstester. &lt;/p&gt;
&lt;p&gt;För att inte störa eller störas av andra som jobbar mot databasen behöver man en egen databas jag vill helst köra lokalt för att slippa att testerna tar onödigt lång tid.&lt;/p&gt;
&lt;p&gt;Jag har använt mig av NDbUnit  för att säkerställa att jag har känt data i databasen innan testerna körs. Det är ett litet program som kan fixa till data på massor av sätt, jag har valt att låta den tömma databasen och fylla på med mitt testdata före integrationstesterna körs.&lt;/p&gt;
&lt;p&gt;I mitt senaste projekt hade vi en DBA med som jobbade mot en gemensam databas, för att säkerställa att vi var i synk gjorde jag så att testkoden kan gå mot olika databaser beroende på behov.&lt;/p&gt;
&lt;p&gt;Nedan finns källkoden som körs före något test i det namespace koden ligger. Alltså den kod som puttar in det data i databasen jag vill testa mot.&lt;/p&gt;
&lt;p&gt;Sen kan jag enkelt skriva tester som verifierar tex att mina mappningar är korrekt om jag kör NHibernate eller att min dataaccess kod sätter alla properties.&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    1&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    2&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    3&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    4&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    5&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; DBAccess;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    6&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    7&lt;/span&gt; &lt;span style="COLOR: blue"&gt;namespace&lt;/span&gt; DBAccessTest&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    8&lt;/span&gt; {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    9&lt;/span&gt;     [&lt;span style="COLOR: #2b91af"&gt;TestFixture&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   10&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;OrderTests&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   11&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   12&lt;/span&gt;         [&lt;span style="COLOR: #2b91af"&gt;Test&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   13&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CanGetOrderById()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   14&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   15&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; dao = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;OrderDao&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   16&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   17&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; order = dao.GetById(1);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   18&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   19&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.That(order, &lt;span style="COLOR: #2b91af"&gt;Is&lt;/span&gt;.Not.Null);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   20&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.That(order, &lt;span style="COLOR: #2b91af"&gt;Has&lt;/span&gt;.Property(&lt;span style="COLOR: #a31515"&gt;"Created"&lt;/span&gt;).EqualTo(&lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Parse(&lt;span style="COLOR: #a31515"&gt;"2008-12-10 13:34"&lt;/span&gt;)));&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   21&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   22&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   23&lt;/span&gt;         [&lt;span style="COLOR: #2b91af"&gt;Test&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   24&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OrderHasOrderRows()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   25&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   26&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; dao = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;OrderDao&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   27&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   28&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; order = dao.GetById(2);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   29&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   30&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.That(order.OrderRows, &lt;span style="COLOR: #2b91af"&gt;Has&lt;/span&gt;.Count.EqualTo(3));&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   31&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   32&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   33&lt;/span&gt; }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;OBS. Testar NUnit 2.5 därav syntax som inte finns i 2.4!&lt;/p&gt;
&lt;p&gt;Det är lika lätt att skriva tester för insert, update och delete. Dessa kan man köra i en transaktion runt själva testet och rulla tillbaka för att det inte skall påverka följande tester.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    1&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; System.Data;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    2&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    3&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    4&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    5&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; NDbUnit.Core;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    6&lt;/span&gt; &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; NDbUnit.Core.SqlClient;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    7&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    8&lt;/span&gt; &lt;span style="COLOR: blue"&gt;namespace&lt;/span&gt; DBAccessTest&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    9&lt;/span&gt; {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   10&lt;/span&gt;     &lt;span style="COLOR: green"&gt;// Supported enviroments&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   11&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;enum&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   12&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   13&lt;/span&gt;         local,&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   14&lt;/span&gt;         remote&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   15&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   16&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   17&lt;/span&gt;     &lt;span style="COLOR: green"&gt;// Setup for tests in the same namespace&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   18&lt;/span&gt;     [&lt;span style="COLOR: #2b91af"&gt;SetUpFixture&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   19&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SetupDatabaseWithKnownData&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   20&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   21&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Change this when you would like to verify other database&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   22&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt; currentDatabase = &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt;.local;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   23&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   24&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Filename of data stored during test&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   25&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; original_data_file = &lt;span style="COLOR: #a31515"&gt;"org_data.xml"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   26&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   27&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Connections to different databases&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   28&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; local_connection = &lt;span style="COLOR: #a31515"&gt;@"Data Source=.\SQLEXPRESS;Initial Catalog=testdatabase;Integrated Security=True"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   29&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; remote_connection = &lt;span style="COLOR: #a31515"&gt;@"Data Source=192.168.1.120;Initial Catalog=testdatabase;Integrated Security=True"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   30&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   31&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Return current connection&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   32&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; CurrentConnectionString()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   33&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   34&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; connectionString = &lt;span style="COLOR: #a31515"&gt;""&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   35&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   36&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;switch&lt;/span&gt; (currentDatabase)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   37&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   38&lt;/span&gt;                 &lt;span style="COLOR: blue"&gt;case&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt;.local:&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   39&lt;/span&gt;                     connectionString = local_connection;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   40&lt;/span&gt;                     &lt;span style="COLOR: blue"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   41&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   42&lt;/span&gt;                 &lt;span style="COLOR: blue"&gt;case&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt;.remote :&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   43&lt;/span&gt;                     connectionString = remote_connection;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   44&lt;/span&gt;                     &lt;span style="COLOR: blue"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   45&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   46&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   47&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; connectionString;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   48&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   49&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   50&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Runs once prior to any test in this namespace&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   51&lt;/span&gt;         [&lt;span style="COLOR: #2b91af"&gt;SetUp&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   52&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; SetupDatabase()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   53&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   54&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Creating a new databaseSetup object with the relevant connectionstring&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   55&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;INDbUnitTest&lt;/span&gt; databaseSetup = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SqlDbUnitTest&lt;/span&gt;(CurrentConnectionString());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   56&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   57&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Load the database schema, tables not in this schema will be ignored.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   58&lt;/span&gt;             databaseSetup.ReadXmlSchema(&lt;span style="COLOR: #a31515"&gt;"database_schema.xsd"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   59&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   60&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Save current data if running test against other source than my private&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   61&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (currentDatabase != &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt;.local)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   62&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   63&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;DataSet&lt;/span&gt; original = databaseSetup.GetDataSetFromDb();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   64&lt;/span&gt;                 original.WriteXml(original_data_file);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   65&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   66&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   67&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Load my known data into the databaseSetup&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   68&lt;/span&gt;             databaseSetup.ReadXml(&lt;span style="COLOR: #a31515"&gt;"current_test_data.xml"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   69&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   70&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Insert that data into the database, clear all other data.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   71&lt;/span&gt;             databaseSetup.PerformDbOperation(&lt;span style="COLOR: #2b91af"&gt;DbOperationFlag&lt;/span&gt;.CleanInsertIdentity);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   72&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   73&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   74&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Runs after all tests been executed&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   75&lt;/span&gt;         [&lt;span style="COLOR: #2b91af"&gt;TearDown&lt;/span&gt;]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   76&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; RestoreDatabase()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   77&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   78&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// If not my database resore to original data.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   79&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (currentDatabase != &lt;span style="COLOR: #2b91af"&gt;TestDatabases&lt;/span&gt;.local)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   80&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   81&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;INDbUnitTest&lt;/span&gt; databaseSetup = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SqlDbUnitTest&lt;/span&gt;(CurrentConnectionString());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   82&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   83&lt;/span&gt;                 databaseSetup.ReadXmlSchema(&lt;span style="COLOR: #a31515"&gt;"database_schema.xsd"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   84&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   85&lt;/span&gt;                 &lt;span style="COLOR: green"&gt;// Load the data we stored earlier&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   86&lt;/span&gt;                 databaseSetup.ReadXml(original_data_file);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   87&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   88&lt;/span&gt;                 &lt;span style="COLOR: green"&gt;// Clear and resore data from prior to tests&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   89&lt;/span&gt;                 databaseSetup.PerformDbOperation(&lt;span style="COLOR: #2b91af"&gt;DbOperationFlag&lt;/span&gt;.CleanInsertIdentity);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   90&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   91&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   92&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   93&lt;/span&gt; }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Det finns en bugg i NDbUnit 1.2 som gör att CleanInsertIdentity inte fungerar om man har ForeignKey relations i sin databas. Det finns &lt;a href="http://unhandled-exceptions.com/blog/index.php/2007/10/06/inside-the-sausage-factory-part-20-detour-to-fix-ndbunit-foreign-keys/"&gt;bloggar&lt;/a&gt; om hur man löser det.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/51.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/10/integrationstest-mot-databas.aspx</guid>
            <pubDate>Wed, 10 Dec 2008 09:10:37 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/51.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/10/integrationstest-mot-databas.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/51.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/51.aspx</trackback:ping>
        </item>
        <item>
            <title>webcontrol i ASP.NET MVC</title>
            <category>ASP.NET MVC</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/08/webcontrol-i-asp.net-mvc.aspx</link>
            <description>Jag skrev tidigare om att jag tyckte det kan bli grötigt i de views man skapar när man använder ASP.NET MVC och att jag efterlyste något liknande webcontrols. Läste nyss på &lt;a href="http://haacked.com/archive/2008/12/08/asp.net-mvc-northwind-demo-using-the-spark-view-engine.aspx"&gt;Phil Haack's&lt;/a&gt; blog om en view engine som heter &lt;a href="http://dev.dejardin.org/"&gt;Spark&lt;/a&gt; det verkar vara det jag efterlyste, MÅSTE PROVA.&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/49.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/08/webcontrol-i-asp.net-mvc.aspx</guid>
            <pubDate>Mon, 08 Dec 2008 22:20:09 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/49.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/08/webcontrol-i-asp.net-mvc.aspx#feedback</comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/49.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/49.aspx</trackback:ping>
        </item>
        <item>
            <title>Systeminformation på startsidan</title>
            <category>TFS</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/06/systeminformation-pa-startsidan.aspx</link>
            <description>Vi visste inte riktigt vad vi skulle använda startsidan till på den senaste webbapplikationen jag utvecklade. Så jag förslog för kunden att vi skulle göra något bloggliknande där systemintressenterna skulle kunna skriva meddelanden till användarna. Tex om stundande systemunderhåll, uppdateringsinformation eller information som verksamheten vill ha ut till användarna.&lt;br /&gt;
&lt;br /&gt;
Som vanligt tänkte jag på en till tabell i databasen och en WYSIWYG-editor.&lt;br /&gt;
&lt;br /&gt;
Men häromdagen slog det mig att det vore smartare att bara implementera en RSS-lista på startsidan och lägga en URL i web.config. Då kan man ju enkelt ha olika källor för olika miljöer, utvecklingsmiljön, UAT och produktion. Dessutom är den källan oberoende av databasen vilken i både utveckling och UAT rensas mellan varven. Med denna implementation skulle man enkelt kunna få tex incheckningshistoriken från i detta fallet TFS på startsidan i utveckling, UAT miljön skulle kunna innehålla information om vilka scenarios och buggar som är implementerade som genererats som statisk xml-fil i samband med att det installationspaketet byggs av byggservern och produktion skulle kunna visa det jag beskrev tidigare. För produktion skulle man kunna använda befintligt intranät för att skapa nya inlägg.&lt;br /&gt;
&lt;br /&gt;
Känns som en ganska simpel men flexibel och användbar lösning. &lt;br /&gt;
&lt;br /&gt;
Har inte hunnit kolla om TFS-08 har RSS-flöde på källkodshistoriken. Men hittade &lt;a href="http://blogs.msdn.com/jefflu/archive/2005/07/27/443900.aspx"&gt;denna&lt;/a&gt; implementation som borde gå att använda. Och att skriva en RSS-lista tar ju inte många minuter.&lt;br /&gt;
&lt;br /&gt;
Uppdaterat länken!&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/47.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/06/systeminformation-pa-startsidan.aspx</guid>
            <pubDate>Sat, 06 Dec 2008 21:57:35 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/47.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2008/12/06/systeminformation-pa-startsidan.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/47.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/47.aspx</trackback:ping>
        </item>
        <item>
            <title>Dataaccess och kundnytta</title>
            <category>NHibernate</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2008/11/29/dataaccess-och-kundnytta.aspx</link>
            <description>Jag startade ett projekt med att använda NHibernate för dataaccess direkt mot tabeller som mappade 1 till 1 mot mina domänobjekt. Det var tidigt i projektet och jag ville fort få fram någon form av riktig upplevelse för kunden, kunden höll i samma veva på att forma den organisation och rutiner som systemet skulle stödja så det var upplagt för många förändringar av datamodellen. En bit in i projektet togs det fram en ny datamodell för databasen av en databasexpert, den var naturligt nog ganska olik den jag startat med. Den modellen tog hänsyn till många aspekter som min saknade.&lt;br /&gt;
&lt;br /&gt;
Jag blev i samma veva införstådd med att driftorganisationen inte accepterade att applikationer fick direktaccess till tabellerna  utan endast via storedprocedures. Hmm, hur går det ihop med NHibernate? När jag fick klartecken från driften att min applikation skulle få hämta data vi vyer men sköta uppdateringarna via procedurer visade det sig att NHibernate hade ett ganska bra stöd för detta. Att hämta data via vyer gjorde det bättre eftersom jag nu enkelt kunde sätta ihop den nya databasmodellen med hjälp av vyer så att den stämde med min datamodell i applikationen. Uppdateringen var dock en annan visa, även om NHibernate stöder att varje klass har en insert, update och delete -procedur så blev det lite bök med det. Det funkar bra om man inte använder identity i databasen utan låtar NHibernate hantera idgenereringen. Så där fick jag göra en fix. Jag såg dock att stöd för Identity kommer med nästa version, förslaget ligger klart i 2.1 Alpha 1.&lt;br /&gt;
&lt;br /&gt;
Allt detta bara för att komma fram till vad jag egentligen ville säga.&lt;br /&gt;
&lt;br /&gt;
Det jag märkt är att dataaccess tar ganska mycket mer tid i anspråk nu när vyer och procedurer måste skapas och underhållas så fort databasmodellen ändras. Jag har inte sett detta så tydligt förut eftersom man sällan har möjlighet att få en så här jämförelse. Om vi bara hade haft mätvärden på farten i projektet. Då hade man kunnat se hur stor skillnaden är, i siffror. &lt;br /&gt;
&lt;br /&gt;
Jag är dock glad att jag skrivit integrationstester för att testa all dataaccess mot känt testdata, annars vet jag inte hur lång tid det tagit att fixa till vyer och procedurer efter databasförändringarna.&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/45.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2008/11/29/dataaccess-och-kundnytta.aspx</guid>
            <pubDate>Fri, 28 Nov 2008 23:10:30 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/45.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2008/11/29/dataaccess-och-kundnytta.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/45.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/45.aspx</trackback:ping>
        </item>
        <item>
            <title>Rapport från Öredev</title>
            <category>Oredev2008</category>
            <link>http://blog.avegagroup.se/HakanAlexander/archive/2008/11/26/rapport-fran-oredev.aspx</link>
            <description>Jag var på konferansen Öredev i Malmö förra veckan. Fantastiskt! Vilken lineup med talare dom fått dit. Några exempel på dem jag lyssnade till. Eric Evans, Dr Jeff Sutherland, Jimmy Nilsson, Ayende Rahien, Ted Neward, Robet C Martin, Diana Larsen, James Bach, Kevlin Henney, Scott Bellaware och Avegas Joakim Sundén.&lt;br /&gt;
&lt;br /&gt;
Mina favoriter:&lt;br /&gt;
'Active Record' med Ayende Rahien. Han började med att hävda att &lt;span style="font-weight: bold;"&gt;det är helt onödigt att skriva dataaccesskod, det hanterar olika frameworks åt oss&lt;/span&gt; så vi kan koncentrera oss på kundnytta i stället. Sen visade han hur det kan gå till med hjälp av Active Record som ligger ovanpå NHibernate. Fantastisk uppvisning i hur man hanterar tangentbordet och utvecklarverktygen.&lt;br /&gt;
&lt;br /&gt;
'DDD Panel' Eric Evans, James Coplien, Randy Strafford och Kevlin Henney. Hur mycket erfarenhet får det plats på ett podium?&lt;br /&gt;
&lt;br /&gt;
'ALT.NET Panel' Scott Bellaware, Glen Block, Ayende Rahien och Joakim Sundén. Intressant eftersom Scott och Ayende är väldigt kritiska till det som Microsoft släpper i från sig vad gäller verktyg och practises att få höra att det faktiskt finns krafter inom Microsoft som vill förändra och förbättra de verktyg vi matas med.&lt;br /&gt;
&lt;br /&gt;
'The Power of Value' med Dan Bergh Johansson. Utmärkt inblick i varför man inte skall skicka runt strängar och intar i sin applikation. Han gjorde det med väldigt bra inlevelse och engagemang.&lt;br /&gt;
&lt;br /&gt;
Genomgående kan man väl säga att det var fokus på att optimera kundnytta, skriv inte kod för saker som redan är hanterat. Tex dataaccess, control containers osv osv. Använd TDD för att stödja dig i att skriva bättre kod med lösare kopplingar och framförallt ger dig en trygghet i att ständigt förbättra kodbasen. Som Uncle Bob(Robert C Martin) uttryckte det, &lt;span style="font-weight: bold;"&gt;tänk om vi varje gång vi checkar in vår kod har städat och gjort den lite bättre och mer läsbar&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Det var en mycket bra och stimulerande vecka(4 dagar).&lt;br /&gt;&lt;img src="http://blog.avegagroup.se/HakanAlexander/aggbug/43.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Håkan Alexander</dc:creator>
            <guid>http://blog.avegagroup.se/HakanAlexander/archive/2008/11/26/rapport-fran-oredev.aspx</guid>
            <pubDate>Wed, 26 Nov 2008 10:09:59 GMT</pubDate>
            <wfw:comment>http://blog.avegagroup.se/HakanAlexander/comments/43.aspx</wfw:comment>
            <comments>http://blog.avegagroup.se/HakanAlexander/archive/2008/11/26/rapport-fran-oredev.aspx#feedback</comments>
            <wfw:commentRss>http://blog.avegagroup.se/HakanAlexander/comments/commentRss/43.aspx</wfw:commentRss>
            <trackback:ping>http://blog.avegagroup.se/HakanAlexander/services/trackbacks/43.aspx</trackback:ping>
        </item>
    </channel>
</rss>