<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Darryl Russi&amp;#39;s Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/b/darrylru/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/darrylru/atom.aspx" /><generator uri="http://telligent.com" version="5.6.583.20496">Telligent Community 5.6.583.20496 (Build: 5.6.583.20496)</generator><updated>2009-09-30T02:04:09Z</updated><entry><title>Debugging Tip: Viewing Address of Managed Code</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2012/02/07/debugging-tip-viewing-address-of-managed-code.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2012/02/07/debugging-tip-viewing-address-of-managed-code.aspx</id><published>2012-02-08T07:39:00Z</published><updated>2012-02-08T07:39:00Z</updated><content type="html">&lt;p&gt;Ever need to write managed code that then talked to unmanaged code elsewhere?&amp;nbsp; Sometimes when debugging about why things are not working the way you expect it is useful to just inspect the values on both systems to understand the differences. One of the difference with managed code is that you rarely need to access the actual memory address, but there are times it is useful.&amp;nbsp; In Visual Studio this can be done simply by using the immediate window.&lt;/p&gt;
&lt;p&gt;For instance if I wanted to know the address of a byte[] from the following code.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-57-metablogapi/7028.image_5F00_6.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-57-metablogapi/7041.image_5F00_thumb_5F00_2.png" width="244" height="32" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can dereference the item to get the memory address by opening the Immediate Window &amp;amp; entering the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-57-metablogapi/4807.image_5F00_2.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-57-metablogapi/4810.image_5F00_thumb.png" width="223" height="91" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you can drop the address of the memory into the memory window to see how it is laid out.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-57-metablogapi/5481.image_5F00_4.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-57-metablogapi/7127.image_5F00_thumb_5F00_1.png" width="218" height="87" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10265306" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Debugging" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Debugging/" /></entry><entry><title>Challenges in Test–Ensuring Testability/Influencing Design</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/08/30/challenges-in-test-ensuring-testability-influencing-design.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/08/30/challenges-in-test-ensuring-testability-influencing-design.aspx</id><published>2011-08-30T19:14:00Z</published><updated>2011-08-30T19:14:00Z</updated><content type="html">&lt;p&gt;Products are primarily designed for customers, yet a test team must test these products.&amp;nbsp; Who is thinking about how you might test the product? If you are a tester, you better be thinking about it and providing feedback to your developers about their design. Your feedback should both be for the customer and how to better enable you to test the product effectively.&lt;/p&gt;
&lt;p&gt;For some of technologies there may be tools you can use such as the &lt;a href="http://msdn.microsoft.com/en-us/library/dd318466(v=VS.85).aspx"&gt;IAccessible&lt;/a&gt; interface for many windows forms or the tools that we ship as part of Visual Studio Test.&amp;nbsp; Yet you may be on a product for which there are no other people testing that technology &amp;amp; therefore less existing items you can leverage. A tester needs to know what technologies are out there &amp;amp; be willing to dig in and implement similar technologies if they do not exist for their environment.&lt;/p&gt;
&lt;p&gt;For example how can you do UI automation on an Xbox console?&amp;nbsp; The console does not have public interfaces for manipulating UI elements &amp;amp; is completely different than a traditional WinForm.&amp;nbsp; Additionally, it uses a different processor architecture (&lt;a href="http://en.wikipedia.org/wiki/PowerPC"&gt;PowerPC&lt;/a&gt;) than what many Microsoft products use (&lt;a href="http://en.wikipedia.org/wiki/X86"&gt;x86&lt;/a&gt;, x64, &amp;amp; more recently &lt;a href="http://en.wikipedia.org/wiki/ARM_processor"&gt;ARM&lt;/a&gt;), so some tools &amp;amp; libraries won&amp;rsquo;t work on it.&amp;nbsp; What does it&amp;rsquo;s UI need to support for you to be able to have reliable automation?&amp;nbsp; What would you ask the developer to do for you to get better automation? Below are a couple items that you could use when designing your product to improve testability. As always with test, there is no one magic bullet but instead they are tools that we can leverage where it makes sense for our development.&lt;/p&gt;
&lt;h2&gt;Model View Controller (MVC)&lt;/h2&gt;
&lt;p&gt;Design plays a large role in how you can test a product. It influences how devs write their code &amp;amp; how you can then write your test code. There are many concepts out there to help improve the testability of a product design. One example is &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;Model View Controller&lt;/a&gt; (MVC).&amp;nbsp; The idea with this design pattern is that you minimize the logic that is in your UI (aka View) and push your business logic into the model.&amp;nbsp; The controller then manages the interaction between the two.&amp;nbsp; With most of your business logic pushed into the model, this means you can now manipulate the model directly possibly via APIs and do a large amount of testing that way instead of relying on the UI. Traditionally API testing is much more reliable &amp;amp; robust than UI testing as UI changes more often and has timing issues with regards to knowing when you click on something when the next screen of the UI is ready for input.&amp;nbsp; This design also has the added benefit of allowing the developers to quickly add additional views with out much effort.&lt;/p&gt;
&lt;p&gt;A newer pattern which is similar and targeted at several of the latest Microsoft UI development platforms (Windows Presentation Foundation &amp;amp; Silverlight) is &lt;a href="http://en.wikipedia.org/wiki/MVVM"&gt;Model View ViewModel&lt;/a&gt; (MVVM).&amp;nbsp; This adds a ViewModel which is an abstraction of the view used in data binding of the model to the view.&lt;/p&gt;
&lt;h2&gt;Mock Objects&lt;/h2&gt;
&lt;p&gt;How are you going to test error conditions in your code?&amp;nbsp; What if components you require are still under development? Are you testing a UI component which requires a service? Mock objects are a useful way to tackle these types of problems.&amp;nbsp; If you design your code to allow for the ability to use &lt;a href="http://en.wikipedia.org/wiki/Mock_object"&gt;mock objects&lt;/a&gt;, you can simulate them.&amp;nbsp; In order to do this your product needs to be written clean enough that you can swap mock objects &amp;amp; the real objects.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Take for example a product that relies on a SQL database. You likely have a data layer that handles your calls out to SQL.&amp;nbsp; When implementing this data layer, you can implement a mock object to simulate the SQL server.&amp;nbsp; This would allow you to do things such as simulate the results of the database or if the network is down. Mock objects are also useful at the unit testing level as the developer can isolate their component to only rely on these mock objects.&amp;nbsp; This is especially useful if they depend on another component also under&lt;/p&gt;
&lt;div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dfa97c76-d63f-4173-ab70-b03579caccdf" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SDET" rel="tag"&gt;SDET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Test" rel="tag"&gt;Test&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;development which may not be ready for consumption yet.&amp;nbsp; If you are following &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;test-driven development&lt;/a&gt; (TDD) then it is also useful for being able to write tests prior to implementing the product code.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Similar to developers, testers need to stay abreast with the various design patterns that can be used in development. As products continue to grow in complexity gone are the days of a tester being able to strictly &lt;a href="http://en.wikipedia.org/wiki/White-box_testing"&gt;white box test&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Blackbox_testing"&gt;black box test&lt;/a&gt; an application after development is code complete. Doing so will likely result in a product that is highly difficult to test and result in automation that is less robust and reliable. Instead we expect and involve our testers from the earliest stages of design both as a sounding board for designing a solution to a problem and as a source of input to ensure the product we develop is highly testable.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10203058" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>Challenges in Test – Impeccable Infrastructure</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/08/22/challenges-in-test-impeccable-infrastructure.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/08/22/challenges-in-test-impeccable-infrastructure.aspx</id><published>2011-08-22T09:00:00Z</published><updated>2011-08-22T09:00:00Z</updated><content type="html">&lt;p&gt;In order to test a product there is always a fair amount of infrastructure needed to keep the wheels running.&amp;#160; Just a few examples of the types of infrastructure that test requires are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Test harness&lt;/li&gt;    &lt;li&gt;Logger&lt;/li&gt;    &lt;li&gt;Common code for building test automation &lt;/li&gt;    &lt;li&gt;Reporting websites &lt;/li&gt;    &lt;li&gt;Databases for storing various results &lt;/li&gt;    &lt;li&gt;Machines for running tests in the lab &lt;/li&gt;    &lt;li&gt;Topology for your product to simulate customer deployments &lt;/li&gt;    &lt;li&gt;Tools for managing your infrastructure &lt;/li&gt;    &lt;li&gt;Tools for testing &amp;amp; possibly for customers &lt;/li&gt;    &lt;li&gt;Etc.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As you might imagine this can become quite an undertaking and in larger teams this is sometimes delegated to a dedicated lab team to support.&lt;/p&gt;  &lt;p&gt;On top of all this work is the set of tests that your team is running &amp;amp; many times it also supports your development team for their development needs.&amp;#160; A high quality infrastructure is something that can sometimes be taken for granted, until there is a problem which can at best slow down your team’s efficiency or at worse invalidate your testing due to some bad assumptions.&lt;/p&gt;  &lt;p&gt;Bugs are an equal opportunity employer so similar to the previous post how you need to prove your product is correct, that extends to your test infrastructure. When you find a bug are you ready &amp;amp; able to prove that it resides in the product code &amp;amp; is not a problem with your test infrastructure?&amp;#160; Here are a couple real world examples of both to further demonstrate the need to focus on how you are building your test infrastructure.&lt;/p&gt;  &lt;h2&gt;Will this thing ever finish?&lt;/h2&gt;  &lt;p&gt;Working on a sync engine for Microsoft Identity Integration Server (MIIS) we were investigating the ability of the product to scale.&amp;#160; As such a tester had instrumented some counters to track the rate that sync occurred as it ran through a couple million objects.&amp;#160; This process was taking a couple days, which was expected due to the scale being tested.&amp;#160; The tester was then leveraging the data about their rate of sync to determine the performance of the synchronization engine and then extrapolate out an ETA for the test to complete.&amp;#160; As he plotted this out each day the rate would drop and he would give an updated ETA.&amp;#160; Below is a hypothetical table for the data that was being collected.&lt;/p&gt; &lt;center&gt;   &lt;table style="border-collapse: collapse" border="0" cellspacing="0" cellpadding="0" width="388"&gt;&lt;colgroup&gt;&lt;col style="width: 48pt" width="64" /&gt;&lt;col style="width: 91pt; mso-width-source: userset; mso-width-alt: 4425" width="121" /&gt;&lt;col style="width: 48pt" width="64" /&gt;&lt;col style="width: 104pt; mso-width-source: userset; mso-width-alt: 5046" width="138" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;       &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; background: #4f81bd; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #4f81bd none" height="20" width="64"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt" color="#ffffff"&gt;&lt;strong&gt;Day&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #4f81bd; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #4f81bd none" width="121"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt" color="#ffffff"&gt;&lt;strong&gt;Rate                  &lt;br /&gt;(Objs/day)&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #4f81bd; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #4f81bd none" width="64"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt" color="#ffffff"&gt;&lt;strong&gt;Objects Remaining&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #4f81bd; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #4f81bd none" width="138"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt" color="#ffffff"&gt;&lt;strong&gt;Est. Days remaining&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;50,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;2,000,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;40.0&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;50,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1,950,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;39.0&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;49,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1,900,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;38.8&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;4&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;48,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1,851,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;38.6&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;5&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;45,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1,803,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;40.1&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;6&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;42,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1,758,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;41.9&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="height: 15pt" height="20"&gt;         &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: #95b3d7 0.5pt solid; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" height="20" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;7&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;40,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: medium none; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl65" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;1,716,000&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;          &lt;td style="border-bottom: #95b3d7 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; font-family: ; background: #dce6f1; color: ; vertical-align: bottom; border-top: #95b3d7 0.5pt solid; border-right: #95b3d7 0.5pt solid; text-decoration: ; padding-top: 1px; text-underline-style: none; text-line-through: none; mso-pattern: #dce6f1 none" class="xl66" align="right"&gt;&lt;font face="Calibri"&gt;&lt;font style="font-size: 11pt"&gt;42.9&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/center&gt;&lt;strong&gt;Note&lt;/strong&gt;: This data is completely made up just for illustration as it was years ago &amp;amp; I don’t have the actual data.   &lt;p&gt;After several days of work, we realized that every day the rate moved enough that it would never complete. Sound the alarms, we have a bug!&lt;/p&gt;  &lt;p&gt;Now you spin up your developer &amp;amp; proudly point to a newly found bug.&amp;#160; After some investigation through it is found out low &amp;amp; behold yes there is a bug, but it is the test infrastructure causing it.&amp;#160; What is that you say?&amp;#160; How can my test cause a product bug? In this case it turned out to be that the way the tester implemented the counters for monitor the product were doing an expensive query via WMI on a VERY aggressive basis. This query was tying up system resources &amp;amp; therefore causing the slow down in the product.&lt;/p&gt;  &lt;p&gt;Lesson learned is to be aware of the &lt;a href="http://en.wikipedia.org/wiki/Observer_effect_(information_technology)"&gt;observer effect&lt;/a&gt; and try to ensure your test code is as unobtrusive as possible when measuring items like performance.&lt;/p&gt;  &lt;h2&gt;Test A says pass, but Test B says fail?&lt;/h2&gt;  &lt;p&gt;In another example of working on performance on &lt;a href="http://www.microsoft.com/fim"&gt;Forefront Identity Manager&lt;/a&gt; (FIM) we were in the midst of a major improvement to performance.&amp;#160; We had some very talented developers on the project &amp;amp; as a great developer they had written some excellent unit tests to help test their progress closer to the API level.&amp;#160; Similarly we had some tests which covered end to end UI scenarios for performance. The developers reported great progress in improving our performance and so we kicked off our tests to see how we were looking end to end.&amp;#160; It so happened that our management was meeting to discuss our project progress with their managers, so they were eager for an update for performance. We kick off the UI performance tests &amp;amp; find that everything is timing out!&lt;/p&gt;  &lt;p&gt;We have two very different results, so which should we tell our managers to report? We have to figure out which test is correct and why is there a difference. Well a good start is to minimize the variables, so we took the tests out of the picture by doing some manual testing.&amp;#160; Sure enough our manual results were inline with what the UI tests were showing,    &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4efbe8d0-cd19-446d-9e37-45d4acab6963" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SDET" rel="tag"&gt;SDET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Test" rel="tag"&gt;Test&lt;/a&gt;&lt;/div&gt; but why are the tests showing different results?&amp;#160; We then started profiling the SQL server using both the unit tests &amp;amp; the UI test. Sure enough the queries reported the differences we saw in the amount of time taken.&amp;#160; This goes back to &lt;a href="http://blogs.msdn.com/b/darrylru/archive/2011/03/07/challenges-in-test-knowing-your-product.aspx"&gt;knowing your product&lt;/a&gt;, as based on our knowledge of the product we had a good idea of where to start looking.&amp;#160; We then ultimately debugged into the unit test &amp;amp; realized that it had a config switch that added some additional optimizations which the dev had forgotten to enable in the product.&lt;/p&gt;  &lt;h2&gt;Build it &amp;amp; they will come&lt;/h2&gt;  &lt;p&gt;All this to say whenever you build any piece of code, there are sure to be bugs to come from it. Teams must not view something as just test code &amp;amp; therefore hold it to a lower quality bar, otherwise it will quickly cost them time &amp;amp; invalidate their results.&amp;#160; &lt;/p&gt;  &lt;p&gt;Similarly as a tester you get to build all kinds of infrastructure to help make the team more efficient. This also means you get to learn all kinds of new technology.&amp;#160; Need to build a new report?&amp;#160; What tech do you want to use to build it? Why not write it in Silverlight or WPF to learn something new?&amp;#160; You get to be the PM, Dev, &amp;amp; Tester for these types of items.&amp;#160; Just remember you want to test it thoroughly, otherwise there might be a bug that will bite you later.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10198338" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>Challenges in Test–Proving your feature</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/08/15/challenges-in-test-proving-your-feature.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/08/15/challenges-in-test-proving-your-feature.aspx</id><published>2011-08-15T09:00:00Z</published><updated>2011-08-15T09:00:00Z</updated><content type="html">&lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:deb0e3cf-e3a8-4fc7-8044-20cdb483d9dc" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SDET" rel="tag"&gt;SDET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Test" rel="tag"&gt;Test&lt;/a&gt;&lt;/div&gt; When you take on a feature to test, how does one prove it is right?&amp;#160; Generally you might work off some checklist of buckets or areas like functional, globalization, security, boundary, localization, performance, stress, etc. Then say once you have run all the tests you came up with &amp;amp; made sure they passed, then it must be done right?&amp;#160; As alluded to earlier there is also the question of did you build the right feature for the customer?&lt;/p&gt;  &lt;p&gt;The below picture has circulated before on how the various components of product development looked at a simple problem.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://farm1.static.flickr.com/5/10160285_8d3c50f724_o.gif" width="605" height="454" /&gt;&lt;/p&gt;  &lt;p&gt;One might add to this “How the tester tested it”&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://eckiller.com/wp-content/uploads/2011/03/c6974303rd-swingset.jpg.jpg" width="296" height="296" /&gt;&lt;/p&gt;  &lt;p&gt;Part of test’s responsibility is to prove that their feature is correct.&amp;#160; This includes not only that it is functionally correct but that it is actually what the customer wants\needs.&lt;/p&gt;  &lt;h2&gt;Customer Correctness - Involve your customers&lt;/h2&gt;  &lt;p&gt;I covered this in the previous post about &lt;a href="http://blogs.msdn.com/b/darrylru/archive/2011/03/22/challenges-in-test-knowing-your-customer.aspx"&gt;knowing your customer&lt;/a&gt;, but it is worth reiterating as it is highly important.&amp;#160; Involving your customer as early &amp;amp; as often as possible will help you increase the likely hood of delivering what they really need.&amp;#160; There can be obstacles such as maybe you are creating something brand new so your customer has not seen anything like it before or maybe you have competitive requirements to limit disclosures.&amp;#160; Yet these are usually not insurmountable, at the bare minimum you can solicit feedback from co-workers on the work that you are doing.&amp;#160; Is what you are working on targeted at a less technical customer &amp;amp; all your co-workers live &amp;amp; write code, then what about your business admin?&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Functional Correctness - Quod erat demonstrandum (QED)&lt;/h2&gt;  &lt;p&gt;A typical question in a product release is how do we know that the product is done &amp;amp; ready for release.&amp;#160; This can fill up many meetings &amp;amp; even books about the subject.&amp;#160; One aspect of this I wanted to focus on was thinking beyond the procedure of manually coming up with a set of test cases, build them, &amp;amp; then run them.&amp;#160; Instead, here at Microsoft many testers have degrees in Computer Science\Engineering and many have advanced degrees including Masters or PhDs.&amp;#160; As such we should borrow from our math background &amp;amp; think how you might prove the feature is correct (i.e. &lt;a href="http://en.wikipedia.org/wiki/Q.E.D"&gt;QED&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;This is more aspirational, but I have seen concepts &amp;amp; ideas used in test to attempt to do this exact thing. As such this is one of the hard problems in test. More broadly these are collectively known as &lt;a href="http://en.wikipedia.org/wiki/Formal_methods"&gt;Formal Methods&lt;/a&gt; and this is one area which MSR has made considerable investment.&lt;/p&gt;  &lt;h3&gt;Model Based Testing&lt;/h3&gt;  &lt;p&gt;One example of how you can prove a feature is correct is model based testing.&amp;#160; It is an interesting aspect of how you might prove that a system is correct.&amp;#160; I am personally still learning more about model based testing &amp;amp; how we can use it in our testing tool belt when developing products.&amp;#160; So this is just an intro to the concept for those unaware.&lt;/p&gt;  &lt;p&gt;The basic concept is that if you can map out a conceptual model of your product, then you can use an algorithm to walk your model which will then generate many of the test cases for you.&amp;#160; Just taking the time to create a model will greatly help in understanding your product and typically cause you to find questions which will then feedback into your dev &amp;amp; PM specs. For example, what happens if we are in X state &amp;amp; then Y happens?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://research.microsoft.com/en-us/projects/specexplorer/"&gt;Microsoft Research&lt;/a&gt; has done some work around Model Based Testing (&lt;a href="http://en.wikipedia.org/wiki/Model-based_testing"&gt;MBT&lt;/a&gt;) and since has been released as a power tool for Visual Studio 2010 called &lt;a href="http://visualstudiogallery.msdn.microsoft.com/271d0904-f178-4ce9-956b-d9bfa4902745/"&gt;Spec Explorer&lt;/a&gt;.&amp;#160; You can even use Spec Explorer to convert your understanding of the spec into a programmatic model and then when the model is explored find if there are invalid transitions that occur based on some constraints helping you find bugs in your spec &amp;amp; design early on.&lt;/p&gt;  &lt;p&gt;One key consideration when building out a model of a system is the scope of a given model. If you attempt to model in detail a complex system, then you will run into state explosion where you will have way too many permutation &amp;amp; combinations to be useful.&amp;#160; Instead you should focus on modeling some specific area you are testing to minimize this problem.&lt;/p&gt;  &lt;h3&gt;Oracles&lt;/h3&gt;  &lt;p&gt;In order to verify any test result, a tester must develop an &lt;a href="http://en.wikipedia.org/wiki/Oracle"&gt;oracle&lt;/a&gt; to determine if the result of a test should pass or fail. Sometimes these oracles are extremely simple.&amp;#160; The simplest being hard coding the answer to each of their tests.&amp;#160; Yet this limits the number of tests to the ability of the tester to generate tests &amp;amp; answers to those tests.&amp;#160; Those answers must be maintained as the product changes over the course of development. On the other extreme is to perform complex calculations which simulate the product. The problem here is the classic of if test is testing product code who is testing this complex test code?&amp;#160; &lt;/p&gt;  &lt;p&gt;MBT solves this by using the model you create about your product. Tools like Spec Explorer explicitly capture state in the model and allow for the model to return values, which can then be mapped to actual values which the system will return.&amp;#160; So tests generated by Spec Explorer essentially have the oracle embedded in each generated test case. But to do this, the model may have to closely reflect the algorithmic complexity of the system being tested. This can lead to high cost of model building. MBT approaches suggest to solve this by using a collection of models, including the possibility of building composite models (i.e. A more complex model built on top of simpler ones) &lt;/p&gt;  &lt;p&gt;There are also other possibilities. Take another example of how one might leverage mathematic ideas is how you can test something as Query &amp;amp; Set calculation in Forefront Identity Manager (FIM).&amp;#160; Given a complex problem to test, the test writer needs to create an oracle or way to verify the results that the product is producing. The complexity of tests can be limited by the imagination &amp;amp; ability of the tester to validate their results.&amp;#160; Yet if you can leverage something as an oracle to verify the correctness of another item.&amp;#160; In the case of query if we can express a dataset in another form &amp;amp; translate our query against that dataset into a different form, then we can create a simple oracle.&amp;#160; So taking Query in FIM, we know that the query is given in XPath.&amp;#160; Conveniently enough XPath is typically used for querying an XML document.&amp;#160; So now if we can represent our dataset as XML, then we could use XPath with .Net as that oracle.&lt;/p&gt;  &lt;p&gt;This leverages the concept of transitivity in mathematics. Basically if A=B &amp;amp; B=C then A=C. Or in our case if it is true that .Net XPath returns a valid search result for a XML document and we represent our dataset as a XML document, then this will give us our answer\oracle. This has the advantage of us being able to issue complex tests &amp;amp; leverage existing work to validate our new work.&amp;#160; Otherwise we would have to hard code our own test inputs &amp;amp; expected outputs or create a verification algorithm which could reach the complexity of the product’s algorithm.&amp;#160; &lt;/p&gt;  &lt;p&gt;There are of course some assumptions &amp;amp; limitations here. First we are assuming that the .Net XPath of a XML Document returns the correct answer, but there may be bugs that cause it not to.&amp;#160; Secondly we may have data or queries that we are unable to represent appropriately. These are items the tester has to evaluate as they are determining their approach &amp;amp; may choose to do additional testing around the limitations of their approach.&lt;/p&gt;  &lt;p&gt;Now that we have Query’s oracle we can use transitivity again and use Query as an oracle for Sets.&amp;#160; Sets makes a bunch of complex calculates on the fly. As such we can build a test case generator based on some descriptive language &amp;amp; then just turn around and verify that all the Sets that are calculated on the fly are correct by walking the Set memberships &amp;amp; checking them with a simple query.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I don’t claim credit for the above solutions using in testing Query &amp;amp; Sets in FIM. These were great ideas that other testers on the team developed for dealing with testing these hard problems.&lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;As a tester you should consider not just does your feature conform to the spec that you have been given, but is the spec &amp;amp; design correct to start with.&amp;#160; This must include rationalizing it against your customer’s needs.&amp;#160; Additionally a tester should move beyond just simplistic functional testing of a complex system but how they can prove the correctness of their feature.&amp;#160; Proving correctness should move beyond static validation of 1+1=2 and more into leveraging the testers backgrounds in mathematics and other algorithmic approaches where applicable. &lt;/p&gt;  &lt;p&gt;Ultimately when developing your test strategy here are a couple questions you should strive to answer:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Is this the right feature for my customer?&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;To be right it must include solving a customer problem &amp;amp; delivered in a way that they can consume it.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;How am I proving that the feature is functionally correct?&lt;/li&gt;    &lt;li&gt;What are the limitations &amp;amp; assumptions of my approach?&lt;/li&gt;    &lt;li&gt;Am I testing my feature in a way to cover how my customers expect to use it?&lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10195404" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>Pasting Code</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/05/09/pasting-code.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/05/09/pasting-code.aspx</id><published>2011-05-09T16:19:00Z</published><updated>2011-05-09T16:19:00Z</updated><content type="html">&lt;p&gt;I have been looking around for a bit for a way to paste code for blog posts.&amp;#160; My requirements were pretty simple:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Able to paste code from blog &lt;/strong&gt;- such that readers could copy &amp;amp; paste code into their own editor&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Syntax highlighting – &lt;/strong&gt;Syntax highlight just makes things easier to read&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Minimize scrollbars – &lt;/strong&gt;Avoid requiring scrollbars to scroll through the code&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;As such, I have checked out several &amp;amp; the one I found to work the best so far is the &lt;a href="http://plugins.live.com/writer/detail/paste-as-visual-studio-code"&gt;Paste As Visual Studio Code&lt;/a&gt; add-in for Live Writer.&amp;#160; Ideally, I could use something not specific to Live Writer such as &lt;a href="http://visualstudiogallery.msdn.microsoft.com/98fef791-eb65-4cdf-bf84-077b98c234cf/"&gt;Copy As HTML&lt;/a&gt; add-in for Visual Studio, but that is currently only supported for VS 2008.&lt;/p&gt;  &lt;p&gt;If you have a favorite tool for copying &amp;amp; pasting code, let me know.&amp;#160; One addition I would like is the ability to hide\show code in my blog posts to avoid cluttering it up too much.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10161188" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Code" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Code/" /></entry><entry><title>DataContract Serialization with Generics &amp; Read-only Properties</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/05/04/datacontract-serialization-with-generics-amp-read-only-properties.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/05/04/datacontract-serialization-with-generics-amp-read-only-properties.aspx</id><published>2011-05-04T22:25:25Z</published><updated>2011-05-04T22:25:25Z</updated><content type="html">&lt;p&gt;Recently I have been messing around with figuring out how to serialize some data back &amp;amp; forth between two applications.&amp;#160; The code in particular leveraged several interfaces, classes with readonly properties, &amp;amp; generics.&amp;#160; This caused a couple problems with serialization which I thought might be useful to share for others that run into a similar problem.&lt;/p&gt;  &lt;p&gt;Take for instance the following code:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:36eb7a6b-98fa-49c3-8a3e-233eea16a1ee" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background-color: #ebebeb; overflow: auto; padding: 2px 5px;"&gt;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Main()&lt;br&gt;     {&lt;br&gt;     &lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; m = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; xml = m.Serialize();&lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; m2 = &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;.Deserialize(xml);&lt;br&gt; &lt;br&gt;         &lt;span style="color:#2b91af"&gt;Debug&lt;/span&gt;.Assert(m.Value.ToString() == m2.Value.ToString());&lt;br&gt;     }&lt;br&gt; }&lt;br&gt; &lt;br&gt; [&lt;span style="color:#2b91af"&gt;Serializable&lt;/span&gt;]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color:#0000ff"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af"&gt;IComparable&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; T item;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; T Item { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; item; } }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; MyClass(T obj)&lt;br&gt;     {&lt;br&gt;         item = obj;&lt;br&gt;     }&lt;br&gt; }&lt;br&gt; &lt;br&gt; [&lt;span style="color:#2b91af"&gt;Serializable&lt;/span&gt;]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Class1(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; val)&lt;br&gt;     {&lt;br&gt;         value = val;&lt;br&gt;     }&lt;br&gt;     &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; Serialize()&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#2b91af"&gt;XmlSerializer&lt;/span&gt; serializer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;XmlSerializer&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#2b91af"&gt;StringWriter&lt;/span&gt; writer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringWriter&lt;/span&gt;();&lt;br&gt;         serializer.Serialize(writer, &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;);&lt;br&gt;         writer.Close();&lt;br&gt;         &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; writer.ToString();&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; Deserialize(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; xml)&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#2b91af"&gt;XmlSerializer&lt;/span&gt; serializer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;XmlSerializer&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#2b91af"&gt;StringReader&lt;/span&gt; sr = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringReader&lt;/span&gt;(xml);&lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; item = (&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;)serializer.Deserialize(sr);&lt;br&gt;         &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; item;&lt;br&gt;     }&lt;br&gt;     &lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; value;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; Value { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; value; } }&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;h2&gt;Parameterless Constructor&lt;/h2&gt;  &lt;p&gt;If you run this through &amp;amp; try to serialize &amp;amp; then deserialize you will run into a problem just serializing this. The first error you will hit is:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;System.InvalidOperationException was unhandled        &lt;br /&gt;&amp;#160; Message=There was an error generating the XML document.         &lt;br /&gt;&amp;#160; Source=System.Xml         &lt;br /&gt;&amp;#160; StackTrace:         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; at MyNamespace.Class1.Serialize()         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; at MyNamespace.Program.Main()         &lt;br /&gt;&amp;#160; InnerException: System.InvalidOperationException         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Message=MyNamespace.MyClass`1[System.String] cannot be serialized because it does not have a parameterless constructor.         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Source=System.Xml&lt;/font&gt;       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Xml Serialization requires you to have a parameterless constructor, so you can either add one, or switch to using WCF &lt;a href="http://msdn.microsoft.com/en-us/library/ms733127.aspx"&gt;DataContract Serialization&lt;/a&gt;. This is as simple as changing the attribute on your Classes from [Serializable] to [DataContract] and then updating your Serialize &amp;amp; Deserialize methods. This will allow you to successfully serialize &amp;amp; deserialize the objects without an exception.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7acc8282-e955-4391-9a38-5521085e2327" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background-color: #ebebeb; overflow: auto; padding: 2px 5px;"&gt;[&lt;span style="color:#2b91af"&gt;DataContract&lt;/span&gt;]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color:#0000ff"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af"&gt;IComparable&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; T item;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; T Item { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; item; } }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; MyClass(T obj)&lt;br&gt;     {&lt;br&gt;         item = obj;&lt;br&gt;     }&lt;br&gt; }&lt;br&gt; &lt;br&gt; [&lt;span style="color:#2b91af"&gt;DataContract&lt;/span&gt;]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Class1(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; val)&lt;br&gt;     {&lt;br&gt;         value = val;&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; Serialize()&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt; xml = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;br&gt;         &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt; serializer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;XmlWriter&lt;/span&gt; xw = &lt;span style="color:#2b91af"&gt;XmlWriter&lt;/span&gt;.Create(xml))&lt;br&gt;         {&lt;br&gt;             serializer.WriteObject(xw, &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;);&lt;br&gt;             xw.Flush();&lt;br&gt;             &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; xml.ToString();&lt;br&gt;         }&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; Deserialize(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; xml)&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; newItem;&lt;br&gt;         &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt; serializer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#2b91af"&gt;StringReader&lt;/span&gt; textReader = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringReader&lt;/span&gt;(xml);&lt;br&gt;         &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;XmlReader&lt;/span&gt; xr = &lt;span style="color:#2b91af"&gt;XmlReader&lt;/span&gt;.Create(textReader))&lt;br&gt;         {&lt;br&gt;             newItem = (&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;)serializer.ReadObject(xr);&lt;br&gt;         }&lt;br&gt;         &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; newItem;&lt;br&gt;     }&lt;br&gt;     &lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; value;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; Value { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; value; } }&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;h2&gt;Serializing Read-only Properties&lt;/h2&gt;  &lt;p&gt;Next you will his the Debug.Assert which was a check to ensure we are serializing the read-only property was correctly being populated &amp;amp; in this case it is not.&amp;#160; The reason being is that XmlSerialization will automatically attempt to serialize all public properties, but WCD DataSerialization does not automatically attempt to serialize any properties.&amp;#160; So you need to decorate any item you want serialized with a [DataMember] tag.&amp;#160; This is great because now for readonly properties you can just mark the underlying private data as the DataMember.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3b77fe21-97bb-44fa-9946-b1af7dca83ec" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background-color: #ebebeb; max-height: 300px; overflow: auto; padding: 2px 5px;"&gt;[&lt;span style="color:#2b91af"&gt;DataMember&lt;/span&gt;]&lt;br&gt; &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; value;&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; Value { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; value; } }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;h2&gt;Serializing Generics&lt;/h2&gt;  &lt;p&gt;The next problem you will hit is a SerializationException about not being able to Serialize the generic MyClassOfString, aka MyClass&amp;lt;string&amp;gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;System.Runtime.Serialization.SerializationException was unhandled        &lt;br /&gt;&amp;#160; Message=Type 'MyNamespace.MyClass`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' with data contract name 'MyClassOfstring:&lt;/font&gt;&lt;a href="http://schemas.datacontract.org/2004/07/MyNamespace'"&gt;&lt;font face="Consolas"&gt;http://schemas.datacontract.org/2004/07/MyNamespace'&lt;/font&gt;&lt;/a&gt;&lt;font face="Consolas"&gt; is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.        &lt;br /&gt;&amp;#160; Source=System.Runtime.Serialization&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;To resolve this you will need to use the &lt;a href="http://msdn.microsoft.com/en-us/library/ms730167.aspx"&gt;KnownType&lt;/a&gt; attribute &amp;amp; there are a couple options: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Generically implement serialization &lt;/li&gt;    &lt;li&gt;Explicitly list the known types &lt;/li&gt; &lt;/ol&gt;    &lt;h3&gt;Generic KnownType&lt;/h3&gt;  &lt;p&gt;Generic serialization is nice as the serialize since you don’t have to decorate your code&amp;#160; with the various possible classes used for your generic.&amp;#160; To implement it you add the KnownTypes attribute to your class with a string of the method name to call.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:813c3076-c8db-4031-8ae6-778e187078d7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background-color: #ebebeb; overflow: auto; padding: 2px 5px;"&gt;[&lt;span style="color:#2b91af"&gt;DataContract&lt;/span&gt;]&lt;br&gt; [&lt;span style="color:#2b91af"&gt;KnownType&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;GetTypes&amp;quot;&lt;/span&gt;)]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color:#0000ff"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af"&gt;IComparable&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; T item;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; T Item { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; item; } }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; MyClass(T obj)&lt;br&gt;     {&lt;br&gt;         item = obj;&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;[] GetTypes()&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;[] { &lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;T&amp;gt;) };&lt;br&gt;     }&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;    &lt;h3&gt;Explicit KnownType&lt;/h3&gt;  &lt;p&gt;If you do the above then you will wind up with an exception during deserialization now since Class1 does not how to deserialize MyClassOfString. As the deserializer you will need to explictly state what types you expect.&amp;#160; In this case you can do it with a single attribute on the top.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:28c13f8e-fbcc-430c-94f1-56c09ee32eaf" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background-color: #ebebeb; overflow: auto; padding: 2px 5px;"&gt;[&lt;span style="color:#2b91af"&gt;DataContract&lt;/span&gt;]&lt;br&gt;     [&lt;span style="color:#2b91af"&gt;KnownType&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;&amp;gt;))]&lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;h2&gt;Final Results&lt;/h2&gt;  &lt;p&gt;At this point the class will successfully serialize &amp;amp; deserialize fully. Due to the nature of my example, the step of using the GetTypes method is not required since I am doing both serialization &amp;amp; deserialization in Class1, but it is useful when that is not the case.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:68fe2296-f9e3-44d1-a1dd-bf79803f6bae" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background-color: #ebebeb; overflow: auto; padding: 2px 5px;"&gt;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Main()&lt;br&gt;     {&lt;br&gt;     &lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; m = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; xml = m.Serialize();&lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; m2 = &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;.Deserialize(xml);&lt;br&gt; &lt;br&gt;         &lt;span style="color:#2b91af"&gt;Debug&lt;/span&gt;.Assert(m.Value.ToString() == m2.Value.ToString());&lt;br&gt;     }&lt;br&gt; }&lt;br&gt; &lt;br&gt; [&lt;span style="color:#2b91af"&gt;DataContract&lt;/span&gt;]&lt;br&gt; [&lt;span style="color:#2b91af"&gt;KnownType&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;GetTypes&amp;quot;&lt;/span&gt;)]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color:#0000ff"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af"&gt;IComparable&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; T item;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; T Item { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; item; } }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; MyClass(T obj)&lt;br&gt;     {&lt;br&gt;         item = obj;&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;[] GetTypes()&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;[] { &lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;T&amp;gt;) };&lt;br&gt;     }&lt;br&gt; }&lt;br&gt; &lt;br&gt; [&lt;span style="color:#2b91af"&gt;DataContract&lt;/span&gt;]&lt;br&gt; [&lt;span style="color:#2b91af"&gt;KnownType&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;MyClass&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;&amp;gt;))]&lt;br&gt; &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Class1(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; val)&lt;br&gt;     {&lt;br&gt;         value = val;&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; Serialize()&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt; xml = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;br&gt;         &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt; serializer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;XmlWriter&lt;/span&gt; xw = &lt;span style="color:#2b91af"&gt;XmlWriter&lt;/span&gt;.Create(xml))&lt;br&gt;         {&lt;br&gt;             serializer.WriteObject(xw, &lt;span style="color:#0000ff"&gt;this&lt;/span&gt;);&lt;br&gt;             xw.Flush();&lt;br&gt;             &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; xml.ToString();&lt;br&gt;         }&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; Deserialize(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; xml)&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt; newItem;&lt;br&gt;         &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt; serializer = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;DataContractSerializer&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;));&lt;br&gt;         &lt;span style="color:#2b91af"&gt;StringReader&lt;/span&gt; textReader = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringReader&lt;/span&gt;(xml);&lt;br&gt;         &lt;span style="color:#0000ff"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;XmlReader&lt;/span&gt; xr = &lt;span style="color:#2b91af"&gt;XmlReader&lt;/span&gt;.Create(textReader))&lt;br&gt;         {&lt;br&gt;             newItem = (&lt;span style="color:#2b91af"&gt;Class1&lt;/span&gt;)serializer.ReadObject(xr);&lt;br&gt;         }&lt;br&gt;         &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; newItem;&lt;br&gt;     }&lt;br&gt;     &lt;br&gt;     [&lt;span style="color:#2b91af"&gt;DataMember&lt;/span&gt;]&lt;br&gt;     &lt;span style="color:#0000ff"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; value;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;object&lt;/span&gt; Value { &lt;span style="color:#0000ff"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; value; } }&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10161155" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Code" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Code/" /></entry><entry><title>Challenges in Test – Knowing your customer</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/03/22/challenges-in-test-knowing-your-customer.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/03/22/challenges-in-test-knowing-your-customer.aspx</id><published>2011-03-22T17:03:34Z</published><updated>2011-03-22T17:03:34Z</updated><content type="html">&lt;p&gt;So you know your product &amp;amp; the code, what else is there?&amp;#160; Your customer!&amp;#160; They are the ones that will be using your product to solve their real problems.&lt;/p&gt;  &lt;h2&gt;Knowing your customer&lt;/h2&gt;  &lt;p&gt;So your PM, Dev, &amp;amp; you have implemented the greatest feature.&amp;#160; Do you know what problem this is going to solve for your customer?&amp;#160; Do you know how they expect to use it?&amp;#160; If they are going to be deploying your product do you know what type of topology they will be using?&lt;/p&gt;  &lt;p&gt;A good example of this is the &lt;a href="http://articles.cnn.com/1999-09-30/tech/9909_30_mars.metric.02_1_climate-orbiter-spacecraft-team-metric-system?_s=PM:TECH"&gt;Mars Rover&lt;/a&gt; that was lost in 1999.&amp;#160; One team designed their system using English units, but the other team was actually using Metric units.&amp;#160; I bet their tester ensured the feature worked wonderfully but there was one costly assumption that was overlooked &amp;amp; after a 286 day journey the probe was burned up in the atmosphere.&lt;/p&gt;  &lt;p&gt;As a test team you will be charged with figuring out how you will be testing the product. The assumptions you make will wind up impacting your customer &amp;amp; their experience with your product.&lt;/p&gt;  &lt;h2&gt;Developer Bias – “It works on my box”&lt;/h2&gt;  &lt;p&gt;During the course of development it is easy for something I will call developer bias to set in.&amp;#160; You have been working on the product &amp;amp; seen it evolve over time. You can easily grow accustomed to issues or why something might work the way it does even though it is not intuitive to your customer. &lt;/p&gt;  &lt;p&gt;One refrain that exemplifies this is a phrase you might hear from a developer of “It works on my box.”, when you report an issue with the product.&lt;/p&gt;  &lt;p&gt;Take for example a server product which uses SQL as a datastore. During development most of the team will likely install the product all on a single box.&amp;#160; Who wants to maintain multiple machines if they don’t have to after all.&amp;#160; But customers won’t be running in that configuration &amp;amp; will likely have a SQL machine &amp;amp; run your server on a separate machine.&amp;#160; Does your product work in that topology?&amp;#160; Oh &amp;amp; how did you install your SQL server?&amp;#160; SQL server can have named instances.&amp;#160; Can you install to a named instance?&amp;#160; Does your product work when installed to a named instance?&lt;/p&gt;  &lt;h2&gt;Customer Personas – “It works great for me”&lt;/h2&gt;  &lt;p&gt;Although you may be one of the target customers for your product, are you a true representative of all your customers?&amp;#160; What does a teenager expect form your product vs. a stay-at home mom?&amp;#160; Each customer has their own unique needs &amp;amp; scenarios that they are interested in, you need to be aware of them and how you can cover them in your testing.&lt;/p&gt;  &lt;p&gt;Let’s look at something such as Kinect for Xbox 360 &amp;amp; a feature as simple as someone waving to launch the Kinect Hub.&amp;#160; Seems pretty straight forward right?&amp;#160; Interestingly enough &lt;a href="http://www.ehow.com/how_2097453_wave-a-hand.html"&gt;eHow&lt;/a&gt; even has instructions that are as simple as 1, 2, 3.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Lift your hand toward the person to whom the wave is being directed.&lt;/li&gt;    &lt;li&gt;Spread the thumb away from the other fingers of the hand and hold the rest of them together.&lt;/li&gt;    &lt;li&gt;Pivot at the elbow &amp;amp; move your hand from side to side several times&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;It all seems so simple, but do a sampling of people &amp;amp; have them wave at you.&amp;#160; You will find a large variance in how they actually wave to you.&amp;#160; Some might just slightly move their wrist, others might move their hand back &amp;amp; forth very rapidly.&amp;#160; Are kids part of your customer set?&amp;#160; They can wave even more differently with their hand almost sideways moving more up &amp;amp; down.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;But I am just a tester, isn’t PM the one that talks to customers?&amp;#160; They do, but do they understand the assumptions you are making in testing?&amp;#160; Have you used the many resources you have to find out information from your customers?&amp;#160; At Microsoft there are several avenues to get this information: &lt;a href="http://social.technet.microsoft.com/Forums/en/categories"&gt;TechNet Forums&lt;/a&gt;, Pre release programs through &lt;a href="http://connect.microsoft.com"&gt;connect.microsoft.com&lt;/a&gt;, various conferences, external user groups, internal distribution lists, &lt;a href="http://mvp.support.microsoft.com/"&gt;MVPs&lt;/a&gt;, etc.&amp;#160; Work with your team to reach out to your customers, I am sure they will be more than happy to help you build a great product that will help solve their problems.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10144429" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>Challenges in Test – Knowing the code &amp; sometimes ignoring it</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/03/14/challenges-in-test-knowing-the-code-amp-sometimes-ignoring-it.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/03/14/challenges-in-test-knowing-the-code-amp-sometimes-ignoring-it.aspx</id><published>2011-03-14T18:54:33Z</published><updated>2011-03-14T18:54:33Z</updated><content type="html">&lt;p&gt;A tester just needs to master the art of understanding their product &amp;amp; then file bugs based on their findings right?&amp;#160; Wishful thinking! You better have the technical understanding of the code your developer is writing if you intend to properly test it.&lt;/p&gt;  &lt;h3&gt;Knowing the code &amp;amp; sometimes ignoring it&lt;/h3&gt;  &lt;p&gt;So understanding how your product works is a good start, but as mentioned earlier a tester needs to have breath &amp;amp; be able to go deep.&amp;#160; Part of that depth is understanding the code behind their product.&lt;/p&gt;  &lt;p&gt;There are a couple examples of why you will need to have this depth: &lt;ol&gt;   &lt;li&gt;Designing your automation frameworks &lt;/li&gt;    &lt;li&gt;Debugging your product &lt;/li&gt; &lt;/ol&gt; &lt;/p&gt;    &lt;h3&gt;Designing your automation frameworks&lt;/h3&gt;  &lt;p&gt;While development is designing &amp;amp; implementing the product you will need to figure out how you are going to test the product, while also being involved in the product design itself. Understanding how the code is implemented is going to help with designing your automation.&amp;#160; For example if you have a typical 3 tier application, how is the UI talking to the middle tier?&amp;#160; Are those APIs public?&amp;#160; Do they give you what you need to write automation?&amp;#160; How can you extend them for what you need?&amp;#160; Is there a better way to design the product to make it more testable?&lt;/p&gt;  &lt;h3&gt;Debugging your product&lt;/h3&gt;  &lt;p&gt;Part of being a tester means you are one of the first customers of your product.&amp;#160; You are developing tests against a moving target as developers are implementing new features &amp;amp; making changes.&amp;#160; One day a test may be passing &amp;amp; the next it fails. Is it a test issue or a product issue that is causing it to fail?&amp;#160; Your product may not have much manageability yet so there are no good events in the log that you can use.&amp;#160; The only thing left is being ready to strap a debugger to the product &amp;amp; step through the code to understand where things are going wrong.&amp;#160; If it is a product change that broke your tests you may need to understand how to update your tests to work again. Oh &amp;amp; when you are done, you’ll want to file a bug to improve the manageability of the product. You are doing something a customer would be doing and they won’t be able to strap a debugger to it. You’ll want enough information in the logs that ideally a customer could resolve the problem.&lt;/p&gt;  &lt;h3&gt;Ignoring the code&lt;/h3&gt;  &lt;p&gt;So you now know your product’s code inside &amp;amp; out.&amp;#160; You are able to debug &amp;amp; even provide your developer with proposed fixes.&amp;#160; You might even have helped write some of the features in your product.&amp;#160; Now forget everything you know about the code.&lt;/p&gt;  &lt;p&gt;What?! You might say, I worked so hard to figure it all out. Yep &amp;amp; if you are not careful you may make some of the same assumptions that the developer did when they wrote the feature.&amp;#160; That means you run the risk of designing your test cases around the code &amp;amp; missing some juicy bugs.&amp;#160; You need to step back &amp;amp; challenge any and all assumptions that you might be making.&lt;/p&gt;  &lt;p&gt;Along with challenging the assumptions made in the code, don’t forget to challenge &amp;amp; look at everything from the customer’s eyes.&amp;#160; Does the instructions we provide in the UI make sense to the end user or are we using 3 different terms to reference something because it’s name has changed over the course of development.&amp;#160; One powerful tool here is to swap features with another tester &amp;amp; try each other’s area out.&amp;#160; If they can’t figure out how to use your feature, don’t dismiss it as they are new &amp;amp; don’t understand the product enough.&amp;#160; They are likely stumbling over some areas that a real customer would &amp;amp; since you are neck deep in your feature &amp;amp; code, of course how to use it is obvious to you.&amp;#160; It likely won’t be obvious to your customer, so look for how you can improve that also.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10140884" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>Challenges in Test – Knowing Your Product</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/03/07/challenges-in-test-knowing-your-product.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/03/07/challenges-in-test-knowing-your-product.aspx</id><published>2011-03-07T20:01:45Z</published><updated>2011-03-07T20:01:45Z</updated><content type="html">&lt;p&gt;So you accepted the challenge of being a tester, got your machine setup with the latest version of the code, installed your product, and your manager has given you a hot new feature to test.&amp;#160; It seems so easy. You think you can just focus on that feature, but you better think again.&lt;/p&gt;  &lt;h3&gt;Problem introduction&lt;/h3&gt;  &lt;p&gt;Take for example a feature called Query in Forefront Identity Manager (&lt;a href="http://www.microsoft.com/fim"&gt;FIM&lt;/a&gt;).&amp;#160; You start out on the feature &amp;amp; learn that it takes a query in the form of XPath &amp;amp; then returns the results of that query.&amp;#160; You have some standard set of operators that you expect to find such as =, &amp;gt;, &amp;lt;, and or, not along with some functions like starts-with, ends-with, dateTime, etc.&amp;#160; The specific operators are not the important component here, but if you are so inclined you can view the details &lt;a href="http://msdn.microsoft.com/en-us/library/ee652287.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Knowing your product&lt;/h3&gt;  &lt;p&gt;As a tester you might be prone to take this problem &amp;amp; run with it to create a bunch of test cases around the various combinations of operators &amp;amp; data values.&amp;#160; Initially you find several bugs &amp;amp; you are keeping your developer pretty busy.&amp;#160; You even think about some of the various buckets of tests like boundary, localization, globalization, performance, stress, security, etc.&amp;#160; Are you now ready to declare your testing complete?&lt;/p&gt;  &lt;p&gt;One of the things a good tester needs to do is fully understand the problem space they are working in &amp;amp; also how it may be changing over the course of the product lifecycle.&amp;#160; For example in this case the design of FIM leverages the XPath filters of Query in a feature called Sets.&amp;#160; These Sets are then used in another feature called Management Policy Rules (MPRs). MPRs are core to the product in determining both if you are allowed to do something.&amp;#160; These MPRs also can trigger another feature Workflows which can then perform various actions in the product.&lt;/p&gt;  &lt;p&gt;Yikes! You have just gone from a tester of a single feature to something that is deeply involved in 4 different features which are ultimately core to your product.&amp;#160; And note that these features are likely covered by different developers, testers, &amp;amp; PMs.&amp;#160; So you may not be responsible for these other feature areas, but you will need to know &amp;amp; understand how your feature interacts with them.&amp;#160; Even better if you are in active development the design may be rapidly changing as your team reacts to requests in future milestones, so what you knew yesterday may not be true today.&lt;/p&gt;  &lt;h3&gt;What’s the Impact?&lt;/h3&gt;  &lt;p&gt;With knowing your product you can now start to evaluate the level of coverage you have &amp;amp; where you might want to add more coverage.&amp;#160; One example of how you will need to use this knowledge is justifying the impact of a bug.&amp;#160; Let’s say you found a bug in Query which when searching for “Smith” exclusively returns all people with the last name of Smith, but also Smithers are returned at the end.&amp;#160; It is the day before you ship the product &amp;amp; the question will invariably be asked: “Can this bug wait until the next patch, service pack, or release?”&amp;#160; Or put more simply, “What bad things will happen if we don’t fix this right now?”&lt;/p&gt;  &lt;p&gt;Now your knowledge of the product is key. When the feature was originally designed it was just used for searching a list of users or groups, so returning a few extra users would be no big deal right?&amp;#160; I mean who would page through the list of all Smiths in a phone book to see that there are a few extra results at the end?&amp;#160; But wait remember from above what you learned about the product &amp;amp; understand where else your feature gets used which is granting rights in the system &amp;amp; kicking off workflows.&amp;#160; So now this bug has increased in importance since you would potentially be granting rights to users &amp;amp; starting processes which are not intended.&lt;/p&gt;  &lt;p&gt;So as you can see as a tester you better know your product almost as good as anyone else to help ensure you have the appropriate level of coverage &amp;amp; you don’t get the luxury of just knowing a single feature area but need both depth &amp;amp; breath across features.&amp;#160; If you want to really know your product then no better way than to test it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10137775" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>Challenges in Test – Introduction</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2011/02/28/challenges-in-test-introduction.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2011/02/28/challenges-in-test-introduction.aspx</id><published>2011-02-28T19:53:00Z</published><updated>2011-02-28T19:53:00Z</updated><content type="html">&lt;p&gt;This time of year at Microsoft is when we have what we call our Mid Year Career Discussion (MYCD). Note that this is not a Mid Year Review, but instead a Career Discussion as the intent is for you to specifically reflect on &amp;amp; discuss your career development. As such I was reflecting on a topic that I have seen discussed externally. What is an SDET &amp;amp; why would I want to be one?&lt;/p&gt;
&lt;p&gt;This series of posts is not by any means authoritative, but instead meant to give you some food for thought about the types of challenges you can expect to face. So if you are considering a position as a SDET with Microsoft &amp;amp; wondering what you might be able to expect, or just a customer curious about the role of a SDET at Microsoft I hope you find the coming posts useful &amp;amp; informative.&lt;/p&gt;
&lt;p&gt;In the following series of posts, I will cover the following things that test must do to help develop a successful product.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;a title="http://blogs.msdn.com/b/darrylru/archive/2011/03/07/challenges-in-test-knowing-your-product.aspx" href="http://blogs.msdn.com/b/darrylru/archive/2011/03/07/challenges-in-test-knowing-your-product.aspx"&gt;Know your product&lt;/a&gt; &amp;ndash; &lt;/strong&gt;You may be assigned a couple feature areas, but many times just knowing your own area is not enough to ensure good test coverage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a title="http://blogs.msdn.com/b/darrylru/archive/2011/03/14/challenges-in-test-knowing-the-code-amp-sometimes-ignoring-it.aspx" href="http://blogs.msdn.com/b/darrylru/archive/2011/03/14/challenges-in-test-knowing-the-code-amp-sometimes-ignoring-it.aspx"&gt;Knowing the code &amp;amp; sometimes ignoring it&lt;/a&gt; &amp;ndash; &lt;/strong&gt;Improving test coverage is about knowing how the product code works &amp;amp; at other times ignoring how it works.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a title="http://blogs.msdn.com/b/darrylru/archive/2011/03/22/challenges-in-test-knowing-your-customer.aspx" href="http://blogs.msdn.com/b/darrylru/archive/2011/03/22/challenges-in-test-knowing-your-customer.aspx"&gt;Knowing your customer&lt;/a&gt; &amp;ndash; &lt;/strong&gt;Your team has developed a great new whiz bang product, but do you understand the problems that it will solve for your customer &amp;amp; how they will use it?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a title="http://blogs.msdn.com/b/darrylru/archive/2011/08/15/challenges-in-test-proving-your-feature.aspx" href="http://blogs.msdn.com/b/darrylru/archive/2011/08/15/challenges-in-test-proving-your-feature.aspx"&gt;Proving your feature&lt;/a&gt;&lt;/strong&gt; &amp;ndash; It is one thing to test your feature, but how can you prove it is correct?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a title="http://blogs.msdn.com/b/darrylru/archive/2011/08/22/challenges-in-test-impeccable-infrastructure.aspx" href="http://blogs.msdn.com/b/darrylru/archive/2011/08/22/challenges-in-test-impeccable-infrastructure.aspx"&gt;Impeccable Infrastructure&lt;/a&gt; &amp;ndash; &lt;/strong&gt;Your tests are only as good &amp;amp; useful as the infrastructure that you use to run them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a title="http://blogs.msdn.com/b/darrylru/archive/2011/08/30/challenges-in-test-ensuring-testability-influencing-design.aspx" href="http://blogs.msdn.com/b/darrylru/archive/2011/08/30/challenges-in-test-ensuring-testability-influencing-design.aspx"&gt;Ensuring Testability &amp;amp; Influencing Design&lt;/a&gt; &amp;ndash; &lt;/strong&gt;Your team is planning the next big thing, using some awesome new technology, but do you have any idea on how you can actually test it?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So feel free to follow along &amp;amp; let me know if this information is helpful to you or there are other questions you have.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10135066" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Test" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Test/" /><category term="SDET" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/SDET/" /></entry><entry><title>FIM Service Database size data point</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2010/02/04/fim-service-database-size-data-point.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2010/02/04/fim-service-database-size-data-point.aspx</id><published>2010-02-04T10:00:00Z</published><updated>2010-02-04T10:00:00Z</updated><content type="html">&lt;p&gt;It is an exciting time as customers plan &amp;amp; start to roll out their FIM 2010 deployments.&amp;#160; One of the initial questions asked is how much hardware do I need?&amp;#160; The team is working on providing some more documentation to help answer these types of questions, but for now I will share with you a data point that may help.&lt;/p&gt;  &lt;p&gt;In an earlier &lt;a href="http://blogs.msdn.com/darrylru/archive/2009/10/09/fim-2010-performance-testing-hardware.aspx"&gt;post&lt;/a&gt; I included the hardware we are using to test performance in our lab. In this post I would like to give you a data point around scale &amp;amp; size of a given db used on this hardware.&lt;/p&gt;  &lt;h3&gt;Scale&lt;/h3&gt;  &lt;p&gt;First is a breakdown of the top objects in one of our test databases.&amp;#160; This should help give you a reference point for thinking about if your deployment is bigger or smaller than what this db represents.&amp;#160; Size will additionally vary based on the configuration, number of attributes, etc that are specific to your deployment.&lt;/p&gt;  &lt;blockquote&gt;   &lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none; mso-border-alt: solid #7ba0cd 1.0pt; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" width="340"&gt;&lt;tbody&gt;       &lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba0cd 1pt solid; border-right: medium none; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: white; font-size: 12pt; mso-themecolor: background1; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Object Type &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba0cd 1pt solid; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: white; font-size: 12pt; mso-themecolor: background1; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Count &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 1"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Requests &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;9 million &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 2"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Expected Rules Entries &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;3 million &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 3"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Workflow Instances &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;1.5 million &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 4"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Gate Registrations &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;550k &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 5"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Groups &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;450k &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;People &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="165"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;200k &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;   &lt;strong&gt;Note&lt;/strong&gt;: The requests &amp;amp; workflow instance counts are higher than I would expect in a deployment as I have not pruned this database down for completed objects. &lt;/blockquote&gt;  &lt;h3&gt;Data file size&lt;/h3&gt;  &lt;blockquote&gt;   &lt;table style="border-bottom: medium none; border-left: medium none; width: 198.75pt; border-collapse: collapse; border-top: medium none; border-right: medium none; mso-border-alt: solid #7ba0cd 1.0pt; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" width="265"&gt;&lt;tbody&gt;       &lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba0cd 1pt solid; border-right: medium none; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: white; font-size: 12pt; mso-themecolor: background1; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;SQL File&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba0cd 1pt solid; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="90"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: white; font-size: 12pt; mso-themecolor: background1; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;Size&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 1"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;FIMService SQL Data (mdf)&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; background: #d3dfee; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="90"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;450 GB &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"&gt;         &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: #7ba0cd 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 130.1pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191" valign="top" width="173"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;FIMService SQL Log (ldf)&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-bottom: #7ba0cd 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 67.5pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba0cd 1pt solid; padding-top: 0in; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba0cd 1.0pt; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="90"&gt;           &lt;p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;#39;Times New Roman&amp;#39;"&gt;80 GB&amp;#160; &lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;   &lt;strong&gt;Note:&lt;/strong&gt;The log file of course will grow over time &amp;amp; need to maintained via regular transaction backups. &lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9957357" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Performance" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Performance/" /><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>Extending FIM Timeouts</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2010/02/02/extending-fim-timeouts.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2010/02/02/extending-fim-timeouts.aspx</id><published>2010-02-02T10:20:00Z</published><updated>2010-02-02T10:20:00Z</updated><content type="html">&lt;p&gt;When building out your deployment there may be cases where you want to extend the default timeouts used in the system.&amp;#160; A key scenario of this might be if you create a separate Administrators portal for your FIM Admins.&amp;#160; This could be used for running large reporting queries or making configuration changes like adding\removing large sets.&lt;/p&gt;  &lt;p&gt;If you find that the operation you are attempting to complete takes more than 60s then to resolve this you will need to extend the various timeouts in the system.&amp;#160; Below is a breakdown of the various timeouts that you can configure in the system.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Configuration File Locations&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Sync &lt;/strong&gt;- %ProgramFiles%\Microsoft Forefront Identity Manager\2010\Synchronization Service\Bin\miisserver.exe.config &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Web Service &lt;/strong&gt;- %ProgramFiles%\Microsoft Forefront Identity Manager\2010\Service\Microsoft.ResourceManagement.Service.exe.config &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Password Client &lt;/strong&gt;- %ProgramFiles%\Microsoft Forefront Identity Manager\2010\Password Reset Client Service\PwdMgmtProxy.exe.config &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Portal&lt;/strong&gt; - C:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Timeout Attributes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;dataReadTimeoutInSeconds &lt;/strong&gt;– The read timeout used in SQL connections by the Web Service &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;dataWriteTimoutInSeconds &lt;/strong&gt;– The write timeout used in SQL connections by the Web Service &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;timeoutInMilliseconds &lt;/strong&gt;– The timeout used by our Web Service client when communicating witghg the Web Service &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Steps&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Open the configuration file &lt;/strong&gt;(see above for configuration file locations) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Extend the SQL timeouts&lt;/strong&gt; – This only applies to the Web Service configuration file       &lt;ul&gt;       &lt;li&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;lt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;resourceManagementService&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;externalHostName&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;MySERVER&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;dataReadTimeoutInSeconds&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;300&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;dataWriteTimeoutInSeconds&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;300&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; /&amp;gt;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Extend the Client timeouts&lt;/strong&gt; – This applies to the Portal. Password Client, &amp;amp; Sync Client       &lt;ul&gt;       &lt;li&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;resourceManagementClient&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;resourceManagementServiceBaseAddress&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;MySERVER&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;timeoutInMilliseconds&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;300000&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; /&amp;gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Restart the service&lt;/strong&gt; – Net stop &amp;amp; Net Start the service for each server that you modified the configuration for (FIMService, FIMSynchronizationService, &amp;amp; W3SVC) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: These timeouts can be different on different client &amp;amp; webservers.&amp;#160; So for instance in my &lt;a href="http://blogs.msdn.com/darrylru/archive/2009/11/23/service-partitions-multiple-middle-tiers-request-workflow-processing.aspx"&gt;previous post&lt;/a&gt; I may only want to extend the timeout for my Admin Portal which Admins &amp;amp; Sync use.&amp;#160; Then I would only modify it on FIMAdminPortal.contoso.com&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt;: If you find yourself extending timeouts significantly you may find that the UI will still timeout, but your operation will still be performed.&amp;#160; In this case there is a timeout from ASP.Net which is causing the UI to timeout.&amp;#160; This is not required, but will prevent the UI from displaying an error.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open your web.config &lt;/li&gt;    &lt;li&gt;Locate the httpRuntime node &lt;/li&gt;    &lt;li&gt;Add the executionTimeout attribute (Default is 110 seconds)      &lt;ul&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;httpRuntime&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;maxRequestLength&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;51200&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;executionTimeout&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;300&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; /&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/ul&gt;   &lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9956760" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 RC1 – Update 3 Available</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2010/02/01/fim-2010-rc1-update-3-available.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2010/02/01/fim-2010-rc1-update-3-available.aspx</id><published>2010-02-01T08:02:56Z</published><updated>2010-02-01T08:02:56Z</updated><content type="html">&lt;p&gt;The latest update &amp;amp; last one prior to RTM has been posted to &lt;a href="https://connect.microsoft.com/site433/Downloads"&gt;connect&lt;/a&gt;.&amp;#160; &lt;/p&gt;  A few highlights from the update include: &lt;ul&gt;   &lt;li&gt;MPRs now have a MPR Type of being Set Transition or Request based &lt;/li&gt;    &lt;li&gt;Support for SQL Server Failover Clusters &lt;/li&gt;    &lt;li&gt;Updates to allow taking database backups with FIMService running &lt;/li&gt;    &lt;li&gt;Improved error details in the FIM MA from the web service &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9956188" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 RC1 - Update 2 Available</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/12/09/fim-2010-rc1-update-2-available.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/12/09/fim-2010-rc1-update-2-available.aspx</id><published>2009-12-09T23:23:54Z</published><updated>2009-12-09T23:23:54Z</updated><content type="html">&lt;p&gt;You can find the latest update for FIM 2010 RC1 making it’s way out via Microsoft Update now.&amp;#160; There are many more fixes included in this update such as improvements to Sets.&lt;/p&gt;  &lt;p&gt;Install it on your systems &amp;amp; try it out.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://support.microsoft.com/KB/977312"&gt;KB Article #977312&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ea8312ae-f95c-4980-b8dd-9ffd027a7dc2&amp;amp;displaylang=en"&gt;Release Notes&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://catalog.update.microsoft.com/v7/site/Search.aspx?q=forefront%20identity%20manager."&gt;Packages on Microsoft Update Catalog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9934882" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>Configuring FIM Client with Multiple Servers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/12/06/configuring-fim-client-with-multiple-servers.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/12/06/configuring-fim-client-with-multiple-servers.aspx</id><published>2009-12-06T20:04:00Z</published><updated>2009-12-06T20:04:00Z</updated><content type="html">&lt;P&gt;In my &lt;A href="http://blogs.msdn.com/darrylru/archive/2009/11/23/service-partitions-multiple-middle-tiers-request-workflow-processing.aspx" mce_href="http://blogs.msdn.com/darrylru/archive/2009/11/23/service-partitions-multiple-middle-tiers-request-workflow-processing.aspx"&gt;previous post&lt;/A&gt;, I covered Server Partitions which showed how to setup multiple servers in your topology.&amp;nbsp; Once you have your servers setup, you will need to ensure your clients are pointed to the appropriate servers.&lt;/P&gt;
&lt;P&gt;Below is the topology that I discussed for reference.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;CENTER&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_thumb.png" width=404 height=305 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_thumb.png"&gt;&lt;/A&gt; &lt;/CENTER&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this topology we want to configure our End user actions from the Client PC to use the following Service Partitions:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;FIMPassword.contoso.com – for all password reset &amp;amp; registration Requests &lt;/LI&gt;
&lt;LI&gt;FIMPortal.contoso.com – for all portal activities &amp;amp; Outlook integration Requests &lt;/LI&gt;&lt;/OL&gt;
&lt;H4&gt;Configuration&lt;/H4&gt;
&lt;P&gt;When installing the client you will want to do the following:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Configure the Outlook plug-in&lt;/STRONG&gt; to use the User Portal “FIMPortal” &amp;amp; send mails to the mail account that is monitored by the FIMPortal service. &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image4_1.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image4_1.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image4_thumb_1.png" width=404 height=295 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image4_thumb_1.png"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Configure the Password Client&lt;/STRONG&gt; to the “FIMPassword” web service which is the location where your password reset requests will be processed. &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image10.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image10.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image10_thumb.png" width=404 height=294 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image10_thumb.png"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Configure SiteLock for the ActiveX controls&lt;/STRONG&gt; &lt;BR&gt;As part of the security for our ActiveX control you need to specify the sites you want to SiteLock the control for.&amp;nbsp; This means this control can only be used by these sites. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;In my above topology, the portal is not installed on FIMPassword, but only on FIMPortal for End Users so I will use that for SiteLock.&amp;nbsp; This has an added implication of now Password Reset\Registration from my client machines (i.e. Windows Login) will go through FIMPassword, but the user could also initiate a password registration\reset attempt via the portal using FIMPortal. &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_11.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_11.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_thumb_2.png" width=404 height=294 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/image_thumb_2.png"&gt;&lt;/A&gt; &lt;BR&gt;If you are installing on a machine with IE7 installed then you will get a slightly different dialog. This will allow you to have the portal automatically added to Trusted Sites. &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image002 border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/clip_image002_thumb.jpg" width=404 height=289 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/ConfiguringFIMClientwithMultipleServers_123F/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;&lt;/OL&gt;
&lt;UL&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;This configuration only tells the client which web servers to use &amp;amp; does not prevent an end-user from accessing the portal or web services on different servers.&amp;nbsp; If you want to prevent Requests from end-users to your administration instance, then you will need to do additional configuration to only allow specific users or IP addresses to make Requests. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9933191" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>Service Partitions - Multiple Middle Tiers, Request &amp; Workflow Processing</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/11/23/service-partitions-multiple-middle-tiers-request-workflow-processing.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/11/23/service-partitions-multiple-middle-tiers-request-workflow-processing.aspx</id><published>2009-11-23T06:38:00Z</published><updated>2009-11-23T06:38:00Z</updated><content type="html">&lt;P&gt;One of the updates found in FIM 2010 RC1 Update 1 as &lt;A href="http://www.ilmbestpractices.com/blog/2009/11/update-to-fim-rc1.html" mce_href="http://www.ilmbestpractices.com/blog/2009/11/update-to-fim-rc1.html"&gt;David points out&lt;/A&gt; is the ability to ensure Requests and Workflows (WF) created on a specific FIM Service Partition are executed only on the same FIM Service Partition that it was created on.&amp;nbsp; FIM Service Partitions only matter if you run 2 or more FIM Services that are connected to the same FIM Service DB.&lt;/P&gt;
&lt;H3&gt;Background&lt;/H3&gt;
&lt;P&gt;To give you some context on this change, it is important to understand some background information about how Request &amp;amp; WF Host works in RC1.&lt;/P&gt;
&lt;P&gt;Requests come into our system via the web service and are then handled internally via the Request Processor, if there are any Workflows generated, they are added to a WF queue.&amp;nbsp; This means we operate on a polite first come, first served basis.&lt;/P&gt;
&lt;P&gt;This is fine for end users, but when you account for administrative tasks like sync or run on policy update, which can generate hundreds of thousands of Requests, then your end user Request with its associated Workflow(s) could be at the end of a very long line before its Workflows execute.&amp;nbsp; You wouldn’t want an end user trying to create a distribution group waiting behind 100k WFs kicked off from an export that you just finished from Sync.&lt;/P&gt;
&lt;H3&gt;Solution&lt;/H3&gt;
&lt;P&gt;The solution is providing the ability to setup separate middle tiers where one or more can process sync\admin Requests &amp;amp; the other can handle your end user Requests and WFs&lt;/P&gt;
&lt;P&gt;In RC1 this was possible as each Web Service has it’s own WF queue and puts WFs it generates into it’s own queue.&lt;/P&gt;
&lt;P&gt;The problem in RC1 was that when a FIMService starts it can resume any Request or WF that was previously persisted to disk (cases 1-4 below).&amp;nbsp; Therefore a Request or WF from the “Admin” portal can be resumed by the “User” portal and vice versa.&amp;nbsp; At this point you no longer have control of your queue size and can’t protect your “User” Requests from being queued up behind Admin Requests.&lt;/P&gt;
&lt;P&gt;Requests and WFs save their execution state in the following cases:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Delay Activity &lt;/STRONG&gt;– If the Workflow has a delay activity it persists its state to the FIMService DB while waiting for the delay to expire &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Service Stopping &lt;/STRONG&gt;– When the FIMService is stopped, incomplete Workflows are unloaded &amp;amp; persisted to the FIMService DB &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Request Processing &lt;/STRONG&gt;- Requests save their current state to the FIMService DB as they move through the processing pipeline &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Action WF Policy Enforcement &lt;/STRONG&gt;– Some Action WF policy enforcement is executed asynchronously and persists the Request and\or WF to the FIMService DB which get resumed by a FIM Service &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;We resolved this by introducing (in RC1 Update 1) the concept of Service Partitions.&amp;nbsp; A Service Partition is just a unique way of identifying one or more servers that will share the processing of Requests and WFs in the system.&lt;/P&gt;
&lt;CENTER&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_12.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_2.png" width=429 height=324 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;&lt;/CENTER&gt;
&lt;P&gt;In the above diagram I have the following Service Partitions created.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;FIMPortal.Contoso.com &lt;/STRONG&gt;– Single Web Service instance for handing end user portal Requests &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;FIMPassword.Contoso.com&lt;/STRONG&gt; – NLB Web Services for handling password registration\reset Requests &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;FIMAdminPortal.Contoso.com&lt;/STRONG&gt; – For handling Sync &amp;amp; Admin Requests &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;There is also an additional consideration of which of these servers do you want to process mails from Exchange &amp;amp; generate Requests.&amp;nbsp; These servers will need to have polling enabled, which will be shown in the next section.&lt;/P&gt;
&lt;H3&gt;Steps to Configure&lt;/H3&gt;
&lt;P&gt;Configuration of multiple middle tiers in your environment is pretty straight forward. Here are the steps to setup the above topology. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Install FIM Service &amp;amp; Portal on your Admin portal environment &lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;If you don’t want this service processing Requests made through Outlook to Exchange then ensure the polling checkbox is unchecked. &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_14.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_5.png" width=454 height=327 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Set the FIM Service Server address (aka externalHostname) to be the FQDN for your Admin web service (i.e. FIMAdminPortal.Contoso.com) &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_11.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_11.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_4.png" width=454 height=327 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_4.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Configure the FIM MA&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Set the FIM MA to point to the FQDN for the WS of the admin portal&lt;STRONG&gt; &lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_10.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_3.png" width=454 height=338 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Install FIM Service &amp;amp; Portal for your End User Portal &lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Setup this service to process mails from Exchange (assuming you are using Exchange 2007) &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_1.png" width=454 height=327 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Set which email account you want this service to process mails from &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_18.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_7.png" width=454 height=326 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb_7.png"&gt;&lt;/A&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: Each Service Partition that has polling enabled should have it’s own email account to ensure it only processes mails from it’s own account &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Set the FIM Service Server address (aka externalHostname) to be the FQDN for your “User” web service (i.e. FIMPortal.contoso.com) &lt;/LI&gt;
&lt;LI&gt;For this &amp;amp; every other instance that will use the same database, choose to reuse the database. &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px auto 10px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb.png" width=454 height=325 mce_src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/SettingupMultipleMiddleTiers_B54B/image_thumb.png"&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Install FIM Service &amp;amp; Portal on your Password Web service machines &lt;/STRONG&gt;(You can just install the FIM Service if you don’t need the portal) 
&lt;UL&gt;
&lt;LI&gt;Set the FIM Service Server address (aka externalHostname) to be the FQDN for your “Password” web service (i.e. FIMPassword.Contoso.com) &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Now what you have is a guarantee that FIMPortal will only ever execute Requests &amp;amp; WFs that were created by end users in the Portal, FIMAdminPortal will only ever execute ones from it or Sync, &amp;amp; FIMPassword will allow Requests &amp;amp; WF processing to execute on either of the 2 NLB Password boxes.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;: To fully take advantage of this topology you will need to also need to configure your clients appropriately to send password reset Requests, Outlook plug-in mails, &amp;amp; Portal links to the right servers.&amp;nbsp; I will cover that in my next post.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927123" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 RC1 – Update 1 Available</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/11/19/fim-2010-rc1-update-1-available.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/11/19/fim-2010-rc1-update-1-available.aspx</id><published>2009-11-19T02:49:00Z</published><updated>2009-11-19T02:49:00Z</updated><content type="html">&lt;P&gt;You can now find FIM 2010 RC1 Update1 making its way out via Microsoft update.&amp;nbsp; This is a cumulative release with many fixes across the product.&amp;nbsp; Of particular interest from a performance perspective is some changes we have made to significantly improve performance around the password reset scenario.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I highly recommend you pick up RC1 Update 1 and try it out.&lt;/P&gt;
&lt;H4&gt;Links&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/kb/976465" mce_href="http://support.microsoft.com/kb/976465"&gt;KB Article #976465&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=%20d806d4c4-2867-433b-9c9f-2715e274a787&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=%20d806d4c4-2867-433b-9c9f-2715e274a787&amp;amp;displaylang=en"&gt;Release Notes &amp;amp; Install Instructions&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://catalog.update.microsoft.com/v7/site/Search.aspx?q=forefront%20identity%20manager."&gt;Packages on Microsoft Update Catalog&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9925027" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 Performance Testing – Scale &amp; Load</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/10/22/fim-2010-performance-testing-scale-load.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/10/22/fim-2010-performance-testing-scale-load.aspx</id><published>2009-10-22T15:33:49Z</published><updated>2009-10-22T15:33:49Z</updated><content type="html">&lt;h3&gt;&lt;strong&gt;Scale&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;For the discussion of scale the first question is the number of users &amp;amp; groups you expect to be in your system.&amp;#160; There are fairly easy numbers to determine with a few queries of Active Directory or whatever is your directory store of choice.&amp;#160; As many companies currently do not allow end users to manage groups, you will need to consider first if you are going to allow your users to create &amp;amp; manage groups.&amp;#160; Then if you do, how that will impact your scale as the number of groups may grow.&amp;#160; In our case we are using 150k+ Users &amp;amp; 400k+ groups in our testing.&lt;/p&gt;  &lt;p&gt;The next portion to consider is how your configuration will impact your scale.&amp;#160; Are you going to deploy calculated groups?&amp;#160; If so what types &amp;amp; how many will you use?&amp;#160; Are you going to manage custom object types in your environment like computers?&lt;/p&gt;  &lt;p&gt;Last there is some impact from your policy objects on the scale of your deployment.&amp;#160; In a cross forest environment you may be provisioning FSPs into Sync.&amp;#160; Using codeless will increase the number of EREs &amp;amp; DREs in your system which can be roughly estimated based on the number of SyncRules for the object type * the count of that object type.&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Load&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Now that you have your system configured, gotten it populated you are ready to start rolling out your deployment.&amp;#160; How are you going to know that you have the right set of hardware in place to sustain your deployment?&lt;/p&gt;  &lt;p&gt;In our case we started with estimating the expected usage for a given number of users for many of the key operations in the system.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;How often do we expect a request to join or leave a group? &lt;/li&gt;    &lt;li&gt;How often do we expect a user to create a static or dynamic group?&amp;#160; &lt;/li&gt;    &lt;li&gt;What is the breakdown of security group usage vs. distribution list usage? &lt;/li&gt;    &lt;li&gt;How often do we expect a request to register for password reset or reset a password? &lt;/li&gt;    &lt;li&gt;How many computers have the FIM client installed? – The client will periodically do a check for if registration is required on logon. &lt;/li&gt;    &lt;li&gt;Will users primarily use the Portal or the Outlook client for group management operations? – This will determine how much work is done by the Mail Listener as it polls Exchange &amp;amp; processes mails &lt;/li&gt;    &lt;li&gt;What is the usage pattern of your company?&amp;#160; Do you expect peaks in the morning when users log in? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After estimating each of these, some based on hard data we have from another tool which was deployed &amp;amp; some we had to estimate, we were able to create what we call a load profile.&lt;/p&gt;  &lt;p&gt;Using that we were able to leverage VSTS to create load tests to simulate our deployment.&amp;#160; VSTS is a great tool for doing performance testing of a product, it is geared toward product development directly but could also be leveraged in testing a product deployment.&lt;/p&gt;  &lt;p&gt;How are you going to evaluate the readiness of your deployment to meet your scale &amp;amp; load requirements?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911432" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Performance" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Performance/" /><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 Performance Testing – Policy Objects</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/10/14/fim-2010-performance-testing-policy-objects.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/10/14/fim-2010-performance-testing-policy-objects.aspx</id><published>2009-10-14T00:08:43Z</published><updated>2009-10-14T00:08:43Z</updated><content type="html">&lt;p&gt;Policy Objects are the heart of your deployment where you will implement the business logic needed.&amp;#160; These will also be influenced by the scenarios (credential management, group management, user management, etc.)&amp;#160; that you deploy.&amp;#160; As such it is no one deployment will be exactly the same as another but to help give you a data point I would like to cover a breakdown of what we are using currently in our deployment.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RC1 Out of Box vs. Sample Deployment&lt;/strong&gt;&lt;/p&gt;  &lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none; mso-border-alt: solid #7ba1ce 1.0pt; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class="MsoTableMediumShading1Accent1" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: medium none; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 5" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 1" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;RC1 Out of Box (OOB) &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 1" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;Deployed &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 0"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;Sets &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;71&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;96 &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 1"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 132" class="MsoNormal"&gt;&lt;b&gt;MPRs &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;51&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;98&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 2"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;Workflows &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;12&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;58&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 3"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 132" class="MsoNormal"&gt;&lt;b&gt;Sync Rules &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;0&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;80&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 4"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;Domain Configuration&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;1&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;14&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 113pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="151"&gt;         &lt;p style="mso-yfti-cnfc: 132" class="MsoNormal"&gt;&lt;b&gt;Email Templates&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 90.5pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="121"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;13&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 56pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="75"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;24&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;So how many objects do you plan to have in your deployment? How should you think about these policy objects with relation to performance?&lt;/p&gt;  &lt;p&gt;Things to consider:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Sets &lt;/strong&gt;– Every operation in the system must be evaluated for it’s impact on a given set.&amp;#160; Some are simple transitions like someone’s building has changed, but others have cascading effects such as a manager change impacting other objects indirectly &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;MPRs – &lt;/strong&gt;MPRs have two primary uses granting rights, &amp;amp; triggering WFs.&amp;#160; As you build these out you will find you may increase your number of sets to capture the various states you expect objects to transition in &amp;amp; out of.&amp;#160; As these could then trigger WFs &amp;amp; additional work in the system, you will need to be aware of this. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In RC0 we found a problem with our ability to scale with the number of MPRs in the system &amp;amp; as such have done significant work to help improve this.&amp;#160; For example beyond the above set of MPRs we ship OOB, we have added 400 additional MPRs.&amp;#160; Similarly we are doing testing around other core system object types to ensure we can meet your needs in deployment.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In my next post I will cover scale &amp;amp; load, what scale we are currently using &amp;amp; some questions to think about for load.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906909" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>FIM 2010 Performance Testing - Hardware</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/10/09/fim-2010-performance-testing-hardware.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/10/09/fim-2010-performance-testing-hardware.aspx</id><published>2009-10-09T20:17:53Z</published><updated>2009-10-09T20:17:53Z</updated><content type="html">&lt;p&gt;My goal with this post is to give you some data on the type of hardware we are using internally for our testing, which you could use to help inform your own hardware needs.&amp;#160; This is the hardware we are using to evaluate the product for release &amp;amp; that it will be able to support the workloads needed in MSIT.&amp;#160; This hardware is not configured or meant for production, but just for testing.&amp;#160; An example of this is that we have our hard drives configured in RAID 0 to get the most out of fewer drives in our testing, but you would likely have yours setup for redundancy.&amp;#160; In which case you could add additional drives to get similar results.&lt;/p&gt;  &lt;p&gt;Similar to in my previous post about our topologies, there are two basic classes of hardware we use in our testing.&amp;#160; What I will refer to as a standard machine &amp;amp; a performance machine.&lt;/p&gt;  &lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none; mso-border-alt: solid #7ba1ce 1.0pt; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class="MsoTableMediumShading1Accent1" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: medium none; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 5" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 1" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;Standard Machine &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 1" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;Performance Machine &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 0"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;CPU &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;&lt;/p&gt;          &lt;p&gt;1x4 Core Core2 Q6600 2.4 GHz&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;2x4 Core Xeon E5410 2.33 GHz &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 1"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 132" class="MsoNormal"&gt;&lt;b&gt;Memory &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;4 GB &lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;32 GB &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;Hard Drive &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;Single Hard drive &lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="213"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;8 – 136 GB 10k Hard Drives &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;On the performance machine we have the 8 hard drives currently allocated as follows.&amp;#160; Your situation will be different but we have standardized our machines on a single drive configuration for both Sync &amp;amp; FIMService to allow us to use machines for either depending on our testing needs.&lt;/p&gt;  &lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none; mso-border-alt: solid #7ba1ce 1.0pt; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class="MsoTableMediumShading1Accent1" border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 40.1pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: medium none; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="53"&gt;         &lt;p style="mso-yfti-cnfc: 5" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 193.5pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191" valign="top" width="258"&gt;         &lt;p style="mso-yfti-cnfc: 1" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;Drive Setup &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; background: #4f81bd; border-top: #7ba1ce 1pt solid; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-themecolor: accent1; mso-border-themetint: 191; mso-background-themecolor: accent1" valign="top" width="180"&gt;         &lt;p style="mso-yfti-cnfc: 1" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white; mso-themecolor: background1"&gt;Purpose &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 0"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 40.1pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="53"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;C&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 193.5pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="258"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;1 – 136 10k Hard Drive&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="180"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;OS\Applications&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 1"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 40.1pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="53"&gt;         &lt;p style="mso-yfti-cnfc: 132" class="MsoNormal"&gt;&lt;b&gt;E&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 193.5pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt" valign="top" width="258"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;1 – 136 GB 10k Hard Drive&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="180"&gt;         &lt;p style="mso-yfti-cnfc: 128" class="MsoNormal"&gt;SQL Logs (ldf files)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"&gt;       &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: #7ba1ce 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 40.1pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-left-themecolor: accent1; mso-border-left-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="53"&gt;         &lt;p style="mso-yfti-cnfc: 68" class="MsoNormal"&gt;&lt;b&gt;F&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 193.5pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: medium none; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63" valign="top" width="258"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;6 – 136 GB 10k Hard Drives (RAID 0)&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom: #7ba1ce 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; background: #d3e0ef; border-top: medium none; border-right: #7ba1ce 1pt solid; padding-top: 0in; mso-background-themecolor: accent1; mso-border-top-themecolor: accent1; mso-border-top-themetint: 191; mso-border-bottom-themecolor: accent1; mso-border-bottom-themetint: 191; mso-border-top-alt: solid #7ba1ce 1.0pt; mso-background-themetint: 63; mso-border-right-themecolor: accent1; mso-border-right-themetint: 191" valign="top" width="180"&gt;         &lt;p style="mso-yfti-cnfc: 64" class="MsoNormal"&gt;SQL Data Files (mdf files)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;In each of our performance rigs we have 2 performance machines &amp;amp; then as many standard machines as needed based on the topology.&amp;#160; In our standard topology we use the standard machine for a client &amp;amp; other test machines for Visual Team System (VSTS) to generate our load.&lt;/p&gt;  &lt;p&gt;The performance machines thus far have always been allocated to the SQL server as that is where the primary horsepower is needed for both Sync &amp;amp; FIMService.&amp;#160; Each of these components use resources in a different manner.&lt;/p&gt;  &lt;h3&gt;Synchronization Service&lt;/h3&gt;  &lt;p&gt;Synchronization service (formally MIIS) the primary place we have observed the most bang for your buck is in the disk subsystem.&amp;#160; Increasing your disk throughput will increase the performance of sync the most.&amp;#160; Most of the time if you observe disk IO of Sync you will see the disk under the heaviest utilization.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resource Utilization of Synchronization Service&lt;/strong&gt;     &lt;br /&gt;Notice the white line at the top is our SQL server drive&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingHardware_9CC6/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingHardware_9CC6/image_thumb.png" width="503" height="273" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;FIM Service&lt;/h3&gt;  &lt;p&gt;FIM Service leverages SQL to do a large amount of our processing, if you ran SQL profiler on the system you would observe some very large queries being executed.&amp;#160; SQL queries handle many of the core services of our product including query evaluation, rights enforcement, &amp;amp; set transitions.&amp;#160; As such for the FIMService db, having higher CPU power will give you the best increase in performance.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resource Utilization of FIMService&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingHardware_9CC6/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingHardware_9CC6/image_thumb_1.png" width="520" height="359" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;From the above you can see that occasionally we have spikes of usage in memory &amp;amp; the F drive which corresponds to the SQL data file drive in this rig.&amp;#160; Furthermore, in this case I have the FIMService &amp;amp; SQL Server on the same machine, so we can compare CPU utilization of both processes to see where the processing power is being used most.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;FIMService vs. SQL Server CPU Utilization&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingHardware_9CC6/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingHardware_9CC6/image_thumb_2.png" width="516" height="350" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;From above the highlighted black line is the CPU usage of SQL Server, the light blue line is the CPU usage of Microsoft.ResourceMangementService.&amp;#160; This demonstrates at least at this point in time that the primary consumer of your CPU &amp;amp; where you should invest your CPU power is your SQL Server.&lt;/p&gt;  &lt;p&gt;In my next post I will discuss policy objects &amp;amp; how we are thinking about them in our performance testing.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9905533" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Performance" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Performance/" /><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 Performance Testing - Topology</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/10/06/fim-2010-performance-testing-topology.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/10/06/fim-2010-performance-testing-topology.aspx</id><published>2009-10-06T18:15:26Z</published><updated>2009-10-06T18:15:26Z</updated><content type="html">&lt;p&gt;Customers have very different deployment needs for their product, all of these driven based on their various business requirements.&amp;#160; For ourselves we have taken a two pronged approach for testing the performance of FIM 2010 in different topologies.&amp;#160; We typically test in what I will refer to as our Standard topology &amp;amp; then we do additional testing in what I will refer to as our NLB topology.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Standard Topology&lt;/strong&gt;     &lt;br /&gt;This is the standard configuration we generally test in.&amp;#160; We look for bottlenecks &amp;amp; may adjust this over time if we find we need to use a difference configuration.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingTopology_1010F/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingTopology_1010F/image_thumb.png" width="356" height="127" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NLB Topology&lt;/strong&gt;     &lt;br /&gt;This is our more complex topology intended to give us insight into how the product performs both functionally &amp;amp; performance wise in a more complex deployment.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingTopology_1010F/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/darrylru/WindowsLiveWriter/FIM2010PerformanceTestingTopology_1010F/image_thumb_1.png" width="364" height="336" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;What topology are you planning to use for your deployment?&amp;#160; Are there any specific situations you need to handle?&lt;/p&gt;  &lt;p&gt;In my next post, I will talk about the hardware we are using in these topologies &amp;amp; cover what we are seeing for resource utilization &amp;amp; bottlenecks.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9903769" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Performance" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Performance/" /><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 Performance Testing - Introduction</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/10/01/fim-2010-performance-testing-introduction.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/10/01/fim-2010-performance-testing-introduction.aspx</id><published>2009-10-01T10:16:07Z</published><updated>2009-10-01T10:16:07Z</updated><content type="html">&lt;p&gt;One of the areas I have been focused on recently has been testing the performance of our product.&amp;#160; With the release of RC1, I thought I would start off with some insight into what you can expect with the product.&amp;#160; &lt;/p&gt;  &lt;p&gt;A key problem with figuring out the performance of a given product is the number of variables that impact the results you observe, this is especially around performance.&amp;#160; Many customers have a simple question of can your product support my company of size X.&amp;#160; While on the surface this is a simple question there are a large number of variables that play into the answer of that question.&amp;#160; For FIM 2010 there are a couple key pieces of information needed in evaluating what that answer is.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Topology &lt;/strong&gt;- What is the topology you plan to deploy the product in.&amp;#160; Will SQL Server be on the same box as the FIMService?&amp;#160; Will you be using a Network Load Balancer? &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Hardware&lt;/strong&gt; - What hardware are you running on each piece of your topology?&amp;#160; What is CPU, Memory, Disk, Network?&amp;#160; How are your drives configured?&amp;#160; How is SQL configured to store your files? &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Policy Objects &lt;/strong&gt;-&amp;#160; Policy objects are a key component of FIM 2010.&amp;#160; These include Sets, Management Policy Rules, Schema, Workflows, Sync Rules, etc.&amp;#160; Depending on how you configure these, there will be additional work that the product must do &amp;amp; that will impact your performance. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Scale &lt;/strong&gt;- Typically scale is talked about in terms of the number of users, but in the case of FIM you also need to think about the other object types in the system depending on the solution you are deploying.&amp;#160; How many groups &amp;amp; of what type?&amp;#160; Do you have calculated groups?&amp;#160; Do you have custom object types you are managing like computers? &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Load &lt;/strong&gt;- How do you expect your system to be used?&amp;#160; How often do you expect someone to create a group?&amp;#160; What type of load do you expect from Password Reset deployment?&amp;#160; Do you expect users to use the Portal or the Outlook Add-in for Office 2007 more? &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;How you answer each of these questions will likely impact the performance of the product.&amp;#160; This is a classic problem as a tester we often find a matrix of variables &amp;amp; then need a way to help answer some of these questions.&amp;#160; My goal here is not to give you a definitive answer for your specific case, but instead to share information directly with you of how we have approached our testing which can then inform you in your deployment.&lt;/p&gt;  &lt;p&gt;For our own internal testing we have worked to leverage feedback of our customers &amp;amp; most specifically MSIT to model a basis of how our product will be deployed and perform.&amp;#160; From that we have been working to expand this model to then see how changes to some of these variables then impact our performance.&lt;/p&gt;  &lt;p&gt;In my next few posts I will discuss how we have approached each of these items, both for planning our testing &amp;amp; our eventual deployment.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901700" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="Performance" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/Performance/" /><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>FIM 2010 RC1 Released</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/09/30/fim-2010-rc1-available.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/09/30/fim-2010-rc1-available.aspx</id><published>2009-09-30T23:52:00Z</published><updated>2009-09-30T23:52:00Z</updated><content type="html">&lt;P&gt;Today FIM 2010 RC1 has been released.&amp;nbsp; There have been alot of improvements since RC0 which we believe you will enjoy, so download it, try it, &amp;amp; let us know your feedback.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=4bb3f16b-27f8-4c1d-922f-2c7b522d9ad6" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=4bb3f16b-27f8-4c1d-922f-2c7b522d9ad6"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=4bb3f16b-27f8-4c1d-922f-2c7b522d9ad6&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901500" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author><category term="FIM" scheme="http://blogs.msdn.com/b/darrylru/archive/tags/FIM/" /></entry><entry><title>Introduction</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/darrylru/archive/2009/09/30/introduction.aspx" /><id>http://blogs.msdn.com/b/darrylru/archive/2009/09/30/introduction.aspx</id><published>2009-09-30T04:04:09Z</published><updated>2009-09-30T04:04:09Z</updated><content type="html">&lt;p&gt;After about 7 years at Microsoft, I have decided to join the role of bloggers.&amp;#160; As such I should start with a quick introduction about myself.&lt;/p&gt;  &lt;p&gt;I have been working at Microsoft over the past 7 years as a tester in what was originally Microsoft Metadirectory Services.&amp;#160; In that time I have worked on shipping Microsoft Identity Integration Server 2003 (MIIS), Identity Lifecycle Manager 2007 (ILM) , &amp;amp; most recently Forefront Identity Manager 2010 (FIM).&amp;#160; As part of FIM 2010 I have been the test lead responsible for several areas of our product including Schema, Sets, Management Policy Rules, Mail Services, Web Services, FIM MA, &amp;amp; Performance.&lt;/p&gt;  &lt;p&gt;Over the course of these releases I have had the opportunity to learn from our customers &amp;amp; help improve the quality of our product.&amp;#160; As a tester I have found the information gained from our customers invaluable in our ability to test &amp;amp; improve the quality of our product.&amp;#160; An example of how your feedback has helped us is if you are familiar with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=D3C7BD7A-E8D5-43CF-AD4D-4F1F0AE00D79&amp;amp;displaylang=en"&gt;MIIS 2003 Resource Kit 2&lt;/a&gt;, included in that package are two tools. (MIIS Dynamic Help &amp;amp; &lt;a href="http://technet.microsoft.com/en-us/magazine/2006.07.5essential.aspx"&gt;MIIS Provisioning Assistant&lt;/a&gt;) I had developed based directly on feedback received by our customers.&lt;/p&gt;  &lt;p&gt;Additionally, I have found there is a wealth of knowledge about the product gained over the course of product development as we debug, investigate &amp;amp; fix issues in the product.&amp;#160; My goal is to continue that two way communication where we continue to respond to your feedback to improve the product &amp;amp; we also help share information on how to debug, investigate, &amp;amp; implement our products.&lt;/p&gt;  &lt;p&gt;If there are question you have, or topics of interest please feel free to let me know &amp;amp; I will see what I can do to address these.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9901083" width="1" height="1"&gt;</content><author><name>Darryl Russi</name><uri>http://blogs.msdn.com/darrylru/ProfileUrlRedirect.ashx</uri></author></entry></feed>