Brent Strange's thoughts on Software Quality Assurance and technology
| |
|
|
| |
Overview In this screencast I walk you through doing basic browser setup and automation using a free technology stack: Visual Studio 2010 Express, the WebAii Testing Framework from Telerik, C#, and MbUnit/Gallio. Why this stack you ask? Well, what I'm showing you is a FREE, non-trial, stepping stone to help you do a proof a concept with some leading edge tools in .NET without forking out the money. One thing that we struggle with in our department is helping those who are interested in doing automation explore the possibility while aligning with technologies the development team is using. The problem is the initial cost of Microsoft's Visual Studio and Telerik's WebUi Test Studio (which uses the WebAii API) is far to much for somebody that is just tinkering (greater than $5000). This technology stack enables you to tinker, but keep in mind you will be missing out on a LOT of features and productivity enablers that come with the product that you pay for. For example with WebUi Test Studio Developer Edition you can get Visual Studio integration which gives recording functionality (a huge productivity enabler) and with Visual Studio Pro the ability to use WebUI project templates, advanced debugging, etc. Ideally, once you've proven out your POC for management you would be able to solicit for the funds for the full product, which in turn would open up another world of collaboration and productivity. Download |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The Software Testing Club has done it again! Their quarterly "print", has been redone and now we have "The Testing Planet" as a newspaper! I just got mine in the mail the other day, and I have to say it's pretty dang unique, informative and fun. You too can buy your own Printed Copy, but if you can't find it within yourself to go old school and read the printed paper, you can download it for free here. You should probably buy a copy for safe keeping though, because it contains two of the worlds best QA comics: Cartoon Tester and Do Loop Until 0. Which makes the paper INVALUABLE! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Go Daddy's Hosting R&D department is looking to hire a Software Automation Engineer/SDET. Check out the job posting here. This is an awesome opportunity my QA friend. Let me tell you why: - You'll be working with me! Uhmm, why so quiet?. not impressed? Never mind I said that then. How about you'll be working at the same company as Danica Patrick then?
- You'll be working with cutting edge technology.
- Our process is agile (we practice Kanban).
- We work on "cloud computing" products.
- The opportunity to expand your test and development skills is huge.
- The team is tight knit, super smart, we work hard, and yet have fun.
- The team is passionate about our products.
- As an Automation Engineer you aren't trapped into using one set of test tools or a language. We use what works best and makes sense for the situation.
- You'll be in the position to mentor other engineers in the art of automation.
- You'll be surrounded by other Automation Engineers which gives you the opportunity to collaborate with equally minded people.
- Oh yeah, and Go Daddy in general is awesome place to work, check out the Go Daddy careers page for more info.
You know you want to! Apply here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, March 24, 2010 |
|
| |
|
|
| |
Fellow tester and cartoonist Andy Glover showed up on the SQA testing cartoon scene earlier this year with his comic strip Cartoon Tester. Andy does a great job in recognizing, mocking, and illustrating the classic tester and developer relationship as well as the general testers' life. When I discovered and read his comic for the first time in the first Software Testing Club magazine I found myself laughing out loud. The sad, sad truth about software development. It's hilarious! Make sure and subscribe to Andy's comic here. 
|
|
| |
 |
|
| |
|
|
| |
|
|
| |
Watir Podcast #32 is out and in this episode Zeljko and Gregg have me as a guest! In #32, we spend some time talking about how our Hosting Team at GoDaddy uses Watir for website automation, the supporting framework and patterns, and much more. When your ears have a few spare minutes you can get the podcast at WatirPodcast.com and TestingPodcast.com. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, February 10, 2010 |
|
| |
|
|
| |
Being able to to run individual tests repeatedly and also being able to run them consecutively is a serious challenge when it comes to automation. I think all automation engineers want it, but some fall prey to not having it due to time constraints, setup and teardown complexity, or system access limitations. What good is automation when it can't be ran repeatedly, further more running them all at once? Seems like a dumb question, but I've seen plenty of non-repeatable tests or suites written by others, and occasionally have fallen prey myself. How do I ensure repeatability? - When planning the automation time budget, I allocate at least 15% for building infrastructure. Can't get the time? Fight for it, as an automation engineer it's your job. You have to sell the fact that if you don't have the time to build in the infrastructure for repeatability your tests will be less useful, take longer to setup due to manual intervention, and will eventually crumble into uselessness over time because manual intervention is not something you can easily hand off to another automation engineer or developer.
- I start building in repeatability with test #1. This test can often take the longest to write because I'm often times building in the infrastructure needed to run all my tests repeatedly (reusable functions, system access functions (db connections, etc), setup and teardown functions).
- When the test is done being developed, I run the test, I run it again, I run it again. repeat and rinse until it passes every time.
How do I ensure I can run all my tests consecutively? - I build each test so that it can be ran independently, which means that when I run them all from a list, no matter which order they are in, they will not interfere with each other. This is why extracting common code into methods, setup and teardown is instrumental; I will reuse it in almost every test.
- I try to run all tests after each new test is developed and completed to make sure the new test plays nice with the others. This isn't always possible if you have long running tests, but if they aren't, I definitely do this.
- I run them all at least once a day.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Monday, February 08, 2010 |
|
| |
|
|
| |
The first copy of the Software Testing Club magazine (STC) is out! I had a chance to review it before the release and I have to say it's a really cool magazine. It's fun, different, and not so stuffy. SQA talk can get so boring, but STC breaks out of that box. Between the articles written by the community, the artwork, the comic strips, and the smart-ass QA and development quotes on the bottom-left of every other page, I found myself having a great time reading it. I really enjoyed the comics by Andy Glover, and found myself laughing out loud over them. I'd like to also point out that my Do Loop Until 0 comic is in the magazine. Not necessarily funny, but a quick view of the realities of testers and developers in the software development environment. I'll admit Do Loop Until 0 can be a little deep at times, but if you study the details closely the irony will hit you like a sledgehammer. The more I do the strip, the more I realize how Spy vs. Spy influenced me as a child. Take a look yourself here, I really do think you'd enjoy it. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, February 04, 2010 |
|
| |
|
|
| |
It's on the horizon. a new, unique and fun magazine written by software testers for software testers: STC Magazine. Keep you eyes peeled this weekend for it on the Software Testing Club site. I'm highly confident you're going to like it. |
|
| |
 |
|
| |
|
|
|
| |
Saturday, January 23, 2010 |
|
| |
|
|
| |
See more development and QA related comics at Code Comics. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 14, 2010 |
|
| |
|
|
| |
Toot your automation horn! "beep-beep!" Or is that a "HONK-HONK!"? Typically people don't know what your up to in your little test automation world if you don't communicate/toot. Communication gets it out there, getting it out there will allow it to spread. Verbally, in status reports, in executive summaries, etc. "What do I toot?", you say? Toot your success and your failure: - Toot: Your test stats:
- Calculate time saved by running automated tests vs. manually running the tests. Toot the time saved per test run, per week, per month, per year.
- Automated test case count
- Test assertion count (often time x4 the number of tests)
- Count of and description of defects found
- Count and description of defects found through early involvement
- Toot: Your test framework features and value
- Code reuse
- Consistency
- Shared tests
- Patterns and practices
- Toot: Your failures:
- So that other automation engineers don't make the same mistakes
- To keep things realistic. Positive only is hard to believe!
There is a fine line for tooting automation, "To toot or not to toot?", that is the question. Don't be (too) cocky. For example, a good toot is "Automated regression passed! Now that's nice, the state of the build determined in 2 minutes!". A bad toot: "This automation is so awesome, you guys would be screwed without it!". Don't over toot. Nobody likes an annoying tooter. Toot stats in your status report. Verbally toot once or twice a week to the project/Dev team. Toot your heart out to your fellow automation engineers, they are on the same page. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, January 14, 2010 |
|
| |
|
|
| |
Zeljko Filipin has put together a site to that encompasses many testing related audio podcasts at TestingPodcast.com. It's amazing to see how audio podcasts have grown in the last year within the testing community. QA and testing voices are literally heard, and that's pretty cool. Stay tuned to TestingPodcasts.com and you'll be sure to hear my monotone voice in the next month or so. If you're a true fan you've heard it already in my testing screencasts :) |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, January 12, 2010 |
|
| |
|
|
| |
An automation engineer's test automation progress is often a black box to the project team and managers and that is serious "egg on the face" for any automation initiative. One day while automating I started reminiscing about how I used to monitor and report test case status while doing functional testing, and thought to myself "How can I do that with my test automation?". Shortly after. a process and a tool was born, and stats were included in my weekly reports. I also had the ability to provide detailed test descriptions. Now others had insight to my goal, my progress, I could estimate a completion date, and the project team could review my test descriptions looking for voids in coverage. A bonus benefit to tracking status is that multiple automation engineers can work on one project and not accidentally stomp each other. Seems like a no-brainer right?.. But more often than not I see automation engineers working in an automation black box leaving them unaccountable to all. Here is an example of how I make myself and my test automation accountable: - I stub out my test cases when reviewing requirements (the final number is my goal). For example, each test case is usually one method in my automation test suite. One hundred tests equates to 100 methods. I use separate classes to segregate functionality. My method name follow a pattern and are very descriptive, which helps me decipher what they are when they are in large lists and allows for easy alphabetical sorting.
- When stubbing the tests/method, I write the test description/steps with it's verification points. For example, in the screenshot below, the "Description" attribute contains these details.
- I track test/method development status. In the example below you can see the various status that I use. Status is the key to monitoring progress!
- I tie defect ids or agile task numbers to test cases, which makes for easy searching when I'm doing defect regression:
- Finally, I use a tool/automation to extract goal, status, and test description:
Note that in the above "Stats" screenshot I have a Test Summary "Count" which is my goal, I have a count of the various states, and have a percentage of the various states. "Completed" percentage is my progress towards the goal. I typically take a screenshot of this tab and paste it into my status report.
Note that in the above "Test Details" screenshot, I have a column for Class and Method which allow me to sort by them. Then I have a test "Description", the test "State", the "Reason" for test blockage, and finally a place for "Comments". This tab is nice for a quick overview of tests, it allows sorting which is nice if you want to, for example, sort by "Blocked". This can also be exported into an Excel spreadsheet. This view is VERY helpful when you end up having hundreds of automated tests, because scrolling through hundreds of lines of code can make things easy to miss or can get confusing. The 5 points made above were done in my .NET test automation environment which uses a custom attribute I created called "TestProgress". The reporting GUI uses reflection to extract the class, method, and attribute details. The example is for .NET but this process and pattern could be used in any language that you may be automating in. For example in a scripting language (e.g. Ruby), you could provide "Test Progress" as a comment above the method and then use regular expressions to parse the files to create your report. For example, the Test Progress comment could look something like:
 |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, December 29, 2009 |
|
| |
|
|
| |
2009. What an eventful year. Eventful in my personal life as well as in my SQA career. A good, eventful year. I didn't blog much in 2009, 17 posts in all, and no topics that were SQA groundbreaking. Yeah, I'm pretty much ashamed of myself and have watched my blog fall off peoples' radar.If I were to highlight my favorite post it would be my turn from SQA words to illustrations with Do Loop Until Zero. A hit or a miss, I don't know; I don't get comments either way on this blog. But none the less, it's something I enjoy doing. Hopefully you guys will see more of this "comic", if all works out well, it will be in the 1st issue of the new and upcoming Software Testing Club magazine. Though the blog was quiet, my SQA and testing career wasn't. In the last year I had the ability to start filling a large gap that was present in my testing experience portfolio. Prior to 2009 I had no experience in the Linux world and the technologies that surrounded it. Joining a new group within GoDaddy quickly changed this. In 2009 I did a 180 degree turn from my beloved Windows world and submerged myself in Linux in an effort to test and automate a new, internal product. I was scared to make the jump, mostly because my Windows wisdom would be put to little use, and my lack of Linux knowledge would make me a slower tester and automator. Not so enticing when I really pride myself on speed and efficiency ("Hire me, Hire ME! I'm two testers for the price of one!"). Scared or not it was an awesome opportunity to further my skills, and help a 1.0 product using my experience with agile practices and automation. With the help of an awesome two man development team, I was able to learn, automate and wade through the following technology highlights in 2009:
Product: A storage system (C, mySQL): - I used PuTTY as an SSH client to the dev, test and prod environment running CentOS as a flavor of Linux
- I extended developer unit tests and automated API functional and boundary testing with Perl unit testing (Test::Unit)
- I extended PHPUnit to serve as an automation framework for automation of functional tests (use case, boundary, error handling,etc). The framework was named TAEL (Test Automation Ecosystem for Linux).
Product: FTP Server that uses the storage system (Perl, mySQL) - I automated use cases, and FTP functions using TAEL. FTP functionality was tested using PHP's FTP library. Validation was done through FTP responses, and mySQL queries.
- I performance tested the FTP server and underlying storage system with Apache JMeter. FTP in JMeter is not very robust, and worse yet forces a connection open, logon and close for every request needed, which is not very realistic. Thankfully it's open source (Java) so I extended it and tweaked it to fit our needs.
Product: User Management Web Service - I automated use cases, boundaries, etc with TAEL. Validation was done by querying mySQL or parsing the Web Service response using XPATH queries.
Tool: User Experience Monitor - In an effort to monitor response times on an ongoing basis, I wrote a script that executes basic functionality every 15 minutes, stores the timed results in FTP, where they are picked up and processed by a chron job that puts the results in a database. Chron takes the results puts them into an XML format which are then viewed in a PHP web page using the chart control XML/SWF charts. We found some very interesting activity and trends through this test/monitor. This turned out to be a very interesting almost real-time QA asset for the team.
Product: REST service Automation with Ruby: With a department wide goal that everybody must do a little automation, I led them down the path of Ruby/Watir (due to cost, and Ruby being pretty easy to learn). The results are looking pretty good, adoption has gone well and progress is being made. Here are a few details about the framework that I built over a few weekends: - Uses a pattern that I call "Test, Navigate, Execute, Assert"
- Manages tests with the Ruby library: Test::Unit
- Uses Watir for web page automation
- Web Service automation is done with: soap4r & REXML
- MySQL database validation with the gem: dbd-mysql
- Data driven automation from Excel using Roo
Process: Since I've been lucky enough to work with a highly motivated, small team of three, our process needs to be and has been really light. We've been pretty successful at being extremely agile. For project management we followed a scrum-like process for a little over half a year using the tool Target Process, but then moved to a KanBan approach with our own home-grown tool. Recently we moved from the home-grown tool to a trial with Jira, while trying to maintain the project in KanBan style. I have to say that I really like KanBan, it works particularly well for our team because it is small. When you're as small and tight knit as out team is, we always know what each other is working on, so the more light-weight the better. It seems the largest payoff of these types of process and tools for our team is tracking backlog items as well as giving management insight to what we're up to. What's in store for me in 2010? Well, I'll likely be working on the same products, but as far as major learning and growth opportunity I'm excited to dive into the awesome new features of Visual Studio 2010 for Testers as well as to learn and use some C++. Now, if I can just convince myself to blog about those experiences as I go. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, September 08, 2009 |
|
| |
|
|
| |
With help from Gerhard, a QAInsight reader, the User Agent Switcher MONTSTER XML file has been updated to use the new, folder feature. Also, another IPhone user agent has been added as well as one for Chrome. As always, the permalink is here, and can be found in the right navigation under the "My Testing Tools" header, link: "User-Agent Info and Tools". |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The recent release of Firefox 3.5 on June 30th appears to be riddled with defects and it's woes have hit the press. The article points out 55 open defects, I went out assessed the mess myself and see 58 defects and 22 enhancements associated with the 3.5 and 3.6a1 milestones. But here is the kicker, all the defects were reported BEFORE the release date of June 30th. Yet they decided to release with the defects anyway. See the summary for yourself here, notice the dates in the "Opened" column for the 3.6a1 list. Mozilla isn't shy about their lack of quality either, on the Mozilla QA site they boldly proclaim the upcoming tester's event "Firefox BugDay - Catch Missed Blocker, Critical, and Major 3.5 bugs!". Jaw dropping key word being: MISSED. Wow! At least we have to admire their transparency right? Mozilla, these are the things that kill browsers. Firefox has spent a long time acquiring users, and when you have people uninstalling because of issues, well, it's just not good. The picture is bleak. Releases with knowledge of critical, major and and a pile of normal defects is bad software development and makes me question the whole "Community Development" model. Does community development mean to Mozilla "Community QA after a release"? Let's hope not, I don't want to see another browser disappear off of the Mozilla branch. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I've been playing around with Microsoft Visual Studio 2010 Team System (Beta 1) the last few weeks and I have to say that I'm pretty excited about what Microsoft is doing to help tie development, testing, and environments together. The things that stands out the most to me is the "Test and Lab Manager". This tool allows me to write manual tests, automate tests, and then configure, control and run those tests in specified physical or virtual environment. Although beta 1 is pretty rough around the edges, what I'm seeing is really exciting. Through my playing around and research I've gathered a few links full of information, screenshots, demos, videos, and official documentation. Peruse and enjoy, but before you get started, go get a rag so that you can clean the drool off of the side of your mouth when you're done. MSDN documentation for "Testing the Application" in VSTS 2010: http://msdn.microsoft.com/en-us/library/ms182409(VS.100).aspx
Video: Functional UI Testing with VSTS 2010 http://channel9.msdn.com/shows/10-4/10-4-Episode-18-Functional-UI-Testing/
How to add a VSTS 2010 coded UI test to a build: http://blogs.msdn.com/mathew_aniyan/archive/2009/05/26/coded-ui-test-in-a-team-build.aspx
Creating and running a VSTS 2010 coded UI test through a Lab Manager project: http://blogs.msdn.com/jasonz/archive/2009/05/26/vs2010-tutorial-testing-tutorial-step-2.aspx http://blogs.msdn.com/mathew_aniyan/archive/2009/05/26/coded-ui-test-from-microsoft-test-lab-manager.aspx
Explanation of the various Test tool names and products: http://blogs.msdn.com/jasonz/archive/2009/05/12/announcing-microsoft-test-and-lab-manager.aspx
VSTS related blogs: http://blogs.msdn.com/vstsqualitytools/ http://blogs.msdn.com/amit_chatterjee/ http://blogs.msdn.com/mathew_aniyan/
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Now that I've updated and found a permanent home for the Browser Compatibility Cheat-Sheet, I thought I'd take the time to share the method to my madness for excavating the rendering engine and JavaScript data from browsers (these are the details in the cheat-sheet). If you're asking yourself "Why do I care Brent?" then I urge you to watch my screencast on Browser Compatibility Testing Risk Analysis. My answer to your question in a nutshell is that you need to care as a developer or tester because fully understanding how browsers work, knowing how similar and different they are, and being able to quickly assess how a feature or change to a Web application will impact your development, testing or regression. I'll leave it at that for now. It's never really been quick or easy when I mine the data (which seems to be about once a year), but when I reassess the cheat-sheet I typically spend most of the time re-reminding myself of how to gather the info for the various browsers, all the while discovering new sources. Here is my high-level browser info excavating process: - Get the info from the browser itself:
- Install it
- Look at the browser download site, FAQ, & Release Notes
- Look at the user-agent string at browserhawk.com
- Look at the installed assembly version numbers and text files
- Look at the Help/About section
- Look at comments in source control and source code (if available)
- Search the web
- Look at keywords on wikipedia (Netscape, V8, WebKit, etc) . Wikipedia has gained a lot of browser data in the last couple years, some of my favorite and most useful links are comparison of layout engines & Browser Timeline
- Search by keywords, and look at articles and comments on the Web
And on to a few lower-level details for a few of the most popular browsers: Internet Explorer - Rendering Engine: Trident being the name of the IE rendering engine, it was once believed that the version of Trident matched the the version of the MSHTML.dll found at C:\windows\System32\. But with IE 8.0, the IE team has a reference on their blog that rendering engine in 8.0 is Trident 4.0 which can now be found in the user-agent string. This version conflicts with prior data I had gathered but we'll run with it. Hopefully, from here on out you can just gather the version from the user-agent string, only time will tell. Here is an example user-agent string for IE8: "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0;)
- JavaScript Engine: JScript is the JavaScript engine in IE, the file version of JScript.dll found in C:\windows\System32\ will give you version number.
Chrome - Rendering Engine: Webkit is the rendering engine for Chrome. To get the rendering engine version, in the browser URL bar just type "About:". The version will follow the "Webkit:" key. Notice that the User Agent contains the same Webkit number, hence the rendering engine version can be gathered from the User Agent string also.
- JavaScript Engine: V8 is the JavaScript engine for Chrome. The version is listed in the same place as the rendering engine and is the number following the "V8:" key.
FireFox - Rendering Engine: Firefox uses the Gecko rendering engine and the version number can be found in the user-agent string (can be seen by typing "about:" in the URL bar or going to Help->About in the menu). For example in the following string: "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10", the "rv:1.9.0.10" is the version and the "2009042316" build number.
- JavaScript Engine: Firefox's JavaScript engine is SpiderMonkey and I've never found references to version numbers. From what I understand the JavaScript engine is compiled to JS3250.dll in \program files\mozilla firefox (js3250.lib on Linux), but the version number never changes on it even though the date and size do, which makes tracking here fairly useless. I've always gathered ECMA compatibility data from official release notes as well as using the value for "JavaScriptVer " key found when visiting browserhawk.com (click the 'more' link in top-right corner to get this detail).
Safari - Rendering Engine: Webkit is the rendering engine in Safari and the version can be found in the user-agent string. For example in the string: "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Safari/528.17" the version number is 528.18. This can also be seen on the webkit.dll file property "Product Version" in Windows (\program files\safari\).
- JavaScript Engine: With Safari 4.0 and up the JavaScript engine is new and named Nitro. At this time of writing 4.0 is still in beta and I see no official version for Nitro, but hopefully we'll find a reference once it comes out of beta. Regarding past versions for their old engine JavaScriptCore, I've never found version numbers so I only documented the JavaScript ECMA compatibility found at various places on the web as well as the value for "JavaScriptVer " key found when visiting browserhawk.com (click the 'more' link in top-right corner to get this detail).
And there you have it, the method to my madness. If you have differing or better data please feel free to add it in a comment. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
This link/post will serve as the official place for the Browser Compatibility Cheat-Sheet and the post can be permanently accessed from the side navigation. Any new updates/links to the cheat-sheet will be put in this post. What is the Browser Compatibility Cheat-Sheet? The cheat-sheet is a list of browsers' rendering engine and JavaScript engine versions. This reference provides testers a quick and easy way to view groupings of browsers and their versions to help determine testing redundancy and trim the "browsers to test" list. For further explanation and details watch the screencast: Browser Compatibility Testing Risk Analysis. Download the latest Browser Compatibility Cheat-Sheet here (zipped Excel file): BrowserCompatCheatSheet-052509.zip (8.74 KB) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
 |
|
 |
| |
|
|
| |
Written over a weekend, Sean Sullivan the CTO of Black Baud lab's created an iPhone browser simulator, and it's FREE! Basically, what he did was take the Webkit rendering engine from Safari and embed it into a Windows application. Browser requests are being made through Safari Webkit using an iPhone mobile user-agent string. Here is an example of the user-agent string that came into my website while capturing the screenshot at the bottom of this post: Mozilla/5.0+(iPhone;+U;+CPU+iPhone+OS+2_1+like+Mac+OS+X;+en-us)+AppleWebKit/525.18.1+(KHTML,+like+Gecko)+Version/3.1.1+Mobile/5F136 Setup is as simple as installing Safari, and then running the .exe from Black Baud lab. Check out the details and a screencast on Black Baud lab's site. BUT.as always, when it comes to browser compatibility testing there is nothing like testing the real browser on the real platform. Keep these things in mind my dear browser compatibility testing friend: - The rendering results will be based on the version of Safari for Windows you have installed and its Webkit version. This will likely not match the version you intend to test on the iPhone. For example, I've installed Safari version 3.2.2 which uses Webkit 525.28.1, the page I'm testing will utilize that version. Make sure you are aware of the iPhone browser version you need to be testing and the Webkit version that comes along with that iPhone browser version. You'll need to install that version of Windows Safari to be in sync with the iPhone. How do you know which version of Safari/Webkit is running in an iPhone app install? I don't know! I can find no reference or history of versions on the Web. I suppose it could be gathered easy enough by installing each iPhone app version and then either doing a Help->About in Safari? Or gathering the data from the user agent string by going to browserhawk.com. Post a link in the comments if you've seen this data somewhere.
- Apparently iPhone Safari 3 is not the same code base as Safari 3! The code base was branched. Changes made in that branch could cause your results to vary between the real iPhone browser and the iPhone browser simulator. From the threads I've read it seems to be more "shell" type features, which lowers your risk if you're just looking for rendering issues.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, March 18, 2009 |
|
| |
|
|
| |
[click to enlarge]
|
|
| |
 |
|
| |
|
|
| |
|
|
| |
[click to enlarge]
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A question from Tobbe Ryber has inspired me to jot down a few things I've been meaning to do in a more extensive blog post for a long time. But since it hasn't happened yet, I figure it probably never will, so you'll have to settle for my abbreviated, half-ass version.
Twenty reasons to use Visual Studio Team System 2008 Test Edition for your software testing automation framework, ESPECIALLY if your development team is using .NET and Visual Studio:
- You are using the .NET platform which is a set of stable and robust libraries that allow you to do just about anything. Make HTTP requests, make Web Service requests, use COM, make database queries, the list goes on and on. Basically anything your .NET developer is doing you're going to be able to tap into using the same context. Easily.
- You have the ability to easily make calls into several layers of the application under test using a few lines or code, without duct taping and bailing wiring a bunch of libraries or technologies together. Imagine automating something in the browser, making a call to a Web service and then calling the database to validate your results...All in a few lines of code.
- There are awesome tools and libraries that are built on .NET that allow you to automate browsers, such as SWEA, WatiN, and HTTPWatch.
- There is a great library and Visual Studio add-on that allows you to automate multiple browsers (IE 7, 8, FireFox. Safari and Chrome any day now), as well as Silverlight. Best yet, the recorder integrates with the IDE: ArtofTest's WebAii and Design Canvas.
- Your 'test harness' is built into the IDE, and your tests can also be ran from the command line.
- The IDE is top notch when it comes to development and debugging (and test development and debugging). I've been using VS for automation since VS 2005, and when I've had to automate in other worlds (e.g. Linux, PHP, and Perl) I honestly feel like I'm working with tools that equate to a chisel and stone tablet.
- Auto-complete in the IDE is a huge timesaver. Your time spent searching the internet or referring to a library's specifications is far less with auto-complete.
- Syntax issues with scripting languages (JavaScript, Ruby, etc.) can be a huge waste of time at runtime. If you write a test that runs for minutes, hours, or days it could fail halfway through due to syntax. A compiled language is not going to do this.
- The Microsoft.VisualStudio.TestTools.UnitTesting namespace is not just for unit testing, it works great for test automation. It feels a lot like nUnit to me.
- Integrating your tests with development builds is cakewalk. Using the mstest command line, it's easy to have your tests run with a build in TFS or CruiseControl.
- You have the ability to easily move some of your tests up the chain to run along side of developers' unit tests. By doing this you now have automated acceptance tests, so that releases to QA have higher quality.
- You are using the same environment/language as your developers. By doing this, you gain:
- A. The ability to have developers help you with getting over the .NET language or VS IDE learning curve.
- B. Knowledge and use of the same language and libraries used for development, thus having a greater technical understanding of what you're testing.
- C. Easily share and discuss your tests with developers because they are familiar with the language you are using.
- Test results are in an XML format which means that if you want to use something other than VSTS to view results you can easily manage it.
- The .NET community is huge. Help, technical examples, and issue-workarounds are an Internet search away.
- Examples are SUPER helpful through MSDN. Training video series such as How Do I and VSTS Learn are a great alternative.
- VSTS also does load testing.
- .NET, C#, VB.NET, and Visual Studio experience on your resume are technology skills and buzzwords that lure recruiters.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, February 26, 2009 |
|
| |
|
|
| |
Seven ways to test browser compatibility, without having to manage your own testing lab: http://freelancefolder.com/7-fresh-and-simple-ways-to-test-cross-browser-compatibility/ Browser compatibility testing solutions have made some progress in the last year but it's still far from ideal. A while back, I had a dream... - I want to screen-shot any page in my website (requires a decent, free, scripting engine that will allow me to get to the various pages in my site that can't be accessed via a specific URL (Watir?) ).
- I want to screen-shot my site that is not yet published for the world (requires the service to exist within my internal network).
- Once I've approved an ideal layout screen-shot I want the software to determine and tell me if the other screen-shots are worth looking at (by doing a statistical image comparison with a predefined pass/fail threshold). Maybe MeerMeer is on the right road to doing this?
- I want to provide basic wire-frame definitions and have software determine if my screen-shots are within reason (by analyzing elements in the DOM and browser dimensions)
- Get rid of screen-shots and do DOM to DOM element width and height comparisons between browsers (Come on, it's a dream, standards compliance for all browsers (another dream) might make it possible?)
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, February 25, 2009 |
|
|
| |
Friday, February 20, 2009 |
|
|
| |
Wednesday, February 18, 2009 |
|
| |
|
|
| |
I've been using Adobe Photoshop since version 3.0. Back in the day I had to to insert MANY 3.5" floppy disks to install it on my PC (20 or more I think). Oh, the good old days... Fast forward to 2009. I use Photoshop a LOT. For all kinds of things. Web design, logo design, photography touch up, creative drawing, etc. I LOVE graphic design.
I also love software quality assurance. I've had a desire for nearly two years to express my quality assurance thoughts via a comic. Over those years I've toyed with some ideas, created a few proto-types that included monkeys as testers, and received some great "How-To" advice from Brad Fitzpatrick. Inspired by Brad Fitzpatrick, IKEA assembly instructions, Shadow Culture's Bug Bash, and a TDD poster I think I've come up with something. I'm not sure that we're dealing with a "comic" because it's not necessarily funny (at least not my first two strips). It's more of an illustration of simple things that occur between a Quality Assurance Engineer and a Software Developer, and yet more complex thoughts or methodologies occurring in the industry. I suppose that it could be more of a graphic storytelling that reveals a sick truth, simple lesson, or moral? I'm a very visual person. Images stick with me better than words. I know I'm not the only one. Through these images and subtle text hints I hope to tease the QA and developer mind and invoke some QA thought.
My new comic is entitled "DO LOOP UNTIL 0", a name that is a software defect itself... In the BASIC language, "DO LOOP UNTIL 0" causes an infinite loop. Infinite loops are just plain bad when it comes to software. :)
For now I'll host it here on QaInsight.net, you can also get to it via DoLoopUntil0.com and DoLoopUntilZero.com. Once it becomes wildly successful and crashes the server in my office closet I'll think about giving it a real dedicated home. Until then, let me know how I'm doing. Your comments are inspiring, good or bad.
Oh, the comic... I'll post the first in the next few days. I'm still tweaking a few brush strokes... err... pixels. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, January 31, 2009 |
|
| |
|
|
| |
I noticed this on Google this morning at 7:50 AM (GMT 7:00 Arizona):

No matter what I searched for, all results returned returned "This site may harm your computer". Attempting to get to the site through the safe browsing feature resulted in:

I bet the phones were ringing off the hook over at Google about then. All is well now. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, November 18, 2008 |
|
| |
|
|
| |
I noticed today that C# 4.0 will offer dynamic typing (no, your keyboard will not type magically for you...the other typing). Why mention it here? Well, if I understand the new feature right, this will fix a fairly large unit testing and automation roadblock caused by static types. For example, when writing tests in .NET and trying to consume/use a method on a .NET API or Web Service your tests are constrained to the method's inputs static types at compile time. In other words, in the old C# world, if you had a method that looked like this:
public void testMe(int foo){ }
and you wrote a test that called the method like this:
testMe( "poofoo" );
the test would fail at compile time due to static typing (because the method's input parameter type is an int, but we're trying to pass a string)
Thus the roadblock I was describing... There are a lot of tests, poor error handling, AND hidden defects when you try to pass invalid types into inputs in a service. So, about now you are saying..."Who gives a crap Brent, if my service's consumers use .NET they'll compile, get the error and never even get a chance to send a string in where an int should be". There was a day when I thought the same thing (a long time ago), until I consumed a Web Service using a Java application. For example, say you've exposed a .NET Web Service for the world to use... and I come along and consume it with Java, by doing that I can ignore your static/strong typing and send in that string that you weren't prepared for. Strings don't work so well as ints (especially when it's "poofoo", or even better "2147483648"). Most of the time the errors are just plain ugly, making the API or Web Service really hard to work with when trying to do good error handling management (imagine getting "you failed, line 67", but then a code change occurs and now it's line 68), but sometimes things fail on a larger scale and make some really cool defects.
Back to the point...
I'm thinking the new dynamic type in C# 4.0 will allow you to avoid that compile error if you're writing your tests using C#/.NET. Thus, I could send in that string as an int and then see what happens at runtime. That test would look something like this:
dynamic poo = "poofoo" ; testMe(poo);
Neither confirmed or denied at this point, but if true, I'M REALLY EXCITED. This will fix a major issue that I've had with testing .NET services using .NET.
It's interesting the conversations that are spawned from the issues that come out sending invalid types...
Brent: The error message... "You failed, line 67" is poor and confusing, what did I do wrong?
Developer: It choked when you sent in the wrong type. Don't do that.
Brent: That sucks...so when our customers do the same thing and then call in for help we'll just tell them that?
Developer: Well, uh..no. Okay, I'll put in a little error handling and a descriptive error message.
Brent: Sweet!
Brent: (Evil laugh in head) Hey... Will we support that error message as part of the API? Because, if you make it a message that I, a consumer can rely on, that means my code will depend on it, meaning that changes to the error are breaking changes. Breaking changes must be tracked and documented.
Developer: (Slowly backing away) I CANT HEAR YOU!!! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, September 24, 2008 |
|
|
| |
Sunday, September 21, 2008 |
|
| |
|
|
| |
This has been around a while but...

I'll give $20 bucks to the brave QA Engineer who names their son or daughter one of the following:
- <script>alert('xss')</script>
- <script>alert('xss')</script>
- %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%27% 78%73%73%27%29%3C%2F%73%63%72%69%70%74%3E
- PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4
...poor kid |
|
| |
 |
|
| |
|
|
|
| |
Friday, September 19, 2008 |
|
|
| |
Thursday, September 04, 2008 |
|
| |
|
|
| |

Don't quit your day job... |
|
| |
 |
|
| |
|
|
|
| |
Thursday, September 04, 2008 |
|
| |
|
|
| |
In the slim and clean Google Chrome (beta) interface JavaScript issues are not easily detectable unless your page or site is visually broken. Much like FireFox and Safari, a tester must open the "JavaScript console" and keep it in visible view while they test in order to catch JavaScript errors. Chrome's Javascript console is a lot like Safari's, but is a tad worse (see the gotchas at the bottom of this post).
My fellow testers, here is how to get to that JavaScript console and monitor for JavaScript errors while you test:
Click the page icon to the right of the URL bar. Select "Developer" and then "JavaScript console" from the menu:

In the top of the JavaScript console window click the "Resources" button:

Start testing. When an error occurs you'll see a red icon with a number in it next to the page that the error occurs:

You'll also see a log of the error in the bottom of the JavaScript console window, if you click the provided link it will take you to the line of code where the error occurs:

Also, if you click the page in the "Resources" section the offending line of JavaScript and the error will be displayed:

As of now, I see two gotchas in Google Chrome Beta when attempting to detect/find JavaScript errors:
- The "JavaScript Console" reports more than JavaScript issues which makes sorting/distinguishing JavaScript errors from other reported HTML style of formatting errors tough. A cheesy visual helper is to also open up the "Debug JavaScript" window (found in the same Page > Developer menu to the right of the URL bar) and watch for new line items to show up in the log. Those line entries are associated with JavaScript errors, unless..
- You changes sites/domain, in this case the previously opened JavaScript windows won't display data for the new site. You have to close those instances and re-open them to monitor the new site. You know that the monitoring has stopped when you see in the "Debug JavaScript" window the following log entry: "lost connection to tab"
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, September 02, 2008 |
|
| |
|
|
| |
Just when you thought you had a handle on your browser compatibility testing, Google gives us Chrome. What does that mean for you, the infamous browser compatibility tester? Just another browser to test? Yes and no...
Have you seen my previous screencast on Browser Compatibility Testing Risk Analysis? If not, its a worthy watch if you want to get a feel for how the browser generally works and how to trim that browser test list based on a little bit of data and risk analysis. Once that's under your belt, continue on my friend...
Let's dive into the details of Chrome to get a quick grasp on where some new browser compatibility defects for your site may be lurking:
The Layout Engine What does Google Chrome use for a layout engine? WebKit. The same layout engine that Safari uses. Will it render exactly like Safari? Well, it depends on which version of WebKit that your installations of Chrome and Safari use. You can determine this quickly by looking at the user-agent string. A quick way to do this is to go to BrowserHawk.com, click "more" in the top right menu, scroll to the bottom of the new page and look for the text "User agent". Here is the Google Chrome user-agent:
Mozilla/5.0+(Windows;+U;+Windows+NT+6.0;+en-US)+AppleWebKit/525.13+(KHTML,+like+Gecko)+Chrome/0.2.149.27+Safari/525.13
As you can see we have a WebKit version of 525.13. Chances are that the latest version of Safari runs WebKit 525 also (again do this by looking at the user-agent of the latest version of Safari). Ignoring the minor version number and focusing on the major version number, if they are the same we can feel comfortable that Chrome and Safari will display layout the same...Meaning they will align objects on the page the same. If you've already tested Safari, chances are you aren't going to find any unique layout defects in Chrome.
The JavaScript Engine This is where things start to get different. In Google Chrome we have a brand new engine and way of doing JavaScript. Google calls their new engine V8. Safari's engine is JavaScriptCore. Night and day...expect to see differences and potential issues here. When testing make sure to look for JavaScript errors and possible issues with sites that us AJAX (in my next post I'll talk about how to view JavaScript errors in Chrome) .
The Shell What stands out the most to me in Chrome's "shell" is the fact that tabs, plug-ins, and JavaScript run under there own process. On the surface this looks like an ideal way to manage security and to keep memory in-check, but I would keep an eye on functionality of pop-ups and session management between windows (as in, losing reference where there needs to be reference). Also, notice the clean-cut/different "shell" that Chrome has... This "shell" could also yield potential defects related to printing, or any other page related features that you may find in the various menu bars/icons or "Options" menu.
In summary, if you are asked to test both Safari and Chrome the layout is going to be the same (if the WebKit versions are the same). However JavaScript and the Shell could yield some unique defects.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Monday, September 01, 2008 |
|
| |
|
|
| |
Web-site layout, one of the many things that can keep a tester busy. Uhm...overwhelmed? So many browsers so little time... Wouldn't it be nice if you, the mighty tester, could just review a butt-load of screen-shots of your Web application in multiple browsers on multiple platforms to make sure there are no layout issues? Wouldn't that be quick and efficient?
I've got 2 semi-solutions for you (keep in mind I've done little with both, so forgive an misinformation):
Litmus "We've felt the pain of getting website designs to work correctly across different browsers. Not to mention designing email newsletters that work on all email clients. Litmus makes compatibility testing easier. Litmus is lightning-fast, reliable and affordable. It's relied upon by thousands of smart freelancers and switched-on agencies; as well as big companies like Yahoo!, Facebook and eBay."
The FREE part of Litmus: Screen-shots of your site in IE 7 and FireFox 2.
The $ part of Litmus: Pay $24 a month to get 23 browsers and 14 email clients.
BrowserShots "Browsershots makes screenshots of your web design in different browsers. It is a free open-source online service created by Johann C. Rocholl. When you submit your web address, it will be added to the job queue. A number of distributed computers will open your website in their browser. Then they will make screenshots and upload them to the central server here."
The FREE part of BrowserShots: 70 browsers on various platforms! Submissions get dumped to a queue for processing.
The $ part of BrowserShots: Pay $15 a month to get priority processing.
Both of these appear to be good services that can provide quick insight to layout problems in your site. However, as far as I can tell the two big limitations are:
- You are limited to pages that you can navigate to via URL, which rips the grandiose dream of having a screen-shot for every page in your website (pages that require form post or special conditions to get to are not going to happen). However, Litmus does provide a step in the right direction with it's functionality for authentication.
- Your site must be exposed to the Web, doing little for internal Dev and QA project cycles.
I have a dream...
- I want to screen-shot any page in my website (requires a decent engine that will allow me to get to the various pages in my site).
- I want to screen-shot my site that is not yet published for the world (requires the service to exist within my local network).
- Once I've approved an ideal layout screen-shot I want the software to determine and tell me if the other screenshots are worth looking at (by doing a statistical image comparison with a predefined pass/fail threshold).
- I want to provide basic wire-frame definitions and have software determine if my screen-shots are within reason (by analyzing elements in the DOM and browser dimensions)
- Get rid of screen-shots and do DOM to DOM element width and height comparisons between browsers (Come on, it's a dream, standards compliance for all browsers (another dream) might make it possible?)
Honestly, I think the dream is doable... So many dreams/ideas, so little time. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
For those of you in need of doing SQL load testing from Visual Studio 2005 or 2008 there is a new open source project at CodePlex called SQL Load Test. How does SQL Load Test work? "This tool takes a SQL Profiler trace file and generates a unit test that replays the same sequence of database calls found in the trace file. The unit test is designed to be used in a Visual Studio Load Test. The code generated is easily modifiable so that data variation can be introduced for the purpose of doing performance testing." Get more info and download SQL Load Test here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Things have been a bit quite here at QAInsight for the last few months wouldn't you agree? As always the days and nights are never quite long enough to get all those things I want done.
I have one excuse though.
Actually I have more than one but I'm only going to share one with you:
I've been working undercover with the FBI and Viacom to help parse Google/YouTube logs to obtain logons which relate to IPs, which point to people who are uploading copyrighted content. A mass effort to prepare for the largest bust in digital history.
No... Just kidding.
Really, I'm kidding don't start with that death threat stuff. I've already had three this week.
Apparently the insightful QA advice found on said Software QA blog has increased defect finding and input by QA Engineers across the globe and developers are angry. Go figure, they want to eliminate me because apparently I'm the ring-leader that has slowed down their development process and release to production.
It's just a blog. I set forth ideas, I didn't do the defect finding. Please spare my life. Please? I have kids.
In fear of my life I'm going to lie low a while.
In the meantime, take some more QA advice from me and go check out Go Daddy's new QA blog BugCrushers.com. They have a QA army of 50 talented individuals. I expect to see some good stuff come from these peeps.
Oh... By the way, if you're a developer and you see posts on BugCrushers.com where the author is "Brent Strange"...
IT'S NOT ME. It's another Brent Strange. Ironically this one does QA too. Go figure. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The alpha version of IETester was recently released and "IETester is a free WebBrowser that allows you to have the rendering and javascript engines of IE8 beta 1, IE7 IE 6 and IE5.5 on Vista and XP" on the same machine.
To good to be true? No, not if you take that sentence literally. These kinds of tools can indeed help you test for "rendering/layout" and "JavaScript" issues, but tend to quickly fall apart when it comes to integration with the OS shell (plug-ins, caching, cookies, modal dialogues, printing etc). IETester is much like MultipleIEs, these types of tools can help when you're in a bind and want to validate something simple that is script or layout related. But to use these tools to conduct all your browser testing versus your dedicated IE systems or VMs will likely bite you in the long run when the issues go beyond layout or JavaScript. IMHO these tools are best left in the hands of the developers to quickly validate layout issues and then QA can follow up with the real thing. It's a good tool to have around but don't bank on it! :)
Download IETester here.
Get a better feel for for how the browser works with my recent screencast: Browser Compatibility Testing Risk Analysis |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I just listened to a podcast where Željko Filipin talks with Bret Pettichord about Watir. This is an easy to listen to and informative podcast about Watir. I really admire and appreciate Bret's openness about Watir as he talks about both the good and the bad. If you have 23 minutes give it a listen. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Pex (from the Microsoft Research Lab) has finally been released the public. Pex 0.5 can be downloaded here.
What is Pex?
"Pex (Program EXploration) is a white-box test generation tool. Given a hand-written parameterized unit test, Pex analyzes the code to determine relevant test inputs fully automatically. The result is a traditional unit test suite with high code coverage. In addition, Pex suggests to the programmer how to fix bugs."
I haven't had a chance to dive in but I'm pretty excited to see how this can speed up production of writing white box tests and/or increase the code coverage on QA's side.
At the end of the day it'd be nice to see this in the developers' hands and not mine. Baby steps though...
Read more about Pex here.
Get an ear full of Pex with a great Hanselminutes Podcast entitled "Pex with Jonathan 'Peli' de Halleux and Nikolai Tillmann". |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, April 23, 2008 |
|
| |
|
|
| |
I hate it.
Unit test this. Unit test that.
Let's put "unit" in our testing framework so we can test "units" cuz that's all ANYBODY is EVER going to test.
Testing outside of the "unit" is forsaken. Thou shalt never test more than a unit. Test more than a unit and ye shall be pelted with stones and crucified.
Let's see... What do we have here for unit test frameworks:
brentUnit (even Brent Strange can have a unit testing framework) JUnit (notice the word unit) nUnit (look at me, I test units) mbUnit (I'm a follower, I can't think outside of the box. Uhm...let's test units.) csUnit (CHEESE & RICE, this is INSANE) ...
OH HELL...Just go here for the gi-hugey list:
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
You back? See what I mean? There's like one-cajillion testing frameworks that are for "Unit Testing".
Unit, unit, unit. It's freakin' beyond dumb.
Tell me...What happens once this developer phase of "Oh, I gotta go write some unit tests, with my unit test framework so my code is better" evolves to tests beyond "unit"? You know, like writing some tests that are "integration" or "functional? It'll happen people.
IT'S HAPPENING PEOPLE.
I, and others have been using "unit testing" frameworks as an automation test harness for years now. All kinds of tests.. Tests that aren't "unit".
Yeah, insane. Unheard of I know. What? You going to crucify me now?
Drop the unit. Get over it. These are "Testing frameworks".
P.S. Microsoft, nice namespace: Microsoft.VisualStudio.TestTools.UnitTesting
P.P.S Don't give me any crap about how "unit testing frameworks" are for developers. Good one rocket scientist...Let's create separate frameworks to basically do the same thing. One for Dev, one for QA. Brilliant... |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I remember the 1st time I tried to kick-off a "unit test" from Visual Studio 2005. I had to defer to the Web, I couldn't figure it out. A year later and through everyday use of VS 2005 and VS 2008 I've slowly discovered various ways to get those tests rolling. Here are 6 different ways to start a test in Visual Studio 2008:
"Test Tools" Toolbar

Context Menu

Keyboard Shortcuts Ctrl+R, Ctrl+T: Execute tests in current context Ctrl+R, Ctrl+C: Execute tests in current test class Ctrl+R, Ctrl+N: Execute tests in current namespace Ctrl+R, Ctrl+A: Execute all tests in solution Ctrl+R, Ctrl+D: Execute the tests in the last test run Ctrl+R, Ctrl+F: Execute the failed tests of the last test run
Test List Editor

Test Results Pane

"Test" Menu

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The votes are in and it's official. Brent Strange has been crowned "The Best Software Tester In the World". Over the course of the 27 day voting period the software testing world was quite a buzz. Articles, blog posts, forums, and clubs have been consumed with facts, opinions and skeletons for the 7 candidates over the last 4 weeks. QA hubs such as StickyMinds, TestReflections, SQAForums, and SoftwareTestingClub were overtaken with this "best in the world" shakedown as QA professionals and interested developers voiced their opinions. Oddly enough, the recent and parallel presidential campaign even took notice.
An interview in the to be published June edition edition of Better Software Magazine between Vimh and Brent bring to light why the community's decision on this heralding QA Engineer was not just Internet viral:
Vimh: So Brent, how does it feel being declared the "Best Software Tester In the World"?
Brent: I'm speechless Vimh. I don't deserve this. I test. I do my job. There is no Best Tester In the World. We all bring Quality Assurance to the table in our own unique ways. Honestly, this award should go to the entire Software Quality Assurance community.
Vimh: The people have spoken Brent. You are the "Best Software Tester In the World". How do you think the community came to that decision?
Brent: I'm not sure. I'm guessing that those that I've worked with past and present voted for me, others I assume were followers of my small footprint in the QA community with my blog QAInsight.net. If not acquaintances or followers I suppose it was just viral.
Vimh: Is it true that you once found and reported 70 defects in one day?
Brent: [Laughing] No... it was 59 defects, but technically 14 of those were enhancement requests.
Vimh: That's a sign of somebody thinking outside of the box I suppose.
Brent: Inside and outside. You've got to be both places at once in this business.
Vimh: Where do you see yourself in 5 years?
Brent: Testing. Writing software to making testing easier and faster.
Vimh: How about 10 years?
Brent: White sand beach with Corona in hand.
Vimh: [Laughing] Sounds like a great goal!
Brent: It's not a goal Vimh. It's destiny. The Internet is gold mine my friend.
Vimh: Agreed. If all goes well I'll see you on that beach with my trophy wife.
Brent: See you there Vimh. I'll see you there...
Vimh: So now that you are empowered with the title "Best Software Tester In the World" do you picture yourself strutting into a developer's cube and saying "listen to be me beeeaaaatch, it's not "function as designed", it's a freakin' defect and you're gonna fix it".
Brent: Uhmm...No.
Vimh: How about: "Hey dumb-ass, you ever heard of unit test?"
Brent: Dude, not funny. We're all on the same team. [Pretty pissed off sounding] Listen, turn this interview around or I'm going to have hang-up.
Vimh: Okay, I apologize....Brent, you've had a few "skeletons in the closet" exposed during the last month.
Brent: Yes, 2 of them to be exact. I have the "never went to college" and "has no testing credentials" monkeys on my back.
Vimh: Do you think that hurt or helped your campaign?
Brent: [Laughing] Call me a "Rocket Scientist", my "un-educated" guess says "help".
Vimh: Why do you think that is?
Brent: The reality of it is that a QA Engineer's greatest skill is the openness and ability to lean quickly and then apply it towards quality initiatives. You don't need a degree or certificate to do that. Matter of fact, I don't even know of an entity that teaches that skill. I think the SQA community recognizes that. James Bach has brought that to light for us.
Vimh: Interesting. So you're saying that anybody can be a good tester?
Brent: Not "anybody" but "anybody that is open to learn anything, has the ability to lean quickly, and then apply it toward a given task". Software is "anything", it changes daily. SQA Engineers have to stay on their toes and be able to use anything to help prove something.
Vimh: I never thought about it like that. Wow, "anything" is a lot to learn! That's respectful. It's known that you don't care to manage QA. Why?
Brent: I'm a tester AND teacher at heart. Historically a QA manager relentlessly fights the quality assurance battle all day and often times compromises due to budget, schedule and company ignorance. His/her persistence typically pays off in the long run (several years sometimes) though. But...Have you ever taught a fellow QA Engineer something they didn't know and then see that twinkle in their eye when they envision using that lesson in their testing tasks? It's awesome! To me, that's finding more defects by teaching other people to find defects. We BOTH just made software better...together. [Loudly] AT THE END OF THE DAY!
Vimh: Sounds like a pyramid scheme!
Brent: You said it! I'm a walking "QA Amway" and "QA Mary Kay"!
Vimh: [Laughing] Is it true you once said you knew the LDAP protocol to gain a Development team's confidence and respect for testing, but you really didn't know anything about it?
Brent: ONCE? [Chuckling] QA is often looked down upon because they are the 2nd tier information receivers and are expected to magically know everything right off the bat, which is near impossible. A developer can sit, stew, learn, and write code for a new technology for days, weeks, or months and then simply hand it off to QA expecting them to know the same AND know how to test it. To ensure quality and gain respect of that developer I need to be "open to learn anything, have the ability to lean quickly, and then apply it toward the given task". The Internet is my best friend. So, yes. Quite often "I am clueless, I make sure I project confidence, I go learn the subject after the fact, and then complete the task". There is no harm in that is there?
Vimh: No, I guess not. Especially when you hammer a project with 70 defects in a day.
Brent: [Laughing] Yes, especially when you hammer a project with 59 defects... |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
 I figured I'd repost this now that the Dilbert site has changed and many of the old references you find now days are broken. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Over the last month I've been looking at Zephyr, a test management system that touts itself as "Next Generation". What exactly is Zephyr and what does it have to offer to the testing community?
"Taking a completely realistic approach to how Test Teams work, collaborate and interact with each other in their department and the rest of their world, Zephyr brings together a comprehensive set of features, a really slick UI and Web 2.0 features at a price point that makes it very affordable for all team sizes.
Zephyr is based around the concept of Desktops & Dashboards. Every role in a Test Department has a customized Testing Desktop with relevant applications that allow them to do their jobs faster and better, as they all share data from a centralized repository and communicate via a collaborative backbone. Dashboards are automated and live, keeping the whole company updated on every aspect of testing and product quality."
At a high level Zephyr offers:
- Testing Desktop
- Dashboards
- Metrics & Reporting
- Test Case Repository
- Resource Management
- Project Management
- Release Management
- Test Case Creation
- Test Execution Planning
- Test Execution
- Document Management
- Defect Tracking
- Collaboration
- Import and Export
- User Interface
- Integration
The 20,00 foot view of Zephyr is this (see the related "How Zephyr works" video here):

Now, I've been managing test cases in a Excel spreadsheet for years, a fairly advanced one at that. It utilizes Visual Basic for Applications (VBA) and gets the job done very well for me, several other QA Engineers, and a few managers. So, having to consider a test management system that costs $$ it a hard to swallow...If it's not broke, don't fix it right? With that eating at me, when looking at Zephyr I decided to compare it to what I have and currently use. Let me tell you what my KISS test management system consists of:
- Quick and easy test case writing
- Consistent test plan and case format
- Reusable test case library that contains commonly used test cases
- Brief but technical test case writing format
- Test case state statistics by section and total
- Testing summary for all testing sections/worksheets
- Test case trends via charts
- Automated coloring of test case status for quick visual reference
- Automated test case to build mapping
- Test case to defect mapping
- Simultaneously sharing between multiple testers
- Tester assignment by section/worksheet
Granted, it's not perfect, but again it works very well and people really like it. With my testing world as the level set, let's jump into the good, the bad, and the things to think about if your considering Zephyr:
Tester Assignment You can specify users to run specific test cases or whole sections. Very nice!
Copying I can drag and drop individual cases from one folder to another, but I can't figure out for the life of me how to drag sub-folders of test cases into another folder (they move not copy). I also was unable to successfully import a previous export. If indeed this is possible it's not easy or intuitive (drag and drop or export/import). This sucks, compared to me simply selecting one or several rows in Excel by hitting CTRL+C and then CTRL+V. Simple copying of test cases is extremely important to me.
Test States
- Zephyr uses the states of Pass, Failure, Unexecuted, WiP, and Blocked. These are good test states, but it lacks the two states that are geared a bit for the Test Lead: Duplicate (DUP), and Not-Applicable (NA). These are important states to me, primarily because a test case written by a test lead should never be deleted but sometimes they can be redundant across sections of test cases (needing DUP) or not-applicable because the requirements have changed, or the requirement needs to be assessed no matter what (needing NA). I don't see a good way to manage these scenarios in Zephyr with the states provided.
- I'm a big fan of usability, and colors help with that a lot. I don't like the fact that Zephyr doesn't color their test case state (e.g. pass=green, fail=red).
Test Case Library and Templating The nearest thing I could find to be "Test Case Library like" is their import/export from file feature. I found that using it was truly cumbersome since I'm used to copying and pasting sets of test cases from one place to another within seconds. If you have or want the ability to hold a library of test cases, or better yet a library of templated test cases then you're going to have to get really crafty with their app infrastructure (e.g. create a project and consider that your library).
Desktop client In Zephyr, there is a lot of data in a lot of different screens and for the most part that is a very good thing. This was confusing at first, but the more I used and learned the app the more it made sense. The client is the browser with a Flash app running inside it. Working in a Flash app didn't make usability or intuitiveness any easier though. The learning curve for me was a bit steep due to fumbling around with right click context menus in some places and not others to find features (if it didn't exist I'd get the "Flash Settings" context). This is a huge pet peeve of mine and reminded me of working in a poorly written Java GUI.
Metrics A++. Love them. They're informational and visually appealing!
Requirements Zephyr requirements traceability is lacking. You can attach a requirement document to a test case but can't point to a specific requirement within that document. I suppose a guy could hijack an existing text input field to create a requirement number or reference in the attached doc (unless you're okay with embedding it within the test case description). This is discouraging if you're looking to tie a test case to a a specific requirement number.
Resource Management You can assign and schedule test resources to your projects. This is really nice! Currently people/resources can be input into and then managed through Zephyr. I didn't find an evidence of integration Active Directory or LDAP though. This could be a pain if you have many people on the QA team.
Defect Tracking Zephyr integrates with Bugzilla. Good choice Zephyr! However, if you've customized your Bugzilla interface this feature won't work for you (yet) since the default Bugzilla interface is duplicated inside of Zephyr.
Sharing Zephyr allows sharing, It even manages test roles: Manager, lead, tester. Roles would be nice in large QA departments. Again this might be a bit more convenient to manage with Active Directory or LDAP integration.
Price I'm a little discouraged by the price, mostly because they touted it as inexpensive during beta. After release the license model and cost is: "a simple yet flexible licensing model based on monthly subscriptions. Each user license is a low $65/user/month". Let me help you with a few prices for a ONE year subscription: 10 users = $7,800, 100 users = $78,000. That's not quite "almost giving it away!" as they state on their front page.
In a nutshell, I think Zephyr has done a great job with sharing the tester and test lead world with each other and management. However from a test lead perspective I'm a bit disappointed: The way test cases are written, managed, and copied needs to be improved vastly. Writing test cases in Zephyr is not any easier or better than Mercury Quality Center (which frankly sucks in my opinion). That's a serious problem when 1/4 of a test lead's life is spent writing test cases. Zephyr is new though, give it some time and I think it will shine. In all fairness, Zephyr does a WHOLE lot more than what my spreadsheet is capable of, but I don't think I need that whole lot more, especially when I lose my test case writing convenience.
Everybody's needs, situation, and environment are different though, so go "kick the tires" yourself at: http://demo.yourzephyr.com |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
ArtOfTest, creators of the browser automation framework WebAii, released a record/playback tool that works from within Visual Studio 2008! The beta release of "Design Canvas 1.0" fills a huge gap in the ArtofTest automation solution. Not only has ArtOfTest provided this great functionality, but this functionality looks really, REALLY cool. See for yourself with their 30 second QuickStart videos. I haven't had time to dig into it myself yet but I'm really excited to do so. From an automation engineer that spends much of his day writing tests in Visual Studio, watching these videos made my mouth water. I'm thinking that ArtOfTest is going to take a lion's share in the automation space in the next few years. They've chosen a great platform (.NET), a great IDE (VS 2008), and are working toward providing test and automation solutions for new technologies such as SilverLight. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, April 16, 2008 |
|
| |
|
|
 |
|
 |
| |
|
|
| |
James Bach. Man, that guy...
He's my QA hero.
Seriously.
It's not a man-crush though, so don't get all freaked out.
That guy...is able to eloquently match words to the things we struggle with in and as QA. He writes and speaks things that I've struggled to put to words for years.
Recently the TestCrew interviewed James and he spoke of things that I tried to describe recently:
TestCrew: We understand that you're working on a new book about self-education and you will be sharing some ideas on this topic during the June CAST conference. What is the most important thing you've learned about self-education during your career? James: The single most important thing about that I've learned about self-education is that it isn't an activity I sit down to, as in "now I will educate myself." Rather, it's a way of looking at the world as a puzzle that I must solve, and most of my waking life is an opportunity to discover clues that help me solve it. Walking along a beach can be self-education, or noticing how my son plays a video game. My education comes largely by paying attention while life is going by, and noticing the patterns. For the tester, rapid self-education is essential. We get a half-baked product and must make sense of it. That's fundamentally a learning task.
If you are in QA and you don't follow James Bach then you are just making it hard on yourself. He paves the way. When he speaks...LISTEN. I guarantee you'll learn something.
I mean, really... Look at him, how can you pass up a hero like this?

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Jeff Wilcox at Microsoft hat put together a great article entitled "Silverlight Unit Testing" that shows us how to use the newly available unit testing framework that comes with Silverlight 2 (currently in Beta 1). The framework has the ability to test the API as well as run the tests in all the browser that support Silverlight 2!
Check out Jeff's video-cast entitled "walkthrough of the control unit tests" for a quick peek at how this stuff works.
This is really exciting from an automation standpoint. As an automation engineer I always fear new technologies and their hurdles that might make software not so automatable....much like that darn Flash. Here we are almost 10 years later and the best thing we have to "help" automate Flash is iMacros. |
|
| |
 |
|
| |
|
|
| |
|
|
| |


We tester's understand the joke in this bumper-sticker oh-so-well don't we? Get yours as a bumper-sticker or T-shirt here. Thanks Jeff for pointing this out. |
|
| |
 |
|
| |
|
|
| |
|
|
| |
Overview In this screencast learn the art of trimming browsers from a browser compatibility test list by knowing your users, understanding how the browser works, OS & browser facts versus misconceptions, and grouping browsers by common component versions to remove redundancy. This screencast will you help you trim your browser compatibility list and feel confident about it (duration: 44 min. 28 sec.).
Download
Presentation Materials Browser Compat Presentation.zip (1.62 MB, includes: Browser Compatibility Testing.pptx, Browser Facts Misconceptions and Experience.docx, BrowserCompatCheatSheet.xlsx, Setting Browser Compatibility Testing Expectations.docx)
If you don't have Office 2007 you can get the Office 2007 viewers here for free. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Occasionally people need to access Team Foundation Server source control but they don't have or need Visual Studio or Team System. The good news is that you can access Team Foundation Server without Visual Studio!
Did you know you can access/read TFS source using Attrice's Team Foundation Sidekicks and it's free!?
Did you know you can access/read/write TFS source using Microsoft's standalone application Visual Studio Team System 2008 Team Explorer and it's free?!
Now you do. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, March 26, 2008 |
|
| |
|
|
| |
I like Mike Cottmeyer's 30 second elevator speech on what agile is basically about. Mike points out 3 key things: - A set of engineering best practices that allow for rapid delivery of high-quality software.
- A project management process that encourages frequent inspection and adaptation.
- A leadership philosophy that encourages team work and accountability.
Wrong, or right, its a description in 30 seconds that gets your foot in the door. Slamming a 300 page book entitled Agile Software Development on management's desk just doesn't work. Baby steps people... Changing or improving the software development process doesn't happen overnight. Start with the foot in the door. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, March 26, 2008 |
|
| |
|
|
| |
I work nearly all day in and around people that are using Visual Studio 2005-2008 and Visual Studio Team Foundation Server, and I keep seeing the issue where a user who once had access to a project in TFS now has read-only or can't even get to TFS. Here are two possible reasons why you now have limited access to a project in Team Foundation Server:
- The source control setting has been set to Visual Source Safe. Change it back to Visual Studio Team Foundation Server by:
- In the top menu navigate to Tools > Options
- In the Options window, select the Source Control node on the left side
- On the right panel select Visual Studio Team Foundation Server in the dropdown
- You've changed your network password and the old credentials are cached on your box. Clear cached credentials by:
- Navigating to Start and then Run
- Type the following text in the run box: control userpasswords2
- Press Enter
- In the resulting dialog, select the Advanced tab and then click the Manage Passwords button
- Select the TFS server name
- Click the Remove button
- Restart Visual Studio

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A long time ago I proved to myself that as a software tester and developer, working with multiple monitors was by far faster and more productive. As a tester the biggest payoff is when I run tests in one monitor while updating the test cases in the other. As a developer the payoff is writing code in one monitor and running the debug app in the other. Though I never had facts to prove this productivity I truly felt and saw it for myself. Fortunately, I've never been in a company that was too poor (or cheap) to provide two monitors so I never had to prove my case. I think the industry is starting to see the light. For example GoDaddy is the first place I've worked for that had 2 monitors as standard issue! Not only that but we are set up to use UltraMon (utility for multi-monitor systems, designed to increase productivity and unlock the full potential of multiple monitors).
If you're a tester stuck with 17" dual monitors or even worse, a single monitor, your evidence is now here... The results are in, the University of Utah says you can be more productive with 2 monitors and the larger the better:

Jeff Atwood, believes these are the actual results of the study. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Hanselminutes recently had a show entitled Quetzal Bradley on Testing after Unit Tests where some very interesting perspectives and points were made by Scott and Quetzal about unit testing, code coverage and testing in general. I've never been a fan of measuring test completeness through code coverage and Quetzal sums up my feelings on that quite well:
"Code coverage can't cover code that's not there" e.g. lack of error handling, data conditions...
If you're unit testing or writing automated tests be sure to give this show a listen. It'll be worth your time. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Have you ever been in the position where you want to convert an already existing Visual Studio 2005 project to be a Test Project so that you can write and run unit tests? There is no simple way, but there is a hack.
Assuming that you are using a version of Visual Studio that supports Testing (e.g. Team Edition for Software Testers) here is how to do it:
- Add the following .NET Reference to the project:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
- Put in the following using directive in the .cs file that contains your tests:
using Microsoft.VisualStudio.TestTools.UnitTesting;
- Create a Test List, this will generate the .vsmdi file (This is the file that opens your Test Manager tab):
- Click Test in the top menu
- Select Create New Test List:
- Notice in the Solution Explorer that the Project now is wrapped in a Solution and the .vsmdi file has been created:

- Setup your test configuration file (.testrunconfig):
- In Solution Explorer right click the Solution Items folder, select Add, then select New Item
- In the dialog, highlight Test Run Configuration on the left and select Test Run Configuration on the right side
- Name the file accordingly and then click Add:
- Notice the .testrunconfig file has been added to the solution
- Close Visual Studio
- Open the project's .csproj file in a text editor.
- In the top <PropertyGroup> node, change the <ProjectTypeGuids> node to read:
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
If your using VB.NET your GUID should be: <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
- Save and close .csproj file.
- Open the Solution up (.sln file).
- You are now ready to write tests.
- To run your tests:
- In Solution Explorer double click the .vsmdi file to open the Test Manager window
- Check the test you want to run
- Right mouse click the test and select Run Checked Test.

This problem is quite interesting due to the fact that the .vsmdi file and .testrunconfig exist at the Solution level and not the Project level. In the past this interesting fact was a small hurdle for our automation team because we needed to create a Visual Studio template for a Test Project, but Visual Studio only templates Projects and not Solutions (again the .vsmdi & .testrunconfig need to exist at the .sln level). I'll save the explanation of that workaround for another day!
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Today I was shown the "Project Alerts" feature in Visual Studio 2008. This cool feature allows you to monitor source control check-ins, failing tests, build completions, and work items in TFS. When one of these events occur you can be notified by email. Monitoring source control closely is very valuable for QA and testers, by doing so you can know the minute something is new or changed and can start building tests or investigating the change.
Here's how to set Project Alerts in Visual Studio 2008:
- In the Team Explorer window, highlight the project name you want to set alerts for.
- In the VS 2008 top menu, click Team and then Project Alerts
- Enable the alert you are interested in and provide your email address in the Send to column.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A past article about uTest has got me thinking. More than usual that is. Specifically what has me thinking are these quotes from the article: "...testers receive feedback and can gain in the rankings, just as with any other promotional network where individual users can establish themselves as authorities." "Take this developing team model, and it can be applied to a great number of projects that can be rolled out on a variety of websites, allowing uTest to offer specialized niches within its larger network. One way in which this could become particularly helpful is for another one of its upcoming features: a Facebook application. This won’t be a Facebook app like all the others, but a testing platform for app developers. It allows testers to show and their their uTest tester profiles within Facebook (self-promotion at its finest), while also enabling testers to report issues and bugs via the uTest testing platform. This is in fact quite similar to what Facebook itself is taking on with its own Translations Facebook application, which is the social network’s way of better acclimating to the global growth process. Both new developments should work quite well for uTest’s platform, and I think this company has found a great way of letting companies leverage a dedicated, professional social network for quality assurance." As testers we have a pretty good feeling of where we stand amongst our team at work and other teams within our company. But how do you think your testing skills rate when you compare them with another company, the whole state, the country, and better yet the nation? The notion of sharing your skills with the world is not new to me, but I think uTest and its feature of Facebook application is cutting edge. It's brilliant, scary, good, and bad. A couple years ago my first real leap into the social networking space was with LinkedIn.com, a professional network. LinkedIn.com has done me well. It has proven to be a fantastic resource...Especially if you know how to sell yourself. But beyond LinkedIn, as a Quality Assurance Engineer, I seem to be lost in the sea of other QA professionals. I've attempted to break out a bit with my blog, sharing testing tools I've written, posting advice on forums, joining a software testing club, writing a magazine article, and recently my first public presentation, but still... I am one among many. It will be very interesting to see the dynamics that uTest ratings and feedback will bring for testers. Will I be able to use a testing rank to gain the edge over another person for a job in the real world? Could my rank be considered a real-time "testing certification"? In my opinion a "testing certification" is useless without a governing authority, but if I have a good rank and a excellent feedback from 200 people is that a better or more acceptable governing authority? What if it works against me? It only takes a few mistakes, misunderstandings, or one jack-ass to throw off your rank (as seen with XBox Live). It takes a long time to get back into good graces once that happens. We are definitely seeing a trend for career social networking on the Internet. Recruiters, Human Resources and hiring managers are using the Web to check you out now days (Googling your name, look at your LinkedIn feedback, forum posts etc). As a hiring manager, I wouldn't have a problem with considering your uTest rank and feedback as additional information to help make sure I'm making a good decision about hiring you. Scary huh? Granted, being a good quality assurance engineer isn't all about testing skills, but the more history and data I have on you, the potential hire, the better. What are you doing to prove your software quality assurance rating in the social networking space? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Oh the monotony of errors we testers endure... If I ran into any of the below errors while testing it definitely would make my day!

![clip_image001[4]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B4%5D_1.jpg)
![clip_image001[6]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B6%5D_1.jpg)
![clip_image001[8]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B8%5D_1.jpg)
![clip_image001[10]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B10%5D_1.jpg)
![clip_image001[12]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B12%5D_1.jpg)
![clip_image001[14]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B14%5D_1.jpg)
![clip_image001[16]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B16%5D_1.jpg)
![clip_image001[20]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B20%5D_1.jpg)
![clip_image001[18]](http://www1.qainsight.net:8080/content/binary/WindowsLiveWriter/FunnySoftwareErrors_1149D/clip_image001%5B18%5D_1.jpg)
|
|
| |
 |
|
| |
|
|
|
| |
Thursday, February 28, 2008 |
|
| |
|
|
| |
What if your company implemented this new captcha and you had to test it:

Following the thinking of Jeff over at Coding Horror...
What software testers do best is learn.
Yes, this captcha is a joke, but if it was real could you test it? Yeah, yeah, I know there are more test cases than solving the equation. But can you solve the equation?
Right now... I can't.
Let me at my favorite resource for 1 minute to an hour (the Internet) and I can.
What software testers do best is learn. Remember that next time you are frustrated with a serious testing challenge. Testing capability is not all about experience, it's also about adaptability, willingness to learn, and the ability to learn quickly. Having those three skills will go a LONG way in the testing world. |
|
| |
 |
|
| |
|
|
|
| |
Sunday, February 24, 2008 |
|
| |
|
|
| |
A previous coworker of mine Travis Illig recently blogged about why he thinks "It's not OK to skip the standup". In this post he provides reference to another about the patterns of daily stand-up meetings and this is great information for those who wonder about or are thinking about daily standup meetings.
"Daily stand-up meetings" now days are attached to the latest and greatest buzzword "agile" in the software development world. But you, your team, or your company don't have to follow an agile process to benefit from a daily stand-up. Communication is the foundation of any task that involves two or more people and sadly most people are just plain bad at it. Poor, or no communication flat out just doesn't work. Bad communication fails us in so many aspects of our life and we don't even realize it until we start thinking about it and paying attention to it....Work and home. When it fails at home with your spouse what happens? We go to a counselor who advises us to communicate with each other with advice such as "when you get home from work commit 10 minutes to each other (5 minutes each), ask your spouse how their day went, and listen whole-heartedly"... sounds an awful lot like a "stand-up" doesn't it? I'm no psychologist but I'm here to tell you that this lesson is a fundamental building block for success within society. Home or work.
If you're a manager, test lead, tester, woman, or man you need to be communicating...Every day. Don't leave people in the dark. I have personally seen stand-ups work, and WORK EXTREMELY WELL at home and work. Take 2-15 minutes for a stand-up with the people you interact with. You will see an improvement, I have no doubt. Use the patterns of daily stand-up meetings as your guideline. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Friday, February 22, 2008 |
|
| |
|
|
 |
|
 |
|
| |
Tuesday, February 12, 2008 |
|
| |
|
|
| |
Kudos to Greg for passing on this brilliant code quality metric:

|
|
| |
 |
|
| |
|
|
|
| |
Sunday, February 03, 2008 |
|
| |
|
|
| |
I just signed up as a tester at uTest. What is uTest? Really there are two parts to uTest, people who want their products tested and the testers:
"uTestTM provides software companies with significant benefits including higher quality software releases, reduction in product release cycle time and overall product time to market while improving overall customer satisfaction. We also provides software companies with significant cost savings including reduction in QA costs by minimizing help desk costs, handling peak QA periods effectively and improving overall quality of released application.
uTestTM customers gain access to a large, diverse and global community of software testing individuals over our secure testing platform. The uTestTM Testing Platform provides a hosted infrastructure to manage complete software QA cycles and projects.
Software application testers who are part of the uTestTM professional testers community are able to test applications in a completely flexible work environment, earn significant additional income and improve technical expertise."
From the tester's perspective, the way it works is that you will get paid for defects that are not duplicate and are verified by the company. It's not apparent what the rates are yet. You can get paid monthly, via a Mastercard debit card from Payoneer, when your balance is greater than $100. I didn't sign up for the money, I signed up because I'm interested to see what testing is like in a large testing like atmosphere. I've only been involved in one other large testing effort for Intel. It was beta testing of hardware and when the testing was complete I got to keep the hardware. The experience was horrible. Mostly because communication sucked and ultimately the product sucked. uTest appears to have a platform built to better manage this type of environment, so I'm excited to see how and if it works well.
I wonder though, since money is involved, will it be more competitive? Will people race to break things and get defects in to make sure theirs isn't a duplicate? I envisioned a few of the typical project, Developer and QA problems and wrote asking how uTest would handle them. Here were my questions:
Bug being duplicate: What if there is a core bug, but another resulting “bug” is caused by the core bug. An example would be an incorrect global variable that displayed itself on 5 different pages. What if reported one defect for each of the 5 pages (resulting in 5 defects), but somebody else reported the core/global variable issue? How and who will manage duplication in a fair way? How will you prevent companies from marking a bug as duplicate as an excuse to avoid paying?
A bug is really a bug: A common scenario that developers & project managers do is mark a bug as a “feature request” when A) the project is overwhelmed and they are trying to lower the defect numbers or B) if the functionality is not documented specifically/a little loosely in the requirements. How will you protect both sides from abuse?
Verification occurred: At the end of your registration process you state: “If you have encountered a bug in our registration process please let us know by emailing us at bugs@uTest.com, we will credit your uTest account with cash for every non duplicate bug that you submit and we verify”. I’m assuming this is how it will work when testing for other companies too. How will you protect testers from finding/entering defects and not getting paid because the company we are testing for has run out of budget and decided to use the excuse: “not verified, so we’re not paying”?
Usability: Will there be any money for usability suggestions that are turned into future features?
Here is uTest's response:
"One very important point I would like to emphasis: Only the company (the software vendor) is entitled to approve or reject a bug. We do NOT interfere in this process since only the software owner can really identify a real bug or a problem. BUT, we do offer tester’s a few mechanisms to object a company decision:
1. A Dispute process - for complaining about invalid rejection reasons. In that case we will investigate this issue and credit the tester if needed. We would do our best to make sure the testers would get paid for their hard job.
2. Budget - We do make sure that companies would have enough budget before initiate a new testing assignments, so there is no way testers would work for companies without approved budget.
3. Tracking invalid behaviors - We track every communication between the company and a tester, so once we’ll notice that a certain company act unfairly with the community we would get involve and make sure the testers is getting what they deserve. The testers community has the power to make a change, once a few tester would report a wrong behavior of a company, we would get involved.
Duplication – As part of our testing platform functionality, we’ve developed a duplication engine in order to identify a duplicate bug once a new bug is being submitted into the system. We then would notify the tester that is there is a possibility that his new bug is already exist and ask him to make sure he is submitting a different one. We would also publish a list of known bugs so the testers won’t waist their valuable time finding existing bugs.
Usability – we do plan to offer various methods of credit testers who provide usability feedbacks, this would be in the later stages of the platform."
It sounds like uTest is on the right track. Go check 'em out: http://www.utest.com/ |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, January 30, 2008 |
|
| |
|
|
| |
I laughed when I saw this today. Each piece of the pie is so painfully true. I have honestly gone through these phases/woes, over and over and OVER.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
After the IE Team posted their intent and work on compliance to standards the debates have begun. Revelations have shown that the standards compliance is really an an option that would be invoked by a developer with a META tag or header using the value of 'X-UA-Compatible'. Now, IE 8 will have 3 modes:
- “Quirks mode” remains the same, and compatible with current content.
- “Standards mode” remains the same as IE7, and compatible with current content.
- If you (the page developer) really want the best standards support IE8 can give, you can get it by inserting a simple <meta> element. Aaron gives more details on this in his article.
There is much debate on how this will impact the Web, user experience, as well as how developers will program. There are interesting thoughts around all of them. What is most intriguing to me is that IE 8 is going to be standards compatible. With news like this, I can now test that a Web application conforms to a standard. The standard is now my guideline for my set of test cases. But really will it be a "set of test cases"? Quite possibly it could be only one: Load the page and validate that the page is rendered using "Best standards mode". But hopefully the test wouldn't even be of my concern, with the right Content Management System, the code will be compiled by a developer and the check will be done by the CMS before release to QA. Either way, conforming to standard lowers the risk of a browser compatibility dramatically.
Another interesting feature in IE 8 is the idea of "Version Targeting". In other words:
"The idea is that when IE10 loads up my IE7 page, it rewinds itself to act like IE7 did, all those years ago—no matter what changed in the meantime."
What will "Version Targeting", do to my browser compatibility testing list when IE 8 is released? My first impression is that it won't slim my test list at all. For example, if you have a page that is coded for IE 8 and X-UA-Compatible, it doesn't necessarily mean that it will look good in IE 7 or in IE 6 since the code is targeted for IE 8. Using that same Web page (IE 8 and X-UA-Compatible), will the testing list shrink with the release of IE 9? It depends... Will the standards and the compliance to those standards change between IE 8 & 9? How many compliance to standard defects were in IE 8 and fixed in IE 9. If their were few defects and the standards didn't change then the risk is low and you probably wouldn't need to test both IE 8 and 9, just 9.
It's too early to speculate and come up with concrete answers. The IE Team is still working through this stuff with themselves and the active community. But I'm happy to see their attention on the matter. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, January 23, 2008 |
|
|
| |
Wednesday, January 16, 2008 |
|
| |
|
|
| |
I noticed the other day that MSDN has a testing section entitled Testing Center. It appears its been out there a while and I somehow missed it (which is amazing when I consider the amount of time I spend on MSDN).
Anyway, there are some interesting things going on out there:
Whiteboard Videos: Decent, short topics. It's hard to read the white board though, which I found really annoying.
Technical Articles: Not too many articles out here, but a good start?
Tester Center Downloads: Three testing tools. Again, a good start.
As an automation engineer that lives mostly in a .NET testing framework I really appreciate MSDN and I'm happy to see a section dedicated to testing. Having MSDN and its abundance of resources as well as video training really makes my job easier. Having these resources available to me also gives me great comfort in my choice to use .NET as the platform for automated testing.
Microsoft, Visual Studio, and MSDN have come a long way over the years. Kudos to Microsoft for making my job easier.
I'll get off my Microsoft soapbox now. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, January 15, 2008 |
|
| |
|
|
| |
Company: GoDaddy Job Title: Automation Test Engineer Location: Scottsdale, AZ
Description "We are currently seeking to hire an Automation Test Engineer. We are looking for an entry to mid level Test Engineer with a foundation in software engineering and the ability to think through moderate to complex problems. If you thrive in a dynamic environment and enjoy working with cutting edge technology working to define and deliver complete solutions, then we want to see your resume."
Get the complete job description here. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 10, 2008 |
|
| |
|
|
| |
Last month the IE team mentioned that their latest Internet Explorer code (to be IE 8 sometime in the future) renders the "Acid2 Face" tests correctly. This is a large achievement for the team and developers around the world. Browser compatibility testing is going to get easier for us testers (once developers shake their old habits of coding workarounds for browser quirks)! Read the post here. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, January 09, 2008 |
|
| |
|
|
| |
MSDN in offering more free training! Their new program titled Ramp Up will teach you Visual Studio 2005, C#, and .NET 2.0 after you choose a route based on your current status of Aspiring Developer, Java Developer, Visual Basic 6.0 Developer, or Microsoft Visual Studio 2002/2003 Developer. The online courses and tests are free. Course graduation awards you with major discounts on Microsoft Certified Technology Specialist (MCTS) exams, E-Learning, and Self-Paced Training kits. If you choose the path of certification or not, this and other types of training has made becoming a software tester with .NET development skills (SDET) so easy. Being a tester with development skills is the way of the new testing world. Do it. DO IT. DO IT!! |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, January 08, 2008 |
|
| |
|
|
| |
I ran into this quote from Albert Einstein today:
In order to be an immaculate member of a flock of sheep, one must above all be a sheep oneself.
I have personally lived this many times over the years in my various careers. I'm going to venture out and say that I've been pretty successful at working my way up to an immaculate member in few cases. I chalk my success up to what I call "working in, and reporting from the trenches", and also, not to ever remove myself from the trenches. I believe that your success amongst your sheep/peers is highly dependant on staying extremely in tune with the trenches, and most importantly the people in the trenches. Once you remove yourself from those trenches, you are not eating the same sheep food, and I consider you a shepherd. Don't get me wrong, shepherds are a good thing, and shepherds do tune in to the trenches. But they don't always spend 8 hours a day in them because they have shepherd things to do! I try my best to walk the fine line between sheep and shepherd. Am I shepherd in sheep's clothing?
Shepherd, how do you stay in tune with your trenches to gain or maintain an immaculate sheep status? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Overview This screencast demonstrates how to create a shortcut in the Internet Explorer Links menu bar to the Window's hosts file for quick and easy access while testing (duration: 1 min 58 secs)
Download WMV Zune iPod/iTunes |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
 I've realized the beauty of screencasts at work recently. About a month ago I spent a week and half giving a training presentation 6 times to train the whole QA team at GoDaddy. After presentation #2 I was bored and felt like a programmed robot. Recently, I decided that screencasting might be a better way of training so many people, so I did one. Success or failure is still to be determined, but I really like the idea of being able to show people how to do something rather than explain in it with a ton of words and expect them to venture out on their own and remember what I told them.
Me: Why not carry that thinking into this blog? You: Great idea Brent! Me: Do you really think so? Thanks! You: Don't fail me. Me: Bite me. You want it or not?
I'm adding a "Testing Screencasts" category. Get ready to do some watching and listening. I'll start small, until I gain some screencasting mojo. |
|
| |
 |
|
| |
|
|
|
| |
Saturday, January 05, 2008 |
|
| |
|
|
| |
I ran into another Silverlight snooping application today: Silverlight Spy
This one is pretty cool in the fact that you can point it towards a Web site/Silverlight application and it will allow you to peruse the plugin using i'ts XAML Explorer as well as change the properties and and actual XAML on the fly. Seeing tools like this tells me that automating a Silverlight application is easily doable. Flash on the other hand...an automation nightmare. I wish it would go away.
Here is the current feature list:
- Convenient XAML object explorer
- XAML object property grid allows for getting and settings property values
- Regeneration of the XAML xml based on the object model
- Statistics of used objects
- Tracing facility for debugging Silverlight 1.0 applications
Download Silverlight Spy.
Silverlight Documentation. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, January 01, 2008 |
|
|
| |
Sunday, December 30, 2007 |
|
| |
|
|
| |
Max has some interesting points about the long ago chosen language choice for the bug tracking tool Bugzilla: Perl. What is the popular Bugzilla's future, due to the limitations of the Perl? It sounds like they are thinking about a rewrite. Can an open source product survive a transition of that magnitude? This will be interesting to see how it pans out. Open source failed me once, I hope it doesn't fail the testing community. |
|
| |
 |
|
| |
|
|
|
| |
Saturday, December 29, 2007 |
|
| |
|
|
| |
I've decided to dedicate a spot on the blog for the user-agent information I've been providing over the last few years. From now on you can reference this post from the right navigation under the tools section.
Here are four very good lists and classifications of user-agents:
- http://www.user-agents.org/index.shtml
- http://www.botsvsbrowsers.com/
- http://www.tnl.net/ua
- http://www.pgts.com.au/pgtsj/pgtsj0212d.html
Here is my huge user-agent XML import file for use with the User Agent Switcher Firefox add-on: AgentStrings20080223.xml (19.67 KB). Read here how you can use this tool for testing. The current file contains the following user-agents for your browser spoofing pleasure:
Internet Explorer MSIE 8 (Win Vista) MSIE 8 (Win XP) MSIE 7 (Win Vista) MSIE 7 (Win XP) MSIE 7 (Win Storage Server) MSIE 6 (Win XP) MSIE 5.5 (Win 2000) MSIE 5.5 (Win ME) MSIE 5.0 (Win 95) MSIE 4.01 (Win 95) MSIE 4.0 (Win NT)
FireFox FireFox 2.0.12 (Win Vista) FireFox 2.0 (Win XP) FireFox 1.5.0.6 (Fedora Core 5/Linux) FireFox 1.5.0.4 (Debian Linux) FireFox 1.5.0.3 (Mac OSX) FireFox 1.5.0.1 (Win Vista) FireFox 1.5 (Win XP) FireFox 1.4 (Win XP) FireFox 1.0.7 (Win XP) FireFox 1.0.6 (Win XP) FireFox 1.0.5 (SlackWare/Linux) FireFox 1.0.4 (FreeBSD) FireFox 1.0 (Win XP) FireFox 0.9.3 (Win XP)
Opera Opera 9.1 (Win XP) Opera 8.0 (Win 2000) Opera 7.6 (Server 2003) Opera 7.51 (Win XP) Opera 7.5 (Win XP) Opera 7.5 (Win ME) Opera 4 Opera 3 Opera 2 Opera 1
Netscape Netscape 8.1(Win XP) Netscape 8.0.1 (Win XP) Netscape 7.2 (Win 2000) Netscape 7.1 (Win 98) Netscape 4.8 (Win XP) Netscape 4.76 (Win 98) Netscape 4.5 (Win 98) Netscape 4.05 (Win 95) Netscape 3.01 gold (Win 95) Netscape 2.02 (Win 95)
Safari Safari 3.0 (v521) Safari 2.0 (v418.9.1) Safari 2.0 (v412) Safari 2.0 (v401) Safari 1.3 (v162) Safari 1.3 (v158) Safari 1.3 (v146) Safari 1.2(v125.8; OSX 10.3.4) Safari 1.1 (v100.1; OSX 10.3.2) Safari 1.0 (v85) Safari 1.0 (v74 beta 2) Safari 1.0 (v73 beta 2) Safari 1.0 (v64 beta) Safari 1.0 (v51 update 1.0 beta) Safari 1.0(v48 public beta)
AOL AOL 9.0/MSIE 6.0 (Win XP) AOL 8.0/MSIE 6.0 (Win XP) AOL 7.0/MSIE 5.5 (Win 98) AOL 6.0/MSIE 5.5 (Win 98) AOL 5.0/MSIE 5.0 (Win 98) AOL 5.0 (OS X) AOL 5.0 (Mac PPC) AOL 4.0/MSIE 3.02 (Win 95) AOL 4.0/MSIE 4.01 (Win 95) AOL 4.0 (Mac PPC) AOL 4.0 (Mac 68k) AOL 4.0/MSIE 3.0(Win 3.1) AOL 3.0/MSIE 3.02 (Win 95) AOL 3.0/MSIE 4.01 (Win 95)
Mozilla Mozilla 1.7.8 (Linux)
Spiders/Bots Googlebot 2.1 (New version) Msnbot 1.0 Msnbot 1.0 Beta (v0.11) Yahoo Slurp Ask Jeeves/Teoma
RSS Readers NewsGator 2.5 (Win XP) Feed Demon 1.6 (Win XP) Bloglines 2.1 SharpReader 0.9.6.0 (Win XP)
WAP Devices Nokia 6630 Nokia 6100 BlackBerry 8703 iPhone (3.0 Mobile)
Toolbars Google Toolbar 4.0 Hotbar 4.4.2 AskBar 3.0
Other iTunes 4.2 (OS X 10.2) iTunes 4.7 (OS X 10.2) iTunes 7.1.1 (Mac PPC) Zune 2.0 Facebook |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Friday, December 28, 2007 |
|
| |
|
|
| |
After a near 14 year life span competing with IE and other better browsers, AOL is throwing in the towel on Netscape Navigator. The war was long and drawn out but has finally come to an end for the poor browser.
Sweet! Take another browser off the browser compatibility testing list.
Read more here...
Want to download a few keepsakes or take a walk down memory lane? Check out Netscape's Product Archive FTP. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, December 27, 2007 |
|
| |
|
|
| |
Back in 2006 I wrote the article The $60 Web Testing Toolbox with the intent of providing a cheap set of Web testing tools for testers. Most of the tools were mentioned because they provided me the most bang for the buck, but the reality is that good testing tools sometimes cost money. I wanted to share with you my complete Web Testing Toolbox minus the cheap factor. Developing software is not cheap so why does testing of it have to be? For the most part, these tools are inexpensive and have proven to provide great value. In my experience, each and every one provides enough value to justify the cost. Keep in mind I've pretty much lived in a .NET environment since 2001, so some of the things in my list tend to lean in that direction.
I'll keep this list updated as I see fit. I've provided a permanent link in the right navigation for permanent and quick access.
Visual Studio Team System for Software Testers (MSDN Subscription) |
Description Increase your productivity with comprehensive Web testing tools. These tools provide coverage for Web services, HTTP, XML, and streamlined for testing ASP.NET applications. With Visual Studio Team Edition for Software Testers you can use automated record playback functionality to reduce ramp up and to create and execute repeatable and maintainable Web tests.
How I use for Testing I use it to automate Web browsers, talk to Web services, and query databases. The Testers Edition provides a GUI that allows you to manage, execute, and analyze reports for your "unit tests". This is the biggest and most powerful tool in the toolbox. |
|
Roboform ($29.95) |
Description Roboform is the top-rated Password Manager and Web Form Filler that completely automates password entering and form filling.
How I use for Testing I have so many sites and logons that I need to provide on a daily basis. This tool is very useful when you are testing forms or signing on all day long. |
|
Reflector (Free) |
Description Reflector is the class browser, explorer, analyzer and documentation viewer for .NET. Reflector allows to easily view, navigate, search, decompile and analyze .NET assemblies in C#, Visual Basic and IL.
How I use for Testing I use this tool to investigate the internals of .NET assemblies when the source code is not available. Investigating allows me to understand better what I'm actually testing. |
|
ViewState Decoder (Free) |
Description Tool to decode the ViewState and control state in ASP.NET pages.
How I use for Testing I use this tool to decipher the viewstate (base64) in an ASP.Net page (the big string in the HTML source). I also use the tool to validate that the viewstate is encrypted when sensitive data is found in the pages controls. See an example of how I use it here. |
|
Paros (Free) |
Description Through Paros's proxy nature, all HTTP and HTTPS data between server and client, including cookies and form fields, can be intercepted and modified.
How I use for Testing I use Paros for viewing and editing HTTP and HTTPS traffic as it flows through Internet Explorer. This is a great tool for bypassing client side validation or ripping out pieces of a page or script that limits your testing. See how I do cookie poisoning with Paros. I prefer Paros over Fiddler 2 because it's cleaner and simpler for what I'm using it for. |
|
HTTPWatch ($295) |
Description HttpWatch is an HTTP viewer and debugger that integrates with Internet Explorer to provide seamless HTTP and HTTPS monitoring without leaving the browser window.
How I use for Testing This tool resides within IE as an explorer bar and provides a quick and easy view of things such as caching, download time, and network operations. This tool doesn't allow editing of the traffic but it's convenience and cleanly presented data keeps it on the list. It also has a very nice API which is handy for automation. See how it benefits my testing here. |
|
Fiddler 2 (Free) |
Description Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and "fiddle" with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.
How I use for Testing Tool for for viewing and editing HTTP and HTTPS traffic with Internet Explorer. Very robust but confusing. It has similar functionality to Paros. |
|
Ruler (Free) |
Description A screen ruler for Windows.
How I use for Testing A simple yet elegant tool to use tool to measuring pixels. See how I use it here. |
|
Pixie (Free) |
Description Pixie is a color picker that includes a mouse tracker. Simply point to a color and it will tell you the hex, RGB, HTML, CMYK and HSV values of that color.
How I use for Testing A small and easy to use tool to get the color codes of anything on your desktop or browser. This is nice to have when you are too lazy to dig through HTML source when you are trying to validate a color. |
|
SOATest (Approx $5000) |
Description Parasoft SOAtest is a comprehensive, collaborative test and analysis tool suite designed specifically for test and validation of Service Oriented Architectures. Parasoft SOAtest streamlines the process of rapidly constructing robust regression suites.
How I use for Testing I've used SOATest for testing Web Services. It has a lot of bells and whistles and is good for those who don't have the skill to dig into test a web service using .NET and Visual Studio. The regression and standards compliance features are life savers. See how I ranked SOATest against other Web Service test tools. |
Kleptomania ($49.95) |
Description Kleptomania lets you select text anywhere on the screen, including areas that you cannot highlight with your mouse, such as columns of data from a word processor or error messages from any Windows program.
How I use for Testing I use Kleptomania for capturing text in modal dialog boxes to paste into defects and taking screen clippings for defects . See how I use it here. |
File Property Reporter (Free) |
Description File Property Reporter analyzes a directory and all underlying subdirectories, and reports the directory structure, all the files names, and all the properties of the files.
How I use for Testing I use this tool to take snapshots of web application directories before and after a build. I then do a diff on the two reports to see the changes between the snapshots. Created by yours me! See how I use it here. |
SWEA ($79) |
Description SWEA automates Internet Explorer and provides solution for functional test and regression test automation.
How I use for Testing SWEA is a IE recorder as well as a .NET API that allows you to Automate Internet Explorer using C# or VB.Net. This is a very stable, powerful and robust way to do browser automation. For one year, with the help of the SWEA API and automation, I managed to stay a one man test team for a very complex enterprise application. |
User Agent Switcher (Free) |
Description Adds a menu and a toolbar button to FireFox for switching the user agent of the browser.
How I use for Testing I use this to spoof/imitate user-agent strings for browser detection code. This is handy when you need to test browsers or Web app detection and the application is hard to install, setup or run in your test environment (Quicken, IE 4.0, etc...). See how I use it here. Get an extensive user-agent list for import here. |
Also, If you're shopping for testing tools and you want an extensive list of what is out there, check out ApTest's tools section. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, December 08, 2007 |
|
| |
|
|
| |
If you've ever bought something from IKEA that required assembly, and are vaguely familiar with Test Driven Development (TDD) you'll get a kick out of Gokhan Alitnoren's TDD Poster - IKEA Style. IKEA style makes it seem so easy doesn't it? Funny stuff. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, November 29, 2007 |
|
| |
|
|
| |
Microsoft is doing a Visual Studio 2008 Installfest at various locations across the country!
What specifically is "Installfest"? Tim at Microsoft says:
"Want the latest IDE toolset and start developing solutions in .NET 3.5 using Asp.net Ajax, Silverlight, LINQ, Astoria and all the good stuff? What are you waiting for? There are various Visual Studio 2008 Installfests around the country. My team in the west is no different, but maybe you've been having a hard time finding them? Here's a list for all those happening in the west! please feel free to blog and spread the word. We're providing a location, install dvds (these will be evals because the finals aren't pressed yet), and food/drinks. This will be a good time to get some questions answered, get VS 2008 installed, play around, and hang out with your peers. Each registered and attended individual will receive a special code to receive the fully-licensed Visual Studio 2008 Professional copy sent to them when the full package product is available to ship. Don't miss these events!!! Registration is limited, so get in now and mark your calendars!"
If you're in Phoenix, our Installfest is shaping up to be December 20th. Watch the AZGroups calendar for details. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Monday, November 19, 2007 |
|
| |
|
|
| |
Understanding how to get at the controls in a modal dialog box when using SWEA is something I never had to worry much about in the past; the SWEA example code took care of all of those that I had previously encountered. Recently I needed to automate a "Choose file' dialog, and since there was no example, I had to buckle down to figure out how to get at the controls in that dialog. To understand the controls of this particular modal dialog, and also wanting to make sure I could handle all others I encountered in the future, I wrote some code that would dump all relevant things available in SWEA's DialogControl class when the DialogActivatedEventHandler was fired. By doing this, when a dialog was presented, I was able to scrape all the control information out of the modal dialog. The following code in my explorerManager_DialogActivated method did the scraping and dumping:
if (this.Debug == true) { Console.WriteLine ("--Modal dialog info--------------------"); Console.WriteLine ("Modal Dialog Title: " + dialogScene.Title); Console.WriteLine ("Modal Dialog ClassName: " + dialogScene.ClassName); Console.WriteLine ("Modal Dialog DialogHWND: " + dialogScene.DialogHWND); Console.WriteLine ("Modal Dialog XML: " + dialogScene.Xml.ToString()); Console.WriteLine ("----------------Controls in Modal dialog-----------------"); foreach (DialogControl dlgCtrl in dialogScene.Controls) { Console.WriteLine("Control name: '" + dlgCtrl.Name + "' is a type of: " + dlgCtrl.GetType().ToString()); } Console.WriteLine("----------------------------"); }
With my new addition as noted above, when the DialogActivatedEventHandler was fired the explorerManager_DialogActivated method was invoked which resulted in the following informational console dump about my modal dialog:
---Modal dialog info-------------------- Modal Dialog Title: Choose file Modal Dialog ClassName: #32770 Modal Dialog DialogHWND: 5047980 Modal Dialog XML: <Dialog HWND="5047980" Title="Choose file" Class="#32770"><Window HWND="7014084" Title="Look &in:" Class="Static"></Window><Window HWND="5441378" Title="SMSIMG (C:)" Class="ComboBox"></Window><Window HWND="5900158" Title="" Class="Static"></Window><Window HWND="5572502" Title="" Class="ToolbarWindow32"></Window><Window HWND="8914906" Title="" Class="ToolbarWindow32"></Window><Window HWND="2623410" Title="" Class="ListBox"></Window><Window HWND="9963366" Title="" Class="SHELLDLL_DefView"></Window><Window HWND="7735164" Title="FolderView" Class="SysListView32"></Window><Window HWND="6293452" Title="File &name:" Class="Static"></Window><Window HWND="6620914" Title="" Class="ComboBoxEx32"></Window><Window HWND="7735112" Title="" Class="ComboBox"></Window><Window HWND="4196138" Title="" Class="Edit"></Window><Window HWND="58918660" Title="Files of &type:" Class="Static"></Window><Window HWND="14419712" Title="All Files (*.*)" Class="ComboBox"></Window><Window HWND="3016576" Title="Open as &read-only" Class="Button"></Window><Window HWND="7276400" Title="&Open" Class="Button"></Window><Window HWND="10946288" Title="Cancel" Class="Button"></Window><Window HWND="6227962" Title="&Help" Class="Button"></Window><Window HWND="7079840" Title="" Class="ScrollBar"></Window></Dialog> ----------------Controls in Modal dialog----------------- Control name: 'Static_0' is a type of: SWExplorerAutomation.Client.DialogControls.DialogStatic Control name: 'Static_1' is a type of: SWExplorerAutomation.Client.DialogControls.DialogStatic Control name: 'Static_2' is a type of: SWExplorerAutomation.Client.DialogControls.DialogStatic Control name: 'Edit_0' is a type of: SWExplorerAutomation.Client.DialogControls.DialogEdit Control name: 'Static_3' is a type of: SWExplorerAutomation.Client.DialogControls.DialogStatic Control name: 'Open as read-only' is a type of: SWExplorerAutomation.Client.DialogControls.DialogButton Control name: 'Open' is a type of: SWExplorerAutomation.Client.DialogControls.DialogButton Control name: 'Cancel' is a type of: SWExplorerAutomation.Client.DialogControls.DialogButton Control name: 'Help' is a type of: SWExplorerAutomation.Client.DialogControls.DialogButton ---------------------------------------------------------
After extracting the control information I needed for my test from the console dump, in the same explorerManager_DialogActivated method I created a condition for the "Choose File" modal dialog that inserted a file location/name and then clicked the "Open" button: //Manage the 'Choose file' dialog box
if (dialogScene.Title == "Choose file")
{
if (dialogScene.ControlExists("Edit_0"))
{
dialogScene.DialogEdit("Edit_0").Text = this.ChooseFileLocation;
}
if (dialogScene.ControlExists("Open"))
{
dialogScene.DialogButton("Open").Click();
}Check the automation of another modal dialog box off my list! ...and even better, I'm now setup to dump information about any others that might cross my path. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, November 01, 2007 |
|
| |
|
|
| |
Very often I see automators using the sleep method in their Web browser automation scripts. This makes me cringe and sigh (a heavy sigh that is). Improper use of the sleep method is simply a bad idea.
For example, take the following pseudo-code:
link.click( ) sleep(30 seconds) #waiting for flaky frame to load verify.html("My text in frame")
Siiiigh... This pattern plain sucks. For two reasons in particular:
- If the page loads in 1 second, you just wasted 29 seconds.
- If the page loads in 31 seconds, your script just broke, or the test failed.
From my personal experience, people typically write this evil code because:
- The way the automation library ties into the browsers "the page has completed loading" events are unreliable so they are left with sleep to ensure the page is really there before testing continues.
- They're in a hurry, debugging takes too long, and providing an average sleep fixes the issue (temporarily)
I'd like to help you out with #1; I'll leave #2 up to you.
When detection of completion events isn't reliable within a framework, you need to come up with your own type of detection. What you're left with when the "the page has completed loading" event has come and gone is verification of object(s) on the page to see if the page is there. However you can't just sleep and then verify, instead of sleep I recommend a power nap instead. A power nap method could like this:
powerNap(time sleepTime, HTMLobject objectToWaitForName) { NapTimeStart = Time.now
while not (HTMLobject.exists) ( TimeGoneBy = Time.now - NapTimeStart
if (TimeGoneBy >= sleepTime ) ( break ) else ( sleep(1 second) ) ) }
With this loop you will only waste a maximum of 1 second once your HTML object is actually found on the page. Your automation code/test could then look something like this:
link.click( ) powerNap(30 seconds, lastObjectThatLoadsOnThePage ) verify.html("blahblah")
Now this method isn't guaranteed to work, however your success % is going to go up dramatically. The caveat to this approach is the fact that just because the HTML object exists doesn't mean the entire page is there. If you are attempting to do something with that object and it relies on other objects that aren't loaded yet, then you might get an error (e.g. click a link that has a reference to a method in a .js include file that isn't fully loaded yet). To avoid this you'll want to pick an object that you know loads last for the page and sometimes that can be tricky. You have to play with it a bit, but if you put the time in now, you'll get rid of those wasteful and sometimes test breaking sleeps.
As an added bonus you could take the example method provided and go one step further to wait for multiple HTML objects to be present before moving on. With a method like that you could verify the existence of several HTML objects on the page without using assert or verify methods (much like SWExplorerAutomation's Scene object).
In summary, without looping use the sleep method for debugging and nothing more, instead of sleep take a powerNap. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I've spouted off before why I think being a tester-developer is important. Do you want to work your way into being a .NET Tester-Developer? Microsoft is trying to make it easy as pie for us. With videos targeted at the beginner with ZERO experience this is a perfect opportunity for you to dive in and start down the path of Tester-Developer.
Are the videos too slow for you speedy QA mind? With Windows Media Player 11, right click the play button and select "Fast Playback", set back and soak them in at 1.5x speed. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I found a great article over at the Google Testing Blog entitled Automating tests vs. test-automation. The article does a great job of summing up some things about automation that I had to learn myself over the years. The last set of bullets is oh-so-true, and if you are starting down the automation project path be sure to heed the advice:
To summarize, I figured out that a successful automation project needs:
to take the internal details and exposed interface of the system under test into account,
to have many fast tests for each interface (including the UI),
to verify the functionality at the lowest possible level,
to have a set of end-to-end tests,
to start at the same time as development,
to overcome traditional boundaries between development and testing (spatial, organizational and process boundaries), and
to use the same tools as the development team.
It's refreshing to hear this come from somebody else; especially a team at Google. It helps me justify in my paranoid mind that my thoughts about how automation should work are sane and that GoDaddy's latest automation initiative is going to work. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The ACE TEAM over at Microsoft has released a tool that does static analysis for cross site scripting (XSS). Confused about what a static analysis tool is? The ACE TEAM explains it well: There are two types of web application vulnerability scanners: dynamic and static. Dynamic analysis tools are also called penetration testing tools. You point such a tool at a live application; the tool begins crawling the web pages in the application and throws test strings at each of them. The effectiveness of a penetration testing tool is therefore dependent on its ability to go through all the use cases in the application. Most tools in the market, if not all, are not very good at it. Static analysis tools on the other hand scan the application source code or binaries to detect programming errors. Consequently, they offer 100% coverage and are able to identify many more vulnerabilities than penetration testing tools. XSSDetect is a static analysis tool. Get all the specific details on how XSSDectect works here. XSSDetect is now in Beta and is a free download here. Question is, who is going to run the tool in your company? QA or Dev? We all know who should be running it first. Don't we? DON'T WE? Okay then, download it, play with it, get to know it, present it to the Dev team (making you look REALLY smart and up to par on the latest technology), and then talk them into running it against their code before release for testing. Life is good when your app isn't vulnerable to XSS. Life is better when the developer finds the XSS vulnerability before you do. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, October 25, 2007 |
|
| |
|
|
| |
Tuesday evening I had the opportunity to attend my first Phoenix Software Quality Association meeting (PSQA) where another Rock-Star GoDaddy employee Lauren Snyder presented an "Introduction To Watir". It was really great to see her enthusiasm for automation and on top of that she is a great presenter. The presentation provides a HEAP of information about Watir and would be valuable to anyone diving into Watir.
Heh, get it? DIVING INTO WATIR.
Awe, never mind.
Lauren gave me permission to post the presentation here for your consumption:
Introduction To Watir.htm Introduction To Watir.ppt (Powerpoint 2003, 8 MB)
If you're in or are interested in software quality assurance, and are in the Phoenix area, be sure to check out the PSQA site and come to our next meeting. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, October 24, 2007 |
|
| |
|
|
| |
We testers have a wind-up.
No, not wind-up as in wind us up and watch us go like a little Chihuahua nipping at the heels of software...

I'm talkin' rear back on the haunches, LOAD UP, and DELIVER:

Except in my software testing mind I see it more like this:

My wind-up consists of:
- Gathering requirements
- Writing test cases
- Getting to know the application
- Setting up the test or automation framework
Once I wind up, the blow is...
crushing
devastating
ruinous
tragic
That poor, poor, POOR piece of software. Let the defects flow like the river Nile.
But really, is it any one persons fault?
Marketing defined it as (notice its a little dark and hard to see):

Developers did their best with the shady requirements and time constraint:

And well, testers tend to deliver a smack-down and exposed the frightening truth:

Wind-up and deliver that blow Mike Erbes! |
|
| |
 |
|
| |
|
|
|
| |
Thursday, October 18, 2007 |
|
| |
|
|
| |
I've been following the Microsoft hacking blog %41%43%45%20%54%65%61%6d (can you decipher that?) for a while now, but its content isn't necessarily what you may be thinking... posts on how to hack Microsoft products? Nope, instead the content of the blog is written by hackers that now work at Microsoft. You know, the white hat kind. If you can't beat 'em, hire 'em? There aren't a lot of posts, but when there do post they tend to be interesting.
The latest post First Line of Defense for Web Applications - Part 1 had a lot in common with a recent project I'd been working on, and the image they created to illustrate their point is a beautiful summary for their post and also for what I was working on. What the image portrays is a very common problem, a problem that a lot of testers don't know how to test for, or help enforce with good requirements:

This series should be good and I look forward to the next post. So should you.
While I'm at it, make sure and check out a little less of a white hat perspective at http://ha.ckers.org/. There is a ton of valuable stuff here, stuff that has worked its way into my test cases. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, October 18, 2007 |
|
| |
|
|
| |
Back in October of 2006 I wrote an article for Better Software Magazine entitled The $60 Web-Testing Toolbox. Wrong or right, I'm posting it here (3.9 MB) since I have a heck of a time tracking down where I put the digital copy whenever the subject comes up. The $60 toolbox is not my ideal toolbox, but it proves the point that you can get a great set of tools on a low budget. I've got about half an article written about my ideal Web testing toolbox (see my placeholder on the right entitled "Brent's Test Toolbox). Hopefully someday soon day that "Coming soon!" link will become active. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, October 16, 2007 |
|
| |
|
|
| |
In my ideal software development world... "Quality is everybody's job". If you could help negotiate and create that world where quality is everybody's job, what would your Quality Contract Proposal to the project team be? Recently I submitted to my project team something similar to this:
Team Quality Tasks
- Communication
- Daily, morning 5-10 minute stand-up meetings for quick progress and issue reporting
- Team notification of document and code changes
- Documentation
- Requirements required
- All documents are stored in a common area for easy access, check-in/out and versioning (e.g. SharePoint)
- Code Reviews
- Large code reviews are scheduled during stand-ups
- Peer code review before check-in for small or quick changes
- Use of Development & QA metric tools
Developer Quality Tasks
- Unit Testing
- Builds
- Dedicated build box for build integration.
- Build and test on check-in.
- Build and unit test run schedules (e.g. hourly, daily).
- Automated build success and failure notifications.
- Build Integration rules
- Get latest from source control, merge, compile, and unit tests success before source control check-in.
- Official builds released to test
- Starts on functional section code completion.
- Developer collaboration and agreement on release time and contents.
- An owner for release to test (owner checks with team to ensure release readiness).
- Provide "Quality Hooks" that don't impact performance or usability (e.g.)
- Use of special image naming.
- Use of special ID and name attributes.
Tester Quality Tasks
- Participation in design meetings and discussions.
- Review and feedback of requirements draft document.
- Review of Developer unit tests to provide suggestions for improvement as well as get a better feel how/where to provide further test coverage.
- Testing
- Functional
- Testing starts on functional section code completion
- Utilizes test case libraries for common tests (HTML elements)
- Automation
- Scripting starts on functional section code completion
- Performance, Load, & Scalability (typical and per functional unit if needed)
- Other
Some of these items may apply to your company or team and some may not. Each has its benefit, each has its cost. In my experience the benefit outweighs the cost. Wouldn't you agree that this Quality Contract Proposal is a good place to start? Do you think it it may be a little far fetched for your company or current process? How about starting smaller then? Throw the list out there and get the team to commit to 25% of the items. When the project is over, take the lessons learned and infrastructure built from that 25% and use them in the next project, but now since that 25% is tried and true, ask for 25% more. Then 25% more...Get my drift?
Baby steps are okay. Be a salesman for software quality, negotiate that Quality Contract! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, September 27, 2007 |
|
| |
|
|
| |
Roy
Osherove is in the process of writing a book entitled The Art of
Unit Testing. You can read the first chapter for free and/or buy a copy in
advance and read up to chapter 6. I took the time to read chapter 1 last
night and I like what I'm seeing so far. This book will definitely be added to
my collection. What I like the most about this book hit me on the first
page:
"Ever since that first project that failed, I’ve been compiling best
practices for unit tests and using them on the next project. Every time I get
involved in a new project, I find a few more best practices."
Roy is giving us honest to goodness best practices from real world
experiences; both success and failure with unit testing. If
you're a developer, architect, development manager, tester, tester-developer or
managing quality, give the practices in this book a try and if it works for you
and your team...spread the word. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, September 18, 2007 |
|
| |
|
|
| |
Bret Pettichord , the lead developer for Watir has posted his original and recently rewritten Watir tutorial class workbook and all course materials. If you're new to Watir and want to learn it, this is a great start parting point. Go check it out it's free. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, September 13, 2007 |
|
| |
|
|
| |
How do you report defects in an agile way? I'll tell you my pre-requisites and guidelines for entering or not entering defects into the defect tracking system in an attempt to be agile (for 30 minutes): Here are my pre-requisites for agile defect reporting: - You need to have GREAT communication with the developers. What is great? A mutual respect for each other. An ability to talk at the level that both tester and developer can understand.
- You need to be able to quickly show your defect, especially if it is complex and hard to explain. What is quick? Email is NOT quick. I think quick is:
- Recreating in person.
- Using the phone.
- Sharing your desktop (Windows desktop sharing feature).
- Instant Messaging screen-shots.
- YOU must be able to conduct regression on the defect fix. Nobody knows the defect better than you. Especially since we're going to be light-weight on the documentation (see The 10 minute rule below)
Here are my guidelines for agile defect reporting: - The 10 minute rule: If the developer can't devote time to you within 10 minutes then ask "When do you think you'll have time to take a look at this with me?". If within 30 minutes then press the 30 minute snooze button, make a note of it, and continue testing. It's important to make a note of the defect at this point. A simple one liner will suffice, just enough info to kindle your memory of how you found it or how to recreate it. It is likely that you'll have a few more defects to share by the time that 30 minutes is up, so your notes will help keep you on track when it's time to share them. I use Microsoft OneNote (they have a free trial).
- The 30 minute deadline: If you can't share the defect within 30 minutes then put it in the defect tracking tool.
Experience has proven that there is one downside to being defect agile (sharing within the 30 minute window): there is little defect history if the defect wasn't entered into a defect tracking tool. So you are limited to your notes. I think in the last 2.5 years this bit me twice when a defect reoccurred and we were looking for how we fixed it (which would only work if your developers are detailing their fixes in the defect report). Being bitten only twice is worth the price if you ask me. Hundreds of defects reported in an agile like fashion can save countless hours,days, or weeks for a tester and developer over the course of a project. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, September 12, 2007 |
|
|
| |
Tuesday, September 11, 2007 |
|
| |
|
|
| |
Why should you become a Tester-Developer? - The software industry needs them bad. The demand is high and there are few.
- The high demand is an indication that the industry is moving away from the waterfall mentality to a more agile environment where testers are involved earlier and need to understand and write code for testing.
- You will likely make better money because you will be a better tester.
- It will be easier to get jobs with testing AND developing skills.
I hear the question quite often: What is a tester-developer? Steve Rowe sums this up quite well: "Test Developers are the heart of a modern test team. There was a day when you could get away with hiring a few people to just use the product and call that a test team. This is no longer the case. Products are becoming more complex. The lifespan of products is increasing. More products are being created for developers instead of end users. These have no UI to interact with so simple exploratory testing is insufficient. To test complex products, especially over an extended lifespan, the only viable solution is test automation. When the product is an API instead of a user interface, testing it requires programming." What do you have to lose? Pick your poison, C#, VB.Net, Java, JavaScript, TSQL, Python, Ruby, or whatever is applicable to your company or to your interest. Find a few books, use tutorials on the Web, and most of all just start writing code. Keep the future in mind; what do you think you're going to gain my learning Cobol? Do you think that will be applicable in the next job you take? Be patient and don't rush, learning to program isn't a fast or easy process. This message was brought to you by the Push to Become a Tester-Developer Foundation (PBT-DF) where we've been pushing testers to become tester-developers since...well, since you started reading this blog post. Be all you can be join the PBT-DF. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Sunday, September 09, 2007 |
|
| |
|
|
| |
I recently had to do a little research on the options available for automating Safari and FireFox on Mac OS X. Below are the possibilities I came up with. I haven't tried any of the options out but first impressions make me lean towards FireWatir and SafariWatir. Here are my findings with a few very raw thoughts and comments: Watir (FireWatir & SafariWatir) | Safari | FireFox | Other | Cost | | 
| 
| 
| Free | Good ol' Watir. Seems to be quenching the thirst on the Mac too!
Selenium | Safari | FireFox | Other | Cost | |
|
|
| Free | Large list of browser/OS support. Downfall is that it runs through a proxy or from inside a frame in the browser. How do you know that frame isn't conflicting with your web app? What if you were running for days looking for memory leaks? If the automation tool is in a frame in your browser and the browser explodes, how do you know if it's the Selenium or the browser? As noted here, Selenium sucks because: hacky workarounds for popups, SSL, & XSS, is not native browser driver, infrequent releases, Selenium-RC Safari "really sucks".
WebDriver | Safari | FireFox | Other | Cost | |
|
|
| Free | Test are written in Java. Very new and not complete. Can't handle different document types (other than html), can't drive Flash, HTTP session handling isn't coordinated yet. suc Eggplant | Safari | FireFox | Other | Cost | |
|
|
| $600-5000 | Appears to simply drive OSX windows/functions. Doesn't seem to know of or care about the DOM or the content in the browser. A Code example in the forum give me the impression that you can open Safari and use HTML controls using a "HotSpot" . Slight script interaction with Safari here too (open browser enter URL). Validation appears to be solely based image recognition. iMacros for Firefox | Safari | FireFox | Other | Cost | |
|
|
| Freeware | Quick and dirty. It would be possible to automate something in minutes.
CoScripter for FireFox | Safari | FireFox | Other | Cost | |
|
|
| Free | Works in FireFox as a plugin. Appears very well thought out and very well done. Uses a wiki to view test details and edit test scripts. Pretty cool! Demo here. Made by IBM. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, September 06, 2007 |
|
| |
|
|
 |
|
 |
| |
|
|
| |
I haven't talked about HTTPWatch since version 4.1 but last week I had a chance to work with the 5.0 version and I have to say once again: I LOVE IT. These guys keep me hooked with the simplicity, new features, and ease use with their application. What I'm loving the most in 5.0 is the quick visual of traffic activity (blocked, DNS Lookup, connect, send, wait, receive, TTFB, & network):
The second thing that caught my testing eye was the grouping by page feature which allowed me to expand/collapse by pages:
HTTPWatch 5.0 continues to impress. It's still by far my preferred tool for viewing HTTP traffic while testing Web applications. You just can't beat the usability, quick availability from within the Internet Explorer window. And to boot, it has an interface for use with Web application automation! Give it a try for free here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Scott Hanselman has posted about testing a Silverlight application using the Web application testing tool Selenium. Check it out here. Congratulations on your recent move to Microsoft Scott! |
|
| |
 |
|
| |
|
|
| |
|
|
| |
Two Web Service experts, Ted Neward and Adrian Trenaman, battle out the pros and cons of Contract First and Code-First here. Ted and Adrian touch on the good and bad points of each. If you're testing Web Services then this is an enlightening 5 minute read.
In the past I was part of a team that tried to implement Contract-First with a large and complex .NET Web Service and it failed us miserably. It turned out to be a manual administration nightmare...That's my experience. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I've been saving up all my change for about 6 years, and now I'm going to spend it all in one lump sum. It wasn't long ago that decided to move out of my comfort zone by deciding to move the wife and kids to Gilbert Arizona to be closer to wife's side of the family. Today marks the first official day of that change, today is my last day at Corillian which recently became a part of CheckFree. I'm sad to be leaving such a great group of people, but really excited to do something different. Different as in living in a new state after living in the NW all my life, different as in living in our 1st brand new house, and different as in going to work for GoDaddy.com! Stay tuned for a brand new testing and QA adventure...in the thriving desert. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Over the course of the last few months Rosie Sherry and I have had a few conversations where we exchanged thoughts and ideas on testing and QA. I have to say that she is quite the go getter, is plum full of great ideas, and is hell bent on finding ways to bring together us tester and QA folk. Her latest idea, an online Software Testing Club provides us testing types with a social network that has forums, videos, news, test links, and photos.
Rosie has shared a few ideas with me lately, and what I like the most about them is the fact they are small and consumable. Yes, StickyMinds.com is a similar forum, but it's sooo huge it's hard to use and hard to consume. StickyMinds is BIG. (side rant here: I asked to submit an article recently and was asked to fill out this huge, multiple page form to be considered. It would've taken me nearly as long to complete the form as to write the article. Suck. Forget about it. BIG = Red Tape).
Small vs. Big...
I think an analogy for my attraction to the smaller forum is:
A person can attend a church that has a HUGE congregation. It's hard for that person to feel like they are a part of that huge group because there are so many people and its hard to get the attention they may need or desire. How do large churches solve this problem? By encouraging people to join or form a small prayer group.
Don't go unheard or get lost in the noise of a large group. Join a club. Give Rosie Sherry's Software Testing Club a try. When the club gets too big for your liking, start your own! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Ernie Booth has written a plug-in for Reflector that allows you to do reflection on a SilverLight Web application. This will be a helpful test tool for those who don't have access to the source code. Go checkout and download the plug-in Reflector Silverlight Browser for your test or development needs.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Not long ago our vacuuming robot, iRobot Roomba, aka "DK" (Dyson Killer, don't get me started on how much I hate Dyson vacuums) stopped working and my wife and I had to pack him up in his original box to take him in for an exchange. My 2 1/2 year old son was devastated; he cried and sobbed heavily while we carefully packed him up. I realized while watching my son break down, that over the course of a month DK had found a place in our home and hearts. He had become more than just a vacuum to us. DK had personality, he was cute, he was intriguing, he was smart, and he could vacuum consistently and more often than us. Why do we humans have a primal instinct to name, love, and care for our robots? How can we not love and care for the robot that does our tedious work for us? This behavior reminds me of a similar phenomenon found in software automation: Automation engineers that tend to focus more on the automation framework (robot) than the tests (vacuuming the carpet). Google's Harry Robinson points out the same issue in his presentation on How to build your own Robot army. Harry's automation approach is to build many small robots instead of one large robot. I can agree and disagree with Harry, I understand his point, and his point is helpful when trying to avoid falling in love with your robot. However, I thought his advice can be a bit misleading and relative. Although Harry didn't go into the technical details of how he creates many robots, I had the feeling he was trying to tell me that I couldn't have one robot and be successful. I could be wrong, maybe Harry was just using the word "robot" a little loosely. At Corillian, I have one robot. My robot is the master controller of all my tests. He houses the entire framework that drives all the underlying tests. A framework that monitors and tracks test status, houses utilities, and allows me to reuse very much code. I can add to the intelligence of my robot and use that intelligence within all my tests. Just one robot here. One robot that works well too! One robot, or many, they are all loveable and are to be proud of. So, how does an automation engineer manage the pride of his shiny robot and focus on the actual tests? The secret to focusing on the automated tests and not the framework is....get ready to soak in some great wisdom here... Self Discipline Yep, you heard it here first. Don't forget it: Self Discipline - Budget framework building time
- Only add things that add value to the tests
- Only add things that make testing and reporting more efficient
- Don't make the framework bigger than the tests
Love your robot, just don't love him too much, you're liable to lose touch with what you're being paid to do: Test more than a human. Don't worry, DK and his predecessor DK2 are doing just fine. Turns out my issue with DK was user error, so DK was traded in wrongfully. We love our Roomba and highly recommend it. We're so impressed that we are thinking about adding the Scooba to our robot army. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
 |
|
 |
| |
|
|
 |
|
 |
| |
|
|
| |
Recent Silverlight rants encouraged me to dig into it to help better understand exactly what it is, and how one would automate the technology. My fear was that since it's a Flash killer, it means that it's like Flash, and automation would be near impossible. My hunch is correct, at least for now.
I did a little exploratory research to better understand Silverlight and knowing that it uses JavaScript my thought was that maybe it could be driven through the function calls available in application's exposed JavaScript functions. No success. In IE7, when trying to simply redefine a JavaScript defined variable from the URL bar I get the following error:
Internet Explorer cannot download . Unspecified error
Similar attempts with FireFox and the FireBug addon didn't get me any further.
Today, the Braidy Tester mentioned a new software testing forum, and I spied it as a great opportunity to post my concern with Microsoft testers listening. Brian McMaster gave us a little insight to where automation of Silverlight is at and the possibility of it's future:
Brent Strange wrote: I'm a little worried about how we test automation engineers will be able to pull off the automation of a Silverlight application. What are your thoughts? Is there a plan for a supporting automation library? Is there any information available regarding this?
Brian McMaster wrote: I understand your worry. Right now, it's pretty much untestable from the traditional out-of-proc UI testing perspective. I'm a Test Architect at Microsoft, and I'm struggling with the same issue. We urged the Silverlight team to implement Accessibility for this release, but there just wasn't time. I can assure you that Silverlight will support MSAA and/or Windows UI Automation on Windows, and Silverlight intends to support the Mac AXAPI on the Mac. Thus, any existing test tools that support driving UI through Accessibility will be fully enabled to automate Silverlight applications in a future release.
For now, you pretty much would need to do some in-proc testing of your application using the object model.
It looks like Microsoft intends to do the right thing, it's just too early in the game. How could they not? Without the possibility of automation, Silverlight will never find a snug little home in a world class business Web application. Confining tests to only manual would cost way too much. I can't imagine companies sacrificing cost for a pretty UI.
...Well, at least not the quality conscious companies. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
While searching for a seemingly missing file tonight I ran across one of my old, favorite testing papers. Back in my Intel days (about 7 years ago) I wrote a Web tester's training paper entitled "The Quality Assurance Web Tester's Handbook". I thought I'd spoil you with you with a funny little excerpt that still is a common phenomenon with a "rookie tester". The section is entitled "Crying Wolf":
One of the most common mistakes I've seen from new QA tester is what I call the "Cry Wolf Syndrome". Medically I think, this syndrome is caused by an over-stimulation of adrenaline on the brain causing testers to take a new found bug and run screaming to the nearest manager without first verifying the bug exists on other PC's. Although this is a severe and problematic condition it is curable with a little self-discipline. It can be exciting to find a huge "showstopping" bug, but if the bug is not verified on another machine or the details properly gathered you may be "Crying wolf” and wasting peoples' time with something that doesn't make any sense. Here is an example scenario, starring Joe the rookie QA Tester:
While QAing for Microsoft, Joe was one day casually surfing the beta Microsoft.com site for bugs when his browser caused a GPF and smoke began to billow from the back of his computer. Joe jumped up and exclaimed "Microsoft has succeeded in blowing up computers via the web! I've got to tell the QA manager". Joe hastily tracked down the extremely busy manager and asked for a few minutes of his time. Joe's manager (being extremely busy) took a moment to test the proposed bug on his personal computer. Upon entering the site and same area, they both cringed waiting for the GPF and smoke but nothing happened. Joe's manager became angry and exclaimed "Thank you for wasting my time, did you verify this before you came to me”? Joe answered "No" in a shaky, meek voice. Needless to say Joe learned his lesson and still to this day triple checks his bugs and gathers all details before reporting or submitting the bug to anybody else.
The concept is real... BUT OH MY, how my knowledge, process, terminology, and writing skill has grown.... or rather, evolved with the industry? This paper is ahead of it's time, dorky, inspirational, and funny. I'll see what I else I can dig out and share with you. I won't waste your time by posting this 22 page "The Quality Assurance Web Tester's Handbook". |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Corillian (where I work) is currently looking for an experienced QA Engineer to work in the Corporate Security group at our Corporate Office (Hillsboro, OR).
Check out the job description here, or check out other jobs at Corillian here.
Experience in Performance Testing with Silk Performer, and being able to write C# is a huge plus.
If you're interested, contact me (bottom of the page) and I can any answer questions about the job or Corillian. |
|
| |
 |
|
| |
|
|
| |
|
|
| |
A recent writing of mine (written in the car on the way to Arizona) made it's way to StickyMinds.com and their What's New Gram. If you missed it on this blog, then check out the article at StickyMinds. Here's your teaser and link:
Article: Is QA Better at Writing Product Specifications? Brent Strange Is QA better at writing product specifications? Learn how a movement toward a more agile process that includes QA involvement with specification writing can increase product quality. |
|
| |
 |
|
| |
|
|
| |
|
|
| |
It's a great time to be a Tester-Developer...I've been getting a ton of job offers that turn into requests for help to find Senior Tester-Developers. If you're in the Portland area and are looking for a change, please shoot me an email and I'll tell you what I know. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, April 25, 2007 |
|
| |
|
|
| |
Today was "Administrative Professionals Day". My wife is an Administration Professional, and once again her boss did not acknowledge her. This pisses her off, yet year after year she secretly hopes that her boss (old or new in the job) will suprise her with some act of gratitude. Keep hoping dear, us men have a hard enough time remembering our anniversary and your birthday, how can you expect one to remember Administrative Professional Day?
I want a "QA & Test Professionals Day". Please make it a point to ignore me by not writing defects, providing clear specifications, and writing robust unit tests. Thats all I ask.
QA & Test Professionals Day is May 4th. The day before Cinco de Mayo. Don't forget. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, April 25, 2007 |
|
| |
|
|
| |
When uninstalling a program from Add/Remove Programs that was installed using Installshield you will get no related logging. This is a serious testing and development problem when there is a problem with the uninstall of the program.
How can you output logging to troubleshoot Add/Remove uninstall issues? Mimic the same behavior of Add/Remove Programs from the command line using the following example:
“Test Installer Setup.exe” /uninst /s /v“/qn /Luie \"%TEMP%\Uninstall for Test Install.log\””
Understand InstallShield command line parameters here.
Understand .MSI command line parameters here.
On a side note, uninstalling from Add/Remove programs versus uninstalling via running the installer again can have different results. Make sure you have test cases for both.
Thanks for the uninstall tip Matt. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Turns out the Blackberry service outage that happended last week was due to insufficient testing of a software update. Oh man, I hate when that happens!
Hopefully lessons were learned by the people at Research in Motion Ltd. Nothing worse than a company that doesn't learn from their mistakes.
Research in Motion, you've used your mulligan. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
 |
|
 |
| |
|
|
| |
"Is QA better at writing product specifications?" This thought passed through my head while reading a post a while back written by QA Girl. I asked this question to myself because in the past I was part of a group where QA successfully helped to write the product specifications. With past experiences under my belt my first thought was "Yes, QA is better at writing specifications", but after thinking a bit more about it I came to the conclusion of "not necessarily". To explain, I'll revisit how our QA group ended up writing specifications.
In the beginning... documents didn't contain the things that testers needed to write test cases and test. Mostly specifics, things like a textbox's allowed characters, min lengths, max lengths, defaults, or a button's behavior when clicked. Important specifics when it came to Web page design, functionality and security. Through the course of several projects the lack of specifics were expressed through defects, and those defects would be duplicated from one project to the next. Consistently. Consistent because the test cases were detailed and consistently shared across all projects. Verbal frustrations started flowing..."This document sucks, what am I testing here?", and then a new tag-line was born "Specification definition through defect input". Developers were adding to and rewriting specifications like crazy just so they could get their head around what was supposed to be developed (far too late in the process too!) Then, one fine day, in a company that was slowly moving to a more agile environment, QA's voice was heard and the marketing and design teams started asking "what do you want to see in the specification documents"?
Finally, the clouds were gloriously parted and a direct beam of sunlight was shining blissfully on QA's face. "What do we want? We want you to provide the product details that we have built into our test cases!" "You have the details in your test cases?" they asked with astonishment. "Yes, we defined them through defect input over the course of several projects." the QA team replied with pride. "Wow, can we get a copy of those cases?" was the sheepish response. But delivering that copy of test cases didn't fix the problem entirely. The next release and next document contained the first attempt at delivering those needs but somehow was still lacking the details. It seemed to QA that the design team couldn't translate QA talk/test cases. This was scary, since the test case were well designed, clear and concise. What was the hang-up? Did they not understand QA talk? The answer was not that but instead: lack of time. The design team had enough trouble keeping up with other details in the specification document, adding the new details (the right way) didn't fit into their design schedule. Ouch...But, how can you develop a product that is not designed?
What came next is what led to my first impression of "Is QA better at writing specifications" as being a big fat "Yes". The design team said "Can QA add those details to the specification document?" It is that we did, and by doing so, QA moved themselves earlier into the project (design phase) and ultimately satisfied the specification need.
Could the design team have done the same? Yes. Did they have time to do so? No. Thus, "Is QA better at writing product specifications?" Not necessarily. BUT...QA contribution is required during the design process. If the QA team can't help add details to the specification document during design then they must at least provide and translate those needs to the design team. In my experience, translation can be tough, something is always lost along the way, and it seems to be easier to cut out the middleman. With that said.... "Is QA better at writing product specifications?" Yes, for the purpose of testing needs.
To recap: "Is QA better at writing product specifications?" Yes. Not necessarily. Yes. Got it? Maybe it's better said: "Should QA contribute to the product specification?" and to that we say a big, fat, gihugey "YES".
Now, one's inner QA mind should be screaming "Danger! Danger! You can't do both, write the requirements and test them!" Ah, yes. You are right, you, a solo Test Engineer should not, but a Test team can. One QA individual can write them, another can test them, mitigating the risk while also giving the tester what he/she needs.
Now let's throw away my example and past experience and weigh a few pros and cons. I'm sure you can come up with more but when you add them and reweigh I'll bet your conclusion is the same as mine:
The Pros of QA contributing to specifications
- Specifications are written early, forcing QA to be involved early.
- Specifications will contain exactly what the Test Engineer needs during the Test phase.
- QA teams that are required to test documents aren't getting them in a waterfall fashion. You now have agile documentation testing going on!
- The QA team will be more knowledgeable of the product. Better knowledge of the product will result in better tests, better test estimates, and earlier definition and delivery of QA requirements (e.g. environments).
- Defects (design, functional, and detail) can be found before the product is developed saving costly redesign time later down the road.
- Fewer defects are found during the Testing Phase, giving the tester more time to focus on finding the harder, better hidden defects.
- The QA and Tester mind-set forces Design teams to think outside of the box.
- Fewer specification document updates occur in later project phases.
The Cons of QA contributing to specifications
- The specification writer can't test too. Testing needs fresh and unbiased eyes. If the tester writes the requirements they are biased when testing them.
- Lack of QA resources. You can't afford to take a resource from running test cases on another project(I'm really reaching here, see below)
By my calculations the pros outweigh the cons! If we mitigate the cons, QA contribution to specifications is a no-brainer. Let's mitigate those cons:
- The QA/specification writer can't test too.
- Mitigation: A minimum of two man test teams.
- Lack of QA resources
- Mitigation: This is NOT a real problem! If your waterfall process has tricked you into thinking this is a problem then you can't afford not to! I promise you, you will see the savings in subsequent project phases by finding defects early vs. late. Worst case; imagine that you are taking a Developer's time from testing phase and putting that into the design phase for the Test Engineer. You break even, just less head-ache and stress at the end of the project. This con has now been converted to a pro!
Makes sense doesn't it? So....what are you going to do now? In case you missed the point, let's put this in a pretty TO DO list for you:
- Include QA where needed in the requirements gathering process.
- Include QA in the specifications writing process.
- Budget less Developer resources in the testing phase and budget a QA resource to the requirements gathering/writing phase.
- Find issues early, before development begins, and avoid costly redesign.
- Smile with satisfaction because you have a less hectic and higher quality project.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I often find defects in the small details that go along with an installer. So many things are configurable, and simple things can be easily missed due to the overwhelming amount of things to look for. Walking through installation wizards can be visually overwhelming when testing. Each step presents it's own window title, header text, product descriptions, button names, error text, events, and so on. Each wizard step can also be a complex form full of variables that need testing. To avoid the visual overwhelm, that often results in missed defects, you can get an overview of all those details by peering into the msi database within the msi installer. Using the tool MSI Database Reader & Reporter you can get that overview and quickly identify many defects. After loading an msi database in the tool you can find a majority of detail oriented, low severity defects by looking at key database tables. I find the following tables to be informative and a potential defect haven:
Property table: contains various properties found throughout the installer (e.g. form default values, upgrade guid/code).
File table: contains the file list and all file details (e.g. size, version).
ActionText table: contains a list of the text that appears above the progress bar during install.
Feature table: contains features' description text.
Control table: contains a list of the form controls used in the installer, their properties. The Text column lists all form text strings.
Error table: contains installer error text (with the exception of custom errors defined in the property table).
MsiFileHash table: contains a hash for every file in the installer. This is great for detecting file changes between new builds of installers.
Keep in mind this is a quick and dirty overview of the guts in the installer, and not a replacement for the actual testing of the install, since the hoards of information in the database is not easily tied to a step in the installer wizard.
Make testing of the details in an installer easier on yourself, use MSI Database Reader & Reporter . Create installer reports with it and do report diffs between builds to detect changes. It'll find you installer defects. I promise. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I had a need to view and create a report on an MSI database (from an MSI installer) and another tool was born. MSI Database Reader & Reporter enables you to view the contents of an MSI database (a feature already handled by Orca) but....then create an html report of that database. This is valuable for installer testing since the report is essentially an .msi installer snapshot, and you can view differences between installers by doing a file difference report between two the html reports. Download MSI Database Reader & Reporter here (25.02 KB). Just unzip and run. View an example .msi database report here (224.2 KB, created from WatirNUT Setup.msi).
Screenshot:

Sample Section of an MSI Database Report:

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Update 05/17/2007: The list has been updated and can be found here.
Somebody asked for an update to my outdated XML import file for User Agent Switcher. Honoring that request, I have added the latest user agent strings for each browser. Updated or added strings are marked with green below. I also added a new section for RSS reader user agent strings. Download the User Agent List import file here: AgentStrings20070304.xml (16.51 KB).
Internet Explorer MSIE 7 (Win Vista) MSIE 7 (Win XP) MSIE 7 (Win Storage Server) MSIE 6 (Win XP) MSIE 5.5 (Win 2000) MSIE 5.5 (Win ME) MSIE 5.0 (Win 95) MSIE 4.01 (Win 95) MSIE 4.0 (Win NT)
FireFox FireFox 2.0 (Win XP) FireFox 1.5.0.6 (Fedora Core 5/Linux) FireFox 1.5.0.4 (Debian Linux) FireFox 1.5.0.3 (Mac OSX) FireFox 1.5.0.1 (Win Vista) FireFox 1.5 (Win XP) FireFox 1.4 (Win XP) FireFox 1.0.7 (Win XP) FireFox 1.0.6 (Win XP) FireFox 1.0.5 (SlackWare/Linux) FireFox 1.0.4 (FreeBSD) FireFox 1.0 (Win XP) FireFox 0.9.3 (Win XP)
Opera Opera 9.1 (Win XP) Opera 8.0 (Win 2000) Opera 7.6 (Server 2003) Opera 7.51 (Win XP) Opera 7.5 (Win XP) Opera 7.5 (Win ME) Opera 4 Opera 3 Opera 2 Opera 1
Netscape Netscape 8.1 (Win XP) Netscape 8.0.1 (Win XP) Netscape 7.2 (Win 2000) Netscape 7.1 (Win 98) Netscape 4.8 (Win XP) Netscape 4.76 (Win 98) Netscape 4.5 (Win 98) Netscape 4.05 (Win 95) Netscape 3.01 gold (Win 95) Netscape 2.02 (Win 95)
Safari Safari 3.0 (v521) Safari 2.0 (v418.9.1) Safari 2.0 (v412) Safari 2.0 (v401) Safari 1.3 (v162) Safari 1.3 (v158) Safari 1.3 (v146) Safari 1.2 (v125.8; OSX 10.3.4) Safari 1.1 (v100.1; OSX 10.3.2) Safari 1.0 (v85) Safari 1.0 (v74 beta 2) Safari 1.0 (v73 beta 2) Safari 1.0 (v64 beta) Safari 1.0 (v51 update 1.0 beta) Safari 1.0 (v48 public beta)
AOL AOL 9.0/MSIE 6.0 (Win XP) AOL 8.0/MSIE 6.0 (Win XP) AOL 7.0/MSIE 5.5 (Win 98) AOL 6.0/MSIE 5.5 (Win 98) AOL 5.0/MSIE 5.0 (Win 98) AOL 5.0 (OS X) AOL 5.0 (Mac PPC) AOL 4.0/MSIE 3.02 (Win 95) AOL 4.0/MSIE 4.01 (Win 95) AOL 4.0 (Mac PPC) AOL 4.0 (Mac 68k) AOL 4.0/MSIE 3.0 (Win 3.1) AOL 3.0/MSIE 3.02 (Win 95) AOL 3.0/MSIE 4.01 (Win 95)
Mozilla Mozilla 1.7.8 (Linux)
Spiders/Bots Googlebot 2.1 (New version) Msnbot 1.0 Msnbot 1.0 Beta (v0.11) Yahoo Slurp Ask Jeeves/Teoma
RSS Readers NewsGator 2.5 (Win XP) Feed Demon 1.6 (Win XP) Bloglines 2.1 SharpReader 0.9.6.0 (Win XP) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The Environment: Doing a remote desktop connection (RDC) into a machine that runs your Virtual PC 2004 images.
The Issue: EXTREME VPC slowness, window title bars are missing, the mouse leaves artifacts and is about 5 seconds delayed, and the VPC is not maximized (has scrollbars present).
The Fix: Make the VPC large enough so that it does not have scrollbars or maximize it (alt+enter).
A seriously annoying and confusing issue... Below is a screenshot of the craziness. Note the mouse artifacts and the top of the Windows Start menu is missing:

|
|
| |
 |
|
| |
|
|
|
| |
Sunday, February 25, 2007 |
|
| |
|
|
| |
Our Corporate Security group recently was blessed with a 2nd QA person...MR. ROHIT MATHUR (big booming voice there). The guy is freakin' great at QA, testing, and is also a good friend. I've been willingly (big, huge, willingly) sharing my QA responsibilities with him for over a week now and sharing often turns up little QA and test things that are part of my everyday, going through the motions thing that can save a new person on the scene 5 minutes, 15 minutes, 1 hour... The scene, and my point today: Virtual PC 2004, what to do when you can't drag-n-drop copy from the hosting machine to the VPC.
When you can't drag-copy a file from the host system to your VPC ...
Drag-copy a file from the VPC to the host system! By reversing the process, it somehow fixes the issue. Nice defect. Nice work-around. 
Note: This only works if the VPC can be resized by dragging the edges. If you can't resize the VPC by dragging then you have a bigger copy-paste problem. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, February 20, 2007 |
|
| |
|
|
| |
It wasn't long ago that I started using the free tool Install Analyzer by VeriTest-Rational to validate directory and registry changes during install. The tool is ultra helpful to monitor changes caused by an installer under test and has the plus of being fast. I had tried other system change monitoring tools but the speed of gathering 3 snapshots was unbearably slow (before install, after install, after uninstall). With unbearably slow not an option Install Analyzer quickly found a snug little place in my testing toolbox. Over the course of a few weeks I realized that Install Analyzer was missing one key piece of information: assembly version numbers. Hmmm, no biggy I can work around that...or can I... As my installer tests evolved due to a defect after defect of file property issues, I found that an overview of the files installed and their properties was needed direly. What better way to guarantee getting the perfect tool for your needs than to build it yourself? File Property Reporter was born.
File Property Reporter analyzes a directory and all underlying subdirectories, reports the directory structure, all the files names, and all the properties of the files. Using all the file properties available in the classes FileVersionInfo and FileInfo the tool is capable of gathering and reporting on 40 different file properties (CompanyName, FileBuildPart, FileDescription, FileMajorPart, FileMinorPart, FileName, FilePrivatePart, FileVersion, InternalName, IsDebug, IsPatched, IsPrivateBuild, IsPreRelease, IsSpecialBuild, Language, LegalCopyright, LegalTrademarks, OriginalFilename, PrivateBuild, ProductBuildPart, ProductMajorPart, ProductMinorPart, ProductName, ProductPrivatePart, ProductVersion, SpecialBuild, Name, Length, DirectoryName, Directory, Exists, FullName, Extension, CreationTime, CreationTimeUtc, LastAccessTime, LastAccessTimeUtc, LastWriteTime, LastWriteTimeUtc, Attributes). The tool can also detect and report non-compliant property strings for "ProductVersion" and "CompanyName". In addition, files reported on can be narrowed by using file patterns (e.g. *.dll, *.aspx, *.*).
See an example File Property Report ran against a FireFox 1.0.8 directory here (8 properties enabled).
Download File Property Reporter here (11.97 KB).
Possible uses for File Property Reporter:
- Extract contents of Installshield installers to a directory (using the /admin command line parameter) and run the tool to get an overview report of all the files and directory structure. Or in other words, create a file manifest.
- Use a file differencing tool to compare resulting reports between two installer builds to expose changes.
- Snapshot your file system pre-install, post-install, post-uninstall and compare the reports using a file differencing tool to see the disk changes.
Enjoy, it's free. No installation is required, just drop the exe and the config file in a directory and run it. The options are pretty self explanatory. The configuration file keys are documented in the file. Email me if you have questions or comments.
Future plans include:
- Making it multi-threaded so the GUI doesn't freeze up while running against huge directory structures (e.g. all of C:\).
- Allow property validation for all properties.
Special thanks for the help Aaron, Matt and Greg! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Monday, February 19, 2007 |
|
| |
|
|
| |
Microsoft has released Virtual PC 2007 and it is available for download here. I never had the chance to run the beta and hope to put the release to work soon enough. As blogged by Ben the following are a few key features of Microsoft Virtual PC 2007:
- Support for x64 Windows as a host operating system
- Support for hardware virtualization
- Support for Windows Vista as a guest and host operating system
- Support for PXE network booting of virtual machines
- Support for the use of fullscreen virtual machines on multi-monitor systems (VM still stays on just one monitor though)
I'll post some comments once I've put it through the paces. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, February 15, 2007 |
|
| |
|
|
| |
The other day I took some time to read a case-study written by RSnake entitled Death by 1000 Cuts. The study was interesting in the fact that a small pile of 10 minor and medium defects turned into 1 large security issue. It's a good read and I suggest it if you have 5 minutes on your hands.
Before I even started reading the study the term "Death by 1000 cuts" hit me. This is the perfect term that I had looked for so many times in the past to explain an out of control project with tons of minor defects, the release date around the corner, and the implementation that was going live no matter what. The 1000 cuts in this case being the dozens and dozens of low severity defects that when put together made a pretty crappy looking and feeling Web site.
When the project has a customer weighing in like 800 pound guerilla holding tight on promised release dates, the over-worked development team tends to get the high severity defects fixed first and the low severity defects are quick to be ignored by developers and project managers by abusing the leniency in the defined QA Exit Criteria:
Severity 1: Zero remaining defects. Severity 2: Zero remaining defects. Severity 3: To be agreed on by the QA Lead, Project Manager and customer. Depending on the agreement of the disposition of these defects, this status could possibly delay QA exit. Severity 4: To be agreed on by the QA Lead, Project Manager and customer. However, defects of this severity will not delay QA exit.
As mentioned before, a large pile of Severity 3s and 4s in a Web site can simply suck. Sure, for the most part it works and the user can do what they need to do, but the overall user experience can be just plain horrible. Don't let your project die the Death of 1000 Cuts due to guerilla tactics and bad QA exit criteria. Create strong exit criteria (stronger than listed above) and stick to your guns. I did, and the defects at go-live turned from several dozen to a few. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, February 14, 2007 |
|
| |
|
|
| |
I'm currently looking for a SQL data differencing tool that has the features:
- Support for SQL 2000 and 2005
- For the purpose of database migration testing, allow data snapshot comparisons. Tools I've encountered so far allow you to compare two, up and running databases which isn't what I want to do. I want to snapshot a database, run my database upgrade installer, snapshot after the upgrade and then compare the two snapshots.
I've been recommended and have reviewed the following but they don't meet my 2nd criteria:
AdeptSQL Diff
Red Gate SQL Compare
What are you using? Do you know of a tool that fits me needs? |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, February 13, 2007 |
|
| |
|
|
| |
Nearly every minor and major release of our product ends up with changes to the database. Sometimes to the schema, sometimes to the data, sometimes both. Schema changes are obviously important to be aware of from a testing perspective, so a tool to catch these changes is needed in the testing toolbox. When working with with products that use SQL 2000, I use two tools to detect the changes: SQL Enterprise Manager and a file differencing tool (I use Beyond Compare). Detecting and analyzing changes using the two tools is quite simple and only takes a few minutes. Here's how:
The magic starts with Enterprise Manager's feature "Generate SQL Script". Using this feature outputs the selected database to a SQL file in DDL. The first step in the process is to take a snapshot of your existing database using this feature. To do so:
In Enterprise Manager right-click the database, select item "Generate SQL Script":

The Generate SQL Script window will open, on the first tab labeled "General" check the Script all objects checkbox:

On the 2nd tab labeled "Formatting", select the following checkboxes:
- Generate the CREATE <object> command for each object.
- Generate scripts for all dependant objects.
- Include extended properties.

On the 3rd tab labeled "Options", select the following checkboxes:
- Script database
- Script object-level permissions
- Script indexes
- Script full-text indexes
- Script triggers
- Script PRIMARY keys, FOREIGN keys, default and check constraints

You're all configured to dump the important stuff now (you deem what its important for your product though, feel free to check something that you think applies to your database change). Now that you're configured, click the "OK" button and you'll be prompted to save the file. Save the file. You now have a snapshot of your current schema!
With the snapshot of your schema in place, you can now conduct your database upgrade or whatever database altering voodoo that the developer has asked you to validate. Once the upgrade is complete, run the above set of instructions again to create a DDL dump of your newly modified database. Once the .sql file is saved, it's time to view the differences, do this using your file differencing tool. The differences in the report that your diff tool creates are obviously the differences between database schemas. Create test cases accordingly...
Unfortunately, SQL 2005 has ruined this feature as far as I can tell. The feature exists but the output is wildly different. Differences in schemas create DDL files that are far different and hard to line up. This appears to be due to some new ordering of how things are created for the DDL. Needless to say, I'm in the process of finding a good tool or work-around trick for this issue. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Monday, February 12, 2007 |
|
| |
|
|
| |
When testing Web Services it's important to know if the service/contract has changed so that you can conduct testing accordingly. From experience, when developers build Web Services using .NET, changes can be made to the service unknowingly. Because of this, a tester must add another test case to his arsenal to check for those changes. Fortunately detecting changes is really simple and can be done with two tools you most likely already have in your testing toolbox: a Web browser and a file differencing tool like Beyond Compare.
Below, I'll show you how I detect Web Service changes. For the purpose of these instructions I'll use two example product versions Product 1.0 and Product 1.1:
Simply put, we need to compare one Web Service contract to the other; the contract being the WSDL.
- Point Internet Explorer towards the Product 1.0 Web Service, at the end of the Web Service you'll need to tack on the query "?wsdl". Your URL will look some like: http://localhost/Product1/Product1WebService.asmx?wsdl
IE will then display a page of XML.
- Save the WSDL by navigating to File > Save As, save the file as Product10WebService.asmx
- Point Internet Explorer towards the Product 1.1 Web Service WSDL
- Save the WSDL as Product11WebService.asmx
- Open your file differencing tool and compare the two saved .asmx files.
- Build your test cases accordingly. Mine typically are constructed and divided by breaking changes (modifications of existing items) and non-breaking changes (additional items added).
Simple, yet very powerful for a tester. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, February 10, 2007 |
|
| |
|
|
| |
I'm still up to my neck with installer testing and I've started to dig into some of the command line parameters of Installshield and msiexec.exe to better understand how things work and to help Matt with troubleshooting. If you're new to the Installshield thing then you'll need to know that an InstallShield .exe wraps a .msi and each can be passed command line parameters (.the .exe takes them, and the exe can pass them to the .msi). Problems can be cryptic and logging can be your best friend. However, making the logging work for you isn't intuitive and requires some investigation. Here is a little diddy I discovered today that helped us through a defect:
To force the .msi to use its verbose logging feature you would use the following at the command line:
MySexyInstallShieldInstaller.exe /v"/lv C:\myverboselog.txt"
where MySexyInstallShieldInstaller.exe = your InstallShieldInstaller name
where /v = passes everything in the following quotes as arguments to the .msi, or rather msiexec.exe
where "/lv = l for logging, v for verbose; for the .msi
where C:\myverboselog.txt " = the directory and name of the file where the logging is done
The output, according to Matt is "really verbose". Perfect if the defect is easily discovered and fixed! If you're in the same installer world as me, the following parameter definitions could be helfpul to you:
InstallShield command line parameters are here.
.MSI command line parameters are here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Friday, February 02, 2007 |
|
| |
|
|
| |
I've always admired fellow coworker and QA engineer Phillip Forteza for his enthusiastic and positive attitude. Sitting in my cube 10 feet away, I could hear Phillip interact with coworkers and customers; his interaction always upbeat, caring, and real. I really admire that. I wish we could always ooze positive emotion like Phillip, especially myself. Perusing my blog logs I encountered that Phillip had started a blog. Excited to see another fellow coworker's musings, I found my way to his site and read all of his posts. I LOVE IT. It's Phillip to the T (Phillip to the P?). So far Phillip's musings are life lessons and each post a positive, uplifting addition to your day. Go check him out at A Day in the Life of PF3. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, February 01, 2007 |
|
|
| |
Thursday, January 25, 2007 |
|
| |
|
|
| |
If you follow my blog you know that I use Parasoft SOAtest for Web Service testing. If you don't...well now you know. The new 5.0 version of SOAtest has been released and it has a pretty large set of new features and improvements.
Parasoft SOAtest 5.0 features the following key new capabilities:
- Testing through multiple layers of complex applications: Instantly translate a functional scenario from a test suite into a language that the developers understand: JUnit.
- Policy Management: Provides SOA architects the ability to create and manage policies that are enforced during design and development.
- Performance QoS (Quality of Service): Defines and enforces QoS metrics that are important for setting and measuring SLAs (Service Level Agreements) during development and QA.
- Enhanced Server Emulation: Enhanced intelligence of server stubs allows you to more accurately emulate application behavior.
- GUI Overhaul
- Reporting Enhancements
- Automatic Updates
- MTOM/XOP Support
- Other Miscellaneous features
Get the entire list of new features and their details here.
Get a trial download here.
Personally, I'm looking forward to working with the GUI overhaul. There are so many things going on in SOAtest and the GUI can be a real pain to work with. Painful outside of the typical Java GUI pains such as lack of keyboard shortcuts and lack of right click context menuing! I won't go there though.  |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
 |
|
 |
| |
|
|
| |
A new version of SWEA has been released that supports Ajax. Alex has kept me up to date on his developing and testing progress with this new feature and I can tell you that he has put a lot of time and hard work to get this feature out the door. As Alex said to me on several occassions "their are many ways to do Ajax, supporting them all is a lot of work". Webius is really dedicated to making automation and screen scraping easy for you and the new Ajax feature only adds to the long list of things the software is capable of.
Download the latest version of SWExplorerAutomation (SWEA) here. |
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 18, 2007 |
|
| |
|
|
| |
Another post yet again inspired by a Google search that lead to my site but I don't necessarily address directly: "What is the quickest way to refresh a Web Page?"
Answer: The F5 key
How to refresh a Web page without pulling it from the browser's cache? CTRL + F5
No such thing as a stupid question here at QAInsight.net\QABlog.net\QABlog.com! We all have to start somewhere eh? |
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 18, 2007 |
|
| |
|
|
| |
Well I'm still testing InstallShield installers today and thought I'd add another interesting and cryptic issue to the blog that I saw when an uninstaller removes performance counters (or fails to for that matter). The error described below is not InstallShield's fault, but instead corruption in the Performance Counter Registry that is encountered during an uninstall. However, since it occurs on uninstall it will certainly bubble up in you related installer logs. As I posted last night, the best way to troubleshoot InstallShield errors is to search the Internet; so I hope this post can help someone out. Below is the complete description and fix that worked for me and a few others:
Error Event Uninstall of application
Error Location Multiple locations: 1. %temp% \InstallError.log 2. Event Viewer
Error Message 1. InstallError.Log details: Error in Installer: System.ComponentModel.Win32Exception: The configuration registry key is invalid
at System.Diagnostics.PerformanceCounterLib.RegisterFiles(String machineName, String arg0, Boolean unregister) at System.Diagnostics.PerformanceCounterLib.UnregisterCategory(String machineName, String categoryName) at System.Diagnostics.PerformanceCounterCategory.DeleteCategory(String categoryName, String machineName) at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) at Service.ConfigureService.RemovePerformanceCounters()
2. Event Viewer item 1 detail: Unloading the performance counter strings for service appnamehere (app name here) failed. The Error code is the first DWORD in Data section.
Event Viewer item 2 detail: The performance strings in the Performance registry value is corrupted when process Performance extension counter provider. BaseIndex value from Performance registry is the first DWORD in Data section, LastCounter value is the second DWORD in Data section, and LastHelp value is the third DWORD in Data section.
Issue Corruption of the Windows Performance Registry, possibly due to Windows Server 2003 SP1. See the related thread: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=442741&SiteID=1
Fix Run the following command to rebuild the Performance Registry Library: C:\WINDOWS\system32> lodctr /R |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, January 17, 2007 |
|
| |
|
|
| |
I spend a large part of my time testing InstallShield installers and I kid you not, I'd rather eat worms. Breakfast, lunch, and dinner. ..Midnight snack too. Worm smoothies, worms on toast, worms as a mixer with gin, Worm Cordon Bleu. For a week.
The complexity is mind boggling, confusing and frustrating. InstallShield is not easy for the developer or the test engineer. The development application is very error prone.
Recently we were perplexed with an InstallShield fatal error that failed to log anything to the InstallShield log file. Perusing the Web for related information to the error number we were getting (which sadly is the best way to troubleshoot InstallShield issues) I found that Windows has an installer logging service built in. When I enabled this service, I was able to get more detail of what was going on down in the guts of the underlying msi.
Partly for your knowledge and partly for mine (because I'll forget how at some point), I'm going to document how to enable the Window's Installer Logging Service here:
- Open/run regedit and navigate to the following path:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
- Add the following string value to the Installer directory: Logging
- Add the following data/value to the Logging string value: voicewarmup
The letters in the value field can be in any order. Each letter turns on a different logging mode. Each letter's actual function is as follows for MSI version 1.1: v - Verbose output o - Out-of-disk-space messages i - Status messages c - Initial UI parameters e - All error messages w - Non-fatal warnings a - Start up of actions r - Action-specific records m - Out-of-memory or fatal exit information u - User requests p - Terminal properties + - Append to existing file ! - Flush each line to the log
Your completed registry entry will look like this:

Once the registry change is made your new installer logging will show up in your Temp directory (temp is defined by the temp system variable). The log in the directory will have a name that starts with the letters MSI and will be followed a random number.
Happy troubleshooting! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, January 16, 2007 |
|
| |
|
|
| |
Today the Portland area was blessed with a fairly decent coating of snow and under that a thin base of ice. With all things coated in white, clean and pretty looking, a defect loomed...
This morning I braved the weather and set out to the streets armed with a 2007 Ford Fusion (front wheel drive with traction control), ice and snow driving skills (which a large amount of Portland motorists don't have), and defensive driving skills taken to the next level (from riding a street motorcycle).
Danger after danger I went around, turned around from & back-tracked, and chuckled at due to the foolishness. My snow-driven cheery mood could not be swayed by danger and foolishness! Two blocks from work I pulled up to the last light that I would encounter on my harrowing journey. With the destination in sight, my mind was at ease and I patiently waited for that green go light. and waited. and waited. AND WAITED.
About 2 minutes into it the lady in the turn lane next to me had enough and started to renegotiate her car's position trying to trip the traffic light's magnetic induction loop inside the road. Watching her, I started to second guess my position since everything was buried in snow. Looked good to me, it all lined up in my mind. Even if we didn't trip the magnetic induction loop, the signal would default to a standard set amount of time per light/direction right? Right!? Wrong. We were screwed. No green for us. Denied by ODOT. Denied by a defect. I can't believe this is the case everywhere, but it sure was at this stoplight.
Three minutes later I looked both ways and went for it. Unscathed I am. Don't try this at home.  |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I went to check up on Alex Furman tonight (creator of SWEA) and got redirected to Webius.com. Wow, I haven't talked to Alex in a little over a month and he's obviously been busy. SWEA has gone big! It is now owned by Webius, comes in a pretty box, and of course the price has gone up a bit.
This is great news. Alex has created a well thought out and powerful product and it seemed to me that the one thing holding it back from becoming a huge hit was marketing. Hopefully Webius will help make this happen. Congratulations Alex!
How does SWEA help your testing world? See what I do with it here:
Automating Web UI testing with SWEA, C#, & NUnit |
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 11, 2007 |
|
| |
|
|
| |
I've been enjoying the new Start menu "Start Search" feature in Windows Vista which seems to be a cross between the Run command and a Search with intellisense (like Google search). It's pretty much abolished my old ways of using the Start Menu which was slow and cumbersome: click Start, click Programs, search through a mile long list of programs, click the program menu, and FINALLY click the program. Yeah, like I said... slow. The Vista "Start Search" process is: Windows Key, start to type the program name (intellisense finds it), hit enter (notice, no mouse clicks).
Using this feature and seeing how it fast it can be makes me wonder why I don't use more of the very similar Run command window in XP or Server 2003 while testing. It's similar, but not nearly as smart with it's lack of intellisense.
When testing I spend quite a bit of time in certain Windows applications and navigating to those applications is painful after being spoiled with the Vista feature. The pain grows from a mild finger ache to a flat out flat out smash your finger in the car door throbbing when you do it on a VPC! Working between multiple VPCs, setup different ways, leaves you sometimes without the shortcuts you may have placed on the desktop for speed.
Enter the Run command. Its simple, and I'm almost positive you've used it before:

Windows key+R, type the app name, hit enter. No mouse clicks. Just one caveat: You need to know the app names. I got a list of the application names for my most common apps used during testing and am getting myself in the habit. After an entire day spent in VPCs I've decided this the way to go. I'm hooked. To help me get my favorite app names memorized I'll be putting a tiny cheat sheet on the corner of my monitor. These are the app names I'll be committing to memory slowly but surely:
Control Panel Apps System Properties: sysdm.cpl Add/Remove Programs: appwiz.cpl Automatic Updates: wuaucpl.cpl
System Apps Performance Monitor: Perfmon Services: Services.msc Event Viewer: eventvwr Computer Manger: compmgmt.msc Task Manager: taskmgr
Common Testing apps MS Word = winword MS Excel = excel MS Paint = mspaint Notepad = notepad
Again, simple, fast and efficient:
Windows key+R, perfmon, Enter key
Almost like Vista, just a little extra brain power is all.
If you're not doing it already, get in the habit and save yourself some time. Yeah, yeah, this stuff has been around a long time I know. It's just hard to get in the habit. Sounds like a fun little QA New Year Resolution doesn't it?
Here is a large list of Run commands for 117 apps.
Here is a list of all the commands for the Control Panel. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, January 10, 2007 |
|
| |
|
|
| |
The IE team has released Beta 3 of the IE Developer toolbar. I played with it for a while and found that it's getting better. In prior versions I (and others I talked to) couldn't get the Outlining functionality to work. It appears to work now in Beta 3, but it's still a bit buggy. On a page off of Google news the toolbar was incapable of outlining all the images on the page. On a positive note, the new feature "Select Element by Click" is pretty dang slick and I could see it being really helpful in developer troubleshooting or testing investigation. The feature allows you to click any element in the Web page and that element's details and position in the DOM will be displayed in Developer Toolbar's DOM explorer. From there you can also view the source for that element too (with colored syntax). If you haven't already, start warming up with the beta 3. Once complete, this tool will be a must have in your developer and testing tool toolbox. Get update information and screenshots of changes at the IE Blog. Download IE Developer Toolbar Beta 3 here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Invirtus, the company that gave us VM Optimizer, is now offering a new product VM Converter. This little gem converts physical machines to VMs (P2V) and also does virtual to virtual conversion (V2V). If you have a need for this in you testing world you download a free trial here.
I don't have a need for VM converter myself since my VPCs are typically built from scratch with an OS and SQL base and then saved off to be built upon under a new VPC name, but I thought it might fit into your testing world? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Its been a little over a year since I rolled out QAInsight.net with my just starting, blogging beginner, writer wanna-be Hello world post. If you're a recent subscriber or just happened to stumble upon the site you most likely missed my top 18 Quality Assurance & Testing related posts in 2006. Why 18? Why not? Why do you find defects when a developer says "only a tiny change was made, you don't need to test it"? Because that's just the way it is. None the less, here's the 18:
A wonderful year it has been, I've learned a ton about blogs, blogging, testing, QA and QAInsight visitors.
How do I feel about blogging after 1 year of doing so?
First off, I haven't lost that initial thought the day I started dreaming about blogging: I really don't care to write about "Quality Assurance" process or methodology, I prefer to talk about "Testing". I feel "Quality Assurance" has been driven into the ground and I'm just plain tired of hearing about it. Don't get me wrong, process and methodology is important but it just gets old when you hear the same thing over and over, each with a little, unique twist to it. I'll leave that to the other guys, testing is my love.
Second, writing about testing doesn't drive hoards of people to your site. Duh... it's boring unless you are in QA and are sincerely interested in improving your testing.
Third, when writing about testing it often requires technical details with detailed steps. It is REALLY REALLY hard to show personality and humor when doing this (at least for me).
Fourth, I enjoy creative writing far more than writing technical posts. Writing a testing post requires note taking, procedural step documentation, and just plain TIME. Creative writing I can spit out in 20 minutes with little thought or fret. For example, my post Death toll rises due to FireFox got a TON of hits and I wrote it on the fly without having to think like a robot. People gobble this stuff up! I love writing like this, and will be doing more of it in the years to come.
Fifth, leaving comments on other blogs or sites and those comments just happen to point to your site will help drive traffic. For example: Six reasons why Robert Scoble is Mini-Microsoft. Granted, calling somebody out on something helps too. 
Sixth, Google Adsense drives traffic. When you write a post, Google notices, your content is indexed quickly, and can be found through Google search.
And last but not least, the blog software Dasblog is the way to go. It works and it works well. If you're thinking about about starting a blog, do yourself a favor and set yourself up with Dasblog. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, December 13, 2006 |
|
| |
|
|
| |
I ran into a link (can't remember where) for a free subscription to Software Test & Performance magazine. You too can subscribe for the monthly print or electronic edition here. You can also download the back issues for free here. I haven't spent enough time in the back issues to establish an opinion but it appears the magazine is pretty Java oriented. Have at 'er. |
|
| |
 |
|
| |
|
|
|
| |
Saturday, December 09, 2006 |
|
| |
|
|
| |
Tod Birdsall has created an online SWEA .htp parser that will take your .htp file and break each scene's controls down into C# objects. In the past this is something I did by hand, but I thought it could be useful to you if you're just putting your framework together or are refactoring. Pretty handy when you have a few hundred controls. The utility will take this:
<Control Name="Nav_Users" Type="HtmlAnchor"> <IsOptional>false</IsOptional> <ControlDescriptor> <HtmlId>ucHeader_lnkUsers</HtmlId> <HtmlName /> <XPath>HTML[1]/BODY[1]/FORM[1]/A[2]</XPath> <TagName /> </ControlDescriptor> </Control>
and turn it into this:
// ParentName = sceneChallengeReport HtmlAnchor Nav_Users = ((HtmlAnchor)browser.Scene["Nav_Users"]);
The code gen utility can be found here. |
|
| |
 |
|
| |
|
|
|
| |
Friday, December 08, 2006 |
|
| |
|
|
| |
Dear Santa, The rest of QA is writing so I thought I should too. Santa, I've been a most excellent boy this year. Let me explain...BTW, no matter what Matt says, I don't think your red suit makes you look fat.
You see, it's really been beat into my brain that I need to track EVERY defect I find in the defect database, but I haven't done that this year. "Egads!" you say? Santa, you don't understand... You have no idea how efficient it is to say "Hey Matt" (the developer who sits behind me), Matt will pull one headphone muff off of his right ear and say "you talking to me?" in a slightly gruff voice, and I reply with "Yeah, I found a defect" in my slightly cocky, testing rock-star, voice. He'll wind through a "Oh reeeeeally", and typically I'll reply with a "Yeah, come check it out". Matt will then give a heavy leg-thrust to scoot his chair across the low profile business carpet to arrive at my desk 10 feet away. "Get outa my way" he'll sneer as his chair crashes into mine, half out of smart-assedness, half out of spite that I found a defect related to his code.
Scanning the results on my test system, Matt comes to the conclusion "Yep, I know what that is", which is only half of what I thought it was, but through the process of watching and questioning Matt I understand the 2nd half and then I fully understand the issue which makes regression of the defect easier. "Give me a minute" Matt says, and after giving him that minute I have a new build to use , if I want it.
Seriously Santa, think about it: Real-time defect fixing and regression... Developer time saved wading through a written defect and reproducing it, QA time saved by eliminating blocking issues, and a true understanding of what the issue at hand is.
Santa, I've given up Waterfall for Agile. I'll take coal any day before I go back to that Waterfall crap. I hope you can find it in your heart to understand. I hope you can take my lessons learned and improve your waterfall process. YOU KNOW WHAT I'M TALKING ABOUT...Timmy the elf building the train with a 2" wheel base, while Elizabeth the elf is on the other side of the wall building a 4" wide train track. If you can find it in your heart to understand the reality and efficiency of agility and decide to reward me for realizing it...I WANT A ZUNE. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Friday, December 08, 2006 |
|
| |
|
|
| |
Ah, the irony of finding a defect in your testing tool. So annoying...
When testing on an image in Virtual PC 2004 not a day goes by when the drag and drop copy feature stops working (from the VPC to the host machine or vice versa). Typically a VPC reboot will fix the issue for me but that takes time when your VPC takes a couple minutes to boot. It's usually easier to just transfer the file through a file share. Frustrating...a ton of copying and file transfer goes on when I'm testing, but I never have the time to troubleshoot such a trivial task and sometimes the reboot isn't worth the feature.
Ben the VPC Guy blogged about a similar issue. His fix is to kill and restart the explorer process on the host machine. I didn't have a chance to try this out today, but the next time this occurs (100% likely tomorrow) I'll try two things: First I'll kill and restart explorer on the VPC since my problem is fixed by a VPC reboot where his was fixed by a host reboot, if that's a no-go then I'll give his fix a try. I'll let you know.
Update 12/8: Killing explorer on the host or the VPC didn't work for me. Restarting the VPC works as usual though. What gives Ben? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, December 07, 2006 |
|
| |
|
|
| |
Internet Explorer 7 is out and as the world gradually upgrades, our web applications are slowly forced into compliance if we want to truly reach all of our audience. When it's been declared that your app will support both (at least for the time being) the testers are forced to conduct browser compatibility using both. Because of this, testers are now dealing with the problem: Knowing that IE6 and IE7 can't be installed at the same time on one machine, what is the most efficient way to test both IE6 and IE7? It sure would be nice if I you could test both from a single test machine right? Fact of the matter is, you CAN! You've got two options here, a Not so Guaranteed way, and a Guaranteed way.
Not So Guaranteed Way Use MultipleIEs from TredoSoft,which allows you have multiple versions of IE (3.0, 4.01, 5.01, 5.5, 6.0) placed and semi-runnable on one test system. I've done a bit of playing around with this method and from experience it's pretty unstable. IE is built to tie into your OS, so being a unstable seems reasonable when you have hacked apart piles of assemblies that make up different versions of IE (as MultipleIEs has done). If you're fairly familiar with what different versions of IE look and feel like you'll get the same uncomfortable hunch that I get when I'm trying to convince myself that I'm truly experiencing the version of browser I opened. Goofy things make me suspicious, like running IE 5.5 and viewing the "About" window which tells me that I'm running IE 6. Attempted validation of components in these browsers using detection tools such as BrowserHawk.com still leave me scratching my head due to issues with tools themselves or the browser. Who knows? I don't know! It would take a lot of work to know. I would find great comfort in proof that the rending engine, JavaScript version, management of cookies and cache of that browser were truly being used. But I don't have time to do that. Will you test on a questionable browser/system and put your "tested" seal on the Web app when you don't have proof of the authenticity of that browser? Not me. Those are my feelings, the IE team backs them up with this post. However, I can confidently put my seal on the Guaranteed Way:
Guaranteed Way 1. Install IE7 on your test machine. 2. Download and install the free Microsoft Virtual PC 2004 and the free Windows XP SP2 IE6 VPC Image (no license required). Set you new environment up in 19 easy steps.
Do it the right way testers. Microsoft has made it easy and free for you. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, November 28, 2006 |
|
| |
|
|
| |
I scraped this out of the StickyMinds newsletter this morning:
Buffer Overflow
 By Tapas Kumar Sahoo
It's a quick and informational read on how to test for and prevent buffer overflows. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, November 28, 2006 |
|
| |
|
|
| |
It sure is a challenge to find the Windows Server 2003 Resource Kit. Why does Microsoft make it so hard to find? You can download it here (thanks Matt).
I was hoping to find a version of SysDiff on it for Server 2003. No such luck. After getting a version of SysDiff here I attempted to run it on Server 2003 and... it doesn't work. Microsoft wants you to use Wininstall LE now.
Wininstall doesn't seem to be all that. I need a tool that I can take system snapshots (before and after an application installation), compare and report the differences. I'd like to track the following changes on Server 2003:
- Files
- Folders
- Registry
- Users
- Groups
- Permissions
- Wishful thinking: SQL 2000 and 2005 schema changes
I've found WinAlysis and it seems promising. What tool do you use? |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, November 28, 2006 |
|
| |
|
|
| |
This morning I took my son to the dentist for his semi-annual cleaning and my brought my laptop along to get some casual white paper reading done while I waited. After firing the ol' IBM up, much to my surprise I realized that Smiles Northwest had free wireless access. Sweet! I quickly resumed my normal testing schedule by VPNing in to work, doing a remote desktop connection to my test machine and then started testing away. Gawd I heart technology. Testing from the dentist's office...Heh.
BTW, for what it's worth Dr. Montrose and the staff @ Smiles Northwest are GREAT. If you're in the Portland/Beaverton/Hillsboro area I highly recommend them. |
|
| |
 |
|
| |
|
|
|
| |
Monday, November 27, 2006 |
|
| |
|
|
| |
I recently had the privelege to explore a SQL 2000 to SQL 2005 upgrade for one of our Web applications, and in the same breath an upgrade from the .NET 1.1 framework to .NET 2.0...
I'll talk about the specifics that I learned during the SQL upgrade another time, but I ran into only one issue during my 1.1 to 2.0 upgrade process. The issue wasn't even really an .NET framework issue.
Long story short, my lesson learned was essentially establish that the app works before the upgrade. Duh, can you say BASELINE? What threw me for a loop which led me astray is that the .NET 2.0 led me to believe that I had a SQL 2005 configuration issue:
Error With .NET 2.0 Exception=System.Data.SqlClient.SqlException: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
To troubleshoot, I rolled back to .NET 1.1 with SQL 2000 and saw:
Error With .NET 1.1 Exception=System.Data.SqlClient.SqlException: SQL Server does not exist or access denied.
Interesting, so I didn't have a SQL 2005 OR .NET 2.0 problem. The issue? I learned that the above errors occur when:
1. SQL not started (duh, that wasn't my problem though) 2. IPSEC configured incorrectly (my problem)
The fix: 1. Start SQL Server 2. Configure IPSEC so that the servers can be pinged successfully in both directions (Web server to SQL and SQL to Web server)
Why am I telling you all of this? Because I have nothing better to do right now. Err... Or...While Googling on my SQL 2005 error I found some great SQL Server 2005 connection troubleshooting links. If you're stuck with SQL 2005 connection issues here are three some references to check out:
Troubleshoot Connectivity Issue in SQL Server 2005 - Part I
Troubleshoot Connectivity Issue in SQL Server 2005 - Part II
Troubleshoot Connectivity Issue in SQL Server 2005 - Part III
Even Better, just use this site/search
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, October 26, 2006 |
|
| |
|
|
| |
Today, my coworker Aaron Jensen provided a link to Microsoft's Privacy Guidelines for Developing Software Products and Services paper. I haven't had a chance to read it yet but I think this will be a great starting step towards helping develop software with respect for user privacy. The development community needs this...The testing community could benefit highly from this document too. A guy could create a pretty sweet set of privacy test cases from this information. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, October 25, 2006 |
|
| |
|
|
| |
I can't imagine this is a feature, so I'll call it my Defect of the Day (imagine loud booming, stereo, monster truck announcer voice with that). Here try it again....DDEEEFECT OF THEEE DAAAAAY:
Many a time while listening to MSN Radio I'll hear a song that I really like and wish that I could hear it again, over and over and over and OVER. Nothing like a little musical spice while testing, spice that forces you to shake your little booty in your chair while nodding your head rapidly to the beat (all the while making darting glances into you rear-view PC mirror to make sure your co-workers aren't mocking you in the background). Back to the defect... Since its "Radio" you can't rewind or go back right? Wrong...In Media Player (I'm using version 10) when the song is nearing the end press the stop button, the progress indicator will go back to the beginning of the song. Press the play button and the song starts from the beginning. Sweet!
I can't even begin to tell you the number of defects I found today while testing, groovin' with my "MSN Radio manual repeat defect", and Ice Ice Baby.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, October 25, 2006 |
|
| |
|
|
| |
Net-Security.org published an article stating the Top 10 Web 2.0 Attack Vectors. In their opinion the top 10 are:
1. Cross-site scripting in AJAX 2. XML poisoning 3. Malicious AJAX code execution 4. RSS / Atom injection 5. WSDL scanning and enumeration 6. Client side validation in AJAX routines 7. Web services routing issues 8. Parameter manipulation with SOAP 9. XPATH injection in SOAP message 10. RIA thick client binary manipulation
Do you have test cases in place to help prevent these top 10? |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, October 24, 2006 |
|
| |
|
|
| |
FireFox 2 is released and can be downloaded at GetFireFox.com! What does this mean for us browser compatibility testers?
From experience, my compatibility testing woes that come with version changes are:
1. JavaScript version changes, causing JavaScript errors. 2. Rendering engine changes (especially CSS); causing display issues (e.g. object alignment, font changes/inconsistency).
So....as I peruse the FireFox 2 feature list I see an upgrade to JavaScript 1.7. Hmm, sounds historically defect prone...BUT, before I read the feature list I went and did my own homework of seeing if the JavaScript version changed. My homework unveiled that FireFox 2 was using JavaScript 1.5? WHAT THE? Am I looking at an issue caused by having multiple FireFox installations on a machine (I have 1.0.8, 1.5.4, and 2.0 installed). When you're running FireFox 2 what is your JavaScriptVer when you visit BrowserHawk.com? Leave your findings in the comments please! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
So I'm told...When a Web server that has the 1.1 .NET framework installed as well as the 2.0 framework, if the Web app's virtual directory is set to utilize 2.0 it's possible that "issues" could occur and that it could revert back to 1.1 to keep the app running (not too sure what "issues" are). How do you figure out which framework your Web page was created with? Modify the applications web.config's trace key "enabled" and "pageOutput" parameters to be true and then the "localOnly" to be false:
<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="false" />
Once modified, you are then in BIZNESS! View/open the suspect application/Web page in your browser and look at the very bottom of the trace dump. The .NET Framework version will be displayed. It will will look something like this:
Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42
Have a Stupid Testing Trick? Email me using the "E-Mail" link on the right. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I often discover new QA blogs through my readers via comments or referrer URLs. Today I discovered zeljkofilipin.com because Željko left a comment on QAInsight.net. When I went and checked out his blog I laughed pretty hard at one particular post/joke Software is like sausage:
Software is like a sausage. You lose your appetite when you see how it is made.
Check out Željko's blog he's a Ruby/Watir user. Hey Željko, when are you going to leave the dark side? SWEA is patiently waiting for you!  |
|
| |
 |
|
| |
|
|
|
| |
Thursday, October 19, 2006 |
|
| |
|
|
| |
Which is faster when using DHMTL? The innerHTML property or the HTML DOM? Gleb Lebedev over at gloo.ru did all the hard work for us and gives us an answer. In a nutshell: innerHTML wins in Opera 9.01, FireFox 1.5, IE 6.0 32-bit, and IE 6.0 64-bit. By far!
A new check in the performance code review? Your developers do that right? Right!?

|
|
| |
 |
|
| |
|
|
|
| |
Thursday, October 19, 2006 |
|
| |
|
|
| |
Ben the "Virtual PC Guy" tells us that Microsoft Virtual PC 2007 Beta is out. Get the feature list over on his blog. Sign up for the VPC 2007 beta here.
I spend a large portion of my QA day using VPC 2004, so I'm pretty excited, and SCARED, to see what 2007 will do for me. My hopes are high that the performance improvements will make my testing experience faster. Please? Please. PLEASE! |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, October 18, 2006 |
|
|
| |
Tuesday, October 17, 2006 |
|
| |
|
|
| |
Every since Borland bought Segue there has been a LOT of marketing material coming from Borland. Thing is, it hasn't been just "Buy our products" material, it's been some good testing and quality assurance info (75%)that leads up to "Buy our products" (25%).
The latest push is with their Lifecycle Quality Management (LQM) process which is one of their 4 processes in their Software Delivery Optimization vision. Read the news release here. In promotion of LQM, Borland is offering a free Webcast entitled: Lifecycle Quality Management; Infusing and Automating Quality at Every Phase
Here's the Webcast info...
Date: Wednesday, November 1st 2006 Time: 11:00 AM PT / 2:00 PM ET; 1 hour
Featured Speakers:
- Brad Johnson, Product Marketing Director of Lifecycle Quality Management solutions for Borland® Software
- Matt Light, Research Director for Gartner Research
- Frank Derfler VP, Market Experts Group - Ziff Davis Media
Register for the Webcast here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
SPI Dynamics (known for being experts in security for Web applications) has released a white paper on the dangers of Ajax. It's a worthy and quick read if you are doing any testing or development with AJAX. Get the paper here.
I've seen a lot of activity and focus on implementing secure Ajax solutions, which is a great thing, but I'm telling you people...it's dangerous if not done right. The more I read and play with it the more I think:
"Ajax...the new, great way to exploit".
"Bad Ajax implementations...A phishers dream!"
Yeah, yeah... I don't want to hear your "The technologies used in Ajax aren't new" crap. The technologies aren't, but the focus is. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
It wasn't long ago that I ran into a scenario when performance testing that required some creative thinking to fix. The root of my problem was that each of Silk Performer's Agents utilize their own copy of all the data files in a project, and when my application's User IDs are in that data file, the Agents will end up having Virtual Users using the same User ID at the same time, causing inconsistent/clashing user behavior (which caused an error in the application). Working from 1 pool of User IDs with 1 Performer Agent is no problem (when using the function FileGetNextRow() that retrieves User IDs sequentially), but add that 2nd Agent and all hell breaks loose.
My half-ass fix to the problem? Divide the User IDs and Virtual Users between Agents. For example, if you have 2 Agents and 1 million User IDs, then one file with 500k will go on Agent #1 and another file with 500k will go on Agent #2. Seems feasible right? Wrong, as stated before, Silk Performer will load all data files to the Agents, in other words...you don't get to choose which data files are uploaded to your Agents. Thus, Agents will use both sets of files in the 2 file example.
So, now the problem becomes: How do I have each virtual user recognize which Agent it is coming from and use a uniquely assigned User ID file? Answer: Use the GetAgent() method in the Init transaction:
|
transaction Init var sAgent : string; begin sAgent := GetAgent(); |
GetAgent() will return the machine name or IP that the Virtual User is coming from. You can now use that value to instruct the Virtual User to grab a User ID from the correct User ID file for that Agent (still within the Init Transaction):
|
//Split up users between agents to avoid behavior issues/error //Check for localhost too so that Try Scripts will still run if (sAgent = "Agent1") OR (sAgent = "localhost") then FileCSVLoadGlobal(nAcctFile, "Users.rnd"); //500k users elseif (sAgent = "Agent2") then FileCSVLoadGlobal(nAcctFile, "Users2.rnd"); // other 500k users else RepMessage("Agent not found.", SEVERITY_ERROR); halt; end;
|
Now, in your transaction where the user will be initialized you will use the method FileGetNextRow() forcing the Virtual Users to grab the User IDs sequentially from the file (choosing User IDs randomly would put us back to square one...the error):
|
FileGetNextRow(nAcctFile); sUser := FileGetCol(nAcctFile, 1, STRING_COMPLETE);
|
It's been a while since I wrote this code, but I think my friend Mark McCorkle helped me think through it. Thanks Mark! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
My good ol', thrill seeking, programming, secret harboring, friend Matt blogged about a bug in a Coke vending machine that will get you 2 cokes for the price of 1. From a quality assurance perspective this is really quite interesting...well at least it is to me because I've been in more of a software quality assurance world for most of my career and hadn't really thought about porting my hacker mentality to physical or mechanical devices in the "real" world. It's Quality Assurance and testing on a different plane but the same concepts still apply. Interesting...
Do you think the creator of this vending machine actually went through an official testing process?
Check out these Coke vending machine "bugs": Overflow exception Change the menu Two for the price of one
Now that I think about it, I think my first memory of lack of testing on this plane was when I was about 6 years old. I remember going to the grocery store with my babysitter and her son (who was about 13) would play the Asteroids arcade game that sat by the exit door using filed down metal washers instead of quarters. Pure genius... I wonder what he's doing now? I wonder if he's in QA? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, October 11, 2006 |
|
| |
|
|
| |
Today is a day to remember for me...today my first magazine article found in Better Software Magazine hit readers' mailboxes. My article entitled The $60 Web-Testing Toolbox hit the shelves today in the October edition. Sweeeeeet! It's a privilege to write to this shady blue blog and have regular readers but its a different sense of accomplishment to see your words on paper coupled with other authors in a monthly publication. I've been getting the magazine myself for a few months now and I really enjoy it. It has content that I can relate to as Quality Assurance Engineer. You too can subscribe to Better Software Magazine here and get 20% off.
So... back to my accomplishment. Huge! I'm currently working feverishly to make sure QAInsight.net will handle the monstrous load that will be brought in from the link in my Bio. I've added backup mail servers to handle the Terabytes of fan mail. I went to Home Depot and bought 4 wheel barrows to help cart the loads of money around (money made from fame and sponsorships). I've forewarned my wife about the hoards of frenzied QA girls that will be waiting on our door stoop and peeking through our windows just hoping to get a glimpse of me.
Don't worry; I won't let this go to my head. I promise I'll stay faithful to you my faithful blog readers. I don't care about the fame and fortune, I care about Software Quality.  |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, October 10, 2006 |
|
| |
|
|
| |
My dear SWEA fans, Our IE automation expert Alex Furman has added some plumbing to SWEA to allow us to use the HTTPWatch automation library from an Internet Explorer/SWEA instance. This is SUCH A GOOD THANG! I for one am looking forward to the things I can now integrate into my current automation test suite.
Don't know what SWEA can do for you? Check out my prior posts on automation with SWEA. Not sure what the benefits of automating HTTPWatch are? Check out this prior post.
Download the latest version of SWEA that supports HTTPWatch here. Download a demo of HTTPWatch here.
To help you get a grasp of the two and how they work together I've created a demo Visual Studio project that utilizes SWEA, HTTPWatch, IE, C# and NUnit. Compile it, point NUnit at HTTPWatch_NUnit_Demo.exe and run the 5 tests. The NUnit Test Suite will conduct the 5 HTTPWatch related tests against Ebay.com which will work with HTTPWatch Basic Edition (their demo).
Download my SWEA-HTTPWatch demo project here (7.73 KB). |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
"Defect of the day" is going to be dubbed "Bug of the day" today and the prestigious award goes out to fellow blogger Dror Engel with this bug found on Google:

|
|
| |
 |
|
| |
|
|
|
| |
Thursday, October 05, 2006 |
|
| |
|
|
| |
In the past I've written about my use and the value of the testing and development tool HTTPWatch. In the latest release of HTTPWatch (4.1) Simtec has added to its value by exposing an interface to be used for automation. My thoughts on the matter: "Whoa..that's freakin' cool, now I can automate some of the things I have to test manually for?"
The HTTPWatch automation interface as described by the folks at Simtec:
"HttpWatch has a comprehensive automation interface that can be used by most programming languages (e.g. C#, Javascript & Ruby). The interface can be used to control the HttpWatch plug-in for IE and access data in HttpWatch log files. If you are already running automated tests, you can integrate HttpWatch and record HTTP level information during your tests. The recorded data that then be checked for certain types of configuration and performance problems (e.g. HTTP compression is not enabled)."
I've played around with the new interface for a little more than a week now and the more I play the more I realize how valuable analyzing the HTTP traffic on the fly during an automated test could be. While exploring the interface, I put together a Visual Studio .NET 2003 project with some examples of the things that can be done:
- Check every request for 404. This isn't just page requests, this is all HTTP traffic that goes along with the page (e.g. catch broken images, missing .js files, etc.)
- Check every request for 500. Same as above except for 500s.
- For performance improvements, check to see if .jpg, .gif, .css, .js are found in cache instead of being downloaded with each page request.
- For performance improvements, check to see if .jpg or .gif files are greater than a designated byte size.
- Check that objects don't exceed a specified download time.
My demonstration project that uses the HTTPWatch interface, IE, C#, and NUnit can be downloaded here (thanks Matt for helping me refactor it). Compile it, point NUnit at HTTPWatch_NUnit_Demo.exe and run the 5 tests. The NUnit Test Suite will conduct the 5 tests noted above against Ebay.com which will work with HTTPWatch Basic Edition (their demo) and the Professional Edition.
The project is pretty simplistic due to it only validating one page, but hey it's a demo. Now that I better understand the interface, the BIG VISION for its use would to be to be open a browser, turn on HTTPWatch, log all the traffic for each page in my Website, and then conduct a battery of tests against the log, dumping the details to NUnit.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Friday, September 29, 2006 |
|
| |
|
|
| |
I took 57 minutest of TV time the other night (skipped Survivor XVII; Jewish midgets vs. Satanic albinos) and instead turned to Google Video to watch How to become a software testing expert by James Bach. I'd never seen James Bach speak before until that night, and I have to say that I really like his style. If you are Software Testing QA Engineer and have a spare 57 minutes I recomend watching this presentation. I did, and I have to say "I'm a software testing expert" and I didn't even realize it! It's very empowering...
You can download the presentation slides off of Jame's site. |
|
| |
 |
|
| |
|
|
|
| |
Monday, September 25, 2006 |
|
| |
|
|
| |
SQG (Solo QA Guy) seeking readers. QAInsight.net is so lonely...

I guess it would help if I blogged about QA a bit more... |
|
| |
 |
|
| |
|
|
|
| |
Sunday, September 24, 2006 |
|
| |
|
|
| |
Exploratory Testing Dynamics defined! Do you remember when you thought exploratory testing was just simple software exploration that usually resulted in some pretty cool and unique defects? A chance to test without hindrance of documentation? Get over it; everything must have a rhyme and a reason my QA friend. |
|
| |
 |
|
| |
|
|
|
| |
Sunday, September 24, 2006 |
|
| |
|
|
| |
I've recently had a chance to write some Ajax in a side project that I've been working on and through use of it I started thinking about how one could easily use it to do evil things. Doing evil things reminds me of security testing, and I haven't had an opportunity to test an application that uses Ajax but am pretty interested in finding some good exploits when I do get the chance. Before you get all "You had the chance to test it Brent, didn't you test YOUR Ajax code Brent? You're in Software QA and you don't test your own code?". Let me tell you that I did think about it being exploited, and if it did it wouldn't really matter in my situation. 
But while thinking about it, I did find the following article on Ajax Security Basics that would help a tester start thinking about how to attack the technology. After working with it, and reading the article, when I think about how dangerous this could be to an application I rank it up there with the danger of using <frames>. Are any of you testing Ajax applications? Do you have any advice or test cases you'd be willing to share? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, September 23, 2006 |
|
| |
|
|
| |
I've included the following IE 7 user-agent strings to my importable XML file for User Agent Switcher:
- MSIE 7 beta (Win XP SP2)
- MSIE 7 (Win XP SP2)
- MSIE 7 (Win 2003 Server)
- MSIE 7 (Win Vista)
- MSIE 7 (Windows-RSS 1.0)
Download it here. |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, September 19, 2006 |
|
| |
|
|
| |
What seemed to be out of the blue, NUnit started failing on me yesterday when I attempted to load my project. The cryptic error was:
System.IO.FileNotFoundException : File or assembly name nunit.core, or one of its dependencies, was not found.
Exception details are found at the bottom of the post. The problem? The web.config that went along with my assembly wasn't valid because I was missing a trailing quote:
< add key="blah" value="missingquote />
Ooops. Thanks for the uninformative error message NUnit. That's a half hour of my life I'll never get back....
System.IO.FileNotFoundException...
Server stack trace: at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Boolean isStringized, Evidence assemblySecurity, Boolean throwOnFileNotFound, Assembly locationHint, StackCrawlMark& stackMark) at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Boolean stringized, Evidence assemblySecurity, StackCrawlMark& stackMark) at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark) at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark) at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo) at System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes) at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes) at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(MethodBase mb, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes) at NUnit.Util.TestDomain.MakeRemoteTestRunner(AppDomain runnerDomain) at NUnit.Util.TestDomain.Load(String assemblyFileName, String testFixture) at NUnit.Util.TestLoader.LoadTest(String testName) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Sunday, September 17, 2006 |
|
| |
|
|
| |
On this blog you hear a lot of SWEA this, SWEA that... SWEA solves all my web page automation tasks, SWEA saves my ass, SWEA is cheap, without SWEA I couldn't test 90% of a new build of our UI in 10 minutes, SWEA takes 4 letters out of SWEAt, no SWEAt with SWEA, I get left with T, Time. Time to focus on complex functional tests, installers, performance, (insert more buzz-word test types here).
So about now you're thinking, SWEA Sure Would Enhance the Automation in my workplace. Yeah! YEAH! Now you're catching on...
So, not long ago AdventNet posted a nice little automation tool comparison chart, but they forgot to add SWEA. Wonder why? Probably because SWEA is $59.00 which blows all other tools out of the water in the price department. Not only that, SWEA holds its own in features too. That's pretty freakin' sweet since SWEA was create by one man, a Mr. Alex Furman man. One might think, "Hmm, I'm not sure if I should bank my automation investment on a tool created and supported by one dude". Let me tell you, and you must listen my automation tool shopping friend: Alex Furman is the man! I work with quite a few tools, I've worked with some of the tools that you'll see in the comparison chart (the one I'm leading up to) plus some others, and I have never received the support I've received from Alex. Alex gets shat done, he works hard, he is proud of, and smart about his product. For example, one day I'm like all IMing Alex: "Hey, it'd be nice if I could attach the SWEA designer to any already open Internet Explorer window", Alex is all "Sweet idea, my heroic QA engineer Brent Strange, I'll put that feature in tonight, it'll be a lot more fun than that near-impossible AJAX support I've been working on". Heh. Seriously the guy responds and makes it happen for me (thanks Alex). The tool has made my QA life easier.
Oh yeah, the purpose of this post...If you put it in the comparison list provided by AdventNet it really hangs with the big dogs (view a larger comparison of tools here):
|
Features |
Comparisons |
| |
SWEA |
QEngine WebTest |
WinRunner |
SilkTest |
Rational |
|
Cost / License |
$59
|
$799+ |
$8000 |
$6,495 plus $1,170 for Maintenance |
$2,900 - $5000 |
|
Platform & Browser Support |
|
Platform Support |
Windows |
Windows & Linux |
Windows |
Windows & UNIX |
Windows |
|
Browser Support |
IE |
IE, Mozilla & FireFox |
IE & Netscape |
IE & Netscape |
IE & Netscape |
|
Recording |
|
Floating menu's |
Yes |
Yes |
No |
? |
? |
|
Object Name Map |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Object Mode Recording in Windows Application |
No (only browser based UI) |
No (only browser based UI) |
Yes |
Yes |
Yes |
|
MouseDown Events |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Modal / Modaless Dialog |
Yes (Modal) |
Yes |
? |
? |
? |
|
Script Language |
.Net languages |
Jython |
TSL |
4Test |
SQABasic |
|
Extensible |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Checkpoint Libraries |
? |
Yes |
Yes |
Yes |
Yes |
|
PlayBack |
|
Play control (Fast/Normal Mode) |
Yes |
Yes |
Yes |
? |
? |
|
Interoperability |
Partial (Browser) |
Full Support (OS & Browser) |
Partial (Browser) |
Partial (Browser) |
Partial (Browser) |
|
Multi-Window Handling |
Yes |
Yes |
Limited |
Yes |
Yes |
|
Automated Regression |
Yes (NUnit) |
Yes |
Partial |
Yes |
Yes |
|
Play against different host without re-recording |
Yes |
Yes |
? |
? |
? |
|
Error Handling |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Validation |
|
Multiple Validation with expression support |
Requires NUnit |
Yes |
No |
No |
No |
|
Validation - Window |
Requires NUnit |
Yes |
Yes |
Yes |
Yes |
|
Validation - Text |
Requires NUnit |
Yes |
Yes |
Yes |
Yes |
|
Validation - Image |
Requires NUnit |
Yes |
Yes |
Yes |
Yes |
|
Validation - Table |
Requires NUnit |
Yes |
Yes |
Yes |
Yes |
|
Validation - Document |
Requires NUnit |
Yes |
Yes |
Yes |
Yes |
|
Validation - Page Response Time & Status |
No |
Yes |
No |
No |
? |
|
Validate & Save Window |
Yes |
No |
Yes |
Yes |
? |
|
Validate Clipboard Text |
No |
No |
No |
No |
? |
|
Validate & Synchronize Screen Rectangle |
No |
No |
Yes |
Yes |
? |
|
Validate - DB Data |
Requires NUnit |
Yes |
Yes |
Yes |
Yes |
|
Validate & Synchronize Text |
? |
No |
Yes |
No |
No |
| |
|
Data Driven Testing |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Portability |
Yes |
Yes |
? |
? |
? |
|
In Built support for Script Maintenance |
No |
CVS |
No* |
No* |
No* |
|
Parameterization |
? |
Yes |
Yes |
Yes |
Yes |
|
* - at extra cost |
|
Others |
|
Customizable |
Yes |
Yes |
No(separate tool reqd) |
Yes |
Yes |
|
Internationalization |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Detailed Reports |
No |
Yes |
Limited |
Yes |
Yes |
| |
| |
|
Application Support |
Web, HTML, DHTML, ASP, , JavaScript |
Web, HTML, DHTML, ASP, Java, JavaScript |
HTML, XML, JavaScript, Java, ActiveX |
HTML, XML, JavaScript, Java, ActiveX |
HTML, DHTML, Java, Visual Basic, Visual C++, Oracle Developer /2000, Delphi, SAP, PeopleSoft and Sybase Powerbuilder. |
|
Applet Testing |
No |
No |
Yes |
Yes |
Yes |
| |
|
? - Unknown |
How do I use SWEA? Check out the tutorial of my test framework with SWEA, NUnit and C#. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, September 16, 2006 |
|
| |
|
|
| |
SilkTest 2006 has been released... to customers; and in this release they have one baked feature:
Integration with Borland® StarTeam SilkTest 2006 supports integration with Borland's StarTeam 2005 that enables you to manage and share your SilkTest project files, test scripts, custom include files, and data files.
The SilkTest source control integration with StarTeam supports file check-in, check-out, get-latest-version, and other functions typical for source control systems.
also included in this release is the unbaked, beta release?? feature:
SilkTest TrueLog TrueLog is a powerful technology that simplifies root cause analysis of test case failures via visual verification. The results of test runs can be examined in Silk TrueLog Explorer. When an error occurs during a test run, Silk TrueLog Explorer enables you to easily locate the line in your 4Test script that generated the error so that the issue can be resolved.
Silk TrueLog Explorer for SilkTest 2006 is a beta release.
I can see the TrueLog feature being pretty helpful for troubleshooting post run. Read more info here.
SilkTest has a lot of competition now days and in comparison can be a tad spendy at $6500. Hey, did you know that the SWEA and NUnit automation solution will cost you a whopping $59.00? I've used both SilkTest and SWEA for web page testing and I prefer SWEA. Yes, SilkTest is capable of a lot more, but if you're looking for plain ol' web page automation make sure to give SWEA a test drive. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, September 13, 2006 |
|
| |
|
|
| |
Back in December I blogged about Chris Pederick's FireFox extension User Agent Switcher that does browser user agent spoofing. At the time I provided a small list of user agents that could be imported into the cool little extension. Since then I've modified and added quite a bit to that list. I'm sharing my new user agent list with you here. The new list now includes these browser OS combinations (thanks to Philip Forteza for the Linux versions):
*Internet Explorer* MSIE 7 Beta (Win XP) MSIE 7 Beta (Win Vista) MSIE 6 (Win XP) MSIE 5.5 (Win 2000) MSIE 5.5 (Win ME) MSIE 5.0 (Win 95) MSIE 4.01 (Win 95) MSIE 4.0 (Win NT) *FireFox* FireFox 2.0 Beta2 (XP) FireFox 1.5.0.6 (Fedora Core 5/Linux) FireFox 1.5.0.4 (Debian Linux) FireFox 1.5.0.3 (Mac OSX) FireFox 1.5.0.1 (Win Vista) FireFox 1.5 (Win XP) FireFox 1.4 (Win XP) FireFox 1.0.7 (Win XP) FireFox 1.0.6 (Win XP) FireFox 1.0.5 (SlackWare/Linux) FireFox 1.0.4 (FreeBSD) FireFox 1.0 (Win XP) FireFox 0.9.3 (Windows XP) *Opera* Opera 8.0 (Win 2000) Opera 7.6 (Server 2003) Opera 7.51 (Win XP) Opera 7.5 (Win XP) Opera 7.5 (Win ME) Opera 4 Opera 3 Opera 2 Opera 1 *Netscape* Netscape 8.1 (Win XP) Netscape 8.0.1 (Win XP) Netscape 7.2 (Win 2000) Netscape 7.1 (Win 98) Netscape 4.8 (Win XP) Netscape 4.76 (Win 98) Netscape 4.5 (Win 98) Netscape 4.05 (Win 95) Netscape 3.01 gold (Win 95) Netscape 2.02 (Win 95) *Safari* Safari 3.0 (v521) Safari 2.0 (v412) Safari 2.0 (v401) Safari 1.3 (v162) Safari 1.3 (v158) Safari 1.3 (v146) Safari 1.2 (v125.8; OSX 10.3.4) Safari 1.1 (v100.1; OSX 10.3.2) Safari 1.0 (v85) Safari 1.0 (v74 beta 2) Safari 1.0 (v73 beta 2) Safari 1.0 (v64 beta) Safari 1.0 (v51 update 1.0 beta) Safari 1.0 (v48 public beta) *AOL* AOL 9.0/MSIE 6.0 (Win XP) AOL 8.0/MSIE 6.0 (Win XP) AOL 7.0/MSIE 5.5 (Win 98) AOL 6.0/MSIE 5.5 (Win 98) AOL 5.0/MSIE 5.0 (Win 98) AOL 5.0 (OS X) AOL 5.0 (Mac PPC) AOL 4.0/MSIE 3.02 (Win 95) AOL 4.0/MSIE 4.01 (Win 95) AOL 4.0 (Mac PPC) AOL 4.0 (Mac 68k) AOL 4.0/MSIE 3.0 (Win 3.1) AOL 3.0/MSIE 3.02 (Win 95) AOL 3.0/MSIE 4.01 (Win 95) *Mozilla* Mozilla 1.7.8 (Linux) *Spiders/Bots* Googlebot 2.1 (New version) Msnbot 1.0 Msnbot 1.0 Beta (v0.11) Yahoo Slurp Ask Jeeves/Teoma |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, August 31, 2006 |
|
| |
|
|
| |
I've added a twist to the classic software development cartoon. The original creator forgot about QA...
 [click to enlarge]
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I pay a lot of attention to what brings people into QAInsight.net and I have to say I'm surprised, disappointed, and flabbergasted by what people are interested in...
I want people to be interested in QAInsight.net due to it's Quality Assurance and testing tool posts, and I've done my best to market it that way by doing things such as allowing my content to be blog farmed at TestingReflections.com so that the posts sit next to other popular QA peoples in the industry (Bret Pettichord, James Bach, etc). Doing this has helped bring in readers and traffic (which is great)! But what bugs me is that my shocklog entries are the traffic drivers for QAInsight.net!?
Check out how my post Six reasons why Robert Scoble is Mini-Microsoft caused a surge:

And how Death toll rises due to FireFox made a mountain out of a mole hill.

I don't get it... People would rather read my gossip and fiction over a QA related post? Hey now, I know, I know. Yes, QA can be boring. Yes, QA doesn't apply to everybody but gossip and fiction sure does.
I like to write both (fact and fiction) but the fiction is hard to swallow because I didn't create the site for that. What are your thoughts? Do you want more "Enquirer" type posts? Should I move those type of entries to a separate category? Should I not change a thing? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I've been testing Web Services with Parasoft's SOATest for over a year now and I've been pretty happy with it. I have only one complaint, but the complaint can't be resolved by any Web Service testing tool that I can find. My complaint is that I need a test tool that supports WSE 2.0 SCT (Secure Conversation Tokens). Philippe Cheng, a developer on my team, has created a work around for me by wrapping our Web Service requiring SCT with another Web Service that feeds it the SCT it needs.
Naturally, while trying to figure out how to solve my SCT issue I started paying closer attention to other tools and have noticed two promising tools:
1. AdventNet QEngine 2. SoapUI
I haven't installed QEngine yet but I did play around with SoapUI a couple of weeks ago and it was pretty shiny. Each of the applications seem to have cool little features that make me think "Ohhhh, that'd be cool if SOATest had that". I'll post my thoughts/comparisons on the 3 eventually, but I just wanted to throw them out there in case you are shopping for a Web Service testing tool.
Oh, and AdventNet has a feature comparison chart for the Web Service test tools QEngine, SOATest, SoapScope, and WebServiceTester. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I don't know about you but I'm always losing my copy-paste functionality between my Remote Desktop Connection and my desktop (always as in at least once a week). This is a pain in the ass from the testing perspective because I do a lot of copying and pasting. Over time I've discovered that the best way to repair this is to kill RDPClip.exe on the machine you've remoted into and then restart the thread:
- Open Task Manager, highlight RDPClip.exe and click the "End Process" button
- Click the "Applications" tab, click the "New Task" button, and type the text "RDPClip.exe"
This works for me 95% of the time. The other 5% of the time it won't and a reboot of the machine you've remoted into will guarantee the fix. I know, SUCK. But hey it's only 5%, and thats better than 95%.
Here's a forum where people claim the issue is UserDump.exe, but it never has been in my situtation. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Using Internet Explorer, how can you test and validate that your Web application works when sticky sessions and multiple Web servers? Here's how I do it:
While on call this weekend an issue arose where a user would get an error in the browser when their request was moved to different Web server in the farm. The user would authenticate against one Web server (establishing an online banking session and an aspnet session) but when the user made a 2nd request it was routed to a different Web server and that Web server was saying "Who the hell are you? I didn't give you that aspnet session!". and an error would be displayed to the user. This error/behavior was intermittent because the user will not always be directed to a secondary Web server (depending on load and/or load balancing configuration).
As a tester how can you recreate the issue every time when you are forced to use a domain name in the URL and using IPs in the URL isn't an option? It can be done by using the hosts file on the browser's machine (without a load balancer). Here is where the 2nd problem enters though: A hosts file change isn't always recognized by the browser while it is open. However, you can force the browser to recognize changes in the hosts file by closing and restarting the browser. But in our case we have established an online banking session (via logon) and we need to keep it so we can't close the browser. The trick...There is another way to force the browser to recognize the hosts file changes without closing it; here are the steps:
Step 1: Clear your browser cache and close all instances of the browser. If you don't, the page you are requesting may be in cache it will read it out of the cache or go to the IP that was set before the hosts file change.
Step 2: Add the IP/hostname entries to the hosts file. The second entry will be commented out (see the bottom of this blog post to find out where your hosts file is located). For example:
192.168.1.50 BigBank.com #192.168.1.51 BigBank.com
Step 3: Using IE, navigate to BigBank.com and logon (because of your hosts file entry, you will be hitting Web server 192.168.1.50)
Step 4: Change the entries in the host file to point to the 2nd Web server:
#192.168.1.50 BigBank.com 192.168.1.51 BigBank.com
Step 5: Open a command window and run the command: nbtstat –R (this purges and reloads the name cache)
Step 6: Wait 3 minutes for IE to consume the change. Don't ask me why but it refreshes at exactly 3 minutes.
Step 7: Conduct your next operation in IE (the request will be go to Web server 192.168.1.51)
...and that's how.
Hosts file locations for various Windows OS: Windows XP = C:\Windows\System32\Drivers\Etc Windows 2K = C:\Winnt\System32\Drivers\Etc Win 98\ME = C:\Windows |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, August 19, 2006 |
|
| |
|
|
| |
Coworker Scott discovered an up and coming alternative to Watir called WatiN. What is WatiN?
"Inspired by Watir, I started developing WatiN in December 2005 to make a similar kind of Web Application Testing possible for the .Net languages. Since then WatiN is grown to a feature rich and stable framework. It consists of about 50 classes, wrapping all major HTML elements. It can manipulate elements in the IE HTML window, and in modal and modeless HTML dialogs. It handles alert windows and supports a basic but extensible logging mechanism. A great deal of the code is covered by unit tests but there’s room for improvement in that area. WatiN is developed in C# and aims to bring you an easy way to automate tests with Internet Explorer."
Further details can be found at:
http://watin.sourceforge.net/ http://sourceforge.net/projects/watin/
As Scott said, this is something to keep your eye on. But since there is no recorder functionality (yet?) I will definately be sticking with SWEA. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A while back Microsoft declared Internet Explorer 7 to be referenced two different ways depending on what OS it was on. If on Vista it would have a trailing +.
Well, the people spoke up during the beta evaluation (they hated it), Microsoft listened, and now it's back to the simple "Internet Explorer 7”. Read more here.
If only Nintendo would listen to the people and rename the stupid Wii back to Revolution. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
How do you insert foreign language characters into a Web form textbox? For example, what if you have a localized site for Spanish and the text box that is supposed to accept characters áÁéÉíÍóÓúÚñÑüÜ«»`¿¡— but you don't have a Spanish keyboard. I've found and used three different techniques to obtain these types of characters so that I could put them into a Web form for testing.
- Find the character or character set on the Web, copy them and paste them into the textbox. Good references for character sets are: Unicode, official Unicode charts, Unicode transformation charts, HTML entities, ISO Latin-1, ASCII set and HEX values, Spanish punctuation.
- Use Microsoft Office (Word is easiest) to create the characters. If you know the Unicode value, you can type that value into the document (e.g. 2014) highlight it and press ALT+X. The number will then be converted to the character. This also works in reverse (convert the character back to the Unicode number, great for creating a regular expression using Unicode numbers).
- For ASCII characters, use ALT + the ASCII number on the numeric pad (e.g. ALT+0191 creates the ¿ character). You can do this directly in the browser/textbox.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, August 02, 2006 |
|
| |
|
|
| |
Can you spot the defect of the day?

Today's defect is brought to you by Reference.com |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, August 02, 2006 |
|
| |
|
|
| |
I habitually peruse the search queries report for QAInsight.net to see what keywords bring users to the site. Occasionaly the keywords aren't things that I've specifically talked about but are good ideas for future posts. A recent search phrase was "viewing javascript errors in IE 7". It's something I take for granted since I've been doing it for so long with IE 5-6, but there are peeps out there who want to know. So here is how to view javascript errors in Internet Explorer 7:
First off, with default IE7 settings, you just have to pay attention to the bottom-left corner of the browser. Keep your eyes peeled for the yellow yield icon:

Once you see the icon, double click it and a script error window will display itself:

Click the "Show Details" button and the script error window will expand showing you the loathed script error.
However, you don't always happen to see that little icon in the bottom-left corner but you can make sure you don't miss these script errors (really important as a tester) by enabling the Internet Options setting in IE (Tools > Internet Options > Advanced) labeled "Display a notification about every script error". This setting is not enabled by default.

There you have it. Simple, but obviously some don't know how simple. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Coworker Scott Hanselman and Rutger Smit have given WatirMaker an overhaul and renamed it WatirRecorder++. Read more and download it here.
At this time this appears to be the only recorder for Watir, there was a Watir WebRecorder but for some reason it has been deemed "unavailable until further notice".
If you just started looking into Web browser automation make sure and give SWEA, C#, and NUnit a try; I think you'll be more impressed with this solution if you're in a .NET environment. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
My coworker Alex Ginos sent a link the other day to an XSS (cross site scripting) cheat sheet at ha.ckers.org. This cheat sheet is amazing; it has a LOT of XSS examples and also lists the browsers that the attack is "supported" by. I thought my XSS attack list was pretty good until I saw this list. To say the least, I'll be adding a ton more XSS attacks to my current test case repository.
ha.ckers.org is also a blog with some really great posts about hacking and security. Another interesting post that I enjoyed was Attacking Applications Via XSS Proxies. Subscribe to this blog, these guys are freakin' smart.
|
|
| |
 |
|
| |
|
|
| |
|
|
| |
Jeff Attwood over at Coding Horror has managed to shrink a fully patched Windows XP Virtual PC down to 641 megabytes. He gives you full details here. Good stuff. Thanks Jeff!
|
|
| |
 |
|
| |
|
|
| |
|
|
| |
In the latest StickyMinds.com eLetter (Tool Look) Scott Barber talks about how he got into performance testing and gives some simple advice on how to select the appropriate performance testing tool for your application. Read the Tool Look article here. |
|
| |
 |
|
| |
|
|
| |
|
|
| |
I've been semi-quiet on the blogosphere lately due to the evenings being filled up with the season end of my boys' baseball and writing my first magazine article!
Yep! Too cool, I've been asked to submit an article to Better Software magazine for their Tool Look column. If all goes well you should see it later in the year. Wish me luck! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Borland sent out a pointer to another SQA paper, this time the paper is entitled Software Quality Management and gives an overview of:
- How to define application quality goals and metrics that match your objectives
- How to measure quality status and progress
- How to manage software quality to keep up with changing situations, emerging technologies and new regulatory requirements
- How to improve software development and incorporate quality into every step of the process
As always, the paper is written to lead up to the use of one of their tools; for this paper the tool is Borland SilkCentral Test Manager. I find their lead ins, which are usually more than 3/4 of the paper, are very well written and speak well to real problems we have with software development and quality assurance. It's a great informational read that can be downloaded here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Using keyboard shortcuts makes you a faster tester (well, at least it does me...). However remembering shortcuts for your favorite applications is not so easy. Leslie Franke over at http://lesliefranke.com/ has created a nice little cheat sheet of FireFox keyboard shortcuts and Tips/Tricks. It's available in HTML and PDF format and can be downloaded here, Get faster in FireFox, print it out and hang it on your cube wall! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The StarWest 2006 program has been announced and it looks great! Lots and lots of stuff with the same ol' and brand new speakers:
KEYNOTE PRESENTATIONS
How to Build Your Own Robot Army;Harry Robinson, Google, Inc.
Software Security Testing: It's Not Just for Functions Anymore; Gary McGraw, Cigital, Inc.
Dispelling Testing's Top Ten Illusions; Lloyd Roden, Grove Consultants
What Every Tester Needs to Know to Succeed in the Agile World Jean Tabaka, Rally Software Development
Say Yes-or Say No? What to Do When You're Faced with the Impossible; Johanna Rothman, Rothman Consulting Group, Inc.
Session-Based Exploratory Testing: A Large Project; Adventure Bliss, Captaris, Inc.
PRECONFERENCE TUTORIALS
Essential Test Management and Planning; Rick Craig, Software Quality Engineering
Introduction to Systematic Testing; Dale Perry, Software Quality Engineering
How to Break Software; Joe Basirico, Security Innovation, Inc.
Managing Test Outsourcing; Martin Pol, POLTEQ IT Services BV
Becoming an Influential Test Team Leader; Randall Rice, Rice Consulting Services Inc.
Key Test Design Techniques; Lee Copeland, Software Quality Engineering
Implementing a Test Automation Framework; Linda Hayes, Worksoft, Inc.
Agile Software Product Testing Using Fit and FitNesse; Rob Myers, Net Objectives
How to Build, Support, and Add Value to Your Test Team; Lloyd Roden, Grove Consultants
Microsoft Visual Studio 2005 Team System for Testers; Chris Menegay, Notion Solutions, Inc.
Performance Testing Secrets in Context; Scott Barber, PerfTestPlus, Inc.
Model-Based Testing: The Dynamic Answer to Test Automation; Harry Robinson, Google, Inc.
Measurement and Metrics for Test Managers; Rick Craig, Software Quality Engineering
How to Break Software Security; Aditya Kakrania, Security Innovation, Inc.
Just In Time Testing; Robert Sabourin, AmiBug.com, Inc.
Test Process Improvement; Martin Pol, POLTEQ IT Services BV
Establishing a Fully-Integrated Test Automation Architecture; Edward Kit, Software Development Technologies
Test Estimation Using Test Point Analysis; Ruud Teunissen, POLTEQ IT Services BV
Requirements Based Testing;Richard Bender, Bender RBT, Inc.
Behind Closed Doors: Secrets of Great Test Management;Johanna Rothman, Rothman Consulting Group, Inc., and Esther Derby, Esther Derby Associates, Inc.
Risk Based Testing; Julie Gardiner, QST Consultants Ltd.
CONCURRENT SESSIONS
TEST MANAGEMENT
The Nine "Forgettings" -Quantifying the Value of Your Testing to Management -Step Away From the Tests: Take a Quality Break -Management Networking -Skill Diversity: The Key to Building the Ideal Test Team -Building a Testing Factory -Keeping it Between the Ditches: A Dashboard to Guide Your Testing -Improving the Skills of Software Testers |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Today my wife sent me one of those "I'm American hear me roar" emails that was simply a picture of an American flag with text stating: Why the hell should I have to press '1' for ENGLISH?!
You're right dear wife, and whoever created the political statement over the top of a pixelated American flag. Why should you have to press 1 for English? But since the statement is politically charged by the powerful American flag I'm pretty sure the question is nothing but a derogatory statement rather than a jab at the real issue... You see, if you ask me, the reason you have to press "1 for English" is because of bad design and usability:
The way I see it is that we have two use cases when a system is designed for two languages and the majority is English:
1. English caller 2. Caller speaking other language (we'll use Spanish as an example)
Seems simple, in most cases the English speaking caller is going to be a higher percentage than the Spanish right? So why inconvenience the majority? That'd be like having all IE 6 users click an extra button to view content...Dumb. So why don't we just do something like the following:
You: Ring... Ring... Ring....
Big Corp: Hello, welcome to Big Corporation! Hola, recepción al Big Corporation! Presione el número uno para el español (translated, I think: Hello, welcome to Big Corp, press number one for Spanish)
You: Wait patiently for a second (note, no phone fumbling here!)
Big Corp: Press 2 to get yourself into a loop, press 3 if you want to talk to somebody (even though you can't).....
Makes sense doesn't it? I know nothing about phone systems but it can't be that terribly difficult in this day and age. Can it? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
What evil things could happen when you have lack of component integration testing? For example, when a team delivers A and B you naturally test A+B and then hopefully you test B+A. Sometimes it's not as easy as A and B though. Sometimes it's as complex as H & I & T & S. A little exploratory testing goes a long way if you're having trouble with the orthogonal array.

Thanks Matt for sending this to me. The image comes from AnthemAmerica.com. |
|
| |
 |
|
| |
|
|
| |
|
|
| |
Borland has released a free load testing white paper entitled "Choosing a Load Testing Strategy" to help market their product Borland SilkPerformer (formerly Segue). The paper is a good read and gets really interesting when they talk about home-grown testing applications, open source load-testing tools, testing with Mega-IDEs, Web only load testing tools, hosted load-testing services and of course Enterprise class load-testing solutions.
Download "Choosing a Load Testing Strategy" here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A while ago LifeHacker.com wrote about the screen capture utility ScreenGrab by Andy. ScreenGrab is an extension for FireFox that allows you to capture a FireFox browser screen and save it as a PNG file in 3 different ways:
- The entire FireFox window (same as the PC ALT+PrtScr)
- The entire content of the site (scrolling content)
- The content that is viewable in the FireFox window (ViewPort)
Andy says he is working on adding the following features:
SnagIt vs. ScreenGrab + Kleptomania
When making a choice on which to use for Web application testing here are some things to think about:
- SnagIt won't give you the OCR/text capture feature that Kleptomania has.
- ScreenGrab won't work in Internet Explorer.
- ScreenGrab doesn't have drawing tools.
For Web application testing ScreenGrab fills a hole in one of my favorite tools Kleptomania because it captures content that requires scrolling. Putting the two together is about the same price as SnagIt. Neither are magic bullets for Web application screen and text capturing. TechSmith, if you add OCR/text capture to SnagIt I'm sold. Until then I'm sticking with ScreenGrab and Kleptomania.
ScreenGrab 0.8 is free, download it here.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
How do you make sure that the Web Service you are testing complies with the Web Services Interoperability Organization standards? I use ParaSoft SOATest. It's really a no brainer because the tests are there by default when you create a project in SOATest (as seen in the image). The WS-I tests ensure that your Web Services are compliant with the WS-I Organization's Basic Profile version 1.1. When you look at the list of test assertions that SOATest conducts you can feel at ease that your service is definitely compliant. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
My coworker Scott Hanselman recently blogged about his use and experience with the tool Invirtus VM Optimizer. The tool worked well for Scott and his dynamic disk MS Virtual PC images so I looked at how it could improve my fixed disk images. The site didn't reveal anything on improvment for fixed disks so I emailed support at Invirtus to ask about it:
I’m trying to understand how your product would work with a MS VPC that is utilizing the “Fixed Disk” feature. Since the VPC size is fixed will Optimizer shrink it to the smallest size and leave the image unusable (since it won’t don’t dynamically grow)? Or will Optimizer allow me to specify a buffer beyond the optimized size to ensure the VPC doesn’t run out of space?
The reply was:
Optimizer will work with a fixed disk in that it will increase the available free space to the maximum available. But, you cannot shrink the disk itself.
While writing test cases, on the side I converted a fixed disk image to a dynamic disk to see if Optimizer could decrease the 6.3 GB size. The attempt resulted in a slightly LARGER VPC size (6.4 GB). After scratching my head for a while I then emailed support to ask why:
I used your tool with a MS VPC that was a dynamic disk of 6.3 GB. After running the tool the disk ended up being a little over 6.4 GB. The VPC image was VERY clean prior to running of the tool (fresh Server 2003 OS install, SQL 2000, installed two Web Services and a few web sites). Am I missing something or is the tool primarily used for MS VPC bloat that is caused over time VPC? Why did the size go up?
The reply was:
In VM Optimizer we include a tool called Freespace.exe. Freespace.exe goes sector by sector and cleans the whitespace. This means that every sector on your disk is touched and when that happens on a virtual disk the size of the disk expands. However, in a dynamically expanding scenario the size will reduce quite substantially and in your fixed disk scenario the disk will remain approx. the same or grow just slightly.
So, no special magic here for me and my situation. It makes sense; you can't squeeze blood out of a turnip. For performance reasons, I converted a 6.3 GB virtual disk image to a 10.1 GB fixed disk image but the caveat is that copying and network transfer a bit painful. I'm assuming that the 3.8 GB difference is free space. My test environment doesn't need this much free space, 1 GB would be enough. At this point I think the only way to get my fixed disk smaller is to specify the free space when converting from dynamic to virtual. Does anybody know a trick for this? Am I looking at a feature request?
Update 6/19: I contacted Ben the Virtual PC Guy to see if he had any tricks up his sleeve for downsizing the free space in a fixed disk and he responded with: "We do not provide a way to change the maximum size of a virtual hard disk today. If you want to do this you will need to create a new virtual hard disk - at your desired size - and then use a tool like Symantec Ghost to transfer the data to the new virtual hard disk." |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I just did an Internet search for "Software Quality Assurance for Dummies" and found nothing. I can hardly believe it! The luck is equal to finding a dot com domain name that isn't taken.
If you're looking to get into Software Quality Assurance, or are green in SQA look forward to the up and coming publication: Software Quality Assurance for Dummies by Brent Strange:

P.S. John Wiley & Sons, Inc. please contact me to get this underway. :) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Saphire In Steel has written a Ruby IDE for Visual Studio 2005 called Ruby In Steel. This definitely will give a big boost to all the Ruby/Watir browser automation going on right now.
Back at the beginning of 2006 when I was shopping for an automation solution, I gave Ruby and Watir whole-hearted try and was extremely frustrated that I was spending so much time debugging in a JavaScript like world. Can you say "Pain-in-the-ass" and "Inefficient"? Since then I've moved on to SWEA (SW Explorer Automation) and have been EXTREMELY happy debugging in Visual Studio.
For those of you working in the Ruby and Watir world you can download the beta version of Ruby In Steel here. If you want to see it in action you watch a debugging video demo here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Are you a blogger or blog reader? Are you a fan of syndication? Let me present the latest in geek t-shirts for RSS. I had this one on the back burner since I started this blog in December of 2005 and finally sat down to create it tonight. This master-piece is titled "Feed Me" (I won't be offended if you consider it a master-POS). The image below requires ShockWave-Flash. If you can't see it, just go to Zazzle.com where this little beauty resides. Do you hate black t-shirts or would rather a sweat-shirt or tank top? Zazzle has a huge product line-up that you can place this advertising gem on. Gem you say? Yes, this is THE official RSS icon to be recognized by a cajillion internet users by 2007. TRUST ME. Don't be a "wanna-be" by displaying your syndication spirit in 2008. Get this frickin' thing on your chest now!
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Whenever I question my browser type and version, or specific browser and system settings I always hit BrowserHawk.com to get ALL the exact details. Once you hit the home page just click on the "more" link in the header to get a full list of all your browser/system features and settings.

BrowserHawk.com comes in handy for real world development, test and release scenarios like:
- Determining your exact user-agent string when testing browser detection code
- Determining your exact user-agent string when spoofing browser user-agents
- Ensuring your browser version is correct when you are skeptical about running multiple instances of FireFox or Netscape on one machine
- Quickly determining your JavaScript version to help troubleshoot script errors
- Troubleshooting release/customer issues by getting all browser and system details by sending customers to BrowserHawk.com
It's quick, easy, and FREE. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
This week I spent time testing a new Web Service feature in our product IA that utilized SOAP headers. Testing started with scripting my typical functional, use, and boundary tests in SOATest and then wrapping up with my basic security tests (URL encoding, SQL Injection, Cross Site Scripting, etc). Before moving on I spent a bit of time perusing the Web for SOAP header security exploits to see if I could expand my security test suite for this particular feature. The search didn't yield anything significant but I was re-reminded in my search of a few great papers on Web Service and SOAP security:
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I got wind of the 2006 Pacific NW Software Quality Conference (PNSQC) today.
2006 Workshops are:
- Karl Wiegers: Writing Quality Requirements
- Cem Kaner: Developing Software Testing Courses for Your Staff
- Rex Black: Assessing Your Test Team Effectiveness, Efficiency, and More
- Michael Bolton: A Rapid Introduction to Rapid Testing
- Jean Tabaka: Scrum and the Art of Quality Maintenance
Keynotes are:
- Karl Wiegers: Cosmic Truths About Software Quality
- Andy Hunt: Maintaining Your Competitive Advantage: Strategies to Improve Cognition, and Learning
The conference is October 9-11 in Portland, Oregon. Sign up early and save some cash. Get more information here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Last week I spent a bit of time to better understand the different disk options that are available in Microsoft Virtual PC 2004. I was particularly interested in finding the best performance and the best option for having multiple environments that had subtle changes between them (OS and SQL Service Packs, and test app versions). Before I tell you my findings, let me point out a few simple facts about Virtual PC (from my experience):
- The "Fixed Disk" option is faster than a "Dynamic Disk". Dynamic grows the file which is slow but Fixed doesn't.
- Enabling the "Undo Disk" for any disk type will create a temporary Dynamic Disk that contains all the changes for that session. When you close the Virtual PC down you then have the option to merge the changes from your temporary disk back to the main Physical or Dynamic Disk. Undo disks are slow since the temporary disk is dynamic.
Remember these facts, its important going forward :)
The hope of Differencing Disks In my little mission, I first looked into the details of what a "Differencing Disk" was. In summary a Differencing Disk gives you the option of having a 2nd Dynamic Disk attached to a main Physical or Dynamic Disk. This 2nd Dynamic Disk holds only the differences from the main disk. This is the ticket I needed to have multiple environments that had subtle changes between them. An image from the VPC help file shows the power of this, the Windows 2000 disk represents the main disk while the others are Differencing Disks with different IE browsers installed:

I found that the disadvantages of a Differencing Disk are:
- The Differencing Disk size can grow larger than the main disks size over time so you don't really save space
- Differencing Disks are dynamic and can not be fixed, thus slower.
- Adding an Undo Disk to a Differencing Disk only adds to the slowness
Here is a step by step on how to create a Differencing Disk at Matt's blog.
Making an Undo Disk into a Differencing Disk After realizing the good and bad of Differencing Disk I found an article at Invertus.com that explained how to make an Undo Disk into a more efficient Differencing Disk. I tried this out and the file size stayed smaller but the VPC was still slow. Adding the Undo Disk only made slowness worse (about the same as a plain ol' Differencing Disk).
Fixed Disks Since Fixed Disks are fixed in size the pain of a dynamically resizing file is gone so this is the speediest option. The downfall to a Fixed Disk is that the VPC sizes are large, so if you have as many images as you saw in the picture above at about 10 GBs a piece then you can eat up drive space pretty quickly.
Conclusion When needing multiple environments if you want speed use a Fixed Disk. If you are worried about disk space use Matt's technique for making an Undo Disk into a Differencing Disk. If you want to keep an environment clean you can either use an Undo Disk and deal with the slowness or you can sacrifice disk space by instead keeping backup copies and copying over the dirty image when you are done with it (doubling your disk space usage). |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Recently Microsoft, Mozilla, and VeriSign have offered "bug bounties" to help squash critical defects before release. Brilliant I say! Using money to motivate testers during development is a win-win situation. Testers win since they can get some serious cash if they put their nose to the grind-stone and the software/company wins because:
- Defects that are found and fixed early are cheaper than post-release defects (post-release cost can be 100 times development cost, e.g $50 vs $5000).
- There will be less embarrassing critical and security defects found at post-release.
- Quality Assurance (ad-hoc) is marketed, which screams "We care about quality".
- The company only pays for severe defects but will still get a valuable set of less severe defects for free.
Are there hidden costs though? I can think of a few:
- The time and effort wading through crappy and duplicate defect reports.
- Larger scale efforts to manage the plethora of testers and defects.
The benefits obviously out-weigh the hidden costs. What other positive and negatives can you think of? Talk to me fellow engineers! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Today I sat down and started to configure my new test environments which are hosted on Microsoft Virtual PCs. I wanted to refresh myself on some of the advanced features and hit Google, Microsoft and MSDN in search of the VPC user documentation that I had found about a year ago and then proceeded to lose. Long story short, don't go looking on the Web for the official user manual for Microsoft Virtual PC 2004, it's under your nose. A MS kb article reminded me of the painful unobvious that I learned once before:
"In a default installation of Microsoft Virtual PC 2004, the documentation that is included with Virtual PC is located in the following folder on the hard disk of the host PC: Drive:\Program Files\Microsoft Virtual PC\Documentation"
Painfully unobvious because there are no shortcuts from Start menu to this documentation (which is where I started my search).
In my quest for documenation I ran into the following useful MS VPC 2004 links too:
The Official Microsoft Virtual PC 2004 site is here.
A MSDN VPC Blog is here.
VPC Overview Presentations are here.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A while back MSDN TV posted a great video titled "The Code Room: Breaking Into Vegas". If you have an extra half hour it's a cool, informational watch about security and hacking with some real world scenarios and examples. The acting is pathetic and cheesy but the actors are real life experts and geeks so I guess that's expected! Here is a summary from the site:
"In this episode of The Code Room watch the White Hats and Black Hats battle for the security of Las Vegas. Jessi Knapp and Microsoft Security Guru Joe Stagner narrate as the Hackers try to gain control of The Plaza's online money management system and our Security Team tries to stay one step ahead." |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Web site cookie poisoning came up twice in the last week while testing so I guess now is great time to talk about how to test the for the vulnerability of cookie poisoning. I'm not going to get into the details of how a cookie works but rather how to poison them. If you want details of how they work from a testing point of view read this respectable paper.
Web sites use cookies (a lot of them), cookies can be permanent (on disk) or temporary (in memory), and cookies contain variables; variables that the site cares about, and can be messed with or "poisoned" to get results that the Web site didn't intend to give you. Use the following test page as an example, The test pages are simple, if you have the right cookie content then you will receive a 50% discount; if the content isn't right then you will not receive the 50% discount. The first page sets the cookie with the content of "SpecialOffer=No" indicating that you are not eligible by default. The cookie setting code on this page is simple and looks like this:
<SCRIPT> document.cookie = "SpecialOffer=No"; </SCRIPT>
Now, if you click the link "Click here to see if you are eligible for 50% discount" you'll see that you are not eligible for the discount. The check on the 2nd page is pretty simple too and looks like this:
<SCRIPT> var pos = document.cookie.indexOf( "SpecialOffer=Yes" ); if( pos == -1 ) { document.write("I'm sorry you are NOT eligible for the 50% discount"); } else { document.write("You are eligible for the 50% discount"); } </SCRIPT>
In the above script I look for the value of "SpecialOffer=Yes" in the cookie content and then react accordingly. If I don't see "SpecialOffer=Yes" then you aren't eligible for the discount. Now, on to the fun stuff! How do you make yourself eligible for the discount? To do this we need to change the default cookie content value from "SpecialOffer=No" to "SpecialOffer=Yes". How does one change cookie values? There are quite a few ways but I'll share with you my 3 favorites:
- Add N Edit Cookies FireFox extension
- Paros Proxy
- Paste the following JavaScript in the URL bar to view the cookies:
javascript:alert(document.cookie.split(';').join('\n'))
and the following to modify it:
javascript:alert(window.c=function a(n,v,nv) {c=document.cookie;c=c.substring(c.indexOf(n) +n.length,c.length);c=c.substring(1,((c.indexOf(";")>-1) ? c.indexOf(";") : c.length));nc=unescape(c).replace (v,nv);document.cookie=n+"="+escape(nc);return unescape (document.cookie);});alert(c(prompt("cookie name:",""), prompt("replace this value:",""),prompt("with::","")));
How to poison cookies with Add N Edit Cookies
- Navigate to http://www.qainsight.net/examples/cookietest.htm in FireFox
- Click the cookie icon in your FireFox toolbar
- Find the cookie for www.QAInsight.net and double click it or highlight it and press the edit button
- Change the content form field from "No" to "Yes" (case sensitive)
- Go back to the browser and click the link "Click here to see if you are eligible for 50% discount"
- KaaaaPOW.... You now have the 50% discount! You're a freakin' evil, bad to the bone tester!
How to poison cookies with Paros Proxy Typically I wouldn't use Paros in this situation because the cookie is being set on the client side (you won't see this too much in the real world). The following example isn't what I consider cookie poisoning but more JavaScript manipulation. The following assumes you have cleared your cache:
- Turn on Paros and set you IE connection options to use the address of 127.0.0.1 with a port of 8080
- In Paros click the "Trap" tab and check the "Trap Request" and "Trap Response" checkboxes
- Navigate to http://www.qainsight.net/examples/cookietest.htm in IE
- Go back to Paros (Trap tab) and press the "continue" button until you see the following text in the bottom pane:
<SCRIPT> document.cookie = "SpecialOffer=No"; </SCRIPT>
- Change the "No" to "Yes" in the above line
- Click the "Continue" button.
- Go back to IE and click the link "Click here to see if you are eligible for 50% discount"
- Whoot! You now have the 50% discount! You're one sexy cool tester with a severity 1 defect that needs to be submitted.
There are situations where you will want to change the cookie value in the header (the top pane in the trap tab) on the response or the request, this is when you would use Paros over Add n Edit Cookies. Situations where you would need to manipulate the cookie before the response is rendered or before the request is sent due to the server or client side code manipulating the cookie.
How to poison cookies with JavaScript
- Navigate to http://www.qainsight.net/examples/cookietest.htm in IE
- To view the set cookie, type the following in the URL bar:
javascript:alert(document.cookie.split(';').join('\n'))
- You will see "SpecialOffer=No". Click Ok
- Copy and paste the following JavaScript in the browser URL bar:
javascript:alert(window.c=function a(n,v,nv) {c=document.cookie;c=c.substring(c.indexOf(n) +n.length,c.length);c= c.substring(1,((c.indexOf(";")>-1) ? c.indexOf(";") : c.length)); nc=unescape(c).replace(v,nv); document.cookie= n+"="+escape(nc);return unescape(document.cookie);}); alert(c(prompt("cookie name:",""), prompt("replace this value:",""), prompt("with::","")));
- Hit the enter key
- Click the Ok button at the JavaScript Alert
- Type the cookie name of SpecialOffer in the Alert box and click the Ok button
- At the "replace this value" script prompt type No and press the Ok button
- At the "with:" script prompt type Yes (case sensitive) and press the Ok button
- The next alert will show you the replaced cookie. You should see: SpecialOffer=Yes
- Click the Ok button
- In IE click the link "Click here to see if you are eligible for 50% discount"
- DingDingDingDing.... You're a winner! You now have the 50% discount! You're quite the bad-ass tester aren't you? You're like the wicked witch in Snow White but instead of poisoning apples you poison cookies.
And that's how I conduct cookie poisoning when testing. Not too awful tough eh? Oh...if I ever get confused about the state of cookies before and after poisoning I use HTTPWatch to get a better idea of what is going on. I can usually get the gist of it by looking through the cookie and header tabs.
When do you test for the cookie poisoning vulnerability you ask? Whenever there is a cookie being used! Is it a defect if you can manipulate the cookie? Not necessarily. They typically are defects when a cookie is being placed that impacts or restricts the site's behavior and you can exploit that feature. If you manipulate a cookie and it doesn't gain you anything or exploit a feature then it's not of much value, thus not a defect. But...it's important that you know what the cookie you are poisoning does, without knowing what the cookie does you may be poisoning something and may not be seeing that exploit. To prevent guess-work it's easiest if you work with your developer to understand what he/she is doing with cookies on the site so you can go straight for the kill.
Happy poisoning! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Dear faithful readers (the 4 of you, the other 395 hits a day are search engine hits for "Windows Vista keys" and "play Mrs. Pacman online"),
I'm back. The last 3 weeks have been crazy busy with work and home. I spent 2 weeks testing up at the Microsoft Scalability Labs, and after returning home I've spent the last week: trying to make it up to my wife for being gone 2 weeks, getting the garden ready for the season, getting the yard under control, going to my boys' baseball games, getting food poisoning from a local restaurant, putting Reedville Baseball back in order, and then finally... soaking in the fun-ness of our littlest one walking now (really cool and in the nick of time because crawling through wood chips at the baseball field equals slivers).
So yeah, I'm back but being baseball season its the busiest time of the year at our house (we have 2 boys playing). I'm going to try to stick to my goal of 3 posts per week (which I failed horribly in the last 3 weeks).
Wish me luck. :) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Google is asking for automated testing papers to be submitted for their Conference on Test Automation. Deadline is June 1st. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The other day while automating a test case for our Web application I found that SWEA was recognizing that an element existed on the page even though I couldn't see it. This wasn't good because that element was a client side error message for a form and nothing was being done with the form to throw the error. A closer look at the HTML revealed a <SPAN> tag with the style property visibility set to "hidden". It looked like this:
<span style='visibility:hidden' class='VAMErrorText' id='valInactiveDays'><span id='valInactiveDays_Txt'>Must enter a numeric value.</span>
A test case that actually caused the error to visually appear on the page resulted in the following change to the HTML:
<span style='visibility:visible class='VAMErrorText' id='valInactiveDays'><span id='valInactiveDays_Txt'>Must enter a numeric value.</span>
So, in the top example the element existed in SWEA's eyes because it existed on the page but it was "hidden". My problem to solve was how to make my test acknowledge that the error message wasn't really thrown and that it was still "hidden". At the time I figured it would be best to extract the HTML out of the SWEA control and search for the text "Visibility:hidden". My resolution looked like this:
|
case TestGoal.SuccessfulResponse: ((HtmlInputText)(myBrowser.Scene["txtInactiveDays"])).Value = txtValue; ((HtmlInputButton)(myBrowser.Scene["btnLoadReport"])).Click(); myBrowser.Scene.WaitForActive(30000); //Hidden elements can still be seen by SWEA so make sure it's hidden //Text we're searching for txtHidden = "VISIBILITY: hidden"; //Return a boolean for/when txtHidden is part the controls OuterHTML isHidden = ((HtmlContent)(myBrowser.Scene["HiddenVAMLbl"])) .OuterHtml.IndexOf(txtHidden) > -1; //Validate control is hidden Assert.IsTrue(isHidden==true); break; |
When talking to Alex after the fact, he reminded me that I could also pull out the Style information by doing the following:
|
((HtmlContent)(myBrowser.Scene["HiddenVAMLbl"])).Invoke ("Get_Style").ToString().IndexOf(txtHidden) > -1; |
A little less elegant but either way solves my problem. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
You can now get your Internet Explorer 6 and 7 add-ons through the new IE add-on web site IEAddOns.com. According to the IEBlog:
"Products on the site either work directly with Internet Explorer 6 or 7, or use the IE platform, and have to meet the CNET Software Submission Requirements and Adware and Spyware Policy before being posted. We also welcome users, editors and industry specialists to write and post reviews for each add-on, and report problem software."
A quick perusal of the initial list of add-ons sparked no interest for my QA mind. After about 2 minutes of looking around I realized that the new IE Developer Toolbar was not to be found on the site. Seems odd... I know it's in beta but that shouldn't keep it off the site! Maybe it didn't meet the "Software Submission Requirements"?
Once the word is out and the add-ons are submitted, this should be a nice little portal (hopefully as nice as the FireFox extensions site). |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Over the last 2 days I had the opportunity to remove the SQL 2000 database out from underneath our Web Service and replace it with SQL 2005. The team was hoping to see an instant gain in SQL performance but that's not what happened. Performance tests that put the SQL 2000 server at a comfy 69% CPU usage were now using 81% with SQL 2005. Bummer. Where's the magic Microsoft? Keep in mind we made ZERO changes to the Web Service or SProcs for the test.
We're not going to give up hope on gaining performance with SQL 2005, the move is just going to be slower for us now since we obviously need to uncover the magic and finding that magic is going to take some work. During this SQL upgrade test I learned a few interesting things that I suppose I should share with you...
- I couldn't successfully restore a SQL 2000 database backup to my database in SQL 2005. I had a few errors thrown at me but this is one that I documented: "Restore failed for Server 'TEST-SQL1'. (Microsoft.SqlServer.Smo), Additional information: System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing "TEST" database. (Microsoft.SqlServer.Smo)"
- The SQL2000 database couldn't be attached in SQL2005 and used successfully. For some reason, when I attached my 1 million+ entry database my largest table was empty?!
- Does attaching to a 2000 .MDF in 2005 migrate the data? According to a forum post by an engineer on the MS SQL 2005 development team, it does migrate the system tables but he says nothing about the custom tables. I couldn't find any other info on the web on how to migrate data other than using the attach feature as described by ASPFree.com. Microsoft has an upgrade advisor tool but it doesn't upgrade anything it just does analysis.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Sometimes I have a good little chuckle about some of the search queries that people land on my site with. Today's chuckle was about: "quality assurance standards for bingo paper". Think about that job...
I landed 3rd in the list from MSN with the relevant words of quality, assurance, paper, and standards, but NOT bingo. I'll have to work on finding a better way to get to the top of the list for those Bingo Paper QA Engineers. Maybe this post will do it since search results don't really return anything relevant to the query. Maybe the standard/job doesn't exist? Drop me a note if you're a Bingo Paper QA Engineer. I'd like to hear what a day in your position is like! |
|
| |
 |
|
| |
|
|
| |
|
|
| |
Is AJAX worth the effort? Looking at Eric Holton's unofficial test tells me there isn't much of performance advantage (With AJAX: 3.24 seconds; without AJAX: 3.36 seconds). There's not much detail about the test but it feels legit. |
|
| |
 |
|
| |
|
|
| |
|
|
| |
Over at Cedric's Weblog, Cedric has some thoughts on why Ruby on Rails won't become mainstream:
"So why do I think that Ruby on Rails will never cross the chasm?"
Cedric explains the following reasons:
- First of all, Ruby.
- Ruby on Rails itself.
- Still no credible IDE.
- Fanaticism.
- Crowd of a single mind.
- Enterprise capabilities and scalability unclear.
Read the full article here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
After 5 years of using the Rational ClearQuest fat-client and never being able to figure out the hotkey combination to search for a defect ID in the database I accidentally tripped over it yesterday. During an involuntary mashing of keys by my overactive fingers my weary QA eyes were greeted with the Find Record dialogue box. Fortunately the finger spasms weren't too out of control and I was able to quickly recreate the mistake! My years and years of going to the Edit Menu and clicking Find Record are over. When I had confirmed the hotkey I felt like Neo in The Matrix when the world turned to green bits and he was able to bend it to his will. I was finally one with ClearQuest. QA life will be so much easier now.
Over the years I can't tell you how many new ClearQuest users I've had to show the secret to finding a defect in the database via Edit > Find Record (not to be mistaken for finding a defect in the query result pane; CTRL+F; Edit > Find). Why did Rational have to make this so non-intuitive? Why can't Rational/IBM post ALL the shortcut keys somewhere?
Oh, the shortcut key combo? Seems simple now in retrospect:
01000011 01010100 01010010 01001100 00101011 01010011 01001000 01001001 01000110 01010100 00101011 01000110
(CTRL+SHIFT+F for those of you who aren't one with the ClearQuest Matrix) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Jeff Atwood over at CodingHorror posted the shortcut keys for moving your cursor around in a textbox. If you do a lot of Web browser testing these shortcuts can be a real time saver.
While you're brushing up on shortcuts, don't forget about my previous post on IE shortcut keys. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
On our site we have validation controls (VAM) that we use with our forms to force valid data input. If the input is invalid then an error/label will appear. VAM will validate the form when events that are associated with the form elements are fired. In simple terms it looks like this:
- Enter invalid text into textbox
- Remove focus from textbox (click away)
- Error/label displays
Today in my automated test using SWEA, I couldn't get the error/label to display since IE doesn't fire the event when the value is changed programmatically. In order to get SWEA to display the error I needed to use SWEA's Invoke() method to invoke the OnChange event. This is what it looked like:
|
case TestGoal.ClientSideError1: //Enter a value into the textbox ((HtmlInputText)(IE.Scene["Zip"])).Value = zip; //Force the OnChange Event using Invoke() ((HtmlInputText)(IE.Scene["Zip"])).Invoke("Method_OnChange"); myBrowser.Scene.WaitForActive(30000); //Validate the resulting error label Assert.AreEqual(message, ((HtmlContent)(IE.Scene["ClientMessage1"])).InnerHtml, "Incorrect message"); break; | Alex helped me through this issue and told me that he would work on making SWEA cleverer by adding automatic event handling. Thanks for your help Alex! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I love watching developers whine and squirm when you put in defects about something being off by x pixels. Here I am, just doing my job, comparing a Web site layout against a specification. Spec says table should be 500px wide, table on site is 495px. Sounds like a defect to me. Here is the conversation that occurs on the phone shortly after I submit the "pixel" defect:
Ring. Ring. Ring...
Brent: QA! We put the K in Kuality! This is Brent. Developer: Hey I just saw that defect you put in. Brent: The one about SQL injection? Developer: No, the one about the table being 5 pixels off. Brent: Oh, that one. Yeah, 5 pixels Developer: Are you freakin' kiddin' me? Brent: Yeah I'm kiddin' you. It's the same joke as the other 20 defects I put in against you today but just worded a bit differently. Developer: Alriiiiight? Brent: The spec says 500px the table is 495px Developer: Well, I can't get it to be 500px due to the 1st column being managed by percentage. Brent: I'm just following the specification. Either it needs to be fixed or the specification needs to be modified. Developer: What are you freakin' bored up there or something? Why are you looking at this stuff? Brent: Bored? How can I be bored? I put 10 severity 1, 24 severity 2, 46 severity 3 defects against you in the last 3 days....Cuz it's a requirement. Developer: You're killin' me! Brent: So that means you're going to fix it? Developer: (long pause)..Yeah. What are you using, a friggin' pixel ruler or something? Brent: Yep. Developer:Uhm, Oh... (long silence). Alright thanks. Brent: No problem.
And that's pretty much how well pixel related defects are received.
For a few years now I've been using a free tool called Pixel Ruler. It allows me to look at pixel lengths and placement in a browser or anything on my desktop. It's pretty handy when you're trying to measure Website layout and wading through code doesn't quickly yield the numbers you're looking for.
Today I looked around to see what else was out there and ran into Ruler and the MeasureIt FireFox extension. Here is my take on the three pixel rulers:
Ruler: It's easy to use, it has opacity so you can see what you're measuring if you place the ruler over the top of your item to be measured. Measuring width and height is as simple as placing your top-left corner where you want to start the measurement and then dragging the right and bottom edges to where you want the measurement to end.

Pixel Ruler: Pixel Ruler is easy to use, it doesn't have opacity so you can't overlap the item you are measuring. If you want to measure height versus width you have to flip the ruler (opposed to dragging ruler edges in Ruler).

MeasureIt: First off, since it's a FireFox extension you can only measure pixels in FireFox. This isn't very helpful for measuring things in IE or for that matter, anything on the desktop. Secondly, you have to drag a marquee around the object you want to measure. I had a really hard time doing this on my laptop thumb-pad and my test Google image of 80 pixels took me 6 tries to get the 80px measurement. I didn't like this tool at all.

I'm switching to Ruler. It's seems easier than Pixel Ruler by a smidge. What free tool do you use to measure pixels?
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
The up and coming Better Software Conference & EXPO has quite a few new topics in their pre-conference tutorials this year. Finally, something new! I was getting sick of looking at the same stuff OVER and OVER again. Here is a list of the new tutorials:
- Scrum: Project Management for Agile Software Development Jean Tabaka, Rally Software Development Corporation
- Fearless Change: Patterns for Introducing New Ideas Linda Rising, Independent Consultant
- Becoming a Trusted Advisor to Senior Management Lloyd Roden, Grove Consultants
- Test Automation for Agile Development, Linda Hayes, Worksoft, Inc.
- Agile Retrospectives: A Team Leader's Guide Esther Derby, Esther Derby Associates, Inc
- Just Enough Metrics: Instant-On Methods for Benchmarking, Quality, and More Michael Mah, QSM Associates
- Behind Closed Doors: Secrets of Great Management Johanna Rothman, Rothman Consulting Group, Inc., and Esther Derby, Esther Derby Associates, Inc.
- Agile Estimating and Planning, Mike Cohn, Mountain Goat Software
- Establishing a CMMI-Compliant Measurement Program Steven Lett, The David Consulting Group
- FIT for Requirements Collaboration, James Shore, Titanium I.T.
- Finding Ambiguities in Requirements, Richard Bender, Bender RBT
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, April 05, 2006 |
|
| |
|
|
| |
Mary Jo Riley from Zif Davis has written an interesting article in the latest eWeek about the delay of Windows Vista due to quality. The delay is not the interesting part (that's old news now), but what peaked my interest was that Microsoft has a pledged to re-engineer software development with an internal project named Software Quality Metrics or SQM.
There's not much info on the details of what SQM is but sources say that it is capable of reporting quality of service and usage, real-time feedback on the impact of UI changes, and aggregating quality data into cubes and data warehouses that can be manipulated.
Microsoft is keeping this on the down-low at the moment, so we'll have to be patient to see what SQM is really capable of. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Microsoft has made their Virtual Server software free. It'll be interesting to watch VMWare and Virtual Server battle. Any of us who have used virtual machine software know that performance can be really annoying. Has anybody seen any good performance comparisons? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Alex's latest addition to SWEA is the ability to do NUnit test generation using his SWEA TestDriver. The SWEA TestDriver gives you the ability to run SWEA script files (*.hsc) as NUnit tests.
Integrating with NUnit is REALLY simple now. All you have to do is record your test using the SWEA Designer and then click the "Generate Unit Test Code" icon. When you click the icon a SWEA project, script, and C# file are generated for you. After SWEA does the generation, you can then easily add the C# file to a Visual Studio Project, add the SWEA TestDriver and NUnit as references, and then run the test in NUnit. Adding new/additional tests can be done through the SWEA Designer (which will add them to the already created .hsc file).
After working through the fact that SWEA requires the latest version of Nunit (2.2.7) I was able to have a simple test created and running in NUnit in just a few minutes. Really cool! Download the SWExplorerAutomation V1.7.8.2 (with NUnit test generation) here. Download my sample Visual Studio project here. Download the latest version of NUnit here.
The power of automating functional testing with NUnit as a test harness is growing. It's really cool and very productive when developers and QA can use the same tools to test (Developers can write there unit tests for NUnit and QA can tack on their automated functional tests by using SWEA). Here's another cool thing to think about, instead of attaching screenshots and writing meticulous steps to reproduce in your defect you can attach your SWEA *.hsc and *.htp file for the developer to re-create the issue... GoogleNUnit_updated.zip (98.26 KB) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, March 29, 2006 |
|
| |
|
|
| |
Dion Hinchcliffe wrote an interesting article about Ruby on Rails here. Between the article, and the embedded links the following quotes bug the crap out of me:
- Ruby on rails is: "a stack that contains components for most Web applications."
Most. Heh. Wow, that's really gonna suck when a team is fully invested/committed to Ruby on Rails and they come up with a need for something that's not in the "stack". Now, not only does the team need to figure out how to use the new/needed technology but they must also figure out how to integrate the technology into the Ruby on Rails stack. Fun! More work in a project with doesn't have enough hours already.
- Ruby makes: "what most people do most of the time extremely easy"
Most...Heh. Ditto
- "37signals not only built their 5 world-class online applications purely with Ruby on Rails, but they support almost 400,000 users on just 13 servers."
How vague is that? 400,000 what? Concurrent users with sessions? Doing what? Do you mean 400,000 enrolled users in the database? That's a sad, "world-class" hardware hog (13 servers). Let me see here, the development is faster with Ruby on Rails (saving money) but they bought 10 more servers than the typical 400,000 enrolled user database needs.
When I put it all together in my head my summary is this: Ruby on Rails is like Ebonics for developers.
Hey, have you heard about the new language taking Web 2.1 by storm? Oh yeah, by storm! It's called LAZY. What's really cool about LAZY is that you don't have to learn Ruby or JavaScript to use AJAX. The LAZY framework wraps Ruby, which wraps JavaScript which makes your AJAX programming a no-brainer. A wrapper, for a wrapper. Truly LAZY!
Ruby on Rails may be easier for development of most Web applications (a quoted 80% by David Heinemeier Hannson) but seriously, the same thing can be done with existing languages. Yes, Ruby on Rails/Ebonics has come to market faster than the other languages and because of that the other languages will be forced to get Web 2.0 savvy quickly. But Ruby on Rails has a lot of work to do on their "stack". Take .NET for example, let's say it takes Microsoft 2 years to Ebonicize so that you can do things like program AJAX quickly and easily. Once those Ebonics are in place you have access to a deep and extensive set of libraries that are baked. Ruby on Rails will building their "stack" for many years to come. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
We have a new QAInsigh.net content contributor today! Friend and fellow QA Engineer Rohit Mathur writes:
I was going through Scott Hanselman’s blog and he mentions (in his Ultimate Tool list) the RegEx tool RegexDesigner.NET by Chris Sells.
I found the tool very useful trying to evaluate the RegEx used in our Corillian online banking implementations. In our implementations the list of regular expressions are contained in a .config file.
You can extract ‘the Date’ RegEx out of the .config file:
<add key="Date" value="^([0]?[1-9]|[1][0-2])[/-]([0]?[1-9]|[1|2]\d|[3][0|1])[/-](\d{4})$"/>
and then, using the RegexDesigner tool, you can test the Regular Expression to see what format/characters are allowed/disallowed:

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
My coworker Milind Pandit sent me the following link the other day:
http://www.giveusallyourmoney.com/
It appears that phishers have resorted to honesty by just simply telling you truth about what they want from you. Pure genius!
I'm not sure if this is real or not because when I put in a Visa card number I get the following error AND success message:
Warning: fopen(/var/guaym/creditcards.txt): failed to open stream: No such file or directory in /var/www/giveusallyourmoney.com/taketheirmoney.php on line 9 error taking your money.
Thank you, Brent Strange ,for giving us all your money!
No, I wasn't stupid enough to put in my Visa card number... I used my wife's instead. Okay, okay, I didn't use hers either. Give me a little credit. You can create test credit card numbers on your own using MOD 10. How do I know this? No, I'm not an evil hacker. I once was part of a payments solution group at Intel (TranSync) and I had to test various card types. Graham King has a great little article on credit card test number generation here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Our good ol' Mr. Alex Furman continues to add features and fixes to SWEA. SWEA is now up to version 1.7.7.1. Here is a list of his recent changes:
V1.7.7.1 (published 03-26-2006) Improvement: Added script recording for Multi-select list boxes. Improvement: Improved scene identification for pages with script and frames. Fixed: Various small bug fixes.
V1.7.6.1 (published 03-18-2006) Improvement: Added Create Control/Record Control sequence. After creation the control will be focused in the project view and the control editor will be activated to allow script recording. Improvement: Added IE restart button/menu. Improvement: Save of a new script will pre-fill the script file name using the current project file name. Improvement: Added Invoke tab for all controls to record Set/Get/Method/Script calls. Improvement: Added support for Multi-Monitor systems. Improvement: Added Drag&Drop support to the Script Recorder View. Fixed: Various small bug fixes. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
 |
|
 |
| |
|
|
| |
WET (Watir Extension Toolkit) is an add-on to the Watir Framework to provide some enhanced features and functions. I haven't used WET myself since I've invested in SWEA instead, but the WET extension definitely offers some nice testing additions. Here is the description of WET from the WET site:
WET sits on top of Watir. WET classes inherit from Watir and therefore adds features without removing support for any of the existing feature. The marquee of the enhanced features is the availability of support for the XML Object repository. The XML Object repository, is a way of representing objects on a DOM page in a XML based hierarchy. Besides the Object Repository WET offers many other features like:
- Object identification using multiple parameters
- Improved result logging
- Checkpoints
- Reliable handling of Popup dialogs
- Rudimentary datatable support
- Control of test execution using test definitions
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Microsoft's up and coming InfoCard technology seems pretty cool. What is InfoCard? I can't sum it up better than Microsoft:
"InfoCard" is the code name for a WinFX component that provides the consistent user experience required by the identity metasystem. It is specifically hardened against tampering and spoofing to protect the end user's digital identities and maintain end-user control.
InfoCard will be supported from the browser which leads me to the question: How am I going to automate InfoCard when my site uses it for authentication?
If you haven't seen InfoCard work then you probably are wondering what the big deal is. Well, what appears to be the big deal to me is that InfoCard exists in a different "space" than the Window's desktop. What I mean by "space" is that InfoCard loads and then the desktop along with all Windows applications are grayed out (like when you shut down Windows XP). I'm pretty sure your current browser automation tool is not going to know what to do with this when the browser calls InfoCard for Website authentication (e.g. click a button on the Web page that says something like "Logon using InfoCard").
I'm sure we'll find a way to automate this little gem but it may require a little work and re-factoring of your automation tool. I'm kind of concerned with the statement of "It is specifically hardened against tampering and spoofing". I'm worried that this really means: "Impossible to automate". You might want to ask your automation tool vendor what their plan is for support of InfoCard.
Ahh, the power of Microsoft BETA software! As a QA Engineer you should not only be test driving, you should also be thinking about compatibility and integration with the software you are currently testing to avoid possible issues in the future.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
When testing dynamic pages using SWEA the IsOptional property must be used. If the property is set to true it allows the Scene to be validated without that control being part of it.
The other day I automated a page that had 3 dynamic levels to it. In other words, when control 1 was present, control 2 and 3 were not; when 2 was present, 1 and 3 were not; when 3 was present, 1 and 2 were not. In order to successfully automate the page I had to toggle the IsOptional property on the fly. In the past I've used IsOptional as it was defined during my recording and present in my SWEA htp file, but I never had to modify the property in the middle of a test so that the Scene could successfully load. This is how I did it:
|
//Input a friendly name and submit the form ((HtmlInputText)(myBrowser.Scene["FriendlyName"])).Value = userID; ((HtmlInputButton)(myBrowser.Scene["FriendlyName"])).Click(); //Set the IsOptional property to false for the new control //that appears on the postback and the previous controls //that are no longer present to true ((HtmlAnchor)(myBrowser.Scene["lnkViewUserDetails"])).IsOptional=false; ((HtmlInputText)(myBrowser.Scene["FriendlyName"])).IsOptional=true ((HtmlInputButton)(myBrowser.Scene["FriendlyName"])).IsOptional=true //Wait for the Scene to load myBrowser.Scene.WaitForActive(30000); //For some reason if I don't run the RunIdentifcation() method //before I click the link a chained COM exception occurs. // So here I run the method myBrowser.ExplorerManager.RunIdentification(); //Now I can click the link ((HtmlAnchor)(myBrowser.Scene["lnkViewUserDetails"])).Click(); //Now the link is no longer part of the page so I set IsOptional //to true before I do anything with the new controls ((HtmlAnchor)(myBrowser.Scene["lnkViewUserDetails"])).IsOptional=true; myBrowser.ExplorerManager.RunIdentification(); | |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Recently a corrupt SilkPerformer uninstall kept me from re-installing due to the Segue Launcher Service still being present. I've never had to uninstall a Windows Service before, but there is a first time for everything. Perusing through the options that the MMC provided me, I saw no clear-cut way to uninstall the problematic service. I had to resort to Googling for it which yielded the following article from WinGuides. Their suggested fix worked well for me, on Server 2003; I was able to successfully uninstall the service. The magic is this:
- Stop the service
- Open the registry and navigate to:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services]
- Delete the appropriate subkey
|
|
| |
 |
|
| |
|
|
| |
|
|
| |

A little birdie sent me the cross site scripting attack today. I love it.
Note: no harm was actually done to the site with this attack, it only defaced the attacker's view. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, March 15, 2006 |
|
| |
|
|
| |
Scott Hanselman recently posted a great Podcast titled "Functional Testing Tools Roundup" which focuses on practical tools for functional Web testing. In the Podcast he talks about the technical aspects, benefits, and downfalls of the following tools:
If you are looking for a tool to test Web applications (UI not SOA) this Podcast is for you.
Take a second and look at the list above. Notice that the list is pretty much composed of open source, free, and/or ultra cheap tools. The demand for cheap and smart Web application UI testing tools is high and organizations are starting to push away from the big dogs like Segue and Mercury (i.e. Corillian pretty much uses Ruby/Watir and SWEA/C# for automating UI testing now). This is an awesome, awesome movement if you ask me. There are a lot of different types of solutions out there now and most are cleaner, smaller, less complex and targeted toward a specific crowd. If you spend the time reviewing the different tools you are most likely going to come up with a solution that will fit your need and will save you a lot of money in the long run with things such as tool cost, learning curves and training (take SWEA and me for example).
In the spirit of beatin' down the big dog, a great paper was recently submitted by Babu M. Narayanan to StickyMinds that outlines the benefits of Open-Source Test Automation (OSTA) in the industry. This is must read if you are skeptical about going with an open-source tool.
Man, I love this stuff! It's exciting to see so many people and great apps out there making testing easier and faster. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I love playing around with the DOM and DHTML. I'm old school like that... Don't make fun of me, you recently started poking around with AJAX which makes you no better than me! :)
I find it REALLY cool to be able to manipulate Web pages from the browser URL bar using JavaScript and the DOM. In the past I posted about displaying the site's cookies by simply clicking a Internet Explorer Favorites link that contained JavaScript to display the cookies. Now days, we have cool tools such as the IE Developer Tool Bar, FireFox Web Developer extension, and Site Inspector which all report the same data to you via the same method (DOM and DHTML).
Here at Corillian, we have a test case for every form textbox to check that it has a defined maxlength.. We test for this to help with usability and most importantly to provide the first line of defense in form input. Sometimes something as simple as checking for textbox maxlength is not worth opening a tool and digging through it's data, but on the other hand digging through the HTML can suck too. How often do you find yourself not wanting to do either, but instead count the characters as you type them into the textbox to figure out what that maxlength is? Stop it, stop it, stop it! Stop wasting time! You can do this with JavaScript from the URL bar in the browser. For example, post the Javascript below into the URL bar of your browser and hit the enter key:
javascript:var x=document.getElementsByTagName('input');myVals='';for (var i=0;i<x.length;i++){z=x[i].getAttribute('type');if(z=='text' || z=='password')myVals=myVals+'ID attribute: '+x.item(i).id+'\n'+'Name attribute: '+x.item(i).name+'\n'+'Maxlength: '+x[i].getAttribute('maxlength')+('\n\n')};alert(myVals)
Bam! Nice eh? This script dumps the maxlength for each HTML input tag that has a type attribute equal to text or password to a JavaScript alert. Since some sites use the attribute of name and some use id I dump both to help you figure out what textbox the maxlength applies to.
Add the script above to your Favorites by right clicking this link and selecting "Add to Favorites" in IE or "Bookmark this link" in FireFox. If you add it to your Links toolbar (IE) then it's only a click away on each page where you need to see the maxlength of textboxes. Look at you now, you one click tester! Happy testing.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Perusing through the latest MSDN Magazine today, I saw an article about another HTTP/HTTPS analysis tool called IEWatch. Tonight I've installed the tool and compared the features of IEWatch against my old favorite HTTPWatch (which I previously posted about here). With a brief run through of all the features I found a few cool points and features that HTTPWatch doesn't have:
- Price. IEWatch is $89 (HTTPWatch is $249)
- HTML Analysis
- Grouping of all the links, images, scripts, and forms on the page. Clicking of the individual items gives details in the Explorer bar as well as highlights the object in the actual Web page.
- Show HTML object in code. Each object can be right clicked on and the actual HTML code for that HTML object will be shown.
- HTML spotlight: Click on HTML objects in the actual page to view the code for that object.
Although these are pretty cool features I wouldn't switch from HTTPWatch. The reason being is that IEWatch is lacking key QA testing features that HTTPWatch has. These are important features that help with my Web application testing. The biggest items that stick out are the easy viewing of:
- Cookies
- Cache
- Query string
- Post data
- Content stream
If all you care about is viewing the HTTP headers and getting a WSYWIG view of a page then IEWatch is for you. If you want to see more details of the HTTP/HTTPS traffic and find all the defects that I describe in my prior post, then in my humble opinion I feel that HTTPWatch is a better fit. Who am I kidding? I'm not humble. Just pay a little more and get more with HTTPWatch. HTTPWatch simply wins the throw-down. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
With new features and bug fixes in the tool WatirNUt, Co-worker Dustin continues to improve the ease of automating Web application using Ruby, Watir, and NUnit. Dustin writes in his latest blog entry:
"This version has several bug fixes but also includes Visual Studio support. WatirNUt provides Visual Studio support for your NUnit assembly, by generating a project file (.csproj) that contains your watir artifacts, as well as all other compiled resources. This is very useful for debugging, especially if you use the TestDriven.Net Visual Studio add-in to run NUnit tests. The project can also be used as a starting point to integrate your non-web contextual NUnit tests with your watir tests."
Download the new WatirNUt installer here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A while back I wrote about the Netscape product archive which proves to be helpful when you get an old and odd browser test request. FireFox used to make their browser archive easy to find back in the day when their list of browser versions was small. The other day I needed to revert from 1.5 back to 1.0.7 to do some regression testing on Intelligent Authentication. I couldn't find the archived versions from the menus and links on the FireFox.com site. Google searches eventually unearthed the "magic" link that pointed to the curb that the old versions had been kicked to. Going through the search and discover motions I found a few other valuable links that I bookmarked too. Here are all the links:
FireFox download archive: http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/
FireFox release list: http://www.mozilla.com/firefox/releases/
Unofficial change log archive: http://www.squarefree.com/burningedge/releases/
Also, did you know that you can install multiple versions of FireFox on the same machine without any big issues (much like the old Netscape). You can do this by just installing into separate directories. While testing, keep in mind that the installations share the same cache. The only issue that I encountered was that when I had 1.5 installed and then installed 1.0, 1.0 overwrites all the 1.5 desktop and start menu icons with 1.0 icons even though the options are unselected in the installer. Double checking the version number through the Help menu ensures that you are testing in the version that you intend to (sometimes this can get confusing if you don't manage and separate the installs very well). I've been doing this with Netscape versions for years now and have never been burned; FireFox smells the same way (I found issues in 1.5 that weren't in 1.0, indicating the installs are truly independent). I currently have the following browsers installed on my test machine and do not experience conflicts while doing browser compatibility testing:
- Internet Explorer 6
- FireFox 1.0.7
- FireFox 1.5
- Netscape 4.79
- Netscape 6.0
- Netscape 7.2
- Netscape 8.0
- Opera 8.5
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Do you ever wonder what may be inside that asp.net viewstate? As a tester don't you think you should? It's a good thing to wonder about if you care about security. It's possible that the viewstate could contain sensitive user information that could be compromised in a man in the middle attack. For example: A user can input a credit card number into a textbox which would be passed to the next page via the viewstate. Not good... The viewstate is not encrypted by default its just simple Base64 encoding which can easily decoded with cool little tools like ViewState Decoder made by Fritz Onion. The viewstate is found in the page source and can easily found by searching for the text "ViewState". The search will lead you to a value that looks like this:
<input type="hidden" name="__VIEWSTATE" value="dDwxNDg5OTk5MzM7Oz7DblWpxMjE3ATl4Jx621QnCmJ2VQ==" />
If you take the value and paste it into the Frit's ViewState Decoder you can make it human readable:

Let's say you find an issue with sensitive data being passed in the viewstate; the fix is to make the viewstate tamper-proof and encrypt it. The following is an excerpt from Microsoft on how to do that:
| Tamper-Proofing
A hashcode will not secure the actual data within the ViewState field, but it will greatly reduce the likelihood of someone tampering with ViewState to try to spoof your application, that is, posting back values that your application would normally prevent a user from inputting.
You can instruct ASP.NET to append a hashcode to the ViewState field by setting the EnableViewStateMAC attribute: <%@Page EnableViewStateMAC=true %>
EnableViewStateMAC can be set at the page or application level. Upon postback, ASP.NET will generate a hashcode for the ViewState data and compare it to the hashcode store in the posted value. If they don't match, the ViewState data will be discarded and the controls will revert to their original settings.
By default, ASP.NET generates the ViewState hashcode using the SHA1 algorithm. Alternatively, you can select the MD5 algorithm by setting <machineKey> in the machine.config file as follows:
<machineKey validation="MD5" />
Encryption
You can use encryption to protect the actual data values within the ViewState field. First, you must set EnableViewStatMAC="true" , as above. Then, set the machineKey validation type to 3DES . This instructs ASP.NET to encrypt the ViewState value using the Triple DES symmetric encryption algorithm. <machineKey validation="3DES" /> |
You can get more details on viewstate in this article from Microsoft. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
While testing Web applications I naturally find myself constantly messing with IIS. Stopping, starting, clearing logs, etc. As with most applications, it can be so much quicker and easier to do things from the command line. Recently while performance testing I was constantly needing to Stop and start IIS as well as recycle the application pool. Here are those commands for Server 2003:
To stop the web server:
net stop w3svc
To start the Web server:
net stop w3svc
To stop and start the Web server:
iisreset
To recycle the application pool:
iisapp /p <PID> /r
iisapp /a <App_Pool_ID> /r
If you're not sure what the PID or App_Pool_ID is then just use the command iisapp with no switches to print the list. |
|
| |
 |
|
| |
|
|
|
| |
Saturday, February 25, 2006 |
|
| |
|
|
| |
Are you developing or testing Web applications? If so, I'm pretty sure you've needed a way to look at the HTTP or HTTPS traffic flowing back forth between your Web browser and Server. Have I got the tool for you... For a couple of years now I've been using HTTPWatch (from Simtec) to peek into that HTTP world, on the fly, from Internet Explorer. HTTPWatch runs from within Internet Explorer's Explorer Bar putting it right at your finger tips while you surf, and for Web application testing it can't get any better than when the test tool is built into IE. HTTPWatch allows you to monitor and peruse:
- Headers, Cookies and URLs
- HTTP method (GET, POST, etc...)
- Time taken to complete a request
- Size of downloaded page, image or file
- HTTP status codes or error codes if the request failed
- Parameters sent in a query strings and POSTs
- Network operations required, such as DNS lookup or socket connects
- Whether the content was read from the browser cache or downloaded from the server
- HTML content (rendered)
- HTML stream (un-rendered/raw)
You say: "Okay...Wow Brent, I can look at HTTP traffic, what's the big deal? How can this tool help with my testing?" Given the above feature list, you can and I do, find defects like:
- 404s (small images, hidden pages in frames)
- Unnecessary 302 redirects
- Unnecessary page usage
- Unnecessary page reloads
- Necessary or unnecessary page and image caching
- Confidential information in cookies
- Confidential information in forms
- Use of form queries instead of posts
- Improper use of HTML encoding (header)
As a Quality Assurance engineer testing Web sites this tool is valuable, easy to use, clean, and reliable. With that said, nothing is ever good enough for this QA engineer, I really would like to see the following enhancements:
- Put it in a FireFox extension too
- Provide proxy capability where a user can modify the content stream for sends or receives (I'd throw away my favorite proxy tool Paros for this capability)
That aside, the tool does its intended job perfectly and I highly recommend it. You can download the "Basic Edition" for free but it only allows you to use it against a few, popular sites. If you intend to use it for testing you'll need to buy the "Professional Edition" at $249 for a single user license. The prices get better with larger license packages. $249 for a testing tool of this caliber is cheap. Don't cheat yourself with less powerful tools like ieHttpHeaders! Get HTTPWatch and GITt-R-DONE.
Update 3/01/2006: Simon at Simtec told me that my suggested enhancments are on their HTTPWatch "To Do" list. Cool! It's nice to know that Simtec is a company that listens to their customers needs.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, February 22, 2006 |
|
| |
|
|
| |
The IA team is wrapping up our first round of performance and scalability testing for Intelligent Authentication 1.1 here at Corillian and I've got to tell you this thing performs! In the past I've seen hints and rants on the Internet about .NET Web Services performance being slow which made me weary of what I was going up against for performance testing. I've got to tell you that .NET Web Services flat out SCREAM! What is "flat out SCREAM"? I'm talking about response times that are one-tenth of a second on a loaded web server (CPU at 70%) .. and a little over two-tenths of a second when the CPU averages 98% (about ready to tip over and catch fire). Getting there was a bit of a challenge but we're there. Whew! I think we all learned a lot. I learned some pretty technical and confusing stuff along the way. Two big things taught and learned: Threading and Web Service performance counters. Here are a list of BIG hurdles and how we got over them:
1st hurdle At about 80 method requests per second the Web Server started returning 503 errors to SilkPerformer. Method requests were receiving the error:
"[HttpException (0x80004005): Server Too Busy] System.Web.HttpRuntime.RejectRequestInternal(HttpWorkerRequest wr) +148"
1st hurdle fix Tune the Machine.config file to the Microsoft performance recommendation for Web Services: Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications Understand what it all means with: Chapter 17 - Tuning .NET Application Performance
2nd hurdle At about 115 method requests per second the Web Server started returning 503 errors to SilkPerformer. Method requests were AGAIN receiving the error:
"[HttpException (0x80004005): Server Too Busy] System.Web.HttpRuntime.RejectRequestInternal(HttpWorkerRequest wr) +148"
But this time we things were a bit different. The Machine.config settings were set to recommended values and the actual number of threads were maxed out too (maxWorkerThreads and maxIOThreads were both set to the limit 100). I asked the Corillian Scalability team if they had ever seen such a thing and low and behold they had. Turns out that when they did the Voyager 70,000 concurrent users test at the Microsoft Scalability Lab a couple years ago they ran into the same issue.
2nd hurdle fix According to our friends at Microsoft (an MS Engineer in the scalability lab) you need to change the Machine.config default value for appRequestQueueLimit from 100 to 5000. Bam! Issue fixed. We moved on. The setting is probably a little overkill, but the actual setting for you will vary depending on your hardware. Five thousand will nearly guarantee that this setting won't be your bottleneck anymore.
3rd hurdle The Web Severs were only processing 150 method requests per second no matter how much load we put on them. We had a bottleneck somewhere but couldn't seem to find it. Adding various counters revealed that the ASP.NET request queue was pretty "spikey" and sometimes constantly around 100. The more load we put on the higher the queue and the higher the response time. In retrospect this was counter was my obvious clue but I just didn't know enough at the time.
3rd hurdle fix The fix ended up being a thread limit we had set in our Web Service. The thread limit to write to our Auditlog in SQL was set to 5. Bumping this up solved the issue. Twenty-five ended up being the perfect number for our hardware. Pouring over Microsoft's performance recommendations several times and trying different Machine.config settings with no avail left me staring at the following picture only to walk through the application flow myself several times before making the conclusion/guess that the bottleneck had to be the actual Web Service. Monitoring a custom counter in our Web Service yielded the huge pooling of request to write to our log (due to the limited threads). Hitting the pooling threshold in our app caused the requests to start backing out into the ASP.NET request queue. Makes sense now (hindsight is 20/20). Here is that helpful image:

Counters I used the most for Web Service performance testing: For the most part Microsoft's performance recommendations point you to all the right counters. There are quite a few, but I used the following for the most part:
To monitor my SQL 2000 Database Server:
| PhysicalDisk\Avg. Disk Queue Length |
| Processor\% Processor Time |
| Memory\Committed Bytes |
| Network\Bytes Received/sec |
| Network\Bytes Sent/sec |
To monitor my Web Server that was hosting the Web Service:
| ASP.NET\Requests Queued |
| Processor\% Processor Time |
| Web Service\Total Method Requests/sec |
| Memory\Committed Bytes |
| Network\Bytes Received/sec |
| Network\Bytes Sent/sec |
When the tests weren't going so well I pretty much added all the counters that you can find in the performance recommendation links I provided above. This obviously helped with troubleshooting. Also, what was helpful to the IA team was the SQL performance tuning book: Microsoft SQL Server 2000 Performance Optimization and Tuning Handbook by Ken England.
What's next? Well, we're out of hardware here at Corillian so we'll be heading up to the Microsoft Scalability Labs in about a month to really push the limits for both IA and Voyager on their GIA-HUGEY hardware. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Monday, February 20, 2006 |
|
| |
|
|
| |
Alex the creator of SWExplorerAutomation (SWEA) has recently released a new version: V1.7.4.1
The new version contains the following changes:
"Feature: Added page|frame script calls. Example: control.Invoke("Script___doPostBack(\"ControlName\", \"ValueChanged:TestValue\")")"
"Improvement: Improved support for pages with invalid characters."
I recently upgraded from 1.6 to 1.7 and noticed that Alex is now charging $59.00 per copy and has a volume discount of $29.50 for 3 or more copies. It's about time! Alex has worked hard on creating and supporting this app so he deserves to make a few bucks off of us. Besides that, $59 is dirt cheap. It's worth every cent. Don't worry, if you just want to give it a test drive you can still download a non-commercial shareware version. |
|
| |
 |
|
| |
|
|
|
| |
Sunday, February 19, 2006 |
|
| |
|
|
| |
This post is a continuation of the previous posts: Automating Web UI testing with SWEA, C#, & NUnit (part 1 & part2).
In this 3rd and final post I'll show you how to take the C# output from SWEA (discussed in part 2), build a test framework around it, and run those tests using NUnit. The framework promotes usability, consistency, and prevents code duplication. NUnit will extend that framework and also opens the door to putting tests into automated build processes. The tutorial will describe the contents of the example Visual Studio 2003 project found here. The project uses the Google.com page to conduct a search, verify the search results, and click the results link. Again, my purpose here is to discuss how to create a test framework around SWEA and conduct tests using NUnit; I won't be getting into the SWEA API specifics.
Dividing Test Activities When recording any kind of scripts the output is always redundant if you end up navigating through a sequence of pages to get to your destination page. Over the course of several tests you'll have redundant code doing the exact same thing just to get to your testing point. When something changes on the page you end up updating the change in several places. To avoid this redundancy, what has worked well for me with both SilkTest and SWEA, is to take that output scripts and divide that into 4 sections: Tests, Common, Navigate, Conduct. I divide this by giving each section its own class. In VS it looks like this:

Now, with separate classes, I can take the auto-genearted SWEA C# code and divide it amongst them. At a high level the separate classes are used to do the following:
Navigate The Navigate class contains methods that navigate to page that the test will occur.
Conduct The Conduct class contains methods that conduct the actual test and verify the result.
Tests The Tests class is the where the NUnit test cases reside. Inside of Tests I setup SWEA, Setup and Teardown the browser, and use NUnit to wrap the Navigate and Conduct calls.
Common The Common class contains definitions and methods that are used by all classes (browser definition, user setup, random string generators, etc).
Now that I've covered the 10,000 foot view, let's dive into the details.
Tests class detail As mentioned above the Tests class provides our test calls done with NUnit. By integrating with NUnit we have our [TestFixture], [TearDown] and [Test] attributes.
To start with, the main part of the TestFixture is the method openBrowser. This method loads the defined SWEA project and settings from the the config file. The purpose of the If statement is not evident in my simple example, but it provides the option to work between multiple SWEA projects (multiple sites) when called from the [Test] attribute. Following the If statement is SWEA browser definitions and the actual opening of the browser along with navigating to the initial URL:
public static void openBrowser(Browser.site site) { string projDir = ""; string url = ""; if (site == Browser.site.Google) { projDir = ConfigurationSettings.AppSettings[PROJECT_DIR]; if(projDir == null) { projDir = ".\\Google.htp"; } url = ConfigurationSettings.AppSettings[URL]; if(url == null) { url = "http://www.Google.com/"; } }
myBrowser = new Browser(); myBrowser.ExplorerManager = new ExplorerManager(); myBrowser.ExplorerManager.Connect(-1,ProcessWindowStyle.Normal); myBrowser.ExplorerManager.LoadProject(projDir); myBrowser.ExplorerManager.Navigate(url); myBrowser.ExplorerManager.DialogActivated += new SWExplorerAutomation.Client.DialogActivatedEventHandler (Google.Tests.GoogleTestAutomation.explorerManager_DialogActivated); myBrowser.ExplorerManager.DialogDeactivated += new SWExplorerAutomation.Client.DialogDeactivatedEventHandler (Google.Tests.GoogleTestAutomation.explorerManager_DialogDeactivated); myBrowser.ExplorerManager.Error += new SWExplorerAutomation.Client.ServerErrorEventHandler (Google.Tests.GoogleTestAutomation.explorerManager_Error); }
|
The heart of Tests is the actual tests. Tests that open the browser, navigate to the page where the test will be conducted, and conduct the actual test case. In the example you'll see the browser open to Google.com, navigate to the images page, navigate back to the home page, and then conduct a search:
[Test] public void A_SearchQAInsight() { //Open browser and load defined site openBrowser(Browser.site.Google); //Navigate to the "Images" section of the site Navigate_Google.Images(myBrowser); //Navigate to the "Home" section of the site Navigate_Google.Home(myBrowser); //Conduct the test case; sort pictures and validate 2nd link Conduct_Google.Search(myBrowser, "QAInsight", Conduct_Google.TestGoal.Search); } |
Closing the browser after each test is handled by the TearDown attribute and in the example has one simple method closeBrowser that does just that:
[TearDown] public void closeBrowser() { //Close browser myBrowser.ExplorerManager.DisconnectAndClose(); }
|
Navigate class detail As mentioned, the Navigate class provides methods that navigate to page where the test will occur. It is best to have a method to get to each page, typically my navigate methods follow the site navigation pretty closely. In other words, I usually have a method for every menu and submenu item that the site has. Using SWEA Designer, the navigation will need to be recorded in every Scene, giving the power to navigate to the next test case instead of restarting from the base/home page. In the project example you'll see this in the SWEA htp file when you load in SWEA Designer (notice the same "Nav_" HTMLAnchors in Scene_GoogleHome and Scene_GoogleImages):

The methods in the Navigate class are simple and at a high level do:
- Navigate to the page (often times requires multiple clicks)
- Waits for the Scene to load. This important because when you Conduct a test case right after navigation you need the page to be fully loaded.
|
public class Navigate_Google { public static void Home(Browser myBrowser) { ((HtmlAnchor)(myBrowser.Scene["Nav_Web"])).Click(); //Define Scene myBrowser.Scene = myBrowser.ExplorerManager["Scene_GoogleHome"]; //Wait for Scene to load (all control properties that have propert set isOptional=false) myBrowser.Scene.WaitForActive(30000); } }
|
Conduct class detail The Conduct class contains methods that conduct the actual test and then validates the results. Typically tests will require some sort of input that I want to control (i.e. logon name, search term). The provided project has an input property for the Search method as an example for this. The string searchTerm is the actual term that will be fed into the Google.com search textbox. To promote method reuse I have the 3rd property TestGoal to conduct slightly different tests on the page but allow me to use the same method. The Search method in the below example contains a switch statement that acts depending on the TestGoal definition. Notice two tests in the Tests class that call the same Search method but use two different TestGoals . One goal clicks the "Google Search" button and the other clicks the "Feeling Lucky" button which has a different result. Once the test is conducted (as far as clicking, submitting forms, etc.), I need to verify the result. For this I use NUnit Asserts, or if you choose you can have the SWEA Scene validate the defined contents by waiting for the resulting Scene to load (this will only work if the controls that you intend to validate have the isOptional property set to false). Both ways have upsides and downsides. Asserts can get into finer detail verification (i.e. textbox values) and allows you to fail a validation without stopping the test. Validating with SWEA Scenes keeps the code slim because you only need to wait for the Scene to load, but the downside to that is if the Scene load fails then the test stops with a SWEA error (I imagine this could be worked around if you really wanted to avoid it). The Conduct class is found below:
public class Conduct_Google { public enum TestGoal{Search, LuckySearch};
public static void Search(Browser myBrowser, string searchTerm, TestGoal testGoal) { //Define and wait for the Scene myBrowser.Scene = myBrowser.ExplorerManager["Scene_GoogleHome"]; myBrowser.Scene.WaitForActive(30000); //Input the string into the textbox and click the Google Search button ((HtmlInputText)(myBrowser.Scene["textbox_search"])).Value = searchTerm; //Avoid creating overloaded methods by utilizing a TestGoal parameter switch (testGoal) { case TestGoal.Search: ((HtmlInputButton)(myBrowser.Scene["btnSearch"])).Click(); //Define the current/expected scene myBrowser.Scene = myBrowser.ExplorerManager["Scene_GoogleResults"]; //Wait for the Scene to load myBrowser.Scene.WaitForActive(30000); //Validate the QAInsight link is at the top of the list. //We need to manually validate because the property isOptional=TRUE //and the Scene load won't validate it. I set this to TRUE to prevent //the Scene from the throwing an error because the control/link //is not found. Instead I choose to to do an Assert and send out a //friendlier message instead. If the control/link is not at the top //of the list the test fails & I just send a message back the NUnit console. Assert.IsTrue( ((HtmlAnchor)(myBrowser.Scene["HtmlAnchor_QAInsight"])).IsActive(),"Your Website is not at the top anymore!"); //Click the link ((HtmlAnchor)(myBrowser.Scene["HtmlAnchor_QAInsight"])).Click(); myBrowser.Scene = myBrowser.ExplorerManager["Scene_QAInsight"]; //Wait for Scene to load myBrowser.Scene.WaitForActive(30000); //((HtmlAnchor)(myBrowser.Scene["lnkAdsense"])).Click(); break;
case TestGoal.LuckySearch: ((HtmlInputButton)(myBrowser.Scene["btnFeelingLucky"])).Click(); myBrowser.Scene = myBrowser.ExplorerManager["Scene_QAInsight"]; myBrowser.Scene.WaitForActive(30000); //((HtmlAnchor)(myBrowser.Scene["lnkAdsense"])).Click(); break; } } |
Common class detail The Common class contains definitions and methods that are used by all classes. In the example I define the browser ExplorerManager and Scene so that they may be used by all classes (Tests, Navigate, and Conduct):
public class Browser { private SWExplorerAutomation.Client.ExplorerManager _explorerManager; private SWExplorerAutomation.Client.Scene _scene; public enum site {Google, QAInsight}
public SWExplorerAutomation.Client.ExplorerManager ExplorerManager { get { return _explorerManager; } set { _explorerManager = value; } } public SWExplorerAutomation.Client.Scene Scene { get { return _scene; } set { _scene = value; } } } |
Running the tests with NUnit So... there are the guts of my test framework using NUnit, C#, and SWEA. Now all I need to do is to run the tests using NUnit. You'll notice that the project output is an EXE (GoogleTests.exe). I chose an EXE over a DLL so that I could have the option to run the tests from the command line (the command line interface is not provided in the example). A command line allows me to interface with the test harness and drive the Web browser from other test tools (SOATest for example). Once the EXE is created we simply point NUnit towards it and let 'er rip! Man, I can't tell you how gratifying it is to set back in your chair with your feet on your desk watching that browser go a hundred miles an hour testing your site...

It gets even cooler...Integegration with NUnit also gives us the power to integrate the tests into the build process (i.e. NAnt). But, I'll save the explanation of that for another day.
Conclusion There you have it. Not too terribly difficult. I'm a rookie programmer and I pulled it off, so you can too (okay, when I got stuck my co-worker Matt helped me work through the issues). But by starting with the example project you should be able avoid the hurdles I hit. Once you have your framework built and you're familiar with the SWEA API you'll find that you won't use the script generation of the SWEA Designer; SWEA designer will simply be the tool to record the Scenes/HTML objects (output to the htp file). Once you get to that point things are gravy. Get on the gravy train! Get your site/browser testing automated with SWEA, C# and NUnit. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, February 15, 2006 |
|
| |
|
|
| |
Coworker Dustin Woodhouse has released his utility WatirNUt to the outside world and is anxious to get everybody to use it. What is WatirNUt?
"WatirNUt is a utility that creates a portable, testable NUnit binary wrapper around watir test scripts and supporting files. This binary can easily be executed in NAnt's <nunit2> task, with aggregated results displayed in your web dashboard."
A while back, when WatirNUt was still in development, Dustin helped me get my Watir tests running in NUnit with his utility. In a recent blog post I failed to mention how I magically got my Ruby/Watir scripts to run in NUnit. That magic was WatirNUt.
If you're writing tests using Ruby and Watir give WatirNUt a whirl and get those tests integrated into your build process. |
|
| |
 |
|
| |
|
|
|
| |
Sunday, February 12, 2006 |
|
| |
|
|
| |
Calling all testers! StickyMinds.com has released a beta version of their new site. To tickle your testing bone they've issued a beta testing challenge with prizes! The prize..."US members will receive a StickyMinds.com t-shirt and all non-US members will receive a digital subscription to Better Software magazine."
I know what you're thinking. "A t-shirt for each defect I submit, I could outfit all the homeless people in downtown Portland with a brand spankin' new StickyMinds.com t-shirt". Not so fast my eccentric tester, wipe that drool from you lower lip. StickyMinds says: "Only one prize per person will be awarded regardless of the number of bugs submitted." |
|
| |
 |
|
| |
|
|
|
| |
Saturday, February 11, 2006 |
|
| |
|
|
| |
Recently I've been confused at why my Timer count differed from my Transaction count in recent SilkPerformer test results. Having a second reference to compare SilkPerformer numbers against I had settled on the Timer count being the correct number to report as results but I still felt uneasy because I didn't know why this was occurring. I finally sat down today and figured out why the numbers differed. Take a look at the following table of Transaction counts and Timer counts:

Notice that the tables are nearly identical but the transaction AnswerChallenge is significantly higher in the Transaction count table making the overall number higher/different (759476 vs. 258285 ). Seems odd, but after thinking through my script and transaction flow I finally figured out why AnswerChallenge varies between counters. Before I explain look at my actual user transactions declaration (user flow):
transactions InitTestCase : begin; InitUserAndIP : 1; AuthenticateUser: 1; ThinkTimeTrxn : 1; AnswerChallenge: 1; //only runs if Challenge is issued |
and then my the code for my AnswerChallenge transaction:
transaction AnswerChallenge begin if (isChallenged = "Challenge") OR (isForceChallenge="ForceChallengeResponse") then WebHeaderAdd("SOAPAction", " http://www.blah"); MeasureStart("AnswerChallenge"); WebPagePost(sPage, "<?xml version=\"1.0\" encoding=\"utf-8\"?>" "<soap:Envelope xmlns:soap=\"http://blah">" "<soap:Body>" "</soap:Body>" "</soap:Envelope>", 0, "text/xml; charset=utf-8); MeasureStop("AnswerChallenge"); end; end AnswerChallenge; |
Notice that after the begin statement I check for the presence of two flags:
if (isChallenged = "Challenge") OR (isForceChallenge = "ForceChallengeResponse")
If the strings match the variable then the transaction CONTENTS will run, if they don't the CONTENTS won't run. Notice that inside of the if statement I have my timer (MeasureStart("AnswerChallenge");). AHH! Bingo... Do you see it? The transaction: AnswerChallenge is ALWAYS called due to the user transactions definition, but the CONTENTS of the transaction won't be executed if the if statement is false. Thus, the transaction count ALWAYS grows regardless of the If statement results. If the if statement ends up being TRUE then the Timer count will go up (and this is the counter I care about).
See the visual difference with a TryScript:

From a programming point of view the behavior is obvious (with hind-sight). When perusing SilkPerformer reports.. not so obvious. Moral of the story: If you care about the count of transactions actually being sent over the wire, and you decide to run a transaction based on the result of another transaction, make sure to look at your Timer counts not your Transaction counts. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, February 09, 2006 |
|
| |
|
|
| |
The Internet Explorer team posted a blog entry on the new Internet Explorer 7 shortcut keys. It's obvious they've put a lot of focus on making tabs easier to use (which is cool). If you're anything like me, you're in a Web browser nearly all day (most the time testing) and the quickest way to get around is with shortcut keys. As a gift to you my dear reader, I've compiled all the shortcut keys I could find for the various versions of Internet Explorer:
Internet Explorer 7 shortcut keys:
Tabs shortcut keys:
| To do the following |
Press this |
| Open links in a new tab in the background |
Ctrl+Click |
| Open links in a new tab in the foreground |
Ctrl+Shift+Click |
| Open a new tab in the foreground |
Ctrl+T |
| Switch between tabs |
Ctrl+Tab / Ctrl+Shift+Tab |
| Close current tab (or current window when there are no open tabs) |
Ctrl+W |
| Open a new tab in the foreground from the address bar |
Alt+Enter |
| Switch to the n'th tab |
Ctrl+n (n can be 1-8) |
| Switch to the last tab |
Ctrl+9 |
| Close other tabs |
Ctrl+Alt+F4 |
| Open quick tabs |
Ctrl+Q |
Zoom shortcut keys:
| To do the following |
Press this |
| Increase zoom (+ 10%) |
Ctrl+(+) |
| Decrease zoom (-10%) |
Ctrl+(-) |
| Original size (100% zoom)* |
Ctrl+0 |
Search shortcut keys:
| To do the following |
Press this |
| Go to the Toolbar Search Box |
Ctrl+E |
| Open your search query in a new tab |
Alt+Enter |
| Bring down the search provider menu |
Ctrl+Down Arrow |
Favorites Center shortcut keys:
| To do the following |
Press this |
| Open Favorites Center to your favorites |
Ctrl+I |
| Open Favorites Center to your history |
Ctrl+H |
| Open Favorites Center to your feeds |
Ctrl+J |
Even with all these cool keyboard hotkeys we've introduced a few helpful shortcuts for mouse users as well.
| To do the following with a mouse |
Press this |
| Open a link in a background tab |
Middle mouse button |
| Close a tab |
Middle mouse button on the tab |
| Open a new tab |
Double click on empty tab band space |
| Zoom the page in/out 10% |
Ctrl+Mouse wheel Up/Down |
Internet Explorer 5.5 and 6.0 shortcut keys:
To view and explore Web pages with shortcut keys:
| To do the following |
Press this |
| Open your favorites in a folder window |
Shift+Click on the "Organize Favorites" menu item |
| Change the text size |
Ctrl+Mouse wheel Up/Down |
| In the History or Favorites boxes, open multiple folders |
CTRL+click
|
| Open the History box |
CTRL+H |
| Open the Favorites box |
CTRL+I |
| Open the Search box |
CTRL+E |
| Activate a selected link |
ENTER |
|
Print the current page or active frame |
CTRL+P |
| Save the current page |
CTRL+S |
| Close the current window |
CTRL+W |
| Open a new window |
CTRL+N |
| Go to a new location |
CTRL+O or CTRL+L |
| Display Internet Explorer Help or to display context Help about an item in a dialog box |
F1 |
| Toggle between full-screen and other views in the browser |
F11 |
| Move forward through the items on a Web page, the Address box, or the Links box |
TAB |
| Move through the items on a Web page, the Address box, or the Links box |
SHIFT+TAB |
| Go to your Home page |
ALT+HOME |
| Go to the next page |
ALT+RIGHT ARROW |
| Go to the previous page |
ALT+LEFT ARROW or BACKSPACE |
| Display a shortcut menu for a link |
SHIFT+F10 |
| Move forward between frames |
CTRL+TAB or F6 |
| Move back between frames |
SHIFT+CTRL+TAB |
| Scroll toward the beginning of a document |
UP ARROW |
| Scroll toward the end of a document |
DOWN ARROW |
Scroll toward the beginning of a document in larger increments |
PAGE UP |
| Scroll toward the end of a document in larger increments |
PAGE DOWN |
| Move to the beginning of a document |
HOME |
| Move to the end of a document |
END |
| Find on this page |
CTRL+F |
| Refresh the current Web page |
F5 or CTRL+R |
| Refresh the current Web page, even if the time stamp for the Web version and your locally stored version are the same |
CTRL+F5 |
| Stop downloading a page |
ESC |
To Print Preview Web pages with shortcut keys:
| To do the following |
Press this |
| Close Print Preview |
ALT+C |
| Display a list of zoom percentages |
ALT+Z |
| Zoom in |
ALT+PLUS |
| Zoom out |
ALT+MINUS |
| Display the last page to be printed |
ALT+END |
| Display the next page to be printed |
ALT+RIGHT ARROW |
Type the number of the page that you want displayed |
ALT+A |
| Display the previous page to be printed |
ALT+LEFT ARROW |
| Display the first page to be printed |
ALT+HOME |
Change paper, headers and footers, orientation, and margins for this page |
ALT+U |
| Set printing options and print the page |
ALT+P |
To use the Address box with shortcut keys:
| To do the following |
Press this |
| Move back through the list of AutoComplete matches |
DOWN ARROW |
| Move forward through the list of AutoComplete matches |
UP ARROW |
| Add "www." to the beginning and ".com" to the end of the text that you type in the Address box |
CTRL+ENTER |
| When in the Address box, move the cursor right to the next logical break in the address (period or slash) |
CTRL+RIGHT ARROW |
| When in the Address box, move the cursor left to the next logical break in the address (period or slash) |
CTRL+LEFT ARROW |
| Display a list of addresses that you have typed |
F4 |
To work with Favorites by using shortcut keys:
| To do the following |
Press this |
| Move selected item down in the Favorites list in the Organize Favorites dialog box |
ALT+DOWN ARROW |
| Move selected item up in the Favorites list in the Organize Favorites dialog box |
ALT+UP ARROW |
| Add the current page to your favorites |
CTRL+D |
| Open the Organize Favorites dialog box |
CTRL+B |
To edit with shortcut keys:
| To do the following |
Press this |
| Remove the selected items and copy them to the Clipboard |
CTRL+X |
| Select all items on the current Web page |
CTRL+A |
| Insert the contents of the Clipboard at the selected location |
CTRL+V |
| Copy the selected items to the Clipboard |
CTRL+C |
Internet Explorer 5 keyboard shortcuts can be found here.
Internet Explorer 4 keyboard shortcuts can be found here.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, February 08, 2006 |
|
| |
|
|
| |
This post is a continuation of the previous post Automating Web UI testing with SWEA, C#, & NUnit (part 1).
So what is SWEA? SWEA is short for Software Explorer Automation and was developed by Alex Furman. SWEA allows you to record and playback Web browser activity and most importantly, export those recordings into C# or VB.NET. These recorded and exported scripts utilize Alex's SWExplorerAutomation API. Alex has an AWESOME Flash demo of the SWEA Designer here. After watching the demo once before I installed and then again once after, I was able to easily record a few pages of IA and was playing them back in IE. SWEA uses a simple concept called "Scenes" to group HTML elements and data in a page. A "Scene" contains the elements and data/text that you define in the page. The HTML elements in your recorded Scene can be set as active or inactive appropriately, which is very important when you have dynamic content. The coolest thing about a Scene is that when referenced, if the entire Scene is not present (all it's defined, active elements) SWEA will throw an exception. This is really cool because it can be used to do a very quick regression by simply navigating to all the Scenes on your site; the Scene does the validation, thus eliminating doing a bunch of Asserts in NUnit to validate elements on the page. The simplicity of this will become a bit more obvious when we get into code example in the next post.
As stated previously, the recorded scenes can be exported to C# or VB.NET, and it will also create a Visual Studio Project for you. With exported code and a VS project, you're only one step away from wrapping it with the NUnit framework and then driving IE from NUnit! Check out this sample C# recording of Google.com:
|
namespace SWExplorerAutomation.Examples { using System; using SWExplorerAutomation.Client; using SWExplorerAutomation.Client.Controls; using SWExplorerAutomation.Client.DialogControls;
public class CodeTemplate {
public static void explorerManager_DialogActivated(object sender, SWExplorerAutomation.Client.DialogScene dialogScene) { }
public static void explorerManager_DialogDeactivated(object sender, SWExplorerAutomation.Client.DialogScene dialogScene) { }
public static void explorerManager_Error(object sender, SWExplorerAutomation.Client.SWException errorException) { }
public static void Main() { SWExplorerAutomation.Client.ExplorerManager explorerManager = new SWExplorerAutomation.Client.ExplorerManager(); SWExplorerAutomation.Client.Scene scene; explorerManager.DialogActivated += new SWExplorerAutomation.Client.DialogActivatedEventHandler (SWExplorerAutomation.Examples.CodeTemplate. explorerManager_DialogActivated); explorerManager.DialogDeactivated += new SWExplorerAutomation.Client.DialogDeactivatedEventHandler (SWExplorerAutomation.Examples.CodeTemplate. explorerManager_DialogDeactivated); explorerManager.Error += new SWExplorerAutomation.Client.ServerErrorEventHandler (SWExplorerAutomation.Examples.CodeTemplate. explorerManager_Error); explorerManager.Connect(-1); explorerManager.LoadProject("C:\\Google.htp"); explorerManager.Navigate("http://www.google.com/"); scene = explorerManager["Scene_GoogleHome"]; scene.WaitForActive(30000); ((HtmlInputText)(scene["searchTextBox"])).Value = "QAInsight"; ((HtmlInputButton)(scene["btnSearch"])).Click(); Console.WriteLine("\n Press Enter to exit"); Console.Read(); explorerManager.DisconnectAndClose(); } } } |

The above example was recorded in about the 30 seconds and it does the following:
- Starts IE
- Loads Google.com
- Enters "QAInsight" into the search textbox
- Clicks the "Google Search" button
- Closes IE
Alex has done a great job with SWEA and has been very supportive of those who use it. Every since I've started using the SWEA Designer and SWExplorerAutomation API, Alex been quick to respond to all my questions and issues and he is continuously upgrading it (recent versions support IE7 and .NET 2.0).
In the next post I'll share with you how I integrated SWEA with NUnit and how I created a test framework that uses separate classes for test calls, navigation, and test execution.
Update 02/20/2006: Part 3 can be found here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, February 07, 2006 |
|
| |
|
|
| |
The URL to the defect below was emailed to me earlier today. Yes, this is an actual live site. Where do I start?

Can you say "hack me"? This is a security issue (Severity 1). You can't let this stuff bubble up to the user! With the information provided, it wouldn't be too hard to figure out the whole schema and start doing some evil things.
How could they have prevented this? This kind of issue could have been caught with security standards, unit tests, and good ol' functional testing. |
|
| |
 |
|
| |
|
|
|
| |
Sunday, February 05, 2006 |
|
| |
|
|
| |
Several months ago when I started working on the IA team I was shopping around for a "better" automated Web UI solution. In the past Corillian has used Segue SilkTest for the job and a few of us on the PS QA team had gone as far to build a framework that made creating test scripts easier, more reliable, more consistent, and reusable. As many of us in the industry know, Segue products come with a pretty high cost and SilkTest and 4Test is not a simple thing to pickup. The learning curve had always been a hang-up when trying to get the whole QA team or Developers to do automation. I took this as a lesson learned when I moved to the IA team and now I was on the hunt for a different solution. A solution with simple goals:
- The ability to record Web scripts through the browser
- Scripts that use a standard language that both developers and QA Engineers can use (I was strongly leaning towards C#)
- The ability to work tests into the automated build process
- Low in cost
When I first moved over, other teams in Corillian started to play with the combination of Ruby, Watir, C#, and NUnit. The use of Ruby to drive Internet Explorer was not new to me, I took a class on how to do it at PNSQC a couple of years ago, but the release of Watir coupled with NUnit made the solution more appealing. At the time co-workers Scott Hanselman and Dustin Woodhouse had started to use the combination and were spreading the word on how well it worked. Following their lead, I automated a small part of the IA Reference Implementation along with the Administration Implementation. It worked for me, but debugging in Ruby was semi-painful, I REALLY wanted to use C#, and 2 of my 3 goals were not achieved:
- I couldn't record the scripts for Ruby/Watir
- Ruby is not a standard, well known language. Yes, it's a scripting language, it's simple, but it's still just one more language to learn and understand. The last thing I need is to have the new QA Engineer learn yet another language in his .NET world...Ruby.
At the time Scott had started a side project to record scripts called WatirMaker. This was a start of a good thing, but it was far from complete and I didn't really have the time to deal with the headaches that come along with brand new software (I had enough on my plate with trying to find a good tool for testing Web Services). So, I continued the search with the thought that "I'm not the first one; somebody else has definitely gone through this already". Searching eventually brought me to a blog post on TestingReflections.com that talked about the use of SWEA (Software Explorer Automation) with NUnit. Following the tutorial from TestRefelctions.com, in about half the time it took me to build my Ruby/Watir scripts, I rebuilt the scripts using SWEA, C#, and was testing from NUnit. Oh, the sweet power of SWEA! I had just achieved:
- The ability to record scripts (using SWEA)
- Scripts that used the language of C# (using SWEA, recordings can be exported in VB.NET too)
- The first step to having script in the automated build process by having the scripts run in NUnit
- Low in cost: FREE
How? Oh, you want details?...Coming soon in the future post: Automating Web UI testing with SWEA, C#, & NUnit (part 2)
Update 02/20/2006: Part 2 and 3 have been added! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, February 02, 2006 |
|
| |
|
|
| |
Co-worker Mark McCorkle forwarded this pathetic email to me today. The company and software has been renamed as SoftwareX to protect the innocent :) "You recently logged this case regarding a file download dialog persisting after adding the fie extension to the registry keys that should have stopped this behavior. Development had informed me that it was caused by a Content Disposition header and was as designed. Since, development have decided to modify the SoftwareX so that this is no longer the designed behavior. This modification has been implemented in a patch for SoftwareX which has been released internally but is not yet available to the public."
I've also seen the same kind of response from CompanyX about another SoftwareX. LAME. Poor wording? Yes. Worded strategically? Looks like it to me. What does it gain them? Nothing. Denial, it's an overwhelming emotion. We QA Engineers see it all the time and can see right thought it! Get over it, we're just trying to help. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, January 31, 2006 |
|
| |
|
|
| |
Microsoft just released Internet Explorer Beta 2 Preview to the public. "What's a beta preview? It's a release for everyone involved in making the Internet work."
The IE7 team is asking developers to test their sites. I'm assuming that this means that all the new rendering enhancements and features are in place, even though I can't find any reference to list of those types of changes. Testers, get your browser compatibility testing shoes on! Give your site a whirl in IE 7! How does it look? I'm afraid to look...Let the defect input begin.
You can get technology IE7 technology overview here. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
For those of you have been involved with or are a part of the Waterfall software cycle you'll appreciate this Web site. I couldn't help but laugh at some of the following tutorials (since it hit so close to home in the past):
- Converting bugs to enhancements
- How to produce an impressively thick test plan, suitable for clubbing errant programmers over the head
- Top 10 Reasons to reject a build before you even test it
- Strategies for lengthening the test cycle
- Techniques to force programmers to follow standards
- Put Testing Where It Belongs--At the End

|
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 26, 2006 |
|
| |
|
|
| |
Recently the IA Web Service Namespace URI changed which broke all my existing tests in SOATest. While talking with support person at SOATest, I found out that there is no quick and easy way to update the namespace URI in each test case when your test cases are in the view "Form XML" ("Refresh the WSDL" doesn't work). However, he did tell me that if your test cases are using the "Form Input" view, "Refresh the WSDL" will update the namespace URI. Moral of the story: When you're done creating your test case, make sure and leave it in the "Form Input" view so that namespace changes are updated when you refresh your WSDL!
When I reviewed my issue a bit more, I discovered another possible solution. To avoid the issue when using the "Form XML" view, parameterize the namespace in each test case and utilize a namespace/value you set at a global level.

|
|
| |
 |
|
| |
|
|
|
| |
Wednesday, January 25, 2006 |
|
| |
|
|
| |
In today's post my friend and co-worker Mark McCorkle writes about SilkPerformer's WebFormValuePairInsert function. This function can be used to dynamically modify the content of a Web form:
WebFormValuePairInsert ( in fForm : form , in sLeftValue : string , in sRightValue : string , in nPosition : number optional , in nAttribute : number optional ): boolean ; |
Mark writes: Silk Performer has this function I've never had to use before, but considering the number of forms Corillian uses, it has proven be useful in a recent performance test:
WebFormValuePairInsert(ACCOUNTHISTORY, "ctlAccountDownloadFilterList:ctlAccountsDataGrid:_ctl" + strTemp + ":chkSelect", "on"); |
In the above example, in the form “AccountHistory”, I'm adding a dynamically checkbox element and setting it to “on”.
This was helpful in my particular situation because based on the user you log on with, the number of accounts you can select from is dynamic. If I want more than one selected, I can't hardcode any of that from user to user, so, I've got to do it this way. And, it also allows me to perhaps randomly turn them on and off as needed. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Lee Copeland recently delivered a dinner speech at the EuroSTAR testing conference where he compared the life of kindergartener to a tester. It's a pretty good analogy. You can find the full speech out on Stickyminds.com. In a nutshell, Lee suggests that testers should live by these rules:
- Share everything.
- Play fair.
- Don't hit people.
- Put things back where you found them.
- Clean up your own mess.
- Don't take things that aren't yours.
- Say you're sorry when you hurt someone.
- Wash your hands before you eat.
- Flush.
- Warm cookies and cold milk are good for you.
- Live a balanced life.
- Learn some, think some, draw some, paint, sing, dance, play, and work every day.
- Take a nap every afternoon.
- When you go out in the world, watch for traffic, hold hands, and stick together.
- Be aware of wonder.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
One of the first things I ran into when building my Web Service test cases in SOATest was the need for creating random user IDs. I needed random user IDs because typically a set of test cases required a fresh enrollment of a user. If I used a static user ID, when I re-run the test case it would fail since the user was already enrolled. Ergo, I needed a random, new user every time I ran the test case. I achieved this in SOATest by utilizing Set-up tests, JavaScript, and an XML Data Bank:
First, I needed a way to generate a random value that conformed to the application's specifications for user IDs. I achieved this by writing the following JavaScript and then feeding the string into soapgest.api.:SOAPUtil method getXMLFromString.
|
function rUserID() { strChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ'; minLength= 6; var randomLength = Math.floor(Math.random()*50); if (randomLength <= minLength) {randomLength=minLength} var randomstring = ''; for (var i=0; i<randomLength; i++) { var rnum = Math.floor(Math.random() * &strChars.length); randomstring += strChars.substring(rnum,rnum+1);
} <!--Feed the JavaScript string into the SOAPTest API--> return Packages.soaptest.api.SOAPUtil.getXMLFromString([randomstring]); }
|
I then saved the script off to my project\Scripts directory as UserID.js. (by creating the file externally, I have the power to reuse the script from many locations from within my test). Now that I had something to generate the IDs all I had to do was set the rest up in SOATest. In order for the user ID to be generated every time I executed my Test Suite, I needed to create a Set-up test. This was done by:
- In the left frame, right mouse clicking the associated Test Suite directory
- Selecting Add Test > Setup Test > Test Method
- Selecting the new created Setup Method; the Tool page will appear in the right frame:

- In the Tool page, choose the Language parameter as "JavaScript"
- Browse to the previously saved UserID.js file
- Select the one available JavaScript function in the Method textbox (rUserID in my case)
- In the left Tests frame, right mouse click the Setup Method
- Select Add Return Value Output > New Output > XML Databank

With the above mentioned, executing the Set-up Test will now call the function from the .js file, return it to the SOAPUtil, and then will populate the XML Databank.
Now, from the test case in which I intend to use my random user ID I can select that Username attribute/node (in the right frame), select the value to be "Parameterized" from the dropdown, and then select the name of the Set-up Test I previously created (Set-up 1: z0 in my case).

Thus, a SOATest test case using a random user ID! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, January 19, 2006 |
|
| |
|
|
| |
Many of us have seen the FireFox plugin that allows you to view your FireFox page in Internet Explorer (IE View Lite). Now you can do the opposite with FireFoxView written by Alex Sirota. This FireFox plugin installs context menus for Internet Explorer and allows you to quickly jump from IE to FireFox (Yes, you install the FireFox plugin to get the functionality in IE). This can be done in Internet Explorer by a right mouse click on any page and choosing the context menu item "View This Page in FireFox" or by right mouse clicking a link and choosing the context menu item "Open Link Target In FireFox". Needless to say, this quick link can be very convenient when testing browser comparability. For example, if you find an issue in IE you can quickly jump to that page in FireFox to see if it exists there too!
Beware, as noted by Alex: "FirefoxView isn't compatible with Norton Antivirus 2004 and older with script blocking enabled. Important: The extension uses a simple ActiveX command to launch Firefox. The full source code is open as part of the extension. Apparently, Norton Antivirus (versions prior to NAV 2005) sometimes detects this as a malicious script. I can assure you there is nothing malicious in FirefoxView. Please check your Norton Antivirus script blocking settings if you want to use FirefoxView." |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, January 17, 2006 |
|
| |
|
|
| |
Sometimes when doing performance or scalability testing your application may need pre-enrolled users. Enrolling a specific amount of users can be a bit tricky with Segue SilkPerformer when you want to run multiple virtual users to get the job done quickly. Running one virtual user usually solves the typical problems but 1 virtual user when I needed 1 million enrollments was unacceptable time-wise. I recently worked through a problem where virtual users weren't stopping when they reached the end of the file so they would cause errors to occur in the application because they were being re-enrolled. Here is the solution Mark and I came up with:
First off, I needed to list the 1 million signon IDs for Performer to enroll so that I could signon with the same IDs later. I list these in a data file. To ensure each is enrolled, Performer's virtual users need to read the user names from the file sequentially to make sure they ALL get enrolled (IAUser1 - IAUser1,000,000). In order to tell the virtual users that they had reached the end of the file I placed an obvious string ("END") at the end of the data file so that the first virtual user that came across it would halt. This looked like:
|
IAUser999996 IAUser999997 IAUser999998 IAUser999999 IAUser1000000 END |
After I setup the data file, I then placed the following code in Init transaction (or the first transaction called by all virtual users):
|
//Load and pull user name from the data file FileCSVLoadGlobal(nAcctFile, "MillionIAUsers.rnd"); sUser := FileGetCol(nAcctFile, 1, STRING_COMPLETE);
//Define a global variable that all virtual users have access to GlobalVarGet("Enrolled1", nIsEnrolled1);
//If the user ID is "END" set the nIsEnrolled1 flag to 1 and halt if (sUser = "END") or (nIsEnrolled1 = 1) then GlobalVarSet("Enrolled1",1,1000); halt; end; |
What happens here is the first virtual user that encounters the "END" flag sets the global var nIsEnrolled1 to 1 and halts. When the next virtual users come in behind the "END" user they will have sUser set to an already enrolled user name from the beginning of the data file (for example: IAUser1). We can halt all the remaining virtual users by checking for the global var (nIsEnrolled) that the user who encountered the "END" set (since nIsEnrolled1 is set to 1 any virtual user that followed will then be halted via the if statement).
This method worked perfectly for me. The best solution? Maybe not. I'd like to hear some other solutions. Do you have one? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
I can't help but laugh to myself every time I see a new Internet Explorer 7 feature that FireFox already has. The last blog entry from the IE Team talks about their new IE 7 feature "Delete Browsing History" and how it's "coming to a computer near you very shortly". Actually, it's already on my computer in a handsome little browser called FireFox. Check out the similarity/copy. It pretty sickening how Microsoft doesn't listen to it's user's requests but instead the competition. I guess the bright side for Microsoft is that they got free usability testing by FireFox. The downside is that if they keep doing this they're going to lose more market share.
What's in Internet Explorer 8 Microsoft? What's that? The same things that are in FireFox 2.0? Heh. Imagine that. |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
A couple of years ago my fellow co-worker Meg Poehler showed the QA department how to view the browser cookie in a JavaScript Alert using JavaScript from the browser URL bar:
In the URL bar type: javascript:alert(document.cookie.split(';').join('\n'))
This is a great Web testing asset when you take it one step farther by adding it the "Links" toolbar in Internet Explorer:
- Navigate to any URL
- Drag the URL icon to the IE "Links" toolbar
- Right mouse click the IE Link and select "Properties"
- In the "General" tab change the description text to "Show Cookie"
- In the "Web Document" tab change the URL to: javascript:alert(document.cookie.split(';').join('\n'))
Now, when you're testing a site and need to know what the cookie(s) contain you can now quickly click the link to view the cookie(s). |
|
| |
 |
|
| |
|
|
|
| |
Thursday, January 12, 2006 |
|
| |
|
|
| |
Here at Corillian I am responsible for testing of the product Intelligent Authentication (IA). IA is a .NET Web Service written in C# and it is the first Corillian product released that is a Web Service. IA is also the first Web Service that I've ever tested. When I accepted the QA position on the Corporate Security team I knew I had some new, unique challenges ahead me with finding testing tools and techniques to successfully test a Web Service. We've released 1.0 and are now working on "1.1". I spent a good portion of the 1.0 development time trying to find the perfect application and thus, here is my story:
First off, what was I looking for? My test tool needs weren't too complex:
- Create and combine test cases to run sequentially
- Provide a test case status and overview
- Allow data driven testing (static and dynamic)
- Compare regression history
- Allow the ability to send SOAP calls that aren't compliant with the WSDL
- Ability to validate valid SOAP responses and SOAP faults
I started by asking around which revealed little, and then perusing the Web. I found and looked through half a dozen home grown tools but nothing went beyond consuming a WSDL and sending requests to it. The tools I've listed below are worthy of a mention and the last tool listed is highly recommended (ParaSoft SOATest):
MindReef SOAPScope (achieves goals 5 & 6) Everybody on the IA team has SOAPScope and recommended that I start there. That I did. Playing around with the tool revealed that it is great for creating SOAP traffic but it didn't take long to realize that this tool was designed for developers and not testers who wanted to store test cases. Since SOAPScope runs in Internet Explorer I toyed with the thought of driving the interface with Segue SilkTest and using SilkTest to store my test cases. This seemed like a lot of work for testing something as simple as a Web Service. There has to be a better solution for testing out there...
Segue .NET Explorer (achieves goals 1, 2, 1/2 of 3, 6) Corillian has used Segue products for quite a few years now; SilkTest and Silk Performer. A recent release of Silk Performer also provided an application with it called .NET Explorer. This app provides a quick and easy way to create Web Service test scripts without any .NET programming knowledge. I was able to quickly point to the WSDL, see all the methods, and then start creating test cases within the GUI. First impression: Wow! This is easy AND I can store & track my test cases! Second and last impression: Wow! This app is full of defects (I submitted 6 to Segue, 2 critical/showstoppers). After about 2 weeks I felt like I was testing 2 apps; .NET Explorer and Intelligent Authentication. It had a lot of little quirks that I found myself working around every day. The final straw for me was when the WSDL revealed a major change and the app didn't know how to react; the result was that I lost all of my test cases/scripts that I had built over the last two weeks. Ouch... Fortunately I had them documented so that I could rebuild in whatever new test app I could find. NEXT!
MindReef SOAPScope and Sputnik Beta (2, 4, 5, don't remember if it did 6) Now I was worried. I was already half way through the project and I didn't have a reliable tool. I felt good about my testing progress but my automated regression suite was gone. Not good when I'm the only tester. I quickly went back into searching mode, looking high and low on the Web for any tool that dealt with SOAP. Around the same time, my manager Greg Hughes pinged Scott Hanselman to see if he had seen or heard about tools for SOAP. Scott had just received an email about Beta testing a product name Sputnik. Ahh, a ray of light from the stormy clouds looming over my head. I installed the Beta and found that Sputnik wasn't really much different than SOAPScope. It used SOAPScope but it had a bit more to it. The addition allowed me to save a SOAP request and response and treat it as a test case that could be run again. This was a step forward from SOAPScope but it didn't offer much more than that. The application was slow and clunky and didn't give me much hope. It just wasn't enough, I actually felt better about using .NET Explorer. After already losing once I wasn't going to bet the bank on a beta product. Time to move on. Since then, Sputnik has become "MindReef Coral" and I haven't had a chance to review whether or not it gained more features since the beta.
ParaSoft SOATest (1, 2, 3, 4, 5, 6) More and deeper searches on the Web, with creative key words, eventually revealed a product by Parasoft called SOAPTest (recently renamed SOATest). Their Website revealed to me that it did everything I needed it to do. It seemed too good to be true after all the research and trials that I did but there was only way to find out. I installed SOATest and waited for the call from the representative who had my trial key. My expected call ended up being a game of phone tag (I hate getting keys this way) and I ended up with the key a couple days later. Once I had my key I spent a few hours over the weekend putting the app through the test; making sure it could do everything all the other apps could do, and attempting to do all the things I needed the tool to do. The learning curve was quite a bit steeper than the other apps but for a good reason, this application is by far more robust. It does everything I need and more. There are too many things to spell out myself so here is the blurb from Parasoft's site: Benefits
- Ensure the reliability, quality, security and interoperability of your Web service.
- Penetration testing integrated with functional testing for complete coverage.
- Uniform test suites can be rolled over from unit testing to functional testing to load testing to security testing.
- Prevent errors, pinpoint weaknesses, and stress test long before deployment.
- Verify data integrity and server/client functionality.
- Identify server capabilities under stress and load.
- Accelerate time to market.
Features
- Scriptless Web Services testing.
- WS-Security, SAML, Username Token, X.509, XML Encryption, and XML Signature support.
- UDDI support: query verification, validation, and load testing.
- Automatic test creation from WSDL, WSIL, UDDI and HTTP Traffic.
- Asynchronous Testing: JMS, Parlay (X), SCP, WS-Addressing support.
- Complete coverage testing workflow through complex scenarios and multiple service endpoints.
- WSDL schema and semantic verification and compliance to WS-I Basic Profile 1.1.
- Data-driven testing through data sources (Excel, CSV, Database Queries, etc).
- MIME Attachment support.
- Windows Perfmon, SNMP, and JMX Monitors.
- Detailed Report generation in HTML, XML and Text formats.
- Real-Time graphs and charts.
Protocol Support
- HTTP 1.0
- HTTP 1.1 w/Keep-Alive Connection
- HTTPS
- TCP/IP
- JMS
Platforms
- Windows 2000/XP
- Linux
- Solaris
See what I'm saying? A ton of stuff! So here I am months and 1000+ automated test cases later. I love it. It works. It's easy. It's robust. It makes build regression a snap for me. SOATest is the bomb! It only has a few small downfalls:
- The price is a little large for small companies (around $4000 a seat).
- Scripting can be done with JavaScript, Java, and Python. That's not so bad, but the scripting capability is wrapped by the app so you are limited on some things (for example you can only pass two parameters in a JavaScript function). Use of JavaScript can be a bit painful if you're used to programming for IE and Netscape. The type and version of JavaScript they include with the app will leave you scratching your head when trying some simple things.
- Occasionally the window frames don't refresh correctly (it's a Java application).
There aren't a ton of robust Web Service testing tools out there, so hopefully this post saves you some time in your search and decision!
Update 1/16/2006: SOATest wins "Best Testing Tool" in the "Oscars of the Software Industry" (Sys-Con) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, January 10, 2006 |
|
| |
|
|
| |
Hey there browser compatibility tester! Why do you look so down? What? Your customer made the absurd request to test their new Web site with Netscape 4.03 on Unix? Wow, that's odd. I bet you're down because you don't know where to find that download... No worries my friend, Netscape archives their products and has them available for download to the public (well most of them, there are the products that they pull off the Web the day after release because of BIG defects). The root of their public FTP is at: ftp://ftp.netscape.com./pub/ or http://ftp.netscape.com./pub/ (both accessible from your browser). You can find Netscape browsers as old as 3.04 and new as 8.0.3.3.
Netscape 3.04 - 4.8 can be found in the /communicator directory: http://ftp.netscape.com./pub/communicator/ ("Communicator" is not a browser name it is a suite of applications, much like MS Office. "Navigator" is the browser that comes within the suite).
Netscape 6.0 - 6.2.3 can be found in the /netscape6 directory: http://ftp.netscape.com./pub/netscape6/
Netscape 7.0 - 7.2 can be found in the /netscape7 directory: http://ftp.netscape.com./pub/netscape7/
Netscape 8.0 - 8.0.3.3 can be found in the /netscape8 directory: http://ftp.netscape.com./pub/netscape8/
It's all out there, all the available languages, on all the available operating systems. Happy downloading and even happier testing! Can you say "JavaScript errors"? |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Back in the day, before I started using proxies to bypass Web form validation (Achilles, Paros, Fiddler), I used to use the tool Paessler Site Inspector to help me bypass some types of form validation (one of Corillian QA's many security tests). Site Inspector uses JavaScript to access the DOM and allow you change the values. Simply put, the tool allowed you to do a JavaScript injection attack. A simple thing to do but Site Inspector made it simpler by wrapping a pretty UI around it. An article I found when perusing through the latest 2600: Hacker Quarterly at Barnes and Noble the other day reminded how truly easy this was to do without a tool. Provided below is a simple example of a JavaScript injection attack:
Consider the following text field in a balance transfer form:
<input name="amount" type="text" maxlength="3">
Let's say this form has a $999 transfer limit controlled by the HTML maxlength property set to 3 (yes, it's cheesy & foolish validation).
From the browser URL bar we can easily bypass this check by using the DOM through JavaScript to change the amount value:
Example 1 (using form name and form textbox element name): javascript:document.forms['transfer'].elements['amount'].value = '10000'
Example 2 (using the index number of the form and element arrays): javascript:document.forms[0].elements[0].value = '10000'
You'll get a JavaScript error if your syntax is incorrect or are attempting to access an object that doesn't exist. If you have no error you can double check that the value actually stuck by displaying it in a JavaScript alert. You can do this by typing the following in the browser URL bar:
javascript:alert(document.forms[0].elements[0].value)
The expected result of the test case would be that even though you could do this JavaScript injection attack at the UI, the duplicated server side validation would catch and stop the attack. If it isn't stopped on the server side then you have yourself a serious defect!
Happy testing! I'll talk about bypassing validation with a proxy another day...
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Thursday, January 05, 2006 |
|
| |
|
|
| |
My friend and coworker Alex Scoble showed me how to remotely connect to the console session of a Server 2003 machine the other day. You can do this three ways:
- From the command line type: mstsc -v:YourIPhere -console
- From the RDP connection GUI add /Console after the machine name
- Edit the RDP file (open in Notepad) and add the following line to the end of the file: connect to console:i:1
Why use the console switch? Three reasons as far as I can tell:
- You can log onto the existing console session and not have to reopen your applications.
- Some applications can only be ran from the console.
- Hear audio at the Server.
Console switches aren't needed when connecting to a Windows XP Pro machine because XP will automatically and only connect as console.
There are a few other command line parameters. They are listed and defined here. |
|
| |
 |
|
| |
|
|
|
| |
Wednesday, January 04, 2006 |
|
| |
|
|
| |
Is your defect database full of screenshot/images? Do you or your team ALWAYS attach screenshots? Screenshots in defects have a good and a bad side. Here's my take on it:
The Bad
Images can make a monster sized database. A majority of testers aren't equipped with an image capture tool that provides lower quality and smaller sized images so they default to the good ol' screen capture and paste that into Microsoft Paint. Using MS Paint, a 800x600 screenshot saves a BMP at 1.35 MB and a JPG at 123 KB (A JPG at 25% quality in Photoshop = 92 KB). MS Paint defaults it's save extension to BMP and a lot of people don't know much about image compression so they'll leave it at BMP. Let's crunch the numbers... (1 project with 250 defects containing screenshots) x (1.35 MB) = 337.5 MB of images. That's a lot of MB for ONE project. Multiply that by 30 projects a year (Corillian probably does double that EASY) equates to over 1 Gig of images! Get my point?
Defect screenshots can promote laziness. You know what I'm talking about, that defect that you open that says "See attached screenshot" and little to nothing else. See what in the attached screenshot? How good the GUI looks when saved as a BMP? :) This can be a serious problem with new testers and will cause a lot of back and forth between tester and developer as the real details are ironed out. Obviously this is very inefficient when the tester could have prevented the confusion by wrapping the image with descriptive text about the defect.
Screenshots aren't searchable. If you can't find a defect from keyword(s) (for example: a JavaScript error) you are going to have a serious problem with defect duplication when the project defect list gets long or if you have more than 2 testers on the team.
The Good
- Images can be easier to comprehend (if the defect reader knows exactly what they are looking for in the image).
- Images provide evidence. When the defect can't be reproduced, you have that screenshot to go back on and then you don't feel like you were crazy on crack at the time because the screenshot says so.
Screenshot advice for testers and team leads
- Only use screenshots when the error is so technically confusing to describe that a screenshot will SUPPORT the description. Take the time to describe the problem, document the error text and provide a good description of steps to reproduce. By providing these things along with the screenshot you now have a defect that is highly searchable (preventing duplication) and has a supplemental image in case the text description didn't cut it.
- Testers: If you're going to take a screenshot save it as a JGP or GIF not BMP. Leads: If possible, empower your testers with an image capturing tool that creates compressed images.
|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Did you know that you can run you Remote Desktop sessions from the MMC? Yep, it's possible and it's pretty cool! The left pane contains the machine names while the right pane contains the Remote Desktop instance. This is pretty handy when you've got multiple RDCs going (while testing I often have 2 to 3 open at a time) or if you simply just want to store all you RDC profiles in a Windows Explorer type fashion. The snap-in is part of the Admin Pack that comes with Server 2003. It will work with Server 2003 or XP Pro. You can find it on the 2003 CD in the i386 directory or download it from Microsoft here (adminpak.msi). Once you've run adminpak.msi, open MMC (Start > Run > Type "MMC") and add the snap-in "Remote Desktop". Once the snap-in is added, right click "Remote Desktops" in the left pane and select "Add New Connection". The remainder of the RDC setup is self explanatory....
Thanks for the tip Mark! |
|
| |
 |
|
| |
|
|
|
| |
Tuesday, December 20, 2005 |
|
| |
|
|
| |
Are you or your test team missing JavaScript errors while testing Web applications? Now days, the errors aren't so in your face like they used to be. You have to know where to look for them. If I had a quarter for every time I had to ask a tester who was testing browser compatibility on Netscape or FireFox "Where's your JavaScript console?" I'd have....well at least a few dollars. When the question was asked, sometimes the reply would be "How do I get to that"? Ouch...Uhm, yeah, could you retest that? Sometimes what I consider the basics I guess aren't so basic. I guess this is a perfect training opportunity for me. Here's how you do it my friends:
How to view Javascript errors in Internet Explorer 7 By default the popup window with script errors do not display in IE. In order to receive the actual error (when it occurs) you'll need to enable the following setting: Tools > Internet Options > Advanced > Browsing: Display a notification about every script error
How to view Javascript errors in Internet Explorer 6 By default the popup window with script errors do not display in IE. In order to receive the actual error (when it occurs) you'll need to enable the following setting: Tools > Internet Options > Advanced > Browsing: Display a notification about every script error
With or without this option selected you'll always receive an error icon in the bottom-left of the browser window. Double clicking the error icon will display the error window. The icon can be easy to miss though. So IMHO you should enable the "Display a notification about every script error" setting to avoid missing errors.
How to view Javascript errors in FireFox 1.x and Netscape 8.x Script errors are hidden. In order to see the errors you'll need to use the JavaScript console. This can be viewed two ways: 1. Type the text "JavaScript:" in the address bar and press enter. 2. Navigate to Tools > JavaScript Console
How to view Javascript errors in FireFox 2,x Script errors are hidden. In order to see the errors you'll need to use the JavaScript console. This can be viewed two ways: 1. Type the text "JavaScript:" in the address bar and press enter. 2. Navigate to Tools > Error Console
How to view Javascript errors in Netscape 4.x Script errors are hidden. In order to see the errors you'll need to use the JavaScript console. This can be done by: 1. Type the text "JavaScript:" in the address bar and press enter.
How to view Javascript errors in Netscape 6.x Script errors are hidden. In order to see the errors you'll need to use the JavaScript console. This can be viewed two ways 1. Type the text "JavaScript:" in the address bar and press enter. 2. Tasks > Tools > JavaScript Console
How to view Javascript errors in Netscape 7.x Script errors are hidden. In order to see the errors you'll need to use the JavaScript console. This can be viewed two ways 1. Type the text "JavaScript:" in the address bar and press enter. 2. Tools > Web Development > JavaScript Console
How to view Javascript errors in Opera 8.x Script errors are hidden. In order to see the errors you'll need to use the JavaScript console. This can be done by: 1. Tools > Advanced > JavaScript console
With Netscape, FireFox and Opera I advise you to leave the JavaScript console open at all times and in plain view so that when the event/error occurs you know what page you were on and what you were doing to cause the error. This can be painful when running at a small resolution because you end up trying to fit two windows into the display. It doesn't rank high on the usability or convenience charts, but how often is testing convenient?! Wouldn't that be a nice testing enhancement if they integrated the console INTO the browser window?
Get in the habit, keep that console open and find those JavaScript errors. No seriously, I'm sick of seeing them when I visit your site... ;) |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Sunday, December 18, 2005 |
|
| |
|
|
| |
When testing Web applications in IE how many times have you ever typed/copied, by hand, the JavaScript error from the error window to a defect (for those of you who don't test Web applications, the IE JavaScript error window doesn't have the copy function available)? I'm betting you've done it TON. Copying by hand is time consuming, painful, and error prone. Stop the nonsense! Use Kleptomania from StructuRise. Kleptomania allows you to copy windows text from anywhere on the screen using OCR (Optical Character Recognition). I use this tool on a daily basis between the error copying and the graphics/screenshot feature. The graphic copying is particularly useful when you are attempting to copy a screenshot of the particular problem instead of the whole desktop or the whole window.
Kleptomania features include (items handy for testing in bold):
- capture and process on-screen text of any applications, of any registered fonts
- copy text onto clipboard
- launch internet browser for recognized URL
- start email editor for recognized email addresses or addressee name
- sum selected numbers
- count a number of words and characters
- discover font name, size, bold/underlined style of used font. Stop unreliable guessing about fonts on the screen
- capture and process folder trees, file lists, database reports, text content of messages and dialog boxes, menus, status lines, precisely selected areas of internet browser views, visible text of legacy systems, and more
- don't rely on application clipboard support or any communication standards behind the scene
- when copying, preserve font name, size, bold/underlined style
- put the captured text onto the clipboard in plain and Rich Text Format
- full install and uninstall support
- this is the first solution for capturing text by the means of OCR
The tool sits in you system tray and has about a 3 MB foot print. It's definitely a must have for testing. It's been part of my testing arsenal for about 5 years now! The tool has a 40 day trial and is dang cheap to buy. Give it a whirl.

|
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Tuesday, December 13, 2005 |
|
| |
|
|
| |
User Agent Switcher is an extension for FireFox, written by Chris Pederick that allows you to switch the user agent string in FireFox. This is handy for Web testing when you need to masquerade as another browser. For example, when testing Intelligent Authentication, in order to cause the secondary authentication to occur I come into the site (which looks at my user agent string) using FireFox 1.5, after I have some FireFox history built up with Intelligent Authentication I then change the user agent string using User Agent Switcher to Opera 5 which causes IA to ask for secondary authentication. Or another example of its use for testing is when browser sniffing code has been put in place and the result of the sniff is that you are redirected to a certain page or message. With User Agent Switcher you can simply change the user agent string to the desired browser and then masquerade as that browser in order to get to the intended page or message. Pretty spiffy eh? No need to install a ton of different browsers just to see one message. Note: when I say "page" I'm not implying that you are testing this page for browser compatibility; FireFox will still render the page.
Within the extension the list of user agent strings can be modified (which is great because there are 100s of user agent strings). You can modify the list three different ways.
- Use the extension "Options" section to input an agent manually.
- Use the extensions "Options" section to import a list of agents from an XML file.
- Modify the Prefs.js file yourself found in your FireFox profile. The directory should look something like: C:\Documents and Settings\UserName\Application Data\Mozilla\Firefox\Profiles\ogrevxiy.default
User Agent Switcher installs with only a few user agents. This didn't cut it for my testing, so I created this XML file to extend the user agents.
It's a great FireFox extension that has real value for Web application testing. Give it a try! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Saturday, December 10, 2005 |
|
| |
|
|
| |
| Testing Web sites all day that require credentials can get really annoying (user: test, password: password). Over the course of the day a tester can achieve a good 100 logons easy. (100 logons) x (5 seconds) = 8.33 minutes a day, (8.33 minutes) x (5 days) = 41.66 minutes a week. You can get those 41 minutes a week back by using the tool RoboForm! |
 |
RoboForm provides automated logons from your Web browser toolbar (Internet Explorer, FireFox, & Netscape) and makes logging in effortless (1 click). As a tester it also saves you a lot of time by auto-filling forms for you; this is really nice when you don't actually care about testing the form but the pages that follow the form. I even use RoboForm at home to store all my site credentials. Sounds a bit insecure right? It's not insecure, the credentials are encrypted on the disk, require a master password to access, and the way the auto-login feature works it will actually prevent you from being phished.
In a nutshell, the main features include:
• AutoSave passwords in browser. • AutoFill passwords to login form. • Click Login button for you. • Fill personal info into online forms. • Save offline passwords & notes. • Generate Secure Random Passwords. • Encrypt passwords and personal data using AES, Blowfish, RC6, 3-DES or 1-DES algorithms. • All personal info is stored on your computer only. • Take RoboForm with you on USB disk for ultimate portability. • Sync your passwords and notes to Palm or Pocket PC . • Backup & Restore , Print your passwords. • It is well-behaved : NO ADWARE , NO SPYWARE . • Works under Windows as an add-on to IE-based browsers . • Works with Netscape, Mozilla, Firefox under Windows.
Download RoboForm here. "It's free to try, $29.99 to buy". Some features are disabled after 30 days (it will limit the number of Passcards you save).
Also, if you're interested in keeping your credentials stored on a USB drive instead of the disk you should take a look at Pass2Go (Portable RoboForm). |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
| |
Wednesday, December 07, 2005 |
|
| |
|
|
| |
I've been setting up three servers for load testing over the last couple days. It required a complete burn down and reload. Naturally that started with a selection of a disk array level but we wanted to put extra though into our SQL box since the load will be greatest there. Conversations with co-workers pointed me to RAID 10. I brushed up on the all different types of RAID at Wikipedia. All signs seemed to point to RAID 10. Something was missing though; I just needed a little reconfirmation. Jim (our Chief Security Executive) pointed me to this. Ah, it's so much clearer now... |
|
| |
 |
|
| |
|
|
|
| |
Monday, December 05, 2005 |
|
| |
|
|
| |
I've broken down and done it...my own personal blog. Don't get me wrong, blogging is not new to me, I've been blogging for my son Jace at JaceDaniel.com for a year now, but QAInsight.net will be from my perspective and will be more on the technical side (JaceDaniel.com is 1st person from Jace's perspective).
I'm really excited to share some of my thoughts with you on Software Quality Assurance and whatever else that may cross my path. Who am I? What do I have to share that is so important? "hello world" I'm Brent Strange. I'm a Quality Assurance Engineer who is currently employed at Corillian Corporation and have been here for almost 5 years. Prior to that I worked at Intel, and before that PCTest. History with these companies has given me experience with both software and hardware QA. I've tested applications as unique as Barbie Horse Adventure and apps as cool and new as Intelligent Authentication that runs on .NET Web Services. I've got a lot of QA thoughts and experience busting at the seams so listen up world! |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
| |
|
|
| |
Hey, I'm Brent Strange and I'm a Software Quality Assurance Rock-Star. Yep, ROCK-STAR. Before you get all. "Wow, you're really conceited" hear me out. Attitude is everything. You see, since I was young I used to dream about being a rock-star (as many others have too). I can't get over that image of me standing in the bright lights, guitar strapped to my shirtless sweaty torso as my fingers hammer out a riff while teenagers and young at heart moms faint with giddiness in the front row. Ahh. I can see it, the screaming fans, scrawling my rock-star signature on giddy women's forsaken body parts, living life on the edge while nearly dying thrice but never learning my lesson (booze, jealous girlfriend, high speed accident). The only thing saving my life in my reckless rampage is the down-fall of my band which force me to retire comfortably in Key West, Florida where I run my 50 foot catamaran out to the public reef for snorkeling tourists (at $200 a head). But, since I suck at the guitar I've settled with quality assurance. Not the "settle" with the bad attitude where I just do the job, get my 8 hours in and go home, but "settle" where I try to get the best of both worlds by incorporating a rock-star attitude into my test ideas, techniques, plans and cases. Why I Blog I'm not an expert in Quality Assurance and never will be. I enjoy learning from "experts" as well as teaching myself through real world experience. What I learn I like to pass on, thus I teach, train, and blog. The internet has been a great QA and technology training ground for me, but I'm sick of the overwhelming QA methodology and process articles. I have an understanding of QA methodology and process under my belt but in this age of agile testing, I want to know about (and find more interesting) unique test tools that fit my here and now test needs, test techniques, tips & tricks, and a better understanding of the technology that I'm testing. My goal is to have my QA blog based on those same things to help expand the internet's QA training ground. If you are interested in those same things, please subscribe to QAInsight.net (it's FREE). My Background I think my get-er-done attitude comes from my years of experience in construction as painter and finish carpenter where quality and speed mattered if you wanted to make money. With a half a decade of working for "the man" as a painter (specializing in lacquer work), I decided to have a go at business myself with S&S Painting, Twisted Pretzel, and All Angles Construction. I learned valuable lessons from each business and only failed at one (Twisted Pretzel: In think the food biz sucks...the product rots and location is everything). While making a career out of construction I was deeply interested and dabbling in PCs, Internet, Web design, and PhotoShop. My hobbies were hopeful dreams and one day I decided I was going to make those dreams a reality by pursuing anything in the related industry. Beating the street led me to MicroTech where I was a salesman, PC technician, and ultimately store manager. One shiny day, I got a call from PCTest looking for QA Engineers in which I promptly signed up for (I wanted to be a geek and didn't want to manage). At PCTest I did hardware compatibility for multimedia titles (Alien vs Predator, Barbie Goes to the Circus, etc.) and broke into Web application testing when PCTest landed an Intel account. After working with Intel for a while I was persuaded to join them and that I did. My Intel career lasted for two years, and it ended when I joined one of their new business groups (NBG) that spun off and then was denied our 2nd round funding by Intel and Visa. We were dot com bomb victims. Jobless... I quickly moved on to Corillian and continued to further my skills from 2001 to 2007 while testing and automating banking and security applications, and also managing the Pro Services QA group for a year. Corillian was eventually sold, forcing everybody to sell their stock options. So in early 2007, I decided to make a big change, and moved from the NW to Arizona to join GoDaddy.com where I've been doing automation until the present.
Hobbies and Interests - Web, graphic, and logo design - Photography - Youth Baseball (my kids) - Teaching - Writing - Music/Guitar - Hunting
Contact Cell: 480-250-6450 IM: brentstrange@hotmail.com Email: brent@qainsight.net LinkedIn: Brent Strange |
|
| |
 |
|
| |
|
|
| |
|
|
 |
|
 |
|
|
|
| QA Blogs |
|
|
| Profile |
 |
About Brent Strange |
|
E-mail
|
 |
Instant Message |
|
| Blog Archive |
List all Posts
| September, 2010 (1) |
| August, 2010 (2) |
| July, 2010 (2) |
| April, 2010 (1) |
| March, 2010 (3) |
| February, 2010 (4) |
| January, 2010 (4) |
| December, 2009 (2) |
| September, 2009 (1) |
| July, 2009 (1) |
| June, 2009 (1) |
| May, 2009 (2) |
| April, 2009 (2) |
| March, 2009 (5) |
| February, 2009 (4) |
| January, 2009 (1) |
| December, 2008 (2) |
| November, 2008 (2) |
| September, 2008 (7) |
| August, 2008 (1) |
| July, 2008 (3) |
| June, 2008 (1) |
| May, 2008 (2) |
| April, 2008 (9) |
| March, 2008 (14) |
| February, 2008 (8) |
| January, 2008 (14) |
| December, 2007 (7) |
| November, 2007 (5) |
| October, 2007 (13) |
| September, 2007 (11) |
| August, 2007 (4) |
| July, 2007 (1) |
| June, 2007 (4) |
| May, 2007 (10) |
| April, 2007 (7) |
| March, 2007 (6) |
| February, 2007 (12) |
| January, 2007 (18) |
| December, 2006 (6) |
| November, 2006 (5) |
| October, 2006 (22) |
| September, 2006 (12) |
| August, 2006 (17) |
| July, 2006 (11) |
| June, 2006 (20) |
| May, 2006 (17) |
| April, 2006 (23) |
| March, 2006 (28) |
| February, 2006 (15) |
| January, 2006 (21) |
| December, 2005 (14) |
| July, 2005 (2) |
| January, 2005 (1) |
|
| Legal Mumbo-Jumbo |
The opinions expressed herein are not necessarily those of my employer, not necessarily mine, and probably not necessary.
Copyright 2012 Brent Strange
|
|