<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ASI &#187; Configuration Management</title>
	<atom:link href="http://www.asi-test.com/ASI/category/cm/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.asi-test.com/ASI</link>
	<description>Automated Solutions, Inc. - Leadership in Software Development, Testing &#38; Test Automation</description>
	<lastBuildDate>Thu, 02 Feb 2012 17:38:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>SDLC Hardware Environments</title>
		<link>http://www.asi-test.com/ASI/sdlc-hardware-environments/</link>
		<comments>http://www.asi-test.com/ASI/sdlc-hardware-environments/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 20:15:38 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[ASI General]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[Quality Center]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Management]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[quality center]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://www.asi-test.com/ASI/?p=213</guid>
		<description><![CDATA[This blog article might seem to many people as a very basic topic and the content obvious. However I&#8217;m surprised at how often I still come across technology departments that do not have proper hardware environments for software development that maintains code integrity, security, isolation and Production similar configurations. Let&#8217;s discuss the basic high-level configuration [...]]]></description>
			<content:encoded><![CDATA[<p>This blog article might seem to many people as a very basic topic and the content obvious. However I&#8217;m surprised at how often I still come across technology departments that do not have proper hardware environments for software development that maintains code integrity, security, isolation and Production similar configurations. Let&#8217;s discuss the basic high-level configuration concept of a proper software development environment. <span id="more-213"></span> Note that this discussion is a high-level discussion and will not discuss details about actual hardware specs and layouts since every development shop has different requirements.</p>
<p>So the basics of a proper software development environment are going to consist of a Dev Environment, QA Environment, Staging Environment and Production Environment, with a version control server supporting these environments that contains your code. The only exception to this is your Production environment &#8211; that environment may or may not have direct access to the version control server for security reasons. If it does not have access to the version control server then you will not be able to export your Trunk to the Production servers so you will need to have a build process that enables you to build install scripts that install the new version of code into Production (more on that later). Let&#8217;s look at an overview of each environment:</p>
<table style="width: 536px; height: 279px;" border="2" width="536" align="center">
<tbody>
<tr>
<td><img class="size-full wp-image-214" title="SDLC Env" src="http://www.asi-test.com/ASI/wp-content/uploads/2010/03/SDLC-Env.png" alt="SDLC Env" width="522" height="250" /></td>
</tr>
</tbody>
</table>
<p>Dev Environment &#8211; this environment is owned by the software developers (programmers). This is an environment that enables them to work on new code and do anything necessary to the environment to support their development efforts. This can include re-configuration of the environment, dumping new data, changing file access and even crashing their environment. Normally this environment is configured &#8220;similar&#8221; to the Production environment, but scaled down significantly (like they may have 1 web server and 1 database server versus 5 web servers and 8 database servers like in the Production environment). Likewise the server(s) the programmers are developing on are actually a shared hardware environment with each developer having their own &#8220;area&#8221; to work in by virtualizing the server and providing each develop their own private slice to develop in (this is a great configuration as they can work independent of the other developers and not worry about bringing them down if they want to start and stop processes and likewise reduce server cost in reducing the number of servers needed to support the developers). This environment would be for developers only to work in and even though it may be virtualized, there still may be many development servers based on the size of the development team. The environment is considered dynamic and unstable due to the constant changes that occur in the process of developing code to support new functionality for an application. This environment needs access to the version control system to check in &amp; out code.</p>
<p>QA Environment &#8211; this environment is owned by the software testers. This is an environment that enables the software testers to work in a &#8220;controlled&#8221; environment that is as close to a Production configuration as possible. Since a Production environment normally consists of numerous servers, databases and network gear it normally isn&#8217;t possible to duplicate Production due to cost reasons. Therefore the QA environment will be a scaled down instance of Production. So if the Production environment consists of 5 web servers that are load balanced and 8 databases servers that consist of replication and offline database instances used for reporting &#8211; you might want to create a minimal hardware environment without the load balancing or full replication in place. Therefore you might just have 1 web server and 1 database server that contains all the database and table instances with replication contained on that one server instead of across numerous servers. Although this reduces the similarities between QA and Production, it is a more cost effective approach when several QA environments are required. Normally the QA Department will identify that issue as a business risk and offset that risk with having a Staging environment that will be closer in configuration to the Production environment that QA can log into and perform Production load tests to address the performance of the application &amp; hardware when under load testing and using load balancers.</p>
<table style="width: 368px; height: 320px;" border="2" width="368" align="center">
<tbody>
<tr>
<td><img class="size-full wp-image-215" title="QA Environment" src="http://www.asi-test.com/ASI/wp-content/uploads/2010/03/QA-Environment.png" alt="QA Environment" width="359" height="305" /></td>
</tr>
</tbody>
</table>
<p>Now the QA environment will normally consist of several duplicate environments. So if you have scaled down your Production environment to 1 web server and 1 database server for QA, then you will most likely want to have several of these environments so that you can be testing various projects concurrently that have different delivery dates without impacting the testing of another project. So if you look at this image we show a basic diagram of how you may have a QA1 and QA2 environment (there could be more). So why can&#8217;t I test multiple projects on one environment and reduce the hardware environments? You can, however you run into a coordination effort within the test team when it comes to shared processes and data. Maybe you have Project 1, 2, 3 and 4 that are going to be deployed to Production next week but Project 5 is a large project that will not be delivered to Production for another two weeks. For projects that make significant changes to some processes and/or database schemas, and that project is not being delivered to Production the same time as the other projects currently being tested, then you really need a separate environment to host that project. Otherwise you invalidate the testing of the other projects due to changes in the environment. Normally you want to have several QA environments and target projects to these servers based on functional changes and delivery dates. It is also very important that your database server be robust enough to hold a very large amount of data if not a full copy of the Production database. Numerous issues will always revolve around data and if you don&#8217;t have a robust database you may completely miss defects in your system. This environment needs access to the version control system to check out code only (changes to code should not be made in the QA environment, only in development &#8211; follow proper standards and processes). The developers should not have access to this environment to avoid any changes being made (security/code integrity issue). Access should be restricted to guest access for developers, but full access to the testers.</p>
<p>QA Tools &#8211; in regards to tools I specialize in and use the Quality Center, LoadRunner and QuickTest Pro so I will address environments based on these tools. This will give you a basis on configurations that you can apply to other tools:</p>
<p>Quality Center &#8211; This is a Test Management tool and is normally a single server meeting the specs specified by the installation guide. I normally have the Quality Center software and the Quality Center database (I typically use Microsoft SQL Server) installed on the same server. If you have a robust server you can avoid having to purchase multiple servers. This will reduce cost. The Quality Center then connects to all the various PCs of the users accessing the tool. Normally this server is behind the firewall.</p>
<table style="width: 358px; height: 271px;" border="2" width="358" align="center">
<tbody>
<tr>
<td><img class="size-full wp-image-216" title="QC Setup" src="http://www.asi-test.com/ASI/wp-content/uploads/2010/03/QC-Setup.png" alt="QC Setup" width="346" height="259" /></td>
</tr>
</tbody>
</table>
<p>LoadRunner &#8211; normally I like to have 3 servers for this setup &#8211; one main server hosting the full LoadRunner installation and where the Controller is run from. Then I like to have a minimum of two servers used by VUGen to off load the scenarios that are going to be executed. These servers take care of connecting to the farm of servers that are going to be load, stress and/or performance tested. Likewise it helps to keep the data processing being collected during the load tests, off the server that is running the Controller for more accurate monitoring of the load test. The server hosting the Controller is normally behind the firewall; however the Virtual User Generators may or may not be behind the firewall depending on the type of load testing being performed.</p>
<table style="width: 370px; height: 388px;" border="2" width="370" align="center">
<tbody>
<tr>
<td><img class="size-full wp-image-217" title="LoadTest Env" src="http://www.asi-test.com/ASI/wp-content/uploads/2010/03/LoadTest-Env.png" alt="LoadTest Env" width="354" height="373" /></td>
</tr>
</tbody>
</table>
<p>QuickTest Pro is installed on individual PCs so there is no special setup or server needed. If a Concurrent License Server is being used, I would just install that on the same server as the Quality Center to save money, because this &#8220;server software&#8221; is minimal in resources and a very small footprint on this server. Likewise QuickTest Pro needs to be able to connect to the Quality Center to save, open and run test scripts so having the Concurrent License Server software running on this server helps to eliminate any access issues with the Quality Center.</p>
<p>Staging Environment &#8211; this is an isolated environment that is as close to the Production environment as possible. This environment is used primarily for two purposes:<br />
1.) User Acceptance Testing (UAT) where the business user(s) log in to verify the functionality before it goes live in Production.<br />
2.) Performance Testing.<br />
If the Production environment is too large to duplicate here due to cost reasons, then create a scaled down version that maintains the same type of hardware specs, database and network gear (like load balancers, firewalls, routers, switches etc) but yet still provides for a very similar configuration so that you can extrapolate your results correctly. So instead of having 6 web servers with 2 load balancers, you might have 2 web servers with 1 load balancer. At least this way you can do performance testing with a load balancer with the test scenario. Likewise the database should ideally be a Production copy. Normally you would want to use a copy of the backup snapshot here. As long as the hardware specs and hardware configurations are the same as Production (just scaled down in quantity) then you should be able to do a decent extrapolation of your load/stress/performance testing results to predict how Production will perform. If this environment is not the same hardware specs and setup, then it is impossible to do any kind of extrapolation of data, and you&#8217;ll only be able to use this as a UAT environment. This environment will have access to the version control system to check out the code base being deployed to Production and is intended to have restricted access to everyone using it &#8211; it should be just like it would be in Production, however there should be NO connection to Production. I ran into this once where one environment was doing Production database replication to the Staging environment that everyone forgot about. So when I ran a performance test with LoadRunner I directly impacted Production performance since the backup database was maintaining a live connection to the Production database. By slowing down the Staging server significantly with a performance test, the backup instance could not update from Production as expected and affected the end-user&#8217;s experience on the web application. Not good. This old design had been overlooked and we then looked at moving this database replication to another Production database.</p>
<p>Production Environment &#8211; this is your robust Production environment that can handle high volumes of load, maintain security and have limited server and database access by appropriate personnel only (SysAdmins, DBA&#8217;s, Release Manager, and potentially architects &#8211; every environment is different on Production access; the fewer people with access maintains the best security). This environment may not have access to the version control system. If it does then the Release Manager can deploy code directly to the server, but if it does not then a build tool needs to be used to bundle the code into an install script/build file/tar file/etc. This is a great approach if you can do it because you take security to a higher level and you avoid mistakes made by individuals executing their various tasks in the Production environment. In an environment where a build tool is not used, then you typically have at least 3 individuals in Production doing tasks for every release &#8211; a release engineer, SysAdmin and a DBA. With a build tool, all these tasks are scripted and it becomes an executable script that a SysAdmin will move to the Production environment and run. Simple and reduces the risk of error made by numerous people working directly on the Production servers.</p>
<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=282419851791791&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://www.asi-test.com/ASI/sdlc-hardware-environments/" send="true" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div>]]></content:encoded>
			<wfw:commentRss>http://www.asi-test.com/ASI/sdlc-hardware-environments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Configuration Management Overview</title>
		<link>http://www.asi-test.com/ASI/software-configuration-management-overview/</link>
		<comments>http://www.asi-test.com/ASI/software-configuration-management-overview/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 14:48:10 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.asi-test.com/ASI/?p=67</guid>
		<description><![CDATA[Software Configuration Management Overview In software development it is critical to maintain a historical trace of the changes your software programs go through and what code is being moved to what environment.  Software developers (programmers) need the ability to go back in time whether it is recent or in the past, to a specific version [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Software Configuration Management Overview</strong></p>
<p>In software development it is critical to maintain a historical trace of the changes your software programs go through and what code is being moved to what environment.  Software developers (programmers) need the ability to go back in time whether it is recent or in the past, to a specific version of the code if necessary.  Even Test Engineers implementing test automation scripts have the same need.  This is only possible when using a version control tool wrapped in process.  This document is a simple overview and explanation of the key principles involved in implementing a simple yet effective Configuration Management process. <span id="more-67"></span></p>
<p>Configuration Management encompasses four key principles in software development:</p>
<ol>
<li>Process Control</li>
<li>Version Control</li>
<li>Build Management</li>
<li>Release Management</li>
</ol>
<p><strong>Process Control</strong><br />
We begin with Process control because without Process and Procedures you will be working in a chaotic environment where things are done at random and you have no ability to revert to early changes in a code base.  Some people resist Process as they think it is too restrictive and doesn’t enable them to get the “job done”.  A solid process will enable people to work efficiently and in a “controlled environment” so that changes are not lost and easily accessed if needed.  Process does NOT have to be restrictive, annoying or time-consuming.  A properly structured process should be “no big deal” and work procedures should execute smoothly.</p>
<p>This Process should define the tools used and how code is moved across environments.  This process should be defined, documented and the tracking of code versions implemented across environments should be tracked (ideally in a tool).  Surprisingly it doesn’t take a lot of effort to implement a solid process and enable you to “mature” your software development process which helps you climb the Capability Maturity Model (CMM) levels.  I have implemented simple processes that have enabled me to pass sophisticated process audits conducted by Ernst &amp; Young without any deficiencies on the first audit.</p>
<p>Processes can be as complex as you want but I discourage that as the more complex, the more effort it is to implement and easier for people to find excuses not to use it.  Keep it Simple so that it will be used!  It can be automated or manual – my current process is a mix with a lot of manual process but with some scripts to help with deployments.</p>
<p>Process begins with documentation!  Document your process and make the process known.  If you can’t easily explain the process then there will be a definite problem with implementing it.  With the documentation should be some simple workflow diagrams to provide a simple visual of process – some people are more visual and understand things quicker by looking at a diagram.  You can use a simple tool like Powerpoint or get more advanced with a tool like Visio.</p>
<p>Now you need some tools to finish the process…</p>
<p><strong>Version Control</strong><br />
Version control is simply the ability to track specific versions of code that is being developed.  A developer will “commit” changes to the Version Control repository to save specific points in time with what the code was like.  By doing this a developer has the ability to go back in time and grab a specific version of the code in case it was decided a specific code change was not needed or all together wrong and the developer wants to start over again – this is the easiest and most sophisticated way of doing this.  The process of saving (“committing”) specific versions of code and then grabbing a specific version is known as “check-in” and “check-out”. Each time someone needs to edit a file, they check it out for exclusive editing and then check it back in to the repository when finished, thus creating a new version.</p>
<p>When using Version Control you can also do the following tasks:</p>
<ul>
<li>Roll back to a previous version of a specific file</li>
<li>Compare two versions of a file</li>
<li>Provides a locking mechanism so that no one else can modify the file while you are making your changes</li>
<li>Create branches so that multiple developers can be developing different code at that same time</li>
<li>Ability to move specific file versions from one environment to another (Dev to QA to Staging to Production)</li>
</ul>
<p><strong>Build Management</strong><br />
This part of the process can be either manual, automated or a hybrid of some automation with some manual processes – this is what I currently implement.</p>
<p>The term &#8220;Build Management&#8221; is defined by Wikipedia as:</p>
<p><em>     “Software <strong>build management</strong> is the defined and controlled process of delivering the right artifacts efficiently.”</em><em></em></p>
<p>What is important here is that you need to define and control what versions of software are being moved from environment to environment – and most importantly what is being tested by the software testers is the same code being pushed to Production.</p>
<p>Build Management Process:</p>
<ul>
<li>Trunk &#8211; A typical process is to begin with a base foundation of a code base.  This is known as the “Trunk” and is representative to what is actually in your Production environment.</li>
<li>Branch &#8211; A developer will request a “branch” which is a copy of the “trunk” for the developer to work in.  Numerous “branches” can be created so that multiple developers can work on various projects at the same time without stepping on each other.  This is important when one project will be delivered to Production before another project; this enables the developers to work independently of each other.  A “branch” can then be provided to the testing team to be verified for its functionality (typically Functional Testing and Regression Testing are applied to a branch).  This “branch” can easily be moved to a secure QA environment for testing.  Multiple projects can be handled and tested independently this way.</li>
<li>Staging Release – when a group of projects have been tested and ready to be tested at the “System/Integration Testing” level, then the verified “branches” will be merged into a transitional version of the code base that would ideally be deployed to Production.  This naming convention can be anything.  In our environment we first create a “Candidate Release” which is all the branches merged into a single code base (the “future trunk”) and tested in the QA environment (remember this process brings all the code modifications together in one code base so now the testers can conduct “System/Integration Testing”, “Performance Testing” and a final “Regression Test”).  Once this has been certified, we then create a “Stable Release” (which is a copy of this Candidate Release) for deployment to the Staging environment and ultimately the version that is moved to the Production environment.</li>
<li>Trunk update – finally once the Production environment has been updated with the new code base, the “trunk” needs to be updated as the “trunk” is always representative of the code base in Production.  So this code needs to be “merged” to the trunk.  Now all existing branches being worked on that have not been deployed to Production yet need to be updated with the “trunk” in order to stay current.</li>
</ul>
<p align="center"><strong>“ALWAYS PROTECT THE TRUNK!”</strong></p>
<p><strong>Release Management</strong><br />
Release management is the execution process of the Build Management Process and the Process of moving code from one environment to another.  It is critical that security be implemented here as only a restricted few individuals should have the ability to merge code and have server access to move code from one environment to another.  Without this you lose all control as anyone would be able to move whatever version of code to another environment without anyone knowing.  This can not only create major issues in code, but can make debugging a Production issue a nightmare and then when someone follows the actual process and moves new “controlled code” to Production they will end up replacing the code that bypassed the process because it was never merged to the trunk properly and gets lost.</p>
<p><strong>Software Configuration Management Tools</strong><br />
I currently use the Open Source Tool “Subversion (SVN)”.  We use this in a Linux environment and primarily version control the following types of files: PHP, Javascript, HTML, and jpg images (however there are many other files under our configuration management tool but this is the majority of files we manage.</p>
<p><strong>Open Source Tool:</strong></p>
<ul>
<li>Subversion (SVN)</li>
</ul>
<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=282419851791791&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://www.asi-test.com/ASI/software-configuration-management-overview/" send="true" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div>]]></content:encoded>
			<wfw:commentRss>http://www.asi-test.com/ASI/software-configuration-management-overview/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

