<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://port25.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Port 25: The Open Source Community at Microsoft : Software Testing</title><link>http://port25.technet.com/archive/tags/Software+Testing/default.aspx</link><description>Tags: Software Testing</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 40109.1145)</generator><item><title>Releasing the Source Code for the .NET Framework Libraries </title><link>http://port25.technet.com/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx</link><pubDate>Wed, 03 Oct 2007 21:47:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:4289</guid><dc:creator>jcannon</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=4289</wfw:commentRss><comments>http://port25.technet.com/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Some news from &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;Scott Guthrie&amp;#39;s blog&lt;/a&gt; this morning - we&amp;#39;ll get more from the .NET and Shared Source team over the next few months:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&amp;quot;One of the things my team has been&amp;nbsp;working to enable has been the ability for .NET developers to download and browse the source code of the .NET Framework libraries, and to easily enable debugging support in them.&lt;/p&gt;&lt;p&gt;Today I&amp;#39;m excited to announce that we&amp;#39;ll be providing this with the .NET 3.5 and VS 2008 release later this year.&lt;/p&gt;&lt;p&gt;We&amp;#39;ll begin by offering the source code (with source file comments included)&amp;nbsp;for the .NET Base Class Libraries (System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime,&amp;nbsp;System.Text, etc), ASP.NET (System.Web), Windows Forms (System.Windows.Forms), ADO.NET (System.Data), XML (System.Xml), and WPF (System.Windows).&amp;nbsp; We&amp;#39;ll then be adding more libraries in the months ahead (including WCF, Workflow, and LINQ).&amp;nbsp; The source code will be released under the &lt;a href="http://www.microsoft.com/resources/sharedsource/licensingbasics/referencelicense.mspx" target="_blank"&gt;Microsoft Reference License&lt;/a&gt; (MS-RL).&lt;/p&gt;&lt;p&gt;You&amp;#39;ll be able to download the .NET Framework source libraries via a standalone install (allowing you to use any text editor to browse it locally).&amp;nbsp; We will&amp;nbsp;also provide integrated debugging support of it within VS 2008.&lt;/p&gt;&lt;h3&gt;&lt;u&gt;Integrated Visual Studio 2008 Debugging Support&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;The final release of VS 2008 will support the ability to configure the debugger to dynamically download the .NET Framework debugger symbols (and corresponding source code) from a web server hosted by Microsoft.&amp;nbsp; You&amp;#39;ll be able to configure the .NET Framework symbols to be downloaded all in one shot, or manually retrieved on demand:&lt;/p&gt;&lt;p&gt;&lt;img border="0" height="371" src="http://port25.technet.com/photos/images/images/4288/original.aspx" width="641" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Read the rest of the post at &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;Scott Guthrie&amp;#39;s Blog&lt;/a&gt;....&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=4289" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/.NET+Development/default.aspx">.NET Development</category><category domain="http://port25.technet.com/archive/tags/Community/default.aspx">Community</category><category domain="http://port25.technet.com/archive/tags/Dev+Center/default.aspx">Dev Center</category><category domain="http://port25.technet.com/archive/tags/App/default.aspx">App</category><category domain="http://port25.technet.com/archive/tags/jcannon/default.aspx">jcannon</category></item><item><title>Systems Manageability Part 4:  Systems Configuration</title><link>http://port25.technet.com/archive/2007/05/25/systems-manageability-part-4-systems-configuration.aspx</link><pubDate>Fri, 25 May 2007 18:18:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:3979</guid><dc:creator>kishi</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=3979</wfw:commentRss><comments>http://port25.technet.com/archive/2007/05/25/systems-manageability-part-4-systems-configuration.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: This is Part 4, continuation of the series of 8 blogs I&amp;rsquo;m doing on &lt;a href="http://port25.technet.com/archive/2007/05/03/systems-manageability-part-3-provisioning-and-deployment.aspx" style="color: blue; text-decoration: underline; text-underline: single"&gt;Systems Manageability&lt;/a&gt;. In this specific blog, I will focus on and explain the second part of the &amp;ldquo;ontology&amp;rdquo; which is &lt;strong&gt;&amp;ldquo;Systems Configuration&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Level-Set:&lt;/strong&gt; &lt;em&gt;System Configuration and Management&lt;/em&gt; encompasses all tasks related to the configuration of a host in a standardized and (when possible) centralized way.&amp;nbsp; Many projects in this category provide a common configuration interface, either command-line or GUI-based, designed to ease typical administrative tasks.&amp;nbsp; Other projects, specifically Cfengine, provide a higher level policy-based system to provide consistent configuration and state management for a set of systems. Again, in this case there&amp;rsquo;s lots of different tools out there that can be used but we have focused on the most popular ones such as Webmin, YaST, SSH, VNC and Cfengine. In the paragraphs to follow, we have attempted to lay out our understanding of these tools after using them in the OSSL:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;I. WEBMIN: &lt;/strong&gt;&lt;em&gt;&amp;quot;Webmin is a web-based interface for system administration for Unix. Using any browser that supports tables and forms (and Java for the File Manager module), you can setup user accounts, Apache, DNS, file sharing and so on.&amp;quot;&lt;/em&gt; Webmin is very modular in design, allowing third-party developers to add support for a particular service or task relatively easily.&amp;nbsp; Many of the tasks involve easing or automating system administration tasks, or editing a configuration file using a specific syntax. &lt;a name="_Toc148172344" title="_Toc148172344"&gt;&lt;/a&gt;Webmin is currently supported by &lt;em&gt;OpenCountry&lt;/em&gt;, a company that sells Linux management solutions.&amp;nbsp; The OpenCountry website includes information about Webmin, including two variations of the system that they support.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Webmin Plus:&lt;/strong&gt; Webmin Plus, is a version of Webmin supported by &lt;a href="http://opencountry.com/" style="color: blue; text-decoration: underline; text-underline: single"&gt;OpenCountry&lt;/a&gt;.&amp;nbsp; According to the website, the Webmin Plus version has been tested by the company and includes new features, specifically support for the back-up and restore application called Bacula (&lt;a href="http://www.bacula.org/" style="color: blue; text-decoration: underline; text-underline: single"&gt;http://www.bacula.org/&lt;/a&gt;).&amp;nbsp; Webmin Plus is still freely distributed under a &amp;ldquo;Mozilla-type&amp;rdquo; license, and is downloadable via Sourceforge.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Webmin Pro:&lt;/strong&gt; Last I checked, Webmin Pro had not yet been released, but the following is an excerpt about the product from the OpenCountry website: &amp;ldquo;...a commercially supported comprehensive product for the entire data center enabling centralized systems administration of mixed distributions, Linux and Windows!&amp;rdquo;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;II. YAST:&lt;/strong&gt; YaST (&lt;strong&gt;Y&lt;/strong&gt;et &lt;strong&gt;a&lt;/strong&gt;nother &lt;strong&gt;S&lt;/strong&gt;etup &lt;strong&gt;T&lt;/strong&gt;ool) is an OS installation and configuration utility used primarily in SUSE-based systems.&amp;nbsp; YaST typically serves as the primary control panel interface in, and can be used for a number of configuration tasks &amp;ndash; such as adding and removing software, patch management, user management, device configuration and for configuring individual services and daemons.&amp;nbsp; Other common administration tasks such as obtaining system information and reading server logs is also possible via the YaST interface. All of the aforementioned YaST features are implemented as modules, each of which provide a specific functionality or perform certain tasks.&amp;nbsp; These tasks typically involve editing one or more text configuration files on the system in a specific format to configure a specific service or daemon.&amp;nbsp; On other Linux or UNIX-like systems, these tasks are typically performed manually via the command-line. &lt;/p&gt;&lt;p&gt;The YaST utility is very modular in its design, allowing Novell or other third-party providers to add modules into the YaST interface to configure a particular device or service.&amp;nbsp; Many of these modules work independently of each other, and as such are often packaged as individual RPM packages that may be added or removed depending on the software and devices that are installed on a system. YaST modules are written using a scripting language specific to YaST called YCP.&amp;nbsp; Other scripts, such as Perl or shell scripts can also be utilized via a YaST module to perform a particular task.&amp;nbsp; A CIM module for YaST is also distributed with SLES10, which provides a client interface for CIMOM (Common Information Object Manager) to other YaST2 modules. It seems the most common administration task for which YaST is used involves setting up individual package repositories (discussed further in the Patch Management and Maintenance), adding or removing software packages and configuring or initiating online updates. YaST is capable of searching for and locating software on remote repositories, retrieving the software packages, resolving package dependencies, checking the cryptographic signature of the package (if available) and then installing the software on the system.&amp;nbsp; Multiple repositories can be configured.&amp;nbsp; Repositories can be located on a hard disk or CD/DVD, or on a remote system obtainable via HTTP(s), FTP, NFS or CIFS. Once a repository is configured it can then be indexed for later searching.&amp;nbsp; The software search functionality is very powerful, allowing one to search for appropriate software packages using many of the attributes available in the RPM package header &amp;ndash; such as the description or contents of the package. Besides software management, the quality and completeness of many YaST modules varies.&amp;nbsp; Many modules (such as the log viewing modules) offer minimal functionality, and only work well enough to provide a few basic configuration options.&amp;nbsp; Complex server configurations will therefore still require one to edit text-based configuration files by hand, or use another configuration engine for the task, such as Webmin.&amp;nbsp; However, many other common tasks, such as configuring display settings or a printer, can be done entirely via YaST.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;III. SSH/SCP/SFTP:&lt;/strong&gt; SSH (Secure SHell) is likely the most widely used remote administration tool for Linux and UNIX-based systems.&amp;nbsp; The typical SSH toolset includes the SSH client and server, as well as the SCP and SFTP client applications for copying files, both of which simply utilize the ssh binary on the backend.&amp;nbsp; The following excerpt is from the OpenSSH project home page: &lt;em&gt;&amp;quot;OpenSSH is a FREE version of the SSH connectivity tools that technical users of the Internet rely on. Users of telnet, rlogin, and ftp may not realize that their password is transmitted across the Internet unencrypted, but it is. OpenSSH encrypts all traffic (including passwords) to effectively eliminate eavesdropping, connection hijacking, and other attacks. Additionally, OpenSSH provides secure tunneling capabilities and several authentication methods, and supports all SSH protocol versions.&lt;/em&gt; Since most any task can be performed via the command-line, the OpenSSH utilities are likely the most critical component for a Linux administrator to have available.&amp;nbsp; The remote copy and command execution options allow one to build, deploy and run a script on a number of machines relatively quickly and securely.&amp;nbsp; OpenSSH is typically installed by default in most Linux-based distributions, although in some distributions the server may by default be disabled or blocked by the firewall. &amp;quot;Most common uses of SSH are:&lt;/p&gt;&lt;ol start="1"&gt;&lt;li&gt;&lt;strong&gt;&lt;a name="_Toc158034268" title="_Toc158034268"&gt;&lt;/a&gt;Remote Command Execution:&lt;/strong&gt; One of the most common uses of the ssh utility is to run commands in remote machines&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Authentication:&lt;/strong&gt; In order to log into, copy files or run commands on a remote host via ssh, one must first authenticate to the remote machine.&amp;nbsp; Local password authentication may be used without any particular configuration on the server.&amp;nbsp; Linux systems that support PAM (Pluggable Authentication Modules) may also use password authentication to authenticate using a number of mechanisms, including NIS, LDAP, Kerberos, or AD (Active Directory).Rather than requiring a user to manually type in a password, a more common authentication option is to use public key authentication.&amp;nbsp; A user&amp;rsquo;s public key must be inserted into a file on the remote host called authorized_keys before they are allowed to authenticate to that server.&amp;nbsp; This can often be done via the post installation procedures built into kickstart or autoyast.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a name="_Toc158034270" title="_Toc158034270"&gt;&lt;/a&gt;Tunneling other Applications:&lt;/strong&gt; Another common application is to use SSH for tunneling other protocols.&amp;nbsp; This is often used to tunnel protocols that are not typically encrypted such as NFS or X11.&amp;nbsp; By using the &amp;ndash;Y or &amp;ndash;X switches with the ssh client application, one can &amp;ldquo;turn on&amp;rdquo; X11 tunneling, allowing graphical applications run on the remote machine to display locally on the administrators workstation.&amp;nbsp; For example, if one were to SSH into a SUSE-based system and run &amp;ldquo;yast2&amp;rdquo; via the command line, the YaST display would be tunneled via SSH and displayed on the local system &amp;ndash; even though the actual application is running on the remote system.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a name="_Toc158034271" title="_Toc158034271"&gt;&lt;/a&gt;Cluster Management:&lt;/strong&gt; When managing a number of Linux servers, such as a HPC cluster, it is typical to have a large number of systems with identical configurations.&amp;nbsp; To ease administration of these systems there have been a number of SSH-based utilities that allow one to run commands on multiple systems, or copy a file to multiple systems, in parallel.&amp;nbsp; The following utilities are all licensed under the GNU GPL.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;ClusterSSH:&lt;/strong&gt; &lt;em&gt;ClusterSSH&lt;/em&gt; allows an administrator run to open a remote SSH session to a number of systems at once via a single terminal window, and run commands or alter configuration files on all the systems simultaneously.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;PCP:&lt;/strong&gt; &lt;em&gt;PCP&lt;/em&gt; is a tool designed to copy files in parallel to multiple nodes in a cluster or server farm.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GEXEC:&lt;/strong&gt; &lt;u&gt;&lt;em&gt;GEXEC&lt;/em&gt;&lt;/u&gt; is a tool that is somewhat complimentary to PCP that provides a parallel remote command execution system for large clusters.&amp;nbsp; The system includes a client and server, as well as a library that allows integration into third-party applications.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;PSSH:&lt;/strong&gt; &lt;em&gt;PSSH&lt;/em&gt; is distributed as a suite of utilities that perform many of same functions as ClusterSSH, PCP and GEXEC.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;pssh&lt;/strong&gt; &amp;ndash; Parallel SSH, similar to ClusterSSH or GEXEC.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;pscp&lt;/strong&gt; &amp;ndash; Parallel SCP, allows one to copy files to multiples nodes in manner a similar to PCP.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;prsync&lt;/strong&gt; &amp;ndash; The &lt;em&gt;prsync&lt;/em&gt; utility automates running rsync on multiple nodes in parallel, essentially another method of copying files or entire directory trees to a number of remote nodes.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;pnuke&lt;/strong&gt; &amp;ndash; The &lt;em&gt;pnuke&lt;/em&gt; command can be used to kill a number of processes running on multiple nodes.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;pslurp &lt;/strong&gt;&amp;ndash; The &lt;em&gt;pslurp&lt;/em&gt; utility is similar to the pscp utility, except that it is designed to copy files from a set of hosts.&amp;nbsp; This allows one to copy, for example, a log file that exists on multiple nodes, to a local directory tree.&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;IV. Cfengine:&lt;/strong&gt; &lt;em&gt;&amp;ldquo;Cfengine, or the configuration engine is an autonomous agent and a middle to high level policy language and agent for building expert systems to administrate and configure large computer networks. Cfengine is designed to be a part of a computer immune system. It is ideal for cluster management and has been adopted for use all over the world in small and huge organizations alike.&amp;rdquo;&lt;/em&gt; &lt;em&gt;Cfengine&lt;/em&gt; consists of a userspace application called &lt;em&gt;cfagent&lt;/em&gt; and a host of other utilities that reads and parses a series of text configuration files and performs tasks on the host system based on the configuration.&amp;nbsp; The configuration syntax of &lt;em&gt;Cfengine&lt;/em&gt; is actually a high-level policy language that allows &lt;em&gt;cfagent&lt;/em&gt; to test the system&amp;rsquo;s configuration and perform corrective actions based on those tests.&amp;nbsp; For example, &lt;em&gt;cfagent&lt;/em&gt; may test to assure that a certain line of text exists within a configuration file, and if not it will add the text and restart the associated service.&amp;nbsp; The &lt;em&gt;cfagent&lt;/em&gt; utility is typically run on an hourly (or so) basis via &lt;em&gt;cron&lt;/em&gt;, a task-scheduling application.&amp;nbsp; This assures that mis-configurations will be found and corrected within a reasonable time frame. &lt;/p&gt;&lt;p&gt;The policy simply tests to make sure an entry for user &lt;em&gt;root&lt;/em&gt; exists within the &lt;em&gt;/etc/shadow&lt;/em&gt; file, and also checks to make sure the password matches.&amp;nbsp; This assures that all systems have the same password for the root user. The configuration of Cfengine can become very complex, which would likely not surprise those who have had experience with the tool.&amp;nbsp; The structure of the policy language eases this dilemma a bit, as platform definitions can be made and inherited by other blocks to help determine the appropriate action to take. The configuration is essentially a high-level policy language, and thus the various tests must be built and scripted manually.&amp;nbsp; The toolset is, however, enormously powerful when implemented correctly.&amp;nbsp; But as with many open-source technologies, the learning curve can be quite steep, and one must study the complexities of the tool before it can be competently used in a production environment. A version of Cfengine has been ported to the Windows platform to run under &lt;em&gt;Cygwin&lt;/em&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;editfiles:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # We have different passwords for lab systems and workstations.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linux.shadowpasswords.md5passwords.(!workstations)::&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;{ /etc/shadow&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetLine &amp;quot;root:$1$383J33RL$ XXXXXXXXXXXXXXXXXXXXXX:12984:0:99999:7:::&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AppendIfNoLineMatching &amp;#39;^root:.*&amp;#39;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocateLineMatching &amp;#39;^root:.*&amp;#39;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplaceLineWith &amp;ldquo;root:$1$383J33RL$ XXXXXXXXXXXXXXXXXXXXXX:12984:0:99999:7:::&amp;rdquo;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linux.shadowpasswords.md5passwords.workstations::&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;{ /etc/shadow&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetLine &amp;ldquo;root:$1$gcGWA0qS$YYYYYYYYYYYYYYYYYYYYYY:13027:0:99999:7:::&amp;rdquo;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AppendIfNoLineMatching &amp;lsquo;^root:.*&amp;rsquo;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocateLineMatching &amp;lsquo;^root:.*&amp;rsquo;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReplaceLineWith &amp;ldquo;root:$1$gcGWA0qS$YYYYYYYYYYYYYYYYYYYYYY:13027:0:99999:7:::&amp;rdquo;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: 'Calibri','sans-serif'"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: 'Calibri','sans-serif'"&gt;&lt;/span&gt;&lt;strong&gt;Example Cfengine policy to check the password for the root user.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;The following example Cfengine policy checks for the existence and the contents of the &lt;em&gt;/etc/cron.d/yast2-online-update&lt;/em&gt; file for SUSE systems.&amp;nbsp; If necessary it creates the file, and writes a &lt;em&gt;cron&lt;/em&gt; entry into the file to schedule a daily check for updates and patches.&amp;nbsp; Upon completion, it then runs the command &amp;ldquo;/etc/init.d/cron restart&amp;rdquo; as defined in the &lt;em&gt;suse.restartcrond&lt;/em&gt; definition.&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;editfiles:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; suse::&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { /etc/cron.d/yast2-online-update&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DefineClasses &amp;quot;restartcrond&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Umask 077&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoCreate&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BeginGroupIfNoLineMatching &amp;quot;^.*[\s\t]+root[\s\t]+online_update&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AppendIfNoSuchLine &amp;quot;30 3 * * * root online_update&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndGroup&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;shellcommands:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;&lt;span style="font-size: 9pt"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; suse.restartcrond::&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: 'Calibri','sans-serif'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;/etc/init.d/cron restart&amp;quot;&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Example Cfengine policy to assure that SUSE systems check for updates daily.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;And that does it for the &amp;ldquo;Systems Configuration&amp;rdquo; section As always, please let us know if you found the above mentioned useful and any comments/feedback you may have. Thank you for tuning into Port25.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=3979" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Kishi+Malhotra/default.aspx">Kishi Malhotra</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/Management/default.aspx">Management</category><category domain="http://port25.technet.com/archive/tags/Community/default.aspx">Community</category><category domain="http://port25.technet.com/archive/tags/Server+Center/default.aspx">Server Center</category></item><item><title>Systems Manageability - Part 1:  Why Manageability Matters</title><link>http://port25.technet.com/archive/2007/03/21/systems-manageability-part-1-why-manageability-matters.aspx</link><pubDate>Wed, 21 Mar 2007 20:09:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:3652</guid><dc:creator>kishi</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=3652</wfw:commentRss><comments>http://port25.technet.com/archive/2007/03/21/systems-manageability-part-1-why-manageability-matters.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;strong&gt;Impetus&lt;/strong&gt;: This is the 19th year I have spent in the Information Technology business, out of which more than 15 were spent designing and implementing IT environments of various scopes, platforms and sizes. Among several similarities and differences between each implementation, a few constants always emerged, and my favorite of all: &lt;strong&gt;Systems Manageability&lt;/strong&gt;. This question always got asked during every high-profile design review meeting. You know the meeting I&amp;rsquo;m talking about, the one with the CIO and the IT Director are sitting across the table and asking how we&amp;rsquo;re planning on managing the environment. The main concern you could see in everyone&amp;rsquo;s expression was &amp;ldquo;what sort of manageability needs to be built around for operations and support ?&amp;rdquo;. So why does manageability matter ? Let&amp;rsquo;s start with what people imagine, when they think of Systems Manageability. It means different things to people in different roles: the Infrastructure folks imagine uptime and redundancy, the Developers imagine reliability, the Business Managers imagine efficiency. But the answer is so overwhelmingly obvious. Had it not been for systems management toolsets, apps and frameworks, ITPro&amp;rsquo;s and Admins would be worried sick about everything from uptime to reliability to scalability. So yes, manageability matters, a lot, because it&amp;rsquo;s the knowledge that &amp;ldquo;all&amp;rsquo;s well and running smoothly&amp;rdquo; that matters to everyone from a CIO to a Developer to a IT Admin. &amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;strong&gt;Importance&lt;/strong&gt;: Now that we have established the impetus behind why Systems Manageability matters, we should now address the importance tied to it, such as:&lt;/font&gt;&lt;/p&gt;&lt;ol start="1" type="a"&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&lt;em&gt;Increasingly complex and heterogeneous environments need increased attention:&lt;/em&gt; Pick any environment of your choice, whether it&amp;rsquo;s where you work or the one you hear about the most. It comes with its own share of challenges and oddities. What differentiates one environment from the other is the manner in which it is &amp;ldquo;run&amp;rdquo;. The more complex you hardware, software or network stack, the greater is the manageability tied to it. This means that with every component you add to your existing system, you&amp;rsquo;re only increasing the complexity even further. So is that a bad thing &amp;ndash; NO. Because it&amp;rsquo;s the environment that should be designed with &amp;ldquo;adaptation&amp;rdquo; in mind and not the other way round. Thus, having a complex environment simply translates to keeping an eye on more things. Systems Manageability plays a key role in this scenario&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&lt;em&gt;Infrastructure sits at the &amp;ldquo;core&amp;rdquo; of IT:&lt;/em&gt; Here&amp;rsquo;s an exercise for any of you that may be interested &amp;ndash; the next time you see or hear a technology professional being interviewed about a certain &amp;ldquo;application&amp;rdquo; or tool that they&amp;rsquo;ve developed &amp;ndash; try to imagine an entire infrastructure that needs to support and run that &amp;ldquo;tool&amp;rdquo; or &amp;ldquo;App&amp;rdquo;. The exercise will make you think about what&amp;rsquo;s going on in the mind of an IT Admin who is responsible for running your environment implementation and why Infrastructure is a big deal. Systems Manageability plays a key role in this scenario&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&lt;em&gt;End-user productivity has a directly proportional relationship to Performance Tuning and Optimization:&lt;/em&gt; Growth comes in spurts and bursts and never an even pace as we all know. This means, various pieces of your hardware, software, toolsets are implemented in various growths and phases. Simply put, growth does not follow a pre-chartered course and timeline. This makes ongoing performance tuning and optimization a necessity. &amp;nbsp;And it has its benefits - it allows you to see the app or toolkit from the eyes of the people who made it. It also gives you the &amp;ldquo;know how&amp;rdquo; to make the specific changes in thresholds and values that could mean a difference of night and day, in terms of efficiency. Systems Manageability plays a key role in this scenario&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&lt;em&gt;Striking a balance between Manageability and Flexibility is tough:&lt;/em&gt; Identity Management and Security issues are now a mainstream topic of discussion and more and more attention is being paid to system security, access and authentication framework. The single reason for putting these in place to ensure that &amp;ldquo;you are who you say you are&amp;rdquo;. On the flip side, overly managed and restrictive environments can limit the flexibility of what an end-user can do. That&amp;rsquo;s why it is always tough to strike a balance between a system that is secure / well managed and one which seems more &amp;ldquo;seamless&amp;rdquo;. Systems Manageability plays a key role in this scenario &lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;In the next seven blogs or so to follow, you will get a detailed breakdown on the Systems Manageability project that we have completed in the lab. We will be covering the Project Methodology and Project Ontology in my next blog. As always, send us your comments and feedback and THANK YOU for tuning into Port25.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=3652" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Kishi+Malhotra/default.aspx">Kishi Malhotra</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/Management/default.aspx">Management</category><category domain="http://port25.technet.com/archive/tags/Server+Center/default.aspx">Server Center</category></item><item><title>Who really needs to gather crash information and what do they need to do with it?</title><link>http://port25.technet.com/archive/2007/03/07/who-really-needs-to-gather-crash-information-and-what-do-they-need-to-do-with-it.aspx</link><pubDate>Wed, 07 Mar 2007 04:06:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:3617</guid><dc:creator>anandeep</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=3617</wfw:commentRss><comments>http://port25.technet.com/archive/2007/03/07/who-really-needs-to-gather-crash-information-and-what-do-they-need-to-do-with-it.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;I just got back from Cambridge (in the United Kingdom, &amp;nbsp;not the one by the Charles river) from the Microsoft Research / Technische Universitat Darmstadt &amp;nbsp;&lt;a href="http://www.deeds.informatik.tu-darmstadt.de/RAF07/" style="color: blue; text-decoration: underline; text-underline: single"&gt;&amp;ldquo;Reliability Analysis of System Failure Data&amp;rdquo; conference&lt;/a&gt;.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Microsoft Research has a very &lt;a href="http://research.microsoft.com/cambridge/" style="color: blue; text-decoration: underline; text-underline: single"&gt;nice lab&lt;/a&gt; near Cambridge University.&amp;nbsp; This was my first visit to Cambridge and I was able to drink in (literally!) some of the local color.&amp;nbsp; I went to the pub (called the &amp;ldquo;Eagle&amp;rdquo;) where Watson &amp;amp; Crick had their &amp;ldquo;aha!&amp;rdquo; moment about the double helix structure of DNA. I also visited the pub next to Queen&amp;rsquo;s College called the &amp;ldquo;Anchor&amp;rdquo; which Pink Floyd&amp;rsquo;s Syd Barrett used to frequent.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;But it was not all pub-crawling, we had some serious stuff to deal with at the conference. &amp;nbsp;The objective of the conference was to bring academia and industry together to deal with a problem in the field of reliability analysis. The problem is that industry (there were representatives from Sun, Cisco, IBM and of course Microsoft) had the failure data but NOT the models and techniques for solving the problem overall.&amp;nbsp; Academia had the models and techniques but NOT the kind of failure data that it needs to solve the overall problem. &amp;nbsp;This conference was an attempt to get the two sides together and find a solution to this conundrum.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;After we had presented our position papers (our lab&amp;rsquo;s paper is &lt;a href="http://www.deeds.informatik.tu-darmstadt.de/RAF07/papers/anandeep_pannu.pdf" style="color: blue; text-decoration: underline; text-underline: single"&gt;here&lt;/a&gt;), we split into workshops on Data Collection, Data Repositories and Data Analysis. &amp;nbsp;The idea was to come up with the &amp;ldquo;next step&amp;rdquo; in taking reliability analysis of system failure data forward. &amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;In the Data Collection section, we were stuck for a bit.&amp;nbsp; We were trying to look for compelling reasons for data collection by end-users (rather than by the software makers like Microsoft, Sun or IBM).&amp;nbsp; What reason would an IT department have for implementing mechanisms to collect failure data? &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;At first the reasons seemed obvious &amp;ndash; to monitor for failure and to correct defects of course.&amp;nbsp; But then the representatives from the software makers spoke up and said that they did collect failure data and were using it exactly for the purpose of correcting defects.&amp;nbsp; Vince Orgovan from Microsoft stated in &lt;a href="http://www.deeds.informatik.tu-darmstadt.de/RAF07/papers/vince_orgovan.pdf" style="color: blue; text-decoration: underline; text-underline: single"&gt;his paper&lt;/a&gt; that almost 400 million PCs provide data to Microsoft. Not only was the data available but Windows XP supported &lt;a href="http://download.microsoft.com/download/5/9/2/592d2308-a6a2-48ad-ae8f-72f888b9d361/CER_Implementation_Plan.pdf" style="color: blue; text-decoration: underline; text-underline: single"&gt;corporate error reporting&lt;/a&gt; in exactly the same way that it supported error reporting to Microsoft.&amp;nbsp; &amp;nbsp;It just needs changing a few registry keys to do this.&amp;nbsp; The Windows debugger &amp;ldquo;!analyze&amp;rdquo; can be used on the error data, much as it is used internally.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;This took the wind out our collective sails.&amp;nbsp; If shipping software was providing all these mechanisms what could we suggest as a next step that had compelling value?&amp;nbsp; Most corporations would like to leave the job of correcting defects to the software makers (proprietary or open source) anyway! The software makers were in a much better position to look across many deployments and correct defects in the software. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;The only compelling reason we could come up with to build a mechanism for data collection was to help with deployment on the user side. &amp;nbsp;The data collection mechanism would collect failure data during the preliminary testing. This data would then be fed into a model that could be used to judge the maturity level of the deployment.&amp;nbsp; Kind of&amp;nbsp; a &lt;a href="http://www.sei.cmu.edu/cmm/" style="color: blue; text-decoration: underline; text-underline: single"&gt;CMM (Capability Maturity Model)&lt;/a&gt; for reliability.&amp;nbsp; &amp;nbsp;We even suggested that we have an &lt;a href="http://en.wikipedia.org/wiki/ITIL" style="color: blue; text-decoration: underline; text-underline: single"&gt;ITIL&lt;/a&gt; management practice around this.&amp;nbsp; This would potentially allow the ITIL model to not only give good qualitative measures like it does today but to quantify the reliability of a deployment.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;This in itself is a very useful thing to have, but I cannot believe that it is the only reason that we would collect failure data at the end user level. &amp;nbsp;Let me know if you think of any others. &amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Open Source would have much the same issues but for the fact that there is not a central organization that collects all this failure data.&amp;nbsp; The situation in Open Source may be the reverse of the situation for proprietary software makers in that the failure data is collected at the IT organization level and not centrally.&amp;nbsp; How does this failure data really result in code defect corrections? I guess that it is either pre-analyzed and submitted as a bug or people patch their own instances of the source code. &amp;nbsp;But my opinion is that eventually open source software systems will have to build central repositories of failure data&amp;nbsp; in much the same way that commercial software vendors have built them.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=3617" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Software+Reliability/default.aspx">Software Reliability</category><category domain="http://port25.technet.com/archive/tags/Anandeep/default.aspx">Anandeep</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/Community/default.aspx">Community</category></item><item><title>Unsexy Development</title><link>http://port25.technet.com/archive/2006/10/27/Unsexy-Development.aspx</link><pubDate>Fri, 27 Oct 2006 14:27:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:3203</guid><dc:creator>anandeep</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=3203</wfw:commentRss><comments>http://port25.technet.com/archive/2006/10/27/Unsexy-Development.aspx#comments</comments><description>&lt;p&gt;I loved doing development in a research and university environment. You got to write cool code, prove new ideas, break new ground and generally ended up with bragging rights to say &amp;ldquo;I did an image recognition algorithm on a multi-layer architecture implementing reactive and planning parallelism on an autonomous robot!&amp;rdquo;&amp;nbsp; The code had to work on your workstation or maybe on a demo machine once.&amp;nbsp; Once you wrote the code, the only people who touched the system were hapless graduate students implementing the next big idea. They had to come to you and you could then dazzle them with your insight!&amp;nbsp; This was &amp;ldquo;sexy development&amp;rdquo;! &lt;/p&gt;&lt;p&gt;When I moved to industry and wrote software for day to day use &amp;ndash; things changed.&amp;nbsp; Now you had all those people with &amp;ldquo;manager&amp;rdquo; titles telling you what to do, and those people called &amp;ldquo;testers&amp;rdquo; who told you why your code sucked (you couldn&amp;rsquo;t logically argue your way out of that because the weasels usually had proof)!.&amp;nbsp; Of course being consummate professionals you adapted. You got the religion of &amp;ldquo;bullet proof code&amp;rdquo; and worked on making sure the testers only had &amp;ldquo;fit and finish&amp;rdquo; bugs filed against you. Which the intern could work on. &amp;nbsp;That was still fun&amp;nbsp; - a different challenge maybe not as &amp;ldquo;pure&amp;rdquo; as designing a neat new algorithm but pretty good nevertheless! &lt;/p&gt;&lt;p&gt;You got past the testers but when they integrated the components that you had bullet-proofed to run end-to-end or user acceptance tests, unexpected stuff happened. Who would have thought that they would configure the machine that way or that another non-surface component could pass you null strings. Now you had to plan not only for the testers &amp;ndash; but also for other developers and those pesky sys admin guys.&amp;nbsp; How did they become sys admins? They couldn&amp;rsquo;t tell a polynomial solution from a log n solution anyway!&amp;nbsp; But being nothing if not adaptable you adapted. &amp;nbsp;You now built bullet proof AND idiot proof code.&amp;nbsp; (My father, a military pilot and flight instructor, when teaching flight safety used to say &amp;ldquo;Nothing is foolproof because fools are so ingenious!&amp;rdquo;).&amp;nbsp; It got a little boring at times but you still had the satisfaction of building something that was &amp;ldquo;engineered&amp;rdquo;. &lt;/p&gt;&lt;p&gt;I thought I had shipped the product but I&amp;nbsp; found couldn&amp;rsquo;t sit back and relax. The support guys were making insinuations against my code. It didn&amp;rsquo;t work they said &amp;ndash; and you hadn&amp;rsquo;t put in the right level of granularity in the logs for them to do a diagnosis.&amp;nbsp; This had nothing to do with Computer Science &amp;ndash; any bozo could write stuff to the log. Why didn&amp;rsquo;t the intern do it? What do you mean he can&amp;rsquo;t make sense of my code? Yeah, I do know my code best. I guess it&amp;rsquo;s the right thing to do. Certainly not as fun as designing, bullet proofing and idiot proofing new code but good supportability is &amp;ldquo;sine qua non&amp;rdquo; &amp;nbsp;for a well done project! &lt;/p&gt;&lt;p&gt;Is that the end of it? No, further design and coding needs to be done for making software more manageable, to make the logs more systematic, to make sure that the product works when its deployed to multiple configurations, that it performs well and fails gracefully. &lt;/p&gt;&lt;p&gt;Unless you specialize in a certain aspect of manageability, reliability or diagnosis &amp;ndash; this is not &amp;ldquo;sexy&amp;rdquo; development.&amp;nbsp; I probably wouldn&amp;rsquo;t get as much satisfaction from designing event logs as I would from designing a new search algorithm.&amp;nbsp; &lt;/p&gt;&lt;p&gt;I was getting paid to do all this (ok, so it was my own startup but I was getting paid in VC money!) and it was still very hard. We did do it but it took lots of coaxing of our developers to pay attention to this.&amp;nbsp; They all preferred to work on the next release that had all the sexy features. Even though they knew that to make the startup successful and still have a job, the unsexy stuff needed to be done and done RIGHT!&lt;/p&gt;&lt;p&gt;When you are working for the &amp;ldquo;love of the game&amp;rdquo; &amp;nbsp;and not money, like in Open Source &amp;ndash; who coaxes you? &amp;nbsp;Who does the unsexy stuff? Are there enough people who specialize in the esoteric aspects of event logs, that this is not&amp;nbsp; a problem? Or do users who need the feature &amp;ldquo;just do it&amp;rdquo; and add the code to the community version? Or are things slipping through the cracks?&lt;/p&gt;&lt;p&gt;I did a sweep of the usual suspect Linux developer mailing lists and found that there is concern about whether unsexy stuff gets done. Here is a typical comment that I saw &lt;/p&gt;&lt;p&gt;&amp;ldquo;&lt;em&gt;I think that the only issue with Open Source boils down to this:&lt;br /&gt;&lt;br /&gt;The things that nobody wants to do, but somebody has to.&lt;br /&gt;&lt;br /&gt;Nobody wants to think about documentation. Or user interfaces. These things are hard, tedious, and a hell of a lot more boring than actually coming up with stuff to &amp;quot;make things work&lt;/em&gt;&amp;quot;.&amp;rdquo; &amp;nbsp;(from &lt;a href="http://ask.slashdot.org/comments.pl?sid=103772&amp;amp;cid=8853472" style="color:blue;text-decoration:underline;text-underline:single;"&gt;here&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Documentation is famously one of those things that is considered &amp;ldquo;unsexy&amp;rdquo; (well, ok in commercial software too).&amp;nbsp; There are efforts like &lt;a href="http://www.grokdoc.net/index.php/Main_Page" style="color:blue;text-decoration:underline;text-underline:single;"&gt;Grokdoc&lt;/a&gt; to make documentation of Open Source projects sexy by making it a priority. But the &amp;ldquo;who does unsexy?&amp;rdquo; issue is a real concern in Open Source.&lt;/p&gt;&lt;p&gt;We ran into a similar issue with event logs. You know the text stuff you write so that you can find out later what happened. &amp;nbsp;At the lab we just did an investigation of whether we could tell if one of our boxes had crashed from the syslog and from console messages. We were a little taken aback by how many times we couldn&amp;rsquo;t tell what states the machine had gone through. &lt;/p&gt;&lt;p&gt;On doing some investigation we found that the most influential project that was addressing this issue, &amp;nbsp;the &lt;a href="http://evlog.sourceforge.net/" style="color:blue;text-decoration:underline;text-underline:single;"&gt;Evlog project&lt;/a&gt; (most supported by IBM) has been quiet since 2004. This code is used internally within IBM but was not mainstreamed into the Linux kernel.&lt;/p&gt;&lt;p&gt;How does one get &amp;nbsp;unsexy stuff like this into the Linux kernel so that is comparable to UNIX/VMS/Windows? &lt;/p&gt;&lt;p&gt;I contend that it is critical to Open Source that attention be paid to the event logs. They are critical in making any operating systems reliable. VMS/UNIX/Windows all went through the process of making their event logs more meaningful &amp;ndash; and this has helped make them much more reliable. &lt;/p&gt;&lt;p&gt;We will be addressing this further in the next couple of weeks &amp;ndash; keep tuned! &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=3203" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Software+Reliability/default.aspx">Software Reliability</category><category domain="http://port25.technet.com/archive/tags/Anandeep/default.aspx">Anandeep</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/Community/default.aspx">Community</category></item><item><title>Memtest</title><link>http://port25.technet.com/archive/2006/07/11/Memtest.aspx</link><pubDate>Tue, 11 Jul 2006 18:32:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:2727</guid><dc:creator>jcannon</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=2727</wfw:commentRss><comments>http://port25.technet.com/archive/2006/07/11/Memtest.aspx#comments</comments><description>&lt;span&gt;&lt;strong&gt;*Updated*&lt;/strong&gt; So, this weeks tech tip is about memtest, and yes, I am sure there are some that might scoff at this....But I think we have a tendency to loose sight of the basics. For instance, last week we had quite an interesting time debugging a problem that occurred intermittently and we where not able to find a way to consistently reproduce the problem. We ran through all kinds of things until we decided for grins and giggles to run memtest. And low and behold, it found memory errors. We replaced the memory and have not seen a recurrence of the problem.&lt;br /&gt;&lt;br /&gt;We decided to pull this old but trusty tool back out of the stable. Special thanks goes to Kyle Adams and Stephen Zarkos who did a lot of the footwork on this one.&lt;br /&gt;&lt;br /&gt;Memtest is a simple program that is designed for the x86 architecture.&amp;nbsp; You would use it for things such as when hardware hangs or when your computer doesn&amp;rsquo;t boot at all.&amp;nbsp; Either way, you could just grab memtest and throw it onto your computer.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Actually, there is not a hard and fast rule when to use it. There are two ways I would put it in the toolbox to use, and they have to do with methodology more than anything.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;ol style="margin-top: 0in"&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;I have no clue what is wrong and I am completely out of ideas, I am just stabbing in the dark. &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;As a standard suite of checks and tests I do to debug a problem I will run memtest. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;Honestly, I think number one is one that happens more in real life. A lot of people do not think that HW like memory will be causing any problems. They forget that often with memory it is not a black or white issue. It is not an all or nothing failure. It sometimes happens and sometimes it does not. I have never really seen a failure that I would say without question, that is memory!&lt;/span&gt;&lt;span&gt;&lt;br /&gt;You can get it here (Linux GPL, and windows version);&amp;nbsp;&amp;nbsp; &lt;a href="http://www.memtest86.com/"&gt;&lt;font color="#800080"&gt;http://www.memtest86.com/&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(There is also a non GPL, but still free version for windows available here &lt;a href="http://hcidesign.com/"&gt;http://hcidesign.com/&lt;/a&gt; I am not to familiar with how it works, but the web page gives you a lot on information)&lt;/span&gt; &lt;p&gt;&lt;span&gt;One thing to note, this can run for a very long time, several hours in some cases.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span&gt;GENERAL FEATURES&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;Memtest gives a user the ability to access the memory in an effort to pinpoint a problem in the memory itself.&amp;nbsp; It uses a set of algorithms to check for consistency and errors in the placing of memory.&amp;nbsp; The algorithms that are used by memtest to test the memory are the following:&lt;/span&gt;&lt;font face="Times New Roman" size="3"&gt; &lt;/font&gt;&lt;/p&gt;&lt;ol&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Address test, walking ones, no cache&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Fills in the address space with ones in a sequential order&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Address test, own address&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Puts the address of the test address in itself&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b. Test for addressing errors&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Moving inversions, ones and zeros&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Checks the addresses using a series of ones and zeros&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Moving Inversions, 8 bit pattern&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Uses an 8 bit wide pattern to test for errors on &amp;ldquo;wide&amp;rdquo; memory&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Moving inversions, random pattern&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Creates a set of random numbers and its compliment, writes to address.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Block Move, 64 moves&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Memory is initialized with 8 byte inverting patterns.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b. Moved every 4 MB&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Moving inversion, 32 bit patterns&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Shifts data patterns one bit for each successive address&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Random number sequence&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Writes a set of random numbers into memory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b. Checks the memory for consistency on the next pass&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Modulo 20, ones and zeros&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Uses the Modulo-X algorithm to check for errors not detected by inversions because of buffering&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin: 0in 0in 0pt; tab-stops: list .5in"&gt;&lt;span&gt;Bit fade test, 90 minute, 2 patterns&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Initializes memory and then sleeps for 90 minutes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b. Checks memory after the 90 minutes is up&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span&gt;&amp;nbsp;The point: applications still need error-free memory to execute correctly, especially today with application complexity increasing all the time. How do you replicate problems in your lab environment with such diverse environments across your network, or&amp;nbsp;even more importantly, &amp;nbsp;separate hardware from software failure?&lt;/span&gt;&lt;span&gt;As always, comments/suggestions etc appreciated.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span&gt;Hank Janssen&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=2727" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Technical+Analysis/default.aspx">Technical Analysis</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/Dev+Center/default.aspx">Dev Center</category><category domain="http://port25.technet.com/archive/tags/App/default.aspx">App</category></item><item><title>Testing software on multiple platforms - do we trust the tools or rely on methodology?</title><link>http://port25.technet.com/archive/2006/06/28/Testing-software-on-multiple-platforms-_2D00_-do-we-trust-the-tools-or-rely-on-methodology_3F00_.aspx</link><pubDate>Wed, 28 Jun 2006 20:13:00 GMT</pubDate><guid isPermaLink="false">af7480c4-26b7-468d-87b0-2acebabb473d:2684</guid><dc:creator>admin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://port25.technet.com/rsscomments.aspx?PostID=2684</wfw:commentRss><comments>http://port25.technet.com/archive/2006/06/28/Testing-software-on-multiple-platforms-_2D00_-do-we-trust-the-tools-or-rely-on-methodology_3F00_.aspx#comments</comments><description>&lt;p&gt;Consider this scenario &amp;ndash; the CIO&amp;rsquo;s office just called. They have decided to follow your recommendation and are going to use JBoss (substitute favorite open source software package here) as their application server (substitute database server/web server/whatever server here). They also decided to make it standard on both your Windows servers and your Linux/NetBSD (substitute favorite flavor of open source operating system here). Now, they ask you &amp;ndash; will it handle the loads on both operating systems? They don&amp;rsquo;t want any of the servers to be idle after all that investment they made.&lt;/p&gt;&lt;p&gt;You have a reputation as a &amp;ldquo;data driven&amp;rdquo; dude, i.e. you look for empirical evidence in making decisions like this. No hand wavy &amp;ndash; &amp;ldquo;it will work &amp;hellip;. maybe&amp;rdquo; for you. You know your workloads cold. You know you will run test scripts to simulate those workloads. &lt;/p&gt;&lt;p&gt;The million dollar questions are (drum roll please): &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Will you use a standard tool or testing package (such as Grinder with JBoss) that works on BOTH Windows and Linux ? &lt;/li&gt;&lt;li&gt;Will you trust your test scripting skills and your methodologies and write your own scripts &amp;ndash; using whatever tools make sense on Windows and Linux? &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Why are these questions important?&amp;nbsp; The objective is to have consistent and comparable tests on each platform &amp;ndash; and it is important to make sure that the testing process does not introduce any bias one way or the other. &lt;/p&gt;&lt;p&gt;So which approach&amp;nbsp; - &lt;strong&gt;&lt;em&gt;trusting the tools&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;trusting your methodology&lt;/em&gt;&lt;/strong&gt; allows for consistent and comparable tests on each platform? &lt;/p&gt;&lt;p&gt;Lets examine some pros and cons of each approach:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://port25.technet.com/photos/images/images/2683/original.aspx" border="0" alt="" width="641" height="552" /&gt;&lt;br /&gt;&lt;br /&gt;Damn! The laws of physics strike again. Looks like there is no easy answer since the &lt;a href="http://en.wikipedia.org/wiki/Observer_effect"&gt;observer effect &lt;/a&gt;will always be present i.e. observing the software using testing software impacts the software being observed so that a precise observation can&amp;rsquo;t be guaranteed. &lt;/p&gt;&lt;p&gt;So what do you do in such a case? &lt;/p&gt;&lt;p&gt;My friend (and I think he works with me too) Hank Janssen had the following to say (I will not point you again to his &lt;a href="http://port25.technet.com/archive/2006/06/07/2582.aspx"&gt;handsome visage &lt;/a&gt;like I did in my last blog or people will start talking!)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If the same tools are available on both platforms, then use the same tools. &lt;/li&gt;&lt;li&gt;Stay with industry standard, and or OSS accepted methods of testing. &lt;/li&gt;&lt;li&gt;Have a list of &amp;lsquo;acceptable&amp;rsquo; tools to pick from &lt;/li&gt;&lt;li&gt;Publish a list of methodologies/guidelines you are using (so that people can make their own judgments)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;I am not so married to the tool as I am married to a consistent and approved process.&amp;nbsp; There will be many different tools for different languages/applications/infra structures/protocols and the like.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;I wanted to stay away from testing methodologies that are so different between different platforms that I would have a hard time interpreting the results. For example, using Loadrunner or Winrunner on Windows and than Grinder on Linux. (In case of Java loads) This example would result in apples to not so apples comparison. Most OSS tools (jMeter and Grinder) are available on both platforms.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Advice from the testers in Microsoft &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I spoke to a few people who do testing for a living within Microsoft and here is some advice they had to offer &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Do think about configuration parity of hardware. For instance you may need more RAM for Windows to run the application and a higher capacity network card for Linux. Consider if your goal is to actually establish the configuration parity or is it to find which OS scales under a given configuration? &lt;/li&gt;&lt;li&gt;If you do end up trusting the tool &amp;ndash; define a sample case. This is a test case for which you roughly know the performance parameters on each platform. Run it under the testing tool for both platforms to make sure there are no significant differences in performance due to the tool itself. Of course defining a sample case may not be a trivial task &amp;ndash; but use one that tests the most critical parameter for your application &amp;ndash; memory, CPU or I/O for instance. &lt;/li&gt;&lt;li&gt;Consider running the software being tested on its own server&amp;nbsp; &amp;ndash; without running any additional testing software on the servers. Provision a remote server with the testing tool (choose one), and install agents for that tool on each server with the software being tested. Measure network latency and I/O latency and run the tests simultaneously from the remote machine to each server. This works if the software being tested requires only simple parametric commands to run or is entirely run from a UI. Doesn&amp;rsquo;t work very well if complex scripting is required to run on each server. &lt;/li&gt;&lt;li&gt;Do understand the effects of running tests through the entire system. There is at least one war story that I can vouch for, it entailed testing of a web retailers production systems under peak load conditions, using test scripts on client systems. Unfortunately the test team forgot to turn off the connection from the web systems to the warehouses that carried the inventory because someone missed that in the end to end testing plan!&amp;nbsp; Some poor soul written into a test case got umpteen gizmos from the retailer. The system worked as advertised, which was not the intent of the test team (at least for the test)! &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;But enough about us, what approach do YOU take, dear readers? Please do let us know - we are looking for war stories, dispatches from the data centers, tales from the trenches and any other feedback on testing disparate platforms that you have to share!&lt;/p&gt;&lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://port25.technet.com/aggbug.aspx?PostID=2684" width="1" height="1"&gt;</description><category domain="http://port25.technet.com/archive/tags/Anandeep/default.aspx">Anandeep</category><category domain="http://port25.technet.com/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://port25.technet.com/archive/tags/Community/default.aspx">Community</category></item></channel></rss>