COEN 286: Software Test Exercise

Software Testing and Quality Assurance -- winter, 2008

Prof. John Noll

Santa Clara University

$Id: test-exercise.body,v 1.39 2008/01/28 03:32:34 jnoll Exp $
Due January 31, at the beginning of class. Accounts have been created.

1. Introduction

What happens when you are tasked with testing a non-trivial product with which you have no familiarity? Bach describes a ``General Functionality and Stability Test Procedure'' that one could apply to this situation. Originally designed for certifying products for Windows 2000, it allows the tester to start from no product knowledge, and leads to an assessment of product fitness.

Your task is to perform the ``General Functionality and Stability Test Procedure'' (GFSTP) on the PEOS web interface. (Note: your username is the first six letters of your last name; your password is the last four digits of your student ID.)

2. Instructions

First, read Bach's paper describing GFSTP. The GFSTP approach has five phases:

  1. Identify the product's purpose.
  2. Identify the product's primary functions.
  3. Identify any areas of potential instability.
  4. Test each function and record any problems identified.
  5. Design and record a consistency verification test.
Your assignment is to perform each of these phases, as described below.

  1. Product purpose

    In this phase, your main objective is to become familiar with the product. Start by reading a PEOS paper, which explains the product's desired features at a high level. Then, use the product. (Your user name is the first six letters of your last name (all lowercase) as it appears on the official class roster. Your password is the last four digits of your student id.) From these documents, you should be able to derive the product's purpose. You may consult the product authority for clarification.

    Note: the product's purpose is not what it does, but what problem it solves for, or what benefit it provides to, its users.

  2. Product Functions

    The main source for product functions is the product itself. Develop an outline describing the product's functions in a hierarchical structure. Where possible, use the function name, title, or prompt as it appears on the product's UI; if the function doesn't have one, invent a descriptive name and put it in square brackets ("[]"). Also describe the function's type (button, link, menu, dialog, etc.).

    Bach says the outline should contain only primary functions. However, for this exercise you should include all functions. If you do this, it will be easier for the product authority to verify both the completeness of your inventory, and your judgment of what is primary or secondary. Also, by having the entire function inventory specified as an outline, it will be easier to identify groups of functions that might constitute areas of instability as described in the next step.

    How deep should your inventory go? Should you include controls or components that are incorporated from third party libraries? Should you inventory functions that don't appear to affect the product directly, such as file browsers? In general, if you are in doubt, include the function: it's better to be complete than leave out some important feature. For any given feature, ask yourself what your ``normal user'' would think. If this person would not distinguish a function as separate from the product, you should include it in your inventory. Note: don't inventory any feature that is part of the browser or operating system that would change if you used a different browser or platform. In other words, don't inventory features that are not invoked from the pages loaded by the product.

    Remember that your role is to add value by assessing whether the product is ready for shipment, and thus is ready and able to generate revenue for the organization that hired you. As such, your job is to represent the users and customers of the product, not its developers or managers. Don't make simplifying assumptions for the sake of expediency, lest you miss some important feature that causes the product to flop.

    It's possible that this attitude will create a function inventory that is too large to test in the available time. If so, you now have a strong case to argue for more testing time; if no more time is available, you can appeal to the product authority for help in determining which functions to test in the available time.

  3. Areas of Instability

    Follow Bach's guidelines (pp. 17 & 18) for identifying areas of potential instability. A process of ad hoc or exploratory testing will also help you uncover the soft spots in the implementation.

    You will almost certainly revise and extend this section after performing the actual tests.

  4. Test

    According to Bach, this phase has five steps:

    1. Test all primary functions.
    2. Test all areas of potential instability.
    3. Test a sampling of interesting contributing functions.
    4. Record any failures encountered.
    5. Record any ``product notes.''

    In this phase, you should write down tests that produce failures, and the results of those tests (so the product authority can verify that you did in fact find a failure).

    Document outright failures and ``problems'' (tests that produce ``quirky, annoying, erroneous, or otherwise concerning behavior''). Include as part of your documentation:

    1. Function name (from your list of primary/contributing functions).
    2. Invocation and input data.
    3. Status. Mark this as ``Fail'' or ``Suspect''; include a description of the offending behavior and why you think it is incorrect.

  5. Consistency Verification Test

    The last step is to design a consistency verification test that tests ``the most important primary functions ... to assure that the product behaves consistently ...'' The intent is to give a person installing the product a way to verify that the installation worked correctly. The consistency verification test should cover the ``most important'' primary functions, and should be detailed enough so that a person who is not familiar with the product can perform the steps correctly.

  6. The amount of time you spent on this exercise. This will not affect you're grade; we will use it to compare this technique to others later in the course.

3. Deliverables

Submit a printed (hard copy) report including the following:

  1. A cover page including your name, student id, the name of this course, the name of this exercise, and the date.
  2. Your statement of the product's purpose.
  3. Your primary and contributing function outline. This outline should be a complete inventory of all product functions (both primary and contributing). This is a deviation from Bach's recommendation. Each function should be labeled to show which are primary and which are contributing.
  4. Your list of at least five areas of potential instability.
  5. A list of failures and problems identified, including function name, invocation and input data, observed result, and explanation.
  6. Your proposed consistency verification test.

Here is a partial example showing the approach applied to the Linux convdate command.

Note: use the example as intended, as a guide to formatting, not test design; it is not complete.

In addition to the requirements enumerated above, be sure to read and follow the Quality Standards described on the Course Information page.

If for some reason you cannot attend class on the due date, notify me via email ahead of time to arrange for electronic submission.

The final document is due January 31, at the beginning of class.

4. Hints

  1. Don't make assumptions. When in doubt, consult the product authority.
  2. Be sure to include both primary and contributing functions in your outline.
  3. There are two things you must do to bind a resource that PEOS can access successfully:
    1. You must specify the *full* path to a file in the Design Center filesystem.
    2. The file must be world readable (that is, to everyone), and each component in the file path must be traversable.

      Note: I suggested during the break last Thursday to use a file in /tmp. If you do this, however, it must be in linux.students.engr.scu.edu/tmp.

      Another way to do this is to create a world readable file in your home directory, then make your home directory traversable:


      % cd ~
      % echo "A test resource" > my_resource
      % chmod a+r my_resource
      % chmod a+x .
      

      Generated Sat Mar 15 11:22:20 2008