1.1 Why Back End
Testing Is So Important
A Back End is the engine of any Client/Server
system. If the Back End malfunctions, it
may cause system deadlock, data corruption, data loss and bad performance. Many Front Ends log on to a single SQL
Server. A bug in a Back End may put
serious impact on the whole system. Too
many bugs in a Back End will cost tremendous resources to find and fix bugs and
delay the system developments.
It
is very likely that many tests in a Front End only hit a small portion of a
Back End. Many bugs in a Back End
cannot be easily discovered without direct testing.
Back End testing has several advantages: The Back
End is no longer a "black box" to testers. We have full control of test coverage and
depth. Many bugs can be effectively
found and fixed in the early development stage. Take Forecast LRS as an example; the number
of bugs in a Back End was more than 30% of total number of bugs in the
project. When Back End bugs are fixed,
the system quality is dramatically increased.
1.2 Differences between Back End Testing and Front
End Testing
It is not easier to understand and verify a Back
End than Front End because a Front End usually has friendly and intuitive user
interfaces.
A
Back End has its own objects, such as, Tables, Stored Procedures and
Triggers. Data integrity and protection
is critical. Performance and multi-user
support are big issues. Slowness in
operation can be vital to the project’s future.
There
are no sufficient tools for Back End testing. SQL language is mainly a testing
tool. MS Access and MS Excel can be used to verify data but they are not
perfect for testing. However, there are
a large number of test tools available for Front End testing.
To
be able to do Back End testing, a tester must have strong background in SQL
Server and SQL Language. It is relatively difficult to find testers who
understand both SQL Server and SQL Testing.
This causes a shortage of Back End testers.
1.3 Back End
Testing Phases
There are several phases in Back End testing. The
first step is to acquire design specifications for an SQL Server. The second step is test specification
design. The next step is to implement
the tests in this design with SQL Code.
The test specification design should contain
1). Component Testing
(individual pieces of the system).
2). Regression Testing
(previously known bugs).
3). Integration Testing
(several pieces of the system put together)
4). Entire System Testing
(which will include both Front and Back End).
Component
testing will be done early in the development cycle. Integration and system
test (including interfaces to Front Ends and nightly processes) are performed
after the component tests pass. Regression testing will be performed
continuously throughout the project until it is finished. The Back End usually
does not have an independent beta test, as it only exercised by the Front End
during the beta test period. The last step is to deliver users a quality
product.
1.4 Back End Test
Methodology
Back End test methodology has many things in common
with Front End testing and API testing. Many test methods can be used for Back
End testing. Structural testing and Functional testing are more effective
approaches in Back End testing. They are overlapped in some test cases. However, the two methods may discover
different bugs. We strongly recommend testers to do both types of testing.
There are many other test methods that can be applied to Back End testing. We list a few below.
Structural Testing:
A Back End can be
broken down into a finite number of testable pieces based on a Back End’s
structure. Tests will verify each and every object in a type of structure.
Functional Testing:
A
Back End can be broken down into a finite number of testable pieces based on
application’s functionality. The test focus is on functionality of I/P and O/P,
but not on the implementation and structure. Different projects may have
different ways to break down.
Boundary Testing:
Many
columns have boundary conditions. For example, in a column for percentages, the
value cannot be less than zero and cannot be greater than 100%. We should find
out these types of boundary conditions and test them.
Stress Testing:
It
involves subjecting a database to heavy loads. For incidence, many users
heavily access the same table that has a large number of records. To simulate
this situation, we need to start as many machines as possible and run the tests
over and over.
2. STRUCTURAL BACK
END TESTS
Although not all databases are the same, there are
a set of test areas that will be covered in all test specifications.
Based on
structure, a SQL Database can be divided into 3 categories:
1. Database Schema
2. Stored Procedures
3. Triggers
Database Schema: Schema includes Database Design, Tables, Table
Columns, Column Types, Keys, Indices, Defaults, and Rules.
Stored Procedures: Stored procedures are constructed on the top of a
SQL database. The Front End talks to API’s in DLL. The API’s communicate a SQL
database through those stored procedures.
Triggers: Triggers are a kind of stored procedures. They are
the "last line of defense" to protect data when data is about to be
inserted, updated or deleted.
Figure 1.
The Structure of SQL Back End
2.1
Database Schema Testing
Test Coverage Criterion: “EACH AND EVERY ITEM IN SCHEMA MUST BE TESTED
AT LEAST ONCE”
2.1.1 Databases and Devices
Verify the following things
and find out the differences between specification and actual databases
· Database Names
· Data device, log device and dump device
· Enough space allocated for each database
· Database option setting (i.e. trunc. option)
2.1.2 Tables, Columns, Column Types, Defaults and Rules
Verify the following things
and find out the differences between specification and actual tables
· All table names
· Column names for each table
· Column types for each table (int, tinyint,
varchar, char, text, date&time. specifically the number of characters for
char and varchar)
· Whether a column allows NULL or Not
· Default definitions
· Whether a default is bound to correct table
columns
· Rule definitions
· Whether a rule is bound to correct table columns
· Whether access privileges are granted to correct
groups
2.1.3 Keys and Indexes,
Verify the following things
and compare them with design specification
· Primary key for each table (every table should
have a primary key)
· Foreign keys
· Column data types between a foreign key column and
a column in other table
· Indices, clustered or non-clustered; unique or not
unique
2.2
Stored Procedure Tests
Test Coverage Criterion: “EACH AND EVERY STORED PROCEDURE MUST BE
TESTED AT LEAST ONCE”
2.2.1 Individual Procedure Tests
Verify the following things
and compare them with design specification
· Whether a stored procedure is installed in a
database
· Stored Procedure Name
· Parameter Names, Parameter Types and the number of
parameters
Outputs:
· When output is zero (zero row affected)
· When some records are extracted
· Output contains many records
· What a stored procedure is supposed to do
· What a stored procedure is not supposed to do
· Write simple queries to see if a stored procedure
populates right data
Parameters:
· Check parameters if they are required.
· Call stored procedures with valid data
· Call procedures with boundary data
· Make each parameter invalid a time and run a
procedure
Return Values:
· Whether a stored procedure returns values
· When a failure occurs, nonzero must be returned.
Error Messages:
· Make stored procedure fail and cause every error
message to occur at least once
· Find out any exception that doesn’t have a
predefined error message
Others:
· Whether a stored procedure grants correct access
privilege to a group/user
· See if a stored procedure hits any trigger error,
index error, and rule error
· Look into a procedure code and make sure major
branches are test covered.
2.2.2 Integration Tests of Procedures
· Group related stored procedures together. Call
them in particular order
· If there are many sequences to call a group of
procedures, find out equivalent classes and run tests to cover every class.
· Make invalid calling sequence and run a group of
stored procedures.
· Design several test sequences in which end users
are likely to do business and do stress tests
2.3
Trigger Tests
Test Coverage Criterion: “EACH AND EVERY TRIGGER AND TRIGGER ERROR
MUST BE TESTED AT LEAST ONCE”
2.3.1 Updating Triggers
Verify the following things
and compare them with design specification
· Make sure trigger name spelling is correct
· See if a trigger is generated for a specific table
column
· Trigger’s update validation
· Update a record with a valid data
· Update a record, a trigger prevents, with invalid
data and covers every trigger error
· Update a record when it is still referenced by a
row in other table
· Make sure rolling back transactions when a failure
occurs
· Find out any case in which a trigger is not
supposed to roll back transactions
2.3.2 Inserting Triggers
Verify the following things
and compare them with design specification
· Make sure trigger name spelling
· See if a trigger is generated for a specific table
column
· Trigger’s insertion validation
· Insert a record with a valid data
· Insert a record, a trigger prevents, with invalid
data and cover every trigger error
· Try to insert a record that already exists in a
table
· Make sure rolling back transactions when an
insertion failure occurs
· Find out any case in which a trigger should roll
back transactions
· Find out any failure in which a trigger should not
roll back transactions
· Conflicts between a trigger and a stored
procedure/rules
(i.e. a column allows NULL while a trigger doesn’t)
2.3.3 Deleting Triggers
Verify the
following things and compare them with design specification
· Make sure trigger name spelling
· See if a trigger is generated for a specific table
column
· Trigger’s deletion validation
· Delete a record
· Delete a record when it is still referenced by a
row in other table
· Every trigger error
· Try to delete a record that does not exists in a
table
· Make sure rolling back transactions when a
deletion fails
· Find out any case in which a trigger should roll
back transactions
· Find out any failure in which a trigger should not
roll back transactions
· Conflicts between a trigger and a stored
procedure/rules
(i.e. a column allows NULL while a trigger doesn’t)
2.4 Integration Tests of SQL Server
Integration
tests should be performed after the above component testing is done. It should
call stored procedures intensively to select, update, insert and delete records
in different tables and different sequences.
The main purpose is to see any conflicts and incompatibility.
· Conflicts between schema and triggers
· Conflicts between stored procedures and schema
· Conflicts between stored procedures and triggers
2.5 Server Setup Scripts
Two
cases must be tests: One is to set up databases from scratch and the other to
set up databases when they already exist.
Below is the minimum list of areas:
· Is a setup batch job available to run without much
operator’s assistance?
(It is not acceptable if it
requires an operator to run many batch jobs manually)
· Work environment the setup needs to run (DOS, NT)
· Environment variables (i.e. is %svr% defined?)
· Time it takes to set up
· Setup databases from scratch.
· Setup from existing databases
· Setup log and failure messages
· After setup, check for
Databases
Tables
Table’s attachments(Keys,
indexes, rules, defaults, column names and column types)
Triggers
Stored procedures
Look up data
User access privileges
3. Functional Back End Tests:
Functional
tests more focus on functionality and features of a Back End. Test Cases can be
different from project To project. But many projects have things in common. The
following section discusses the common areas. We encourage testers to add
project specific test cases in the functional test design.
3.1 How to divide Back End on
function basis
It is not a good idea to test a server database as
a single entity at initial stage. We
have to divide it into functional modules. If we cannot do the partition,
either we do not know that project deep enough or the design is not modulized
well. How to divide a server database is largely dependent on features of a
particular project.
METHOD
1: We may ask ourselves what the features of a project are. For each major feature, pick up portion of
schema, stored procedures and triggers that implement the function and make
them into a functional group. Each
group can be tested together. For
example, the Forecast LRS project had four services: Forecast, Product Lite,
Reporting, and System. This was the key
for functional partitioning:
Figure 2. View a SQL server pertaining to the functionality
METHOD 2: If the border of functional groups in a Back End
is not obvious, we may watch data flow and see where we can check the
data: Start from the Front End. When a service has a request or saves data,
some stored procedures will get called.
The procedures will update some tables. Those stored procedures will be
the place to start testing and those tables will be the place to check test
results.
Test Functions and Features
Test Coverage Criterion: “EACH AND EVERY FUNCTION OR FEATURE MUST BE
TESTED AT LEAST ONCE”
The following areas should be tested:
· Every feature no matter major or minor
· For updating functions, make sure data is updated
following application rules
· For insertion functions, make sure data is
inserted following application rules
· For deletion functions, make sure data is deleted
correctly
· Think about if those functions make any sense to
us. Find out nonsense, invalid logic, and any bugs.
· Check for malfunctioning
· Check for interoperations
· Error detection
· Error handling
· See if error messages are clear and right.
· Find out time-consuming features and provide
suggestions to developers
3.2 Checking Data Integrity
& Consistency
This is a really important issue. If a project does not guarantee data
integrity and consistency, we have obligation to ask for redesign. We have to check the minimum things below:
· Find out data protection mechanisms for a project
and evaluate them to see if they are secure
· Data validation before insertion, updating and
deletion.
· Triggers must be in place to validate reference
table records
· Check major columns in each table and see if any
weird data exist. (Nonprintable characters in name field, negative percentage,
and negative number of PSS phone calls per month, empty product and so on)
· Generate inconsistent data and insert them into
relevant tables and see if any failure occurs
· Try to insert a child data before inserting its
parent’s data.
· Try to delete a record that is still referenced by
data in other table
· If a data in a table is updated, check whether
other relevant data is updated as well.
· Make sure replicated servers or databases are on
sync and contain consistent information
3.3 Login & User Security
The following things need to be checked:
· Email validation
· SQL user login (user id, password, host name)
· NT server login
· Database access privilege (the sysusers table)
· Database security hierarchy
· Table access privilege (if ‘select’ is allowed.)
· Table data access control
· Training account (maybe no password is required)
There are more test cases here:
· Simulate front-end login procedure and check if a
user with correct login information can login
· Simulate front-end login procedure and check if a
user with incorrect login information fail to login
· Check concurrent logins (make many users login at
the same time.)
· Try to login when a time-consuming query is
running to see how long login will take to succeed
· Check for any security-restrict functions and see
they are working properly
· See any data view restriction in place, such as, a
user can see his data and the data of people who report to him.
3.4 Stress Testing
We should do stress tests on major
functionality. Get a list of major Back
End functions/features for a project.
Find out corresponding stored procedures and do the following things:
Test Coverage Criterion: “EACH AND EVERY MAJOR FUNCTION OR FEATURE
MUST BE INCLUDED IN STRESS TESTING”
· Write test scripts to try those functions in
random order but every function must be addressed at least once in a full
cycle.
· Run test scripts over and over for a reasonable
period
· Make sure log execution results and errors.
· Analyze log files and look for any deadlock,
failure out of memory, data corruption, or nothing changed.
3.5
Test a Back End via a Front End
Sometimes Back End bugs can be found by Front End
testing, especially data problem. The
following are minimum test cases:
· Make queries from a Front End and issue the
searches (It hits SELECT statements or query procedures in a Back End)
· Pick up an existing record, change values in some
fields and save the record. (It
involves UPDATE statement or update stored procedures, update triggers.)
· Push FILE - NEW menu item or the NEW button in a
Front End window. Fill in information
and save the record. (It involves
INSERT statements or insertion stored procedures, deletion triggers.)
· Pick up an existing record, click on the DELETE or
REMOVE button, and confirm the deletion. (It involves DELETE statement or
deletion stored procedures, deletion triggers.)
· Repeat the first three test cases with invalid
data and see how the Back End handles them.
3.6
Benchmark Testing
Test Coverage Criterion: “EACH AND EVERY FUNCTION OR FEATURE MUST BE
INCLUDED IN BENCHMARK TESTING”
When
a system does not have data problems or user interface bugs, system performance
will get much attention. The bad system
performance can be found in benchmark testing.
Four issues must be included:
· System level performance
· Major functionality (Pick up most-likely-used
functions/features)
· Timing and statistics (Minimal time, maximal time
and average time)
· Access volume (A large number of machines and
sessions must be involved.)
3.7
Common bugs
(To
be filled in)
4. NIGHTLY DOWNLOADING AND DISTRIBUTION
This
part is usually developed by an operation team.
It did not get enough attention a long time ago. However, after we deliver a product, end
users must live with nightly process every daily. Bugs in nightly job put serious impact on users’
daily work. Loss or corruption of
customer data can be severe. We
strongly recommend testers to intensively test nightly downloading and
distribution, particularly error detection and reporting.
4.1 Batch Jobs
By
batch job, we mean batch jobs for Windows NT, DOS or OS/2. (The SQL scripts
that are called by a batch job will be discussed in next three sections)
Test Coverage Criterion: “EACH AND EVERY BATCH JOB MUST BE TESTED AT
LEAST ONCE”
Here are the minimum list of test cases:
File transfer batch job:
· Destination path and source path
· All variables in a batch job must be resolved
(i.e. if %log% is used, the
“log” must be defined somewhere either in the same file or in other system
setup utility.)
· Make sure source files and their names are correct
as specified.
· Make sure destination files and their names are
correct as specified.
· Verify if any error level is checked after each
file copy.
· Error messages must be logged. Fatal errors must be sent to operators or
testers.
· Verify the database has the bulk copy option set
to true before a batch job is executed
· Get estimate of total batch execution time. Make sure it fits the time window (specially
the worst case)
BCP batch job:
· Make sure dbnmpipe.exe is automatically loaded and
bcp.exe/isql.exe are on the system path
· Check for pass-in parameters %1, %2, ... to a
batch job
· Make sure a table truncation script must be run
before bcp in to those tables
· Make sure database name, bcp in file name/bcp out
file name, and options /S, /U, /P, /c and /b
· Verify if any error level is checked after each
bcp command.
· Failure should be logged. Fatal failure should be sent to operators or
testers immediately
Batch file jobs that launch
SQL scripts:
· Make sure dbnmpipe.exe is automatically loaded and
isql.exe are on the system path
· Check for pass-in parameters %1, %2, ... to a
batch job
· Make sure all required SQL files and their names,
options /S, /U, /P
· Verify if any error level is checked after each
launching
· Failure should be logged. Fatal failure should be sent to operators or
testers immediately
4.2 Data Downloading
In most cases, downloading is not just BCP in to a
database. Data format change and
calculations may happen.
Test Coverage Criterion: “EACH AND EVERY SCRIPT MUST BE TESTED AT
LEAST ONCE”
We have to check the
following areas:
· Network connection status. Failure handling.
· Input data must be validated before a batch job
inserts/updates a database (Invalid data must be filtered out, i.e. NULLs in
critical fields, negative values, too big numbers)
· Input data populated to right tables
· Calculations must follow business rules
· Check if data is really changed after data
downloading
· See if two columns of data are mistakenly
exchanged (i.e. product_id data and productgroup_id data are reversed when
inserted)
· Check if any data is unexpectedly changed or
deleted
· See what happens if database objects do not exist
when downloading starts
4.3 Data
Conversion
The
goals of many ITG projects are moving end users from existing VAX systems into
PC platform systems. One of important steps is to convert old data into new
systems. Data conversion is required.
Test Coverage Criterion: “EACH AND EVERY SCRIPT MUST BE TESTED AT
LEAST ONCE”
We list several
checking items here:
· For each script, check for syntax error (Running a
script is an easiest way to find out)
· For each script, check for table mapping, column
mapping, and data type mapping
· Verify lookup data mapping
· Run each script when records do not exist in
destination tables
· Run each script when records already exist in
destination tables
· Make sure the execution sequence of scripts is
correct
(i.e. Look
up data must be converted first before conversions)
· Look for any scripts that encounter index error or
trigger errors
(i.e. error attempt to insert unique index row.)
· Make sure a major transaction statement is
followed by error checking “if @@error <>0”
· Look for any script that causes error out of
memory at run time
· Check for any scripts that take too long to run
for reasonable size of records. If it is
the case, suggest developers to optimize scripts.
· Make sure “begin tran” and “commit tran” are in
scripts
· If a failure occurs, transactions in a block after
“begin tran” should be rolled back
4.4 Data
Distribution
There are two kinds of data distribution: One kind
is to send replicated data to other SQL servers across LAN and WAN and keep
them in sync. The other distribution is
to pass information to other kinds of systems.
Header information and data need converting. For example, KBATS article editing system
nightly sends articles to Knowledge base server and to external system like CompuServe. Here is a minimum checking list:
Test Coverage Criterion: “EACH AND EVERY FEATURE MUST BE TESTED AT
LEAST ONCE”
For data replication:
· Make sure every job extracts right updates from a
SQL server
· Look for any new records that are missing in
distribution data set
· Make sure data overwriting works correct
· Make sure sequences of data updates in destination
servers
· Run distribution utility when new updates need to
be distributed
· Run distribution utility when many changes are
made
· Verify data loss handling mechanism for LAN or WAN
environment
· Verify distribution mechanism when a network is
down
· Verify error handling when a destination server is
down
· Verify error handling when a source server is down
· Check if failures can be automatically recovered
or can be recovered from next run
For data conversion distribution:
· Make sure every job extracts right data from a SQL
server
· Look for any new records that are missing in
distribution data set
· Make sure table mapping, column mapping, data type
mapping, file format changes, and header changes
· Make sure data is converted to fit other systems
· Make sure data overwriting works correct
· Make sure sequences of data updates in destination
servers
· Run distribution utility when new updates need to
be distributed
· Run distribution utility when many changes are
made
· Verify data loss handling mechanism in LAN or WAN
· Verify distribution mechanism when a network is
down
· Verify error handling when a destination server is
down
· Verify error handling when a source server is down
· Check if failures can be automatically recovered
or can be recovered from next run
5.
INTERFACES TO TRANSACTION API’S
By
Transaction API, we mean those API’s that are specially designed for our
projects to handle communications between a Front End and a Back End. Those
APIs are not part of SQL DBLIB or ODBC.
Although they do not belong to a Back End, we have to test their
interfaces to Back End.
Figure 3. Connections between a Front End and a Back End
5.1 Connections to a SQL Server Database
· Make sure transaction APIs can open connections to a SQL server
· Verify APIs are able to send queries to a SQL server and retrieve data
· Unplug net cable and see if APIs can detect it
· Stop a SQL server and call APIs to make connection
· Stop a SQL server in the middle of transaction
5.2 Send Queries to a Back End
· Call each API that sends queries to a Back End
· Make sure APIs call right stored procedures
· Verify parameters in stored procedure calls
· Make sure APIs should call stored procedures to access a SQL
server. It is not recommended to send a
simple query like “SELECT ... FROM ... WHERE...”
5.3 Receive Output from a Back End
· For every API, try a query with no row returned
· For every API, try more than one row returned
· For major API, try to have many rows returned
· Disconnect in the middle of transactions and check error detection
· Make sure an API always checks the return value of a stored procedure
· When a failure occurs, an API should receives value nonzero
6. OTHER TEST ISSUES
6.1 Test Tips
· No
program is bug free. If you have been
doing tests for several days and do not find any bugs, our test methods or test
data might be wrong. You should at least have some suggestions for developers.
· The
Break-Program attitude is highly recommended.
If you don’t break it now, end users will break it later.
· There are
a huge number of test cases. Always ask
yourselves if any test case is missing and if our test specifications are
complete.
· When you
design test specification, think about valid cases, invalid cases and boundary
cases
· Effective
test methodology is neither unique nor universal. Feel free to discuss the test plan, test
specifications and test data with other testers.
· When
testing, you should pretend to be different levels of users. As “power” users, you can test advanced
features heavily. As novices, you can do
“stupid” things, i.e. turn off the machine in the middle of a transaction.
· If you
suspect any result or message, go ahead and track it down. You may have found a “big” bug.
· Before
you log a bug into Raid, find out the minimal steps to reproduce it. If you can not reproduce a bug, make a note
and try it next time.
· If a
developer resolves a major bug as “By-Design”, but you think it is crucial to
fix, try to convince the developer and your test lead.
· If you
can track a bug down to a code level, do it.
You will learn something new from bug tracking
· If a test is likely to be repeated later, automate it.
· A good programmer may not be a good tester. Be proud of your ability to find bugs.
· You are
an important part of product development.
You help to ensure the high quality of ITG products.
6.2 Test
Tools
As mentioned earlier in this document, there are not many good tools
for Back End testing. But some
utilities can be used.
· SQL language:
Write test scripts to call stored procedures, retrieve data,
insert/update/delete records. Most Back
End test work can be done with the SQL language
· NT SQL utilities:
DOS utilities like isql.exe, bcp.exe
Windows applications such as WinQuery, ISQL/w, SQL Administration, SQL
Object Manager, SQL Client Configuration Utility
· MS Access:
We may take advantage of MS Access’s tables, queries, forms, reports,
macros and modules.
· Excel:
MSQuery and Q+E are useful for data validation
· Our own test tools:
Several test tools have been developed. For example, stored procedures to log
passed/failed for each test and to present test statistics.
6.2 Useful
Queries
To
facilitate testing, we post some useful queries here. They are just something good to start
with.
· Check for
data devices and log devices:
sp_helpdb
<database_name>
· Check for
space used:
sp_spaceused
<database_name>
· Get
information about an object in a database:
sp_help
<object_name>
where
<object_name> can be a table name, trigger name, stored procedure name
and so on.
· Get
trigger code, procedure code, or view code, do:
sp_helptext
<object_name>
· Find out
who is on system, whose host name and other information:
sp_who
· Change
database:
user
<destination database_name>
· Find out
existence of SQL objects by type:
select
* from sysobjects where type = “<type>“
where
<type> can be
U -------
User table
V -------
View
P -------
Stored procedure
TR -------
Trigger
· Count the
numbers of records in individual user tables:
select
"print '"+name+"'
select
count(*) from "+name+"
go"
from sysobjects where type = ‘U’
Note: this statement does do count().
It outputs a script that does count.
· Generate invalid
test data:
declare
@customer_id int
/*
Generate an invalid customer company id. */
select
@customer_id = MAX (customercompanyid) + 1 from customercompany
· Make a
name unique and general using SUSER_NAME():
declare
@companyname varchar(40)
select
@ companyname = SUSER_NAME() + “‘S TEST COMPANY”
· The
following code is to go through every record in a table and put a number after
a company name:
declare
@number int, @companyname varchar(40)
select
@number = 1
select
@companyname = MIN(companyname) from customercompany
/*
Change companyname */
while
@companyname <> “”
begin
/* Update a companyname */
update customercompany
set companyname = companyname +
convert(varchar, @number)
where companyname = @companyname
/* Pick up next companyname */
select @companyname = MIN(companyname)
from customercompany
where companyname > @companyname
end
DATABASE TESTING
TYPES
1) Data
Integrity Test:
Once a
value undergoes any of the above actions (Update/Delete/Insert) the database
should be verified for the changes performed on related entities I.e. Foreign
key/Primary key and all dependent entities.
2) Stored
Procedure Test:
Every
Stored Procedure is to be tested separately for its functionality (Based on
Separate functions it performs) Stored procedures need to be broken up into
Action Items based on Functions and then Each action item needs to be tested
separately as the results of Complete Stored procedure.
3) Data
Type Test:
This
test is performed to verify that the data types used by the DBA are same as
expected by agreed upon by the developer. Often the data types chosen by
developers are not the same as suggested by database administrators, especially
for the fields like
A) Phone (Num./Text)
B) Description (Large Text)
These kinds
of mismatches often do not affect the functionality and normal execution of
code, but prove to be very Costly during updation of product or during addition
of features to the existing modules.
4) Data
Size Test:
Performance
of Data size testing is often done only at the Front End during the unit
testing, but it is essential to perform it at Back End separately.
This
ensures smooth transition while appending functionality and integrating modules
as during these Phases, the data is passed to the system with direct user
interaction and bypassing front-end validation.
5) Event
Driven Item Test:
Event
Driven Actions (Triggers or Scheduled Actions) needs to be tested on two
parameters.
A) Events
that trigger these actions: Here QA needs to check the events on which any of
the trigger can get fired/executed. This testing can be done with the help of
DBA also.
B) Actions
performed by the above stated events. Here the contents of such stored
procedures or scheduled actions are verified for the functionality.
6) Input Item
Verification:
This is the
process of verification of the input items (Though this is not totally a part
of database testing, but this has to be performed essentially during database
testing of the Web based applications.
Often it is
seen that the input items (Text Box/ RTB / Combination Box / Active-X controls)
are tested for validation only at Front End (Screen testing) but these are
again to be tested with junk Character values to confirm that they do not push
in such characters which the databases Often misrepresent or Replace with other
characters (this testing can partially be performed during Unit testing also by
the developer.
No comments:
Post a Comment