With the interpretation of quality assurance (QA) as dealing with defects
adopted in the previous Section, we implicitly assumed that all discovered
defects will be resolved within the software development process before
product release. In this Section, we describe defect handling during the
execution of specific QA activities and examine how different QA activities
fit into different software processes. In addition, we also examine the
QA activities from the perspective of verification and validation (V&V),
and try to reconcile this V&V view with our view of QA as different
ways of dealing with defects.
1. HANDLING DISCOVERED DEFECT DURING QA ACTIVITIES
An important part of the normal execution of various QA activities is dealing
with the discovered problems, or handling defect. At the minimum, each discovered
defect needs to be resolved. To ensure its resolution, some records must
be kept and tracked. The exact way used to handle defects is also influenced
by the specific QA activities that led to their initial discovery, the project
environment, and other factors.
Defect handling and related activities
The most important activity associated with defect handling is defect resolution,
which ensures that each discovered defect is corrected or taken care of
through appropriate actions.
Each corrected or fixed defect needs to be re-verified to ensure failure-free
executions under the same execution conditions.
In the case that a discovered defect is not corrected, all the parties
involved must agree on the specific decisions or actions. For example, if
a defect from testing is later re-classified as not to be a defect, a justification
needs to be given and the decision agreed upon by the person who did the
re-classification, the tester who reported it in the first place, and all
other people involved. Similarly, if a defect is deferred because it is
considered to be a minor problem that can be fixed in a future release,
everyone involved must agree to this decision, and appropriate planning
for future actions is needed. In addition to the planned future fix, other
actions that need to be planned include relevant product support activities
to deal with the possible problems.
To support defect resolution, two other important activities associated
with defect handling are also needed: Defect logging, or the initial reporting
and recording of a discovered defect. This ensures that a record will be
kept for every discovered defect.
Defect tracking, which monitors and records what happened to each defect
after its initial discovery, up until its final resolution.
Various specific information about the discovered defects can be recorded
and updated through the defect handling process. Details about such information
and its usage in quality assessment and improvement are included in Section
20. To ensure proper collection and usage of defect data, we need to pay
special attention to the following in the defect discovery and resolution
activities: Consistent defect interpretation and tracking: We need to distinguish
execution failures, internal faults, and human errors. The specific problems
need to be counted and tracked consistently.
Timely defect reporting: Because defect measurements are used to monitor
and control software projects, we must ensure timely defect reporting to
keep the information current.
Defect handling process and tools
Defect handling is an important part of QA that involves multiple parties.
For example, during testing, the developers who fix discovered defects are
typically not the same as the testers who observed and reported the problems
in the first place. The exception is unit testing, which is usually carried
out parallel to coding by the same person. However, most defects from unit
testing are not formally tracked because they are considered as part of
the implementation activities.
In many organizations, defect handling is implicitly assumed to be part
of the project management activities, which is handled in similar ways as
configuration management.
A formalized defect handling process highlights important activities and
associated rules, parties involved, and their responsibilities. It is typically
defined by the different states associated with individual defect status
and transitions among these states due to status changes.
Such status changes follow certain rules defined by project management.
For example, a newly reported defect has the "new" status, which
may go through various different status changes, such as "working", "re-verify",
etc., until it is "closed". Different defect handling processes
may include different collections of defect status and other possible attributes.
The implementation of the defect handling process and enforcement of various
related rules typically need the support of software tools, commonly referred
to as defect tracking tools or defect handling tools. For example, during
the testing of various large software systems in IBM, two defect tracking
tools CMVC, an IBM product for configuration management and version control,
and IDSS, an IBM internal tool, were used for defect tracking (Tian et al.,
1997). Similarly, in many organizations, various software project management
tools are also used for version control and defect tracking. The same trend
is also carried over to the open source world. According to some recent
studies (Zhao and Elbaum, 2003; Koru and Tian, 2004), tools such as Bugzilla
(online at bugzilla . org) and Issuezilla (issuezilla.org) are typically
employed to handling defects for medium and large open source projects.
Defect handling in different QA activities
Defect handling is normally implicitly assumed but not emphasized in various
QA activities.
For example, during testing, we typically assume that discovered defects
will be fixed, re-verified, and eventually closed. However, we often do
not treat this as part of the testing activities but as something carried
out parallel to testing, because defect fixing is typically done by developers
or "code owners" instead of testers.
Among the three classes of the QA activities described in Section 3, defect
detection and removal activities, such as testing and inspection, are more
closely associated with defect handling. For example, the inspector of a
program may make an initial note about a possible problem in the program
code. When it is confirmed during the inspection meeting, it is formally
recorded as a defect, which needs to be fixed and re-verified later in the
later stages of the inspection process.
On the other hand, various defect prevention activities do not directly
deal with defects or the discovered faults, but rather deal with various
ways to prevent the injection of faults into the software systems. Consequently,
there are little or no discovered faults during these QA activities. As
a result, defect handling is not closely associated with defect prevention.
In defect containment activities, the focus is not on the discovery of
underlying faults that cause failures and possible accidents. In fact, in
these techniques, such as fault tolerance, faults are not typically identified,
while their dynamic impact was tolerated or corrected.
Consequently, there are little or no discovered faults. As a result, defect
handling is not closely associated with failure prevention and containment
activities either.
2. QA ACTIVITIES IN SOFTWARE PROCESSES
QA activities form an integral part of the overall software process. We
next examine the different ways that software QA activities can be carried
out and integrated into different types of software development and maintenance
processes.
QA in software development and maintenance processes In the software maintenance
process, the focus of QA is on defect handling, to make sure that each problem
reported by customers from field operations is logged, analyzed, and resolved,
and a complete tracking record is kept so that we can learn from past problems
for future quality improvement. In addition, such defect information can
be used as additional input in planning for future releases of the same
product or for replacement products. Among the different QA activities,
defect containment activities play an important role in post-release product
operations and maintenance support. For example, fault tolerance using recovery
blocks can keep systems operational even in face of problems caused by environmental
disturbances. However, repeated use of recovery blocks for the same situations
may be an indication of software problems instead of environmental disturbances
as the primary cause of some dynamic problems. Therefore, the systems need
to be taken off-line and fixed in order for recovery blocks to work consistently
in the future. Even for these techniques, most of the implementation activities
need to be carried out during software development, not after product release,
similar to the implementation of other product functions or features.
Most of the core QA activities, including defect prevention and defect
reduction, are performed during software development instead of during in-field
software support after product release. Therefore, we focus on the software
development processes in our examination of how different QA activities
fit into software processes. In what follows, we examine different QA activities
in the general context of several commonly used software development processes,
including waterfall, spiral, incremental and iterative development processes.
We first examine the process characteristics and the organization of different
development activities, and then relate these activities in the process
to specific QA activities.
QA in the waterfall process
In the most commonly used waterfall process for many large software projects,
development activities are typically grouped into different sequential stages
to form a waterfall, although overlaps are common among successive pairs
of stages (Zelkowitz, 1988). A typical sequence includes, in chronological
order: product planning, requirement analysis, specification, design, coding,
testing, release, and post-release product support. As a central part of
QA activities, testing is an integral part of the waterfall development
process, forming an important link in the overall development chain. Other
QA activities, although not explicitly stated in the process description,
can be carried out throughout other phases and in the transition from one
phase to another. For example, part of the criteria to move on from each
phase to the next is quality, typically in the form of checking to see if
certain quality plans or standards have been completed or followed, as demonstrated
by the results from various forms or reviews or inspections.
Various defect prevention activities are typically concentrated in the
earlier phases of software development, before actual faults have been injected
into the software systems.
There are several important reasons for this focus on early development
phases:
--The error sources are typically associated with activities in these early
phases, such as conceptual mistakes by designers and programmers, unfamiliarity
with the product domain, inexperience with the specific development methodologies,
etc. Therefore, error source removal, a primary method of defect preventions,
is closely associated with these early development phases.
--Although some faults could be injected into the software systems during
testing and other late development phases, the experience tells us that
the vast majority of faults are injected in the early development phases,
particularly in detailed design and implementation phases. Therefore, effective
defect prevention through error blocking needs to be carried out during
these phases.
Figure 1 QA activities in the waterfall process
Because of the possibilities of defect propagations and the increasing
cost over time or successive development phases to fix defects once they
are injected into the system, we need to reduce the number of faults in
software systems by the combination of defect prevention and application
of QA techniques that can help remove software faults early. Some defect
detection and removal techniques, such as inspection, can be applied to
early phases, such as inspecting requirement documents, product specifications,
and different levels of product designs. On the other hand, there are practical
obstacles to the early fixing of injected defects. For example, dynamic
problems may only become apparent during execution; and inter-dependency
only becomes apparent with the implementation of related components or modules.
Because of these reasons, other fault detection and removal activities,
such as testing, are typically concentrated in the middle to late phases
of software development.
Finally, failure prevention and containment activities, such as fault tolerance
and safety assurance, are typically the focus of operational phases. However,
their planning, design, and implementation need to be carried out throughout
the software development process.
In some sense, they are equivalent to adding some necessary functions or
features into the existing product to make them safe or fault tolerant.
Figure 1 illustrate how the different QA activities fit into the waterfall
process. Three key characteristics of this activity distribution are illustrated:
--The phase with QA as the focus: Testing phase.
--QA activities, typically inspections and reviews, carried out at the
transitions from one phase to the next are shown as barriers or gates to
pass. The exception to this is between testing and release, where the reviews
are typically accompanied by acceptance testing.
--Other QA activities scatter over all other development phases: The general
distribution scope is shown by the dotted bracket, with a focus on defect
prevention in the early phases, a focus on defect removal during coding
and testing phases, and a focus on defect containment in operational support.
QA in other software processes
In incremental and iterative processes, the overall process can be viewed
as consisting of several increments or iterations, with each of them following
more or less the same ministages corresponding to those in the waterfall
process. What is more, at the end of each increment or each iteration, the
newly developed part needs to be integrated into the existing part. Therefore,
integration testing plays a very important role, to make sure that different
parts can inter-operate seamlessly to fulfill the intended functionalities
correctly together.
The QA activities performed in the spiral process are similar to those
performed in incremental and iterative processes. The minor difference is
typically in the risk focus adopted in spiral process, where risk identification
and analysis play an important role on the decision as to which part to
work on next in the subsequent spiral iteration. This risk focus leads naturally
to selective QA with a non-uniform effort applied to different parts of
the software systems, with high-risk parts receiving more attention than
other parts. In terms of testing techniques, usage-based statistical testing
according to user operational profiles may fit this process better than
other testing techniques.
The agile development method and extreme programming that have become popular
recently, especially in the Internet-based and open-source development projects,
can be treated as special cases of incremental, iterative, or spiral process
models where many of their elements are used or adapted. In fact, QA activities,
particularly testing and inspection, play an even more important role than
in the traditional software development processes. For example, test-driven
development is an integral part of extreme programming (Beck, 2003), and
inspection in the form of two person inspection, or programmer pairs, is
extensively used (Beck, 1999).
The details about the application of different QA activities and related
techniques to different software processes, phases, and activities will
be covered when we describe each specific QA technique in Part II and Part
III.
3. VERIFICATION AND VALIDATION PERSPECTIVES
As described in Section 1, the basic quality expectations of a user are
that a software performs the right functions as specified, and performs
these specified functions correctly over repeated use or over a long period
of time. The related QA activities to ensure that the right functions are
performed are typically grouped as validation activities; while the ones
to ensure the correct or reliable performance of these specified functions
are typically grouped as verification activities. The QA activity classification
we used in Section 3 can be mapped into this binary partition of validation
and verification activities using the related defects as the middle link
between the two classification schemes.
Validation, failures, and QA activities
Validation activities check whether a function needed and expected by the
customers is present in a software product. An absence of an expected function
or feature is clearly linked to a deviation of expected behavior, or linked
to a software failure. However, this is a special sub-class of failures,
where an expected function is absent. By extension, when an unexpected function
is present, it can be considered as a failure of this kind as well, because
a customer is not likely willing to pay for something not needed. Even if
it is free, the customer might be worried about possible interference with
other critical needs.
Therefore, various QA activities linked with such kind of failures directly
observable by software users can be viewed as validation activities. Examples
of QA activities that can be classified as validation activities include:
--System testing, where the focus is the overall set of system functions
to be provided to users;
--Acceptance testing and beta testing, where the focus is the assessment
of software acceptance or performance by users;
--Usage-based statistical testing, where the operational environment by
target users is simulated during software testing before product release;
--Software fault tolerance, which focuses on providing continued service
expected by customers even when local problems exist;
--Software safety assurance activities, which focus on providing the expected
accident free operations or reducing accident damage when an accident is
unavoidable.
Even in the case where a specific software QA activity is not directly
dealing with the above type of failures, if the intention is to detect or
prevent faults that are linked to such failures, the specific activity in
question can also be classified as a validation activity. For example, in
inspections based on usage scenarios, faults that are likely to lead to
failures under usage scenarios by target customers are the focus of the
inspect effort. Therefore, this specific inspection activity can be viewed
as a validation activity. In addition, if a preventive action is aimed at
preventing specific problems for specific operational environments by customers,
it can be classified as a validation activity as well.
Verification, conformance, and QA activities
Software verification activities check the conformance of a software system
to its specifications. In performing verification activities, we assume
that we have a well defined set of specifications. A deviation from the
specification is either a fault or a failure, depending on whether the behavior
is specified or other software related entities are specific, such as through
coding standards, design patterns, etc.
When failures are involved in verification activities, we are typically
dealing with internal system failures and overall system failures in the
form of incorrect behavior, instead of the evidence of presence or absence
of certain functions or feature directly observable by customers. For example,
checking how one component works with another component is a verification
activities, because it tries to eliminate internal failures related to interoperability
among internal components, while customers only care if the overall functions
are implemented and implemented correctly.
When a function or feature expected by the customers is present, the activity
to determine whether it performs or behaves expectedly is then a verification
activity. Therefore, connected to validation activities, there are almost
always accompanying verification activities as well. In the above examples
of various forms of testing as primarily validation activities, they all
include corresponding verification components. They are also used to verify
the correct implementation of various functions visible to customers. The
testing environment for these activities needs to be similar to that will
be subjected to by the product after it is purchased by the customers and
put into operational use.
When we are checking non-behavioral specifications, non-conformance indicates
the presence of faults or errors. For example, a wrong algorithm or an inappropriate
data structure is used, some coding standard is violated, etc. These problems
are typically associated with various types of software faults. These faults,
when triggered, may cause system failures. Similarly, not following prescribed
processes or selected methodologies, or misunderstanding of needed algorithms
and data structures, is associated with errors or error sources that cause
injection of faults. Therefore, all the QA activities we classified as dealing
directly with faults, errors, or error sources can be classified as verification
activities.
Verification and validation in software processes
QA activities can also be classified by the binary grouping of verification
vs. validation activities. Validation checks the conformance to quality
expectations of customers and users in the form of whether the expected
functions or features are present or not. On the other hand, verification
checks the conformance of software product implementation against its specifications
to see if it is implemented correctly. Therefore, validation deals directly
with users and their requirements; while verification deals with internal
product specifications. In the software development process perspective,
different processes may involve customers and users in different ways. Therefore,
verification and validation activities may be distributed in these different
processes differently.
In the waterfall process, direct involvement of users and user requirement
is at the very beginning and the very end of the development process. These
phases include project planning, market analysis, requirement analysis,
specification, acceptance testing, product release, and post-release product
support and maintenance. Therefore, these are the phases where validation
activities may be the focus. For example, overall product specifications
need to be validated through inspections or reviews to make sure they conform
to customer requirements. Various user-oriented testing, such as system,
integration, and acceptance testing focus on the validation of user requirement
in the form of checking if the functions and features expected by users
are present in the software product scheduled to be delivered.
Similarly, beta testing and operational support make sure the software
product is validated, that is, it is doing what it is supposed to do under
the application environment of the target customers.
On the other hand, many development activities in the middle part of the
waterfall process do not involve customers and users directly. A set of
internal specifications needs to be followed or other rules or criteria
need to be satisfied. For example, the product designs must satisfy the
product specifications; lower-level designs must conform to the constraints
imposed by the high-level designs; and the final product implementation
must follow the design decisions made earlier. The satisfactory conformance
of these specifications, designs, and rules is the focus of various verification
activities. For example, through inspections of design documents, satisfaction
of design constraints and product specifications can be verified. Program
correctness with respect to its formal specifications can be formally verified
using various formal verification techniques. Unit and component testing
can be used to verify the unit or the component against its specifications
in the form of detailed designs for them.
Figure 2 Verification and validation activities associated with the V-Model
These verification and validation activities can be best illustrated by
the V-model in Figure 2, a variation of the waterfall process model where
the different development phases are presented in a V-shaped graph, relating
specific verification or validation activities to their corresponding
requirements or specifications. For example, customer requirements are validated
by operational use; while product specification, high-level design, and
low-level design are verified by system test, integration test, and component
test, respectively. In addition, system test also validates the product
by focusing on how the overall operations under an environment that resembles
that for target customers. In a sense, the users' operational environment
is captured as part of the product specification or as part of the testing
model. At the bottom, coding and unit testing are typically grouped in a
single phase, where the code itself specifies the expected behavior and
needs to be verified through unit test. Sometimes, various other QA activities,
such as inspections, reviews, walkthroughs, analyses, formal verification,
etc., are also associated with the left arm of the V-model and illustrated
by additional dotted lines pointed to the specific phases.
Similar to the mapping of QA activities to other process models above,
validation and verification activities can be mapped into non-sequential
processes such as incremental, iterative, spiral, and extreme programming
processes. Typically, there is some level of user involvement in each part
or iteration. Therefore, validation plays a more important role in these
processes than in the waterfall process or the V-model.
4. RECONCILING THE TWO VIEWS
The above descriptions of verification and validation activities included
examples of specific QA activities. These specific QA activities were also
classified using our scheme according to the generic ways of dealing with
defects. Through this connection and the inter-relations represented therein,
we can establish the relationship and the mapping between the verification
and validation (V&V) view on the one hand and our defect-centered (DC)
view and classification on the other hand. In addition, we can use the process
information as presented in Figure 1, Figure 2, and related discussions
to help us with this mapping, as discussed below.
As described in Section 3 (above) and illustrated in Figure 2, most QA
activities carried within the software development process can be classified
as verification activities, while only those directly dealing with user
requirements, typically near the very beginning or the very end of software
development process, are associated with validation activities. On the other
hand, as described in Section 2 (above) and illustrated in Figure 1, various
defect prevention activities are typically concentrated in the earlier phases
of software development; defect reduction is typically concentrated in the
middle to late phases of software development; while defect containment
activities are typically the focus of operational phases, with its planning,
design, and implementation carried out earlier during software development.
Based on this comparison, we could draw some tentative connections to link
verification with defect reduction activities, and validation with defect
prevention and defect tolerance.
However, there are complications and adjustments due to the following:
Many specific QA activities deal with both the verification and the validation
aspects.
For example, different types of testing in the V-model in Figure 2 can
be classified either as verification test or validation test or contain
both elements: The focus of the acceptance test is clearly validation, while
that for unit test is verification, however, system test contains both the
verification and validation components.
The situation with inspection as an important defect reduction activity
is similar to testing above. However, due to the absence of execution and
direct observations of failures, inspection is more closely connected to
verification than to validation. For example, most of the inspection activities
are performed on software code or design, which are classical verification
activities. The less used requirement inspections and usage scenarios based
inspections are closer to validation.
Defect prevention deals with error source elimination and error blocking,
while both verification and validation deal with failures and faults. Therefore,
there is no direct connection between defect prevention and the V&V
view of QA activities, but only indirectly through the target of preventive
actions. For example, if the target is eliminating ambiguity in the requirement
or the product domain knowledge, it is indirectly connected to validation.
If the target is to block syntactic faults or other faults due to the proper
selection and usage of processes, methodologies, technologies, or tools,
it is indirectly connected to verification.
--Closely related to both defect prevention and formalized inspection is
the use of formal method as a QA activity. The formal specification part
is close to validation, but indirectly, much like the defect prevention
activities above. The formal verification part naturally falls into verification
activities, verifying the program or design correctness with respect to
its formal specifications.
Defect containment activities, such as through fault tolerance and safety
assurance, are more closely related to validation activities than verification
due to their focus on avoiding global failures or minimizing failure damages
under actual operational environments. However, when such defect containment
features are specific for a software system or an embedded system, the conformance
to this part of the specification can be treated much the same as other
verification activities to check the general conformance to specifications.
This relationship between the two views can be summarized in Table 1, for
each of the DC view categories and related major QA activities, we point
out whether it is related to verification, validation, or both, directly
(unless specified otherwise) or indirectly.
Therefore, we can follow the three-part classification outlined in Section
3 without losing the general perspectives of validation and verification.
----------
Table 1
QA activities: Mapping from defect-centered (DC) view to verification and
validation (V&V) view
DC-view class Major QA activity V&V view
Defect prevention both, mostly indirectly requirement-related validation,
indirectly other defect prevention verification, indirectly formal specification
validation, indirectly formal verification verification
Defect reduction both, but mostly verification testing, unit & component
verification testing, integration both, more verification testing, system
both testing, acceptance both, more validation testing, beta validation
inspection, req. & scenario validation inspection, all other verification
analyses, etc. both, but mostly verification
Defect containment both, but mostly validation operation validation design
and implementation both, but mostly verification
-----------
5. CONCLUSION
To summarize, defect handling is an integral part of QA activities, and
different QA alternatives and related activities can be viewed as a concerted
effort to ensure software quality.
These activities can be integrated into software development and maintenance
processes as an integral part of the overall process activities, typically
in the following fashion:
--Testing is an integral part of any development process, forming an important
link in the overall development chain.
Quality reviews or inspections often accompany the transition from one
phase or development activity to another.
--Various defect prevention activities are typically carried out in the
early stages.
Defect containment activities typically focus on the later, operational
part of the development process, although their planning and implementation
need to be carried out throughout the development process.
These QA activities can also be partitioned into verification and validation
(V&V) activities using a bi-partite classification scheme in the so-called
V&V view. Similarly, they can be partitioned by the generic way they
employ to deal with errors, faults, or failures as different defect-centered
(DC) activities using our tri-partite classification scheme in the so-call
DC view. Both views and both classification schemes have their useful purposes
and implications. Our tri-partite classification provides a balanced and
systematic scheme to organize and classify existing software QA activities.
It can also be easily mapped to the commonly used bi-partite scheme of validation
and verification activities. Consequently, we will follow this classification
in the rest of the guide without losing the generality associated with the
other commonly used views of QA activities.
QUIZ
1. Why is defect tracking and defect handling important in quality assurance?
2. In your project, do you have a defined defect handling process? If so,
describe the process and compare it with the generic description in this
Section. If not, can you design one?
3. Define the different defect status and draw a chart/graph to depict
the allowable defect status changes based on your knowledge of your actual
defect handling process. You may use a hypothetical project and its defect
handling process to complete this exercise if you are not working on a project
or if your project does not have a defined defect handling process.
4. What measurements can be taken during QA activities?
5. Document the different QA activities and their organization/grouping
in your development or maintenance process and compare them to the generic
ones descried in this Section.
6. Is your organization performing more verification, more validation,
or both equally? What is verification and validation? How do they relate
to defects?
PREV. | NEXT
Also see:
top of page | Article
Index | Home |