From the author of

Phase 4: Test Planning, Design, and Development

Test planning, design, and development is the fourth phase of the ATLM. These
subjects are summarized in the following sections.

Test Planning

The test planning stage represents the need to review longlead-time
test planning activities. During this phase, the test team identifies test
procedure creation standards and guidelines; hardware, software, and network
required to support test environment; test data requirements; a preliminary test
schedule; performance measure requirements; a procedure to control test
configuration and environment; as well as defect-tracking procedure(s) and
associated tracking tool(s).

The test environment setup is part of test planning. It represents the need
to plan, track, and manage test environment setup activities, where material
procurements may have long lead times. The test team needs to schedule and track
environment setup activities; install test environment hardware, software, and
network resources; integrate and install test environment resources;
obtain/refine test databases; and develop environment setup scripts and test bed
scripts.

Test Design

The test design component addresses the need to define the number of tests to
be performed, the ways that testing will be approached (paths, functions), and
the test conditions that need to be exercised. Test design standards need to be
defined and followed.

An effective test program, incorporating the automation of software testing,
involves a mini-development lifecycle of its own, complete with strategy and
goal planning, test requirement definition, analysis, design, and coding.
Similar to software application development, test requirements must be specified
before test design is constructed. Test requirements need to be clearly defined
and documented, so that all project personnel will understand the basis of the
test effort. Test requirements are defined within requirement statements as an
outcome of test requirement analysis.

After test requirements have been derived using the described techniques,
test procedure design can begin. Test procedure design consists of the
definition of logical groups of test procedures and a naming convention for the
suite of test procedures. With a test procedure definition in place, each test
procedure is then identified as either an automated or a manual test. During the
test planning phase, the test team gets an understanding of the number of test
techniques being employed and an estimate for the number of test procedures that
will be required. The test team also will have an estimate of the number of test
procedures that will need to be performed manually, as well as with an automated
test tool.

Much like a software development effort, the test program must be mapped out
and consciously designed to ensure that test activities performed represent the
most efficient and effective tests for the system under test. Test program
resources are limited, yet ways of testing the system are endless. A test design
is developed to portray the test effort, in order to give project and test
personnel a mental framework on the boundary and scope of the test program.

Following test analysis, the test team develops the test program design
models. The first of these design models, the test program model,
consists of a graphical illustration that depicts the scope of the test program.
This model typically depicts the test techniques required to support the dynamic
test effort and also outline static test strategies.

Having defined a test program model, the test team constructs a test
architecture, which depicts the structure of the test program and defines
the way that test procedures will be organized in support of the test
effort.

The next step in the test procedure design process (see Table 1) is to
identify those test procedures that stand out as being more sophisticated, and
as a result are required to be defined further as part of detailed test design.
These test procedures are flagged and a detailed design document is prepared in
support of the more sophisticated test procedures. Following detailed test
design, test data requirements are mapped against the defined test procedures.
To create a repeatable, reusable process for producing test procedures, the test
team needs to create a document that outlines test procedure design standards.
Only when these standards are followed can the automated test program achieve
real efficiency and success, by being repeatable and maintainable.

Table 1 Test Procedure Design Process

Step

Description

1

Test Architecture Review. The test team reviews the test architecture
in order to identify the test techniques that apply.

2

Test Procedure Definition (Development Level). A test procedure
definition is constructed at the development test level, identifying the test
procedure series that applies for the various design components and test
techniques.

3

Test Procedure Definition (System Level). A test procedure definition
is constructed at the system test level, identifying the test procedure series
that applies for the various test techniques.

4

Test Procedure Design Standards. Design standards are adopted and a
unique naming convention is adopted that distinguishes the test procedures on
the project from test procedures developed in the past or on other projects.

5

Manual Versus Automated Tests. Test procedures will be depicted as
being either performed manually or as part of an automated test.

6

Test Procedures Flagged for Detailed Design. Test procedures that
stand out as more sophisticated are flagged. These test procedures are further
defined as part of detailed test design.

7

Detailed Design. Those test procedures flagged as part of step 7 are
designed in further detail within a detailed test design file or document. Test
procedure detailed design may consist of pseudo-code of algorithms, preliminary
test step definition, or pseudo-code of test automation programs.

The exercise of developing the test procedure definition not
only aids in test development, but helps to quantify or bound the test effort.
The development of the test procedure definition involves the identification of
the suite of test procedures that need to be developed and executed in support
of the test effort. The design exercise involves the organization of test
procedures into logical groups and the definition of a naming convention for the
suite of test procedures.

At the system level, it may be worthwhile to develop a detailed test design
for sophisticated tests. These tests might involve test procedures that perform
complex algorithms, consist of both manual and automated steps, and test
programming scripts that are modified for use in multiple test procedures. The
first step in the detailed design process is to review the test procedure
definition at the system test level. This review is conducted for the purpose of
identifying those test procedures that stand out as being more sophisticated and
that, as a result, are required to be defined further as part of detailed test
design.

Detailed test design may take the form of test program pseudo-code, when test
programming is required. The detailed design may be represented simply as a
sequence of steps that need to be performed in support of a test. When
programming variables and multiple data values are involved, the detailed design
may reflect the programming construct of a loop supporting an iterative series
of tests involving different values, together with a list or table identifying
the kinds of data or ranges of data required for the test.

Following the performance of detailed test design, test data requirements
need to be mapped against the defined test procedures. Once test data
requirements are outlined, the test team needs to plan the means for obtaining,
generating, or developing the test data.

The structure of the test program (test architecture) is commonly portrayed
in two ways. One test procedure organization method involves the logical
grouping of test procedures with the system application design components, and
is referred to as a design-based test architecture. Another method
represents a test technique perspective and associates test procedures with the
various kinds of test techniques represented within the test program model, and
is referred to as a technique-based test architecture.

An understanding of test techniques is necessary when developing test design
and the test program design models. Personnel performing testing need to be
familiar with the test techniques associated with the white box and black box
test-approach methods. White box test techniques are aimed at exercising
software program internals; black box techniques generally compare the
application under test behavior against requirements that address testing via
established public interfaces such as the user interface or the published
application programming interface (API).

Test Development

For automated tests to be reusable, repeatable, and maintainable, test
development standards need to be defined and followed.

After performing test analysis and design, the test team is now ready to
perform test development.

Keep in mind that the test design and development activities follow an
iterative and incremental approach, in order to address the highest risk
functionality up front. Table 2 correlates the development process phases to the
test process phases. The testing processes and steps outlined in the table are
strategically aligned with the development process, and the execution of these
steps results in the refinement of test procedures at the same time as
developers are creating the software modules. Automated and/or manual test
procedures are developed during the integration test phase with the intention of
reusing them during the system test phase.

Table 2 Development/Test Relationship

Phase

Development Process

Test Process

Module (Unit) Development

Design module from requirements.

Perform test planning and test environment setup.

Code module.

Create test design and develop test data.

Debug module.

Write test scripts or record test scenario using module.

Unit test module.

Debug automated test script by running against module. Use tools that support
unit testing.

Rerun automated test script as part of regression test as defects are
corrected.

Acceptance Test

Review incident reports.

Perform subset of system test as part of demonstration of user acceptance
test.

Correct defects.

Rerun automated test script as part of regression test as defects are
corrected.

Many preparation activities need to take place before test
development can begin. A test development architecture is developed (described
in the next section), which provides the test team with a clear picture of the
test development preparation activities or building blocks necessary for the
efficient creation of test procedures. The test team will need to tailor the
sample test development architecture to reflect the priorities of their
particular project. Part of these setup and preparation activities involves the
need to track and manage test environment set up activities, where material
procurements may have long lead times. Prior to the commencement of test
development, the test team also needs to perform analysis to identify the
potential for reuse of existing test procedures and scripts within the
automation infrastructure (reuse library).

The test team needs to develop test procedures according to a test procedure
development/execution schedule. This schedule needs to allocate personnel
resources and reflect development due dates, among other factors. The test team
needs to monitor development progress and produce progress status reports. Prior
to the creation of a complete suite of test procedures, the test team performs a
modularity relationship analysis. The results of this analysis help to
incorporate data dependencies, plan for workflow dependencies between tests, and
identify common scripts that can be applied repeatedly to the test effort. As
test procedures are being developed, the test team needs to ensure that
configuration control is performed for the entire test bed to include test
design, test scripts, and test data, as well as for each individual test
procedure. The test bed needs to be baselined using a configuration management
tool.

Test development involves the development of test procedures that are
maintainable, reusable, simple, and robust, which in itself can be as
challenging as the development of the application under test. Test procedure
development standards need to be in place supporting structured and consistent
development of automated tests. Test development standards can be based on the
scripting language standards of a particular test tool. For example,
Rational's Robot uses SQABasic, a Visual Basiclike scripting
language, and therefore the script development standards could be based on the
Visual Basic development standards, outlined in a number of books on the
subject.

Usually internal development standards exist that can be followed if the
organization is developing in a language similar to the tool's scripting
language. The adoption or slight modification of existing development standards
is generally a better approach than creating a standard from scratch. If no
development standards exist within the organization for the particular tool
scripting language, it's important for the test team to develop script
development guidelines. Such guidelines can include directions on context
independence, which addresses the particular place where a test procedure
should start and where it should end. Additionally, modularity and reusability
guidelines need to be addressed.

By developing test procedures based on development guidelines, the test team
creates the initial building blocks for an automation infrastructure. The
automation infrastructure will eventually contain a library of common, reusable
scripts. Throughout the test effort and in future releases, the test engineer
can make use of the automation infrastructure to support reuse of archived test
procedures, minimize duplication, and thus enhance the entire automation
effort.

Test Development Architecture

Test team members responsible for test development need to be prepared with
the proper materials. Test team personnel need to follow a test development
architecture that includes, for example, a listing of the test procedures
assigned to them and a listing of the outcome of automated versus manual test
analysis. Also, test team personnel need to decide when to automate. At times a
test team might want to avoid automating using a GUI testing tool before the
interfacewhether API, character UI, or GUIis stabilized, to avoid
having to reengineer the automated tests in response to nonbug-related
changes. At other times, the test team might find workaround solutions when
automating an unstable GUI, such as focusing automation on the known stable
parts only.

The test engineer needs to adhere to the test procedure development and
execution schedule, test design information, automated test tool user manuals,
and test procedure development guidelines. Armed with the proper instructions,
documentation, and guidelines, test engineers will have the foundation that
allows them to develop a more cohesive and structured set of test procedures.
Repeating a process and repeatedly demonstrating a strong test program depends
on the availability of documented processes and standard guidelines such as the
test development architecture.

Figure 2 shows
an example of a graphical illustration containing the major activities to be
performed as part of the test development architecture. Test development starts
with test environment setup and preparation activities, discussed earlier. Once
they're concluded, the test team needs to make sure that all pertinent
information necessary to support development has been documented or gathered.
The test team will need to tailor the sample test development architecture in
Figure 2 to reflect the priorities of their particular project. Note that Figure
2 should be read from bottom to top.

Technical Environment

Test procedure development needs to be preceded by several setup activities.
The test development activity needs to be supported by a technical environment,
which facilitates the development of test procedures. As a result, the test
environment needs to be set up and ready to go. The test environment includes
the technical environment, which may include facility resources as well as the
hardware and software necessary to support test development and execution. The
test team needs to ensure that there are enough workstations to support the
entire team. The various elements of the test environment need to be outlined
within the test plan, as discussed earlier.

Environment setup activities can also include the use of an environment setup
script to load test data or restore a drive image, and to calibrate the test
tool to the environment. When test tool compatibility problems arise with the
application under test, workaround solutions have to be identified. When
developing test procedures, it's important that the schedule for developing
test procedures is consistent with the test execution schedule. It's also
important that the test team follow test procedure development guidelines.

The test team must ensure that the proper test room or laboratory facilities
are reserved and set up. Once the physical environment is established, the test
team ensures that all necessary equipment is installed and operational. The test
plan defined the required technical environment and addressed test environment
planning. Within the test environment section of the test plan, the test team
has already identified operational support required to install and check out the
operational readiness of the technical environment. The test team needs to
ensure that operational support activities have been properly scheduled and must
monitor progress of these tasks.

Specific tasks and potential issues outlined in the test plan should now have
been addressed and resolved. Such issues could include network installation,
network server configuration and allocated disk space, network access
privileges, required desktop computer processing speed and memory, number and
types of desktop computers (clients), video resolution requirements, and any
additional software required to support the application, such as browser
software. Automated test tools that apply should have been scheduled for
installation and checkout. These tools now should be configured to support the
test team and be operational within the test environment.

The test environment setup activity includes the need to track and manage
test environment setup activities, where material procurements may have long
lead times. These activities include the need to schedule and track environment
setup activities; install test environment hardware, software, and network
resources; integrate and test-install test environment resources; obtain/refine
test databases; and develop environment setup scripts and test bed scripts.

The hardware supporting the test environment must be sufficient to ensure
complete functionality of the production application. Test environment hardware
needs to be sufficient to support performance analysis. In cases where the test
environment utilizes hardware resources that are also supporting other
development or management activities, special arrangements may be necessary
during actual performance testing. During system test, the software
configuration loaded within the test environment must be a complete, fully
integrated release with no patches and no disabled sections. The hardware
configuration supporting the test environment needs to be designed to support
processing, storage, and retrieval activities, which may be performed across a
local or wide area network, reflecting the target environment.

The test environment design also needs to consider stress testing
requirements. Stress and load tests may require the use of multiple workstations
that will run multiple test procedures simultaneously; some automated test tools
include a virtual user simulation functionality that eliminates or minimizes the
need for multiple workstations.

Test data will need to be obtained with enough lead time to support
refinement and manipulation to support test requirements. Data preparation
activities include the identification of conversion data requirements, the
preprocessing of raw data files, loading of temporary tablespossibly in a
relational database management system format, and the performance of consistency
checks. Identifying conversion data requirements involves performing in-depth
analysis on data elements, which includes defining data-mapping criteria,
clarifying data-element definitions, confirming primary keys, and defining
data-acceptable parameters.

During test planning, the test team defined and scheduled the test
environment activities. Now the team needs to track the test environment setup
activities. Resources need to be identified to install hardware, software, and
network resources into the test environment and integrate and test installed
test environment resources. The test environment materials and the application
under test need to be baselined within a configuration management tool.
Additionally, test environment materials may include test data and test
processes.

The test team needs to obtain and modify test databases necessary to exercise
software applications, and develop environment setup scripts and test bed
scripts. The test team should perform product reviews and validation of all test
source materials. The location of the test environment for each project or task
should be defined within the test plan for each project. Early identification of
the test site is critical to cost-effective test environment planning and
development.