Developing a Test Specification

Definitions

I’ve seen the terms “Test Plan” and “Test Specification” mean slightly different things over the years. In a formal sense (at this given point in time for me), we can define the terms as follows:

  • Test Specification – a detailed summary of what scenarios will be tested, how they will be tested, how often they will be tested, and so on and so forth, for a given feature. Examples of a given feature include, “Intellisense, Code Snippets, Tool Window Docking, IDE Navigator.” Trying to include all Editor Features or all Window Management Features into one Test Specification would make it too large to effectively read.
  • Test Plan – a collection of all test specifications for a given area. The Test Plan contains a high-level overview of what is tested (and what is tested by others) for the given feature area. For example, I might want to see how Tool Window Docking is being tested. I can glance at the Window Management Test Plan for an overview of how Tool Window Docking is tested, and if I want more info, I can view that particular test specification.

If you ask a tester on another team what’s the difference between the two, you might receive different answers. In addition, I use the terms interchangeably all the time at work, so if you see me using the term “Test Plan”, think “Test Specification.”

Parts of a Test Specification

A Test Specification should consist of the following parts:

  • History / Revision – Who created the test spec? Who were the developers and Program Managers (Usability Engineers, Documentation Writers, etc) at the time when the test spec was created? When was it created? When was the last time it was updated? What were the major changes at the time of the last update?
  • Feature Description – a brief description of what area is being tested.
  • What is tested? – a quick overview of what scenarios are tested, so people looking through this specification know that they are at the correct place.
  • What is not tested? – are there any areas being covered by different people or different test specs? If so, include a pointer to these test specs.
  • Nightly Test Cases – a list of the test cases and high-level description of what is tested each night (or whenever a new build becomes available). This bullet merits its own blog entry. I’ll link to it here once it is written.
  • Breakout of Major Test Areas – This section is the most interesting part of the test spec where testers arrange test cases according to what they are testing. Note: in no way do I claim this to be a complete list of all possible Major Test Areas. These areas are examples to get you going.
    • Specific Functionality Tests – Tests to verify the feature is working according to the design specification. This area also includes verifying error conditions.
    • Security tests – any tests that are related to security. An excellent source for populating this area comes from the Writing Secure Code book.
    • Stress Tests – This section talks about what tests you would apply to stress the feature.
    • Performance Tests – this section includes verifying any perf requirements for your feature.
    • Edge cases – This is something I do specifically for my feature areas. I like walking through books like How to break software, looking for ideas to better test my features. I jot those ideas down under this section
    • Localization / Globalization – tests to ensure you’re meeting your product’s International requirements.

Setting Test Case Priority

A Test Specification may have a couple of hundred test cases, depending on how the test cases were defined, how large the feature area is, and so forth. It is important to be able to query for the most important test cases (nightly), the next most important test cases (weekly), the next most important test cases (full test pass), and so forth. A sample prioritization for test cases may look like:

  • Highest priority (Nightly) – Must run whenever a new build is available
  • Second highest priority (Weekly) – Other major functionality tests run once every three or four builds
  • Lower priority – Run once every major coding milestone

View original comments

Code Snippets 101

I’ve been testing the new Code Snippets feature heavily the past couple of days. Meghan (Editor Dev Lead) and Sean (Editor PM) have good information about Code Snippets on the VS Editor blog:

Code Snippets – a way to be more efficient in writing code

Code Snippet – Schema Description

Definitely let me know if you have any questions, comments, and especially bugs you want to report

More Tips on Writing Good Bug Reports

Marie has done an awesome job writing up the most complete “how to file a good bug report” I’ve ever seen on paper: http://blogs.msdn.com/productfeedback/archive/2004/09/27/235003.aspx

Two things I really want to emphasize:

  1. Good bug titles – we have lots of bugs in the database. Lots. It is important for the bug title to include words that someone else might use to look up the bug. A good rule of thumb that I use is before I even start to write up the bug report, I search for the bug. Well, we all should first search for the bug before filing, but what I do a little differently is record what words I used to try to query the bug with. I make sure I use those words somewhere in the bug title.
  1. Include the least amount of repro steps as possible – Double-check whether you really have to create a project to repro the bug. Or does the bug repro with any project opened or just a specific language? The fewer the steps, the better information we can provide the developer with. And the developer can always use the extra time to fix more bugs. After a while, those extra few steps really start to add up.

View original comments

A Few Editor Tips and Tricks I Learned from the Full Test Pass

I’m getting close to finishing all of our manual test cases for our Full Test Pass, which has helped me tremendously to learn about my new feature area. Here is my list of tips and tricks that I’ve collected over the past couple of weeks:

Tip #1 – Code Drag and Drop

Make sure the Tools – Options – Text Editor – General – Drag and drop text editing checkbox is checked.

Suppose you’re working in a class library and you have two class files opened. You realize, hey, I want to move/copy this class or method to another code file. Or you just want to move/copy certain parts of the code to another location within the same file.

How To Use:

  1. Select the code snippet
  2. Drag to new location
  3. (Press Ctrl for copy)

Tip #2 – Block selection

Did you know you can use block selection?

How To Use:

  1. Press and hold Alt while selecting code via the mouse

Tip #3 – View Visible White Space

Did you know you can view the visible white space?

How To Use:

  1. Go to Edit – Advanced – View White Space

Tip #4 – View the Undo and Redo command stacks on the toolbar

Make sure you have the Text Editor toolbar selected. By default this toolbar should appear whenever you have a file opened in the editor.

How To Use:

  1. Drop down the Undo or Redo button on the toolbar
  2. Select as how far back you want to unwind or rewind the stack

Tip #5 – Tracking Changes

Make sure you have Tools – Options – General – Selection Margin checkbox checked and Tools – Options – General – Track Changes checkbox checked to view Track Changes.

Yellow – you’ve edited these lines since your last save

Green – the lines you’ve edited before your last save. Yellow becomes Green upon saving. Save again and Green disappears.

Tip #6 – Printing with different fonts and colors

Have you ever wanted to print out code file with a larger font or perhaps different colors than your text editor fonts and colors?

How To Use:

  1. Open Tools – Options – Fonts and Colors
  2. Under Show settings for:, select Printer
  3. Apply changes (like increase font size or change colors)

A good way to preview your changes is to make the modifications to your Text Editor settings, then select the Printer settings. The Use Default button changes to Use. Press Use and select “Use Text Editor”.