2.1 Independent V&V
Some software V&V activities may be performed by two different groups.
The use of a different organization (other than the software development
group) for software V&V is called independent verification and validation
(IV&V). The following is summarized from the chapter on IV&V in
[WILEY].
Technical independence requires that members of the IV&V
team (organization or group) may not be personnel involved in the
development of the software. This team must have some knowledge about the
system design or have related experience and engineering background
enabling them to understand the system. The IV&V team must not be
influenced by the development team when the IV&V team is learning about
the system requirements, proposed solutions for building the system,
and problems encountered. Technical independence is crucial in the team's
ability to detect the subtle software requirements, software design, and coding
errors that escape detection by development testing and SQA reviews.
The technical IV&V team may need to share tools from the computer support
environment (e.g., compilers, assemblers, utilities) but should execute
qualification tests on these tools to ensure that the common tools themselves
do not mask errors in the software being analyzed and tested. The
IV&V team uses or develops its own set of test and analysis tools separate
from the developer's tools whenever possible.
Managerial independence means the responsibility for IV&V
belongs to an organization outside the contractor and program organizations
that develop the software. While assurance objectives may be decided by
regulations and project requirements, the IV&V team independently decides
the areas of the software/system to analyze and test, techniques to conduct the
IV&V, schedule of tasks (within the framework of the system schedules), and
technical issues to act upon. The IV&V team provides its findings in a timely
fashion simultaneously to both the development team and the systems
management who acts upon the reported discrepancy and findings.
Financial independence means that control of the IV&V budget
is retained in an organization outside the contractor and program
organization that develop the software. This independence protects
against diversion of funds or adverse financial pressures or influences that
may cause delay or stopping of IV&V analysis and test tasks and timely
reporting of results.
The extent that each of these parameters is vested in the IV&V team's
responsibilities defines the degree of independence achieved. Based on the
definitions of IV&V and how much IV&V a specific project requires, some
software V&V activities may be conducted by both the developer and another
organization. For example, unit test by one organization may focus on
demonstrating that specific objectives (e.g., safety objectives relative to the
system), which may differ from the objectives of the developer (e.g., logic
structure, test coverage), have been met [IEEEP1059].
2.2 Software V&V Management
The process of software V&V needs to be managed and performed
comprehensively over the entire software development process. Management
tasks, spanning all of the software development activities, are to:
- -- Plan and maintain the software V&V process.
- -- Coordinate and interpret performance and quality of the software
V&V effort.
- -- Report discrepancies promptly to the user or development
group.
- -- Identify early problem trends and focus software V&V tasks on
them.
- -- Provide a technical evaluation of the software performance and
quality attributes at each major software program review (so a determination
can be made of whether the software product has satisfied its set of software
requirements well enough to proceed to the next activity).
- -- Assess the full impact of proposed software changes.
An SVVP contains the information necessary to manage and perform
software V&V. Major steps in developing an SVVP are to:
- -- Define (or confirm, if already provided) the quality and performance
objectives (e.g., verify conformance to specifications, verify compliance with
safety and computer security objectives relative to the system, assess efficiency
and quality of software, and assess performance across the full operating
environment).
- -- Characterize the types of problems anticipated in the system and
define how they would be manifested in the software.
- -- Select the software V&V analysis and testing techniques to effectively
detect the system and software problems.
- -- Select the metrics and techniques applied to V&V results to measure
and predict the quality of the software.
The SVVP may include details for acquiring tools and for training personnel.
The SVVP is revised as knowledge accumulates about the characteristics of
the
system, the software, and the problem areas in the software and in software
V&V activities.
The software V&V process could be tailored to specific applications; however,
the risk of the software failing and the subsequent consequences must be
considered when selecting software V&V activities.
One software V&V management task is to monitor the software V&V
technical progress and quality of results. During each software V&V activity,
planned software V&V tasks are reviewed and new ones are added to focus on
the critical performance/quality functions of the software and its system. The
monitoring task includes formal reviews of software V&V discrepancy
reports and technical evaluations to provide a check of their correctness and
accuracy. Internal monitoring of the quality and accuracy of software V&V
results is essential because the development group must make the necessary
software changes as indicated by the software V&V results. If the software
V&V results are erroneous, or of poor quality, the development group wastes
its time and resources in attempting the changes, and more importantly, loses
confidence in the effectiveness and helpfulness of the software V&V results.
Software V&V studies [RADATZ] have shown that responding to discrepancy
reports and software V&V evaluation reports consumes the largest portion of
a development group's interface time with the software V&V group.
Boehm and Papaccio [BOEHM] report that the Pareto effect, that is, 20% of
the problems cause 80% of the rework costs, applies to software. They
recommend that software V&V "focus on identifying and eliminating the
specific high-risk problems to be encountered by a software project." This
does not mean that software V&V should examine only 20% of the software.
Rather, software V&V needs to examine all the software. This includes:
identifying potential hazards or threats to the safety and security of the
system,
prioritizing the software functions by criticality, and allocating software
V&V analysis resources to those areas of the software which contain critical
(5)
functions and high-risk problems (i.e., more error-prone). Identifying and
focusing on critical and high-risk areas of the software can be addressed by
these software V&V methods:
- -- examination of early program deliveries to software V&V staff;
- -- use of software hazard (or threat) analysis; and
- -- conduct of a "criticality analysis" to identify the most critical
functions
of the software.
Various approaches in development can provide early product information to
software V&V. These include: prototypes, incremental software development,
and handing over each unit or subfunction following development unit testing.
Incremental software development is an effective method of providing early
product information to software V&V. The early deliveries reinforce the
systematic analysis and test approach used by software V&V to examine the
software in smaller pieces while progressively evaluating larger software
pieces as each new piece is integrated. High-risk software areas are easier to
identify by using the incremental approach because the software V&V
can:
- -- Provide an early lead time to evaluate each engineering solution and
allow time to suggest alternative solutions which can be incorporated in
subsequent incremental deliveries without adversely impacting the schedule.
- -- Isolate each new set of requirements and evaluate their impact on the
system performance.
- -- Provide early indications of system performance so that adjustments
can be made to refine the desired performance.
- -- Develop trend information about software anomalies and risk issues
to
allow time to adjust the development and software V&V resources and
planning to accommodate evolving software risk issues.
In incremental development, a software build (or early product) represents a
basic program skeleton including draft documentation containing portions of
the full software capabilities. Each successive build integrates additional
functions into the skeleton. Based on discrepancy or progress reports from
software V&V, software program management can make the technical and
management decisions to refocus the software V&V and development team
onto the program's specific problem areas of the software.
Two related analyses, criticality and hazard, can help focus the V&V effort
on those parts of the program whose consequence of failure are most severe.
A
hazard is an (unsafe) "condition that may lead to an unintended event that
causes an undesirable outcome" [WALLACE91]. For example, a driver of a
car ignores warning lights at a railroad crossing and drives the car onto the
tracks. The hazard is the presence of the car and train on the track at the
same time. The unintended event (mishap) is the train colliding with the car.
The undesirable outcome is the probable loss of life and damage to the car
and
train. The term hazard generally is used to refer to safety problems; the term
threat generally is used to refer to security problems. In this document, the
methods and issues related to hazard analysis are also applicable to security
issues; the terms threat and security could be used in place of hazard and
safety respectively.
Criticality analysis locates and reduces high-risk problems and is performed
at the beginning of a project. It identifies the functions and units which are
required to implement critical program functions or quality requirements
(e.g., safety, computer security). The steps of the analysis are:
- -- Develop a block diagram or control-flow diagram of the system and its
software. Each block or control-flow box represents a system or software
function (unit).
- -- Trace each critical function or quality requirement through the block
or control flow diagram.
- -- Classify all traced software functions (units) as critical to either the
proper execution of critical software functions or the quality requirements.
- -- Focus additional analysis on these traced software functions (units).
- -- Repeat criticality analysis for each activity to observe whether the
implementation details shift the criticality emphasis to other or additional
functions (units).
System hazard analysis is used to identify potential events and circumstances
that might lead to problems of varying degrees of severity, from critical
failures resulting in loss of life or national security problems, to less serious
malfunctions in the system. Software hazard (or threat) analysis focuses on
the
role of software relative to the hazards, or threats. Specific techniques that
can be used for hazard analysis are included in section 6 with the V&V
techniques; these include event tree analysis, software fault tree analysis, Petri
nets, and software failure mode, effects, and criticality analysis.
(Hewlett-Packard's Medical Systems Unit has developed a software
hazard avoidance process utilizing some aspects of these techniques
[CONNOLLY].)
When identification of high risk areas from early deliveries, criticality
analysis, and hazard (or threat) analysis are used together, the software V&V
approach can focus on the most critical areas of the early software products.
Software V&V results, obtained early enough in the software development
process, can have significant impact on the quality and performance of the
system under development.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(5) A critical function is a
function that must be performed, correctly and reliably; otherwise the system
fails in a manner that may have serious consequences.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.3 Software V&V Activities
Software V&V should begin when the project begins. Usually the first
software V&V tasks are conducted during the software requirements V&V
activity. One V&V task is to examine the early project documentation, often
called concept documents, to verify that the system to be built is not
only feasible but will use the rules, conventions, algorithms, and practices
appropriate to the application domain of the system. Software
requirements V&V is performed to ensure that the specified software
requirements are correct, complete, consistent, accurate, readable, and
testable, and will satisfy the system requirements. Poorly specified software
requirements (e.g., incorrect, incomplete, ambiguous, or not testable)
contribute to software cost overruns and problems with reliability. Even when
software fully meets its requirements upon delivery, there may be problems in
the maintenance activity because general requirements (e.g., maintainability,
quality, and reusability) were not accounted for during the original
development. Identifying software requirements is difficult because the
complexity of the problems being solved causes uncertainty in developing the
intended system performance requirements. The occurrence of changes in
requirements (e.g., to incorporate new technologies, new missions, new
knowledge, new interfacing systems, new people coming on the scene)
throughout the software development process adds significantly more chance
for error. Software requirements V&V is intended to prevent these problems
from occurring.
Design errors can be introduced by misrepresentation of the functional
requirements and by implementation constraints relating to timing, data
structures, memory space, and accuracy. Software design V&V
provides assurance that software requirements are not misrepresented or
incompletely implemented; that extraneous software requirements are not
designed into the solution by oversight; that software requirements are not
left
out of the software design; and that other constraints are managed
correctly.
Clerical and syntactical errors have been greatly reduced through use of
structured programming, reuse of code, adoption of programming standards
and style guides, availability of more robust computer languages, better
compiler diagnostics and automated support, and, finally, more
knowledgeable programmers. Nevertheless, problems still occur in
translating design into code and code V&V continues to be an
important software V&V activity.
Test management is an important part of the software V&V activity in which
all testing needed for the software system is considered and planned.
Software
V&V test planning begins with software requirements and spans almost the
full range of activities. Test planning tasks encompass different types of
testing--unit test, software integration test, and software system test.
The planning activities result in documentation for each test type consisting of
test plan, test design, test case, and test procedure documents.
Unit test verifies the design and implementation of software units.
Software integration test verifies functional requirements as the
software units are integrated together. Special attention is focused on
software, hardware, and operator interfaces. Software system
test
validates the entire software program against system requirements and
software performance objectives. Software system tests validate that the
software executes correctly within its stated operating environment. The
software's ability to deal properly with anomalies and stress conditions is
emphasized. Software V&V tests are not intended to duplicate or replace the
user and development group's test responsibilities, but instead test behavior
not normally checked by the user or development group.
Software installation test validates that the software operates
correctly with the operational hardware system and with other software, as
specified in the interface specifications. It verifies that the installation
procedures are correct and adequate, that the software is the same as the
executable code delivered for installation, and that all supporting software
products are the proper versions. Software installation test verifies that the
software has been accurately tailored for site-dependent parameters and that
the configuration of the delivered product is correct.
In software operation and maintenance V&V, when a software
change is made, all software V&V activities are considered and possibly
repeated to ensure that nothing is overlooked. Software V&V activities
include
examining the impact of the change throughout the system to understand
what
software V&V activities are needed. Software V&V activities are added or
deleted to address the type of software change made. In many cases, an
examination of the proposed software change shows that software V&V needs
to repeat its activities on only a small portion of the software. Also, some
software V&V activities, such as verifying the original concepts, require
little or no effort to verify a small change. Small changes can have subtle but
significant side-effects in a software program; for this reason, change analysis
(a software operation and maintenance V&V task) is significant in preventing
unintended functions and problems from making their way into new versions
of the system.
2.3.1 Software Requirements V&V
The software requirements V&V activity checks that the allocation of system
requirements to software is appropriate and correct, and how well the
software requirements have been specified (e.g., correct, complete,
nonambiguous, testable). It should be structured to ensure that the software
objectives have been met. Verification of the software requirements should
include an examination of documentation produced earlier in system
development (e.g., initial feasibility studies, concepts on which the system has
been designed) if this examination has not already been performed. If the
assumptions, algorithms, and physical rules imposed on the software
requirements previously have not been verified to be appropriate for this
project, then software V&V should perform those checks. Inputs to the
software requirements V&V activity may be documents written in natural or
formal mathematical languages and may include graphics and charts. When
formal mathematical languages are used, other forms of representations may
be provided to different users of the specifications. Software requirements
verification must ensure fidelity among the forms of representation.
[NIST223]
Concurrently with software requirements V&V, software system test planning
in initiated. Software V&V examines all the proposed testing for the system to
ensure that comprehensive testing and appropriate resources are planned.
Each type of testing (unit, software integration, software system) is discussed
more fully in this report. When the system requirements and the software
requirements have been specified and reuse of software is identified, reuse
issues identified in section 4 must be checked to ensure the software is suitable
for the application domain and the operating environment.
The remainder of this section elaborates on software requirements V&V for
general V&V tasks, for V&V tasks specifically designed for reused software,
and those for knowledge-based systems (KBS).
General (6)
- -- Conduct a concept documentation evaluation.
- - Evaluate the defined concept to
determine
whether it satisfies user needs and project objectives in terms of system
performance requirements, feasibility (e.g., compatibility of hardware
capabilities), completeness, and accuracy.
- - Identify major constraints of interfacing
systems and constraints/limitations of the proposed approach and assesses the
allocation of system functions to hardware and software, where appropriate.
- - Assess the criticality of each software
item defined in the concept.
- -- Begin test planning.
- -- Conduct a software traceability analysis - Trace software
requirements to system requirements (and vice versa) and check the
relationships for accuracy, completeness, consistency, and correctness; check
that allocation is appropriate and complete.
- -- Conduct a software requirements evaluation.
- -
Evaluate the software requirements for accuracy, completeness,
consistency, correctness, testability, and understandability.
- -- Measure completeness by
verifying existence and correctness of defining properties: initiator of action,
action, object of action, conditions, constraints, source, destination,
mechanism,
and reason.
- --Verify correctness and
appropriateness of software requirements and
assertions (executable statements that may be required in the
software as fault
tolerance protections for the system safety and computer security objectives
(e.g., checking algorithms, states and integrity of system and the responses to
unfavorable results of the assertions) ). Verify the operation of the assertions
will not adversely impact system performance.
- --Verify correctness and
appropriateness of fault tolerance requirements. Verify that the operation of
the assertions will not adversely impact system performance.
- - Assess how well the software
requirements accomplish the system and software objectives.
- - Identify critical areas of software by
assessing criticality of software requirements.
- -Evaluate software requirements for
compliance to software requirements standards and software engineering
practices.
- -- Conduct a software interface analysis - Evaluate software
requirements with hardware, user, operator and software interface
requirements for accuracy, completeness, consistency, correctness, and
understandability.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(6) V&V tasks related to testing
are discussed in sections 2.3.4 through 2.3.6
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reuse-Specific
- -- Evaluate the reused software for conformance to its performance
goals, to identify constraints of interfacing systems, to allocation functions to
hardware and software, and to assess criticality of each software item.
- -- Conduct software interface analysis to evaluate reused software to
new
requirements for accuracy, completeness, consistency, correctness, and
understandability, relative to the operating environment of both the reused
and
the new software and to the application domain. When COTS is considered
for
use in a new system, this task is especially significant for ensuring that the
COTS will match the system interfaces in the operating environment.
- -- Compare the new software system objectives to the content of the
reused documentation and the reused code to ensure the:
- - availability of all necessary files;
- - adequacy of user manual (compare to
the
requirements for the user manual in software development); and,
- - compatibility of the software, hardware,
and system environment (e.g., was the old system designed for a 16 bit
machine
and will now be on a 32 bit machine?).
- -- If the reused software is COTS, consider whether any functions of the
software are to be blocked out from usage; if the consequences of any
functions
are unknown; and, the operational history of the COTS relative to failure.
KBS-Specific
- -- Verify the scope and complexity of the proposed domain for the KBS.
- -- Verify the correctness and appropriateness of the requirements on
accuracy and completeness of the expected results (e.g., is the system supposed
to perform like a student or an expert?).
- -- Verify that the selected tools can implement a domain model of the
expected scope and complexity.
- -- Determine how accuracy of the system will be evaluated and against
what standard it will be evaluated.
- -- Determine the volatility of the domain model and strategy for
updating
the knowledge base.
2.3.2 Software Design V&V
The software design V&V activity occurs after the software requirements
have undergone the software V&V process and the software design, or an
increment of the software design, has been completed.
(7) The software V&V tasks of
traceability, evaluation, and interface analysis provide assurance that
software
requirements are not misrepresented, incompletely implemented, or
incorrectly implemented. By verifying that the software design meets its
software requirements, the software design V&V activity also supports
validation that the software design meets system requirements. There
may be several instantiations of the software requirements and software
design
verification before the entire system is verified. [NIST223]
When the software system is designed, decisions may be made to incorporate
existing software. Again, the issues identified in section 3 must be considered
by software V&V to ensure that the reused software is appropriate, and that
the software design takes into account any changes that must be made to the
reused software to accommodate the operating environment and the
application domain. The tasks and techniques are the same as for the
software
being developed, but the objectives and issues are specific for reuse.
The remainder of this section elaborates on software design V&V for general
V&V tasks, for V&V tasks specifically designed for reused software, and those
for KBSs.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(7) According to the model
used
for development, the software V&V process may be exercised on the entire
software design or software design increments, but always traceable back to
the software requirements.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
General
- -- Conduct a software design traceability analysis - Trace software
design to software requirements, and vice versa. Check the relationships for
accuracy, completeness, consistency, and correctness.
- -- Conduct a software design evaluation.
- - Evaluate the software design for
accuracy, completeness, consistency, correctness, and testability.
- - Evaluate software design for
compliance with software design standards; language standards if
appropriate; and software engineering practices.
- -Assess software design against
assigned quality attributes.
- -- Conduct a software design interface analysis - Evaluate software
design for accuracy, completeness, consistency, and correctness of hardware,
operator and software interface requirements.
- -- Verify that the software requirements for assertions, responses to
assertions and other required system algorithm and integrity checks or fault
tolerance protections have been designed into the software. Check that the
software design is complete and accurate and will not adversely affect system
performance.
- -- Coordinate with software integration test planning.
Reuse-Specific
- -- Conduct an evaluation of the original software design documentation
for compliance to software design requirements of the new system. Verify
interface requirements. Generate any needed software design information or
justify the use of the software without the required information. This
determination should be based on recognized risk (safety, cost of
modifications,
impact of various degrees of uncertainty on the project) and coordinated with
the user.
- -- If any modifications are needed, evaluate whether or not the software
and documentation are adequate to support the modification (e.g., for change
analysis, testability). If not, the needed information should be obtained or
developed. If this is not prudent, modifications should not be made when they
cannot be supported by adequate software design information.
KBS-Specific
- -- Verify that the domain model:
- - is complete and consistent; and,
- - represents the domain knowledge.
- -- Verify that the domain model addresses, at the required level of
accuracy and completeness, the range of expected problems.
- -- Verify that the domain model operates in the specified scope.
2.3.3 Code Verification
The code verification activity verifies correct implementation of software
design into code. Often this activity requires tedious checking of details
within
the code; automation provides protection against human error in gathering
the
code information for analysis and also can speed the process. Code
verification is the last opportunity to find and remove errors that could cause
unnecessary costs and delays from advancing poor code into any of the test
activities. Code validation is accomplished through unit test which is
described
in section 2.3.4. [NIST223]
At this point in the software development process, the reuse issues should have
been examined and the decision made to reuse or not to reuse the software. In
the case that changes are to be made to the code, or if there is a possibility
changes will be needed in a future version of the software system under
development, some software V&V tasks may be needed.
The knowledge base should be internally consistent and reflect the domain
model. In its simplest form, maintaining knowledge base consistency (or
integrity) means not allowing a fact and its negation to both be part of the
knowledge base. More extensive consistency checks can disallow rules
that would, potentially, infer both a fact and its negation. Knowledge
consistency is a key issue. A consistent domain model and a consistent
representation of that model is critical. This is especially true for domains
representing physical structures or controlled equipment. The model of the
equipment and the physics controlling the behavior of the equipment must be
consistent for computer controllers to function properly. In other domains,
expert disagreement over the interpretation of a set of facts may be normal
and expected. For example, legal disputes frequently involve the
interpretation
of the facts themselves. Probabilities can be one way to handle conflicting
knowledge.
The remainder of this section elaborates on code verification for general tasks,
for verification tasks specifically designed for reused software, and those for
KBSs.
General
- -- Conduct a source code traceability analysis - Trace source code to
software design, and vice versa. Check the relationships for accuracy,
completeness, consistency, and correctness.
- -- Conduct a source code evaluation.
- - Evaluate the source code for
accuracy, completeness, consistency, correctness, and testability.
- - Evaluate source code for
compliance with code standards, language standards if appropriate, and
software engineering practices.
- - Assess source code against assigned
quality attributes.
- -- Conduct a source code interface analysis - Evaluate the source code
for
accuracy, completeness, consistency, and correctness with respect to the
hardware, operator, and software interfaces.
- -- Evaluate draft code-related documents (e.g., user manual,
commentary
within the code) with source code for completeness, consistency, and
correctness.
- -- Coordinate with unit test
(8).
Reuse-Specific
- -- If the source code is available, compare it to known design
specifications. Evaluate for correctness, consistency, completeness, and
accuracy. Assess the interfaces for consistency with the system in which the
reused code will be placed. Assess source code quality. (This task may be
needed in instances where the history of the code is not well-known.)
- -- Evaluate source code for testability. Evaluate code-related
documentation received from the source for suitability for any future
modifications.
KBS-Specific
- -- Conduct a logical verification of the structure of the knowledge and
rules in the knowledge base for consistency, completeness, etc.
- -- Verify that the knowledge base implements the domain model
accurately.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(8) Unit test is actually a part
of
code V&V.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.3.6 Software System Test
Software system test, in the context of software V&V, involves
the conduct of tests to execute the completely integrated system. Software
system test is the validation that the software meets its requirements.
Validation of the complete system may involve many tests involving all system
components. The software system tests exercise those system functions that
invoke software to determine whether the software behaves as intended
relative to complete system performance. These tests must be conducted in
such a manner as to stress the system based on software responses to system
inputs (e.g., from sensors, operators, databases). Tests and data collected
from
the tests are designed to provide an operational profile of the system which
support a statistical analysis of the system reliability [MUSA87, MUSA89,
BUTLER]. This section of the report addresses only the tests that validate
that
the software implements the system requirements; other tests for other
components and perspectives are necessary for complete system
validation.
While software system tests are conducted after the system has been built, it is
imperative that planning for these tests is conducted concurrently with the
software requirements activity because:
- -- Analyzing the software requirements for test requirements may result
in finding software requirements errors and/or discovery of untestable
requirements.
- -- Establishing test facilities (e.g., model of operational environment)
and
Computer-Aided Software Engineering (CASE) tools (e.g., test case
generators, test data base) may require as much time as development of the
system.
For reused software, software system test is performed to assure that the
software is correct, consistent with prior documentation, complete for use
and/or modification, and accurate. At the system level, reused software
should
be considered part of the system. Tests are in accordance with test
procedures. Results are documented and traced as required by the
software system test plan.
The remainder of this section elaborates on software system test for general
V&V tasks, for V&V tasks specifically designed for reused software, and those
for KBSs.
General
- -- Test planning - Establish the objectives of the software system test, the
strategies to be employed, the coverage requirements, reporting and analysis,
and close-out of anomalies.
- -- Generate, monitor, and update a software system test plan to
accomplish objectives.
- -- Trace system and software requirements to test software design,
cases, procedures, and execution results.
- -- Generate test cases and procedures - Develop test cases and
procedures for unit test and continue tracing as required by software system
test plans.
- -- Test the operation of the software as an entity (sometimes a simulated
environment may be used); confirm that anomalies during test are software
anomalies, not problems detected for other reasons; ensure any changes to
software (software requirements, software design, code, or test cases) have
been made; and conduct retesting as necessary.
- -- Document test activities and results.
Reuse-Specific
- -- Evaluate existing test cases and reports for suitability for intended
use.
- -- Prepare test cases and test procedures if any modifications have been
made to the reused software.
- -- Follow the criteria for software system test within the boundaries of
the known and documented software design.
KBS-Specific
- -- Define procedures for testing the system according to the expected
knowledge of the end user.
2.3.8 Software Operation and Maintenance V&V
The software operation V&V activity requires periodic checks that the
integrity of the system has been maintained, that any changes to the system
which affect its operation have been documented, and operators have received
training in new or changed procedures. The software maintenance V&V
activity requires planning for software V&V based on the extent of the
maintenance (e.g., adaptive, corrective, perfective [FIPS106]), and hence a
revisit of all the software development activities to identify to what extent each
software V&V activity must be performed.
If software V&V has not been performed during software development, then
the V&V during software operations and maintenance must consider
performing a selected set of tasks from the software V&V activities related to
earlier development activities. Some activities may include generating
software requirements or software design information from source code, an
activity known as reverse engineering. While costly and time consuming, it is
necessary when the need exists for a rigorous software V&V effort.
The remainder of this section elaborates on software operation and
maintenance V&V for general V&V tasks, for V&V tasks specifically
designed for reused software, and those for KBSs.
General
- -- Conduct an anomaly evaluation - Evaluate the severity of anomalies
during software operation and their effect on the system.
- -- Conduct a proposed change assessment - Assess proposed changes to
the software and their effect on the system to determine software V&V
activities from earlier development to be repeated. Conduct them.
- -- Develop an SVVP.
Reuse-Specific
Follow the guidance for reuse in section 4.
KBS-Specific
- -- Plan for update of knowledge base including domain model.
- -- Determine mechanisms used for updating knowledge base.
3 SOFTWARE V&V TECHNIQUES
The conduct of software V&V tasks to fulfill the requirements of the V&V
activities generally involves techniques selected from three major classes:
static, dynamic, and formal analysis. Static analysis techniques are those
which directly analyze the form and structure of a product without executing
the product [FIPS101]. Reviews, inspections, audits and data flow
analysis are examples of static analysis techniques. Static analysis techniques
are traditionally applied to software requirements, software design and source
code. They may also be applied to test documentation, especially test cases, to
verify their traceability to the software requirements, their adequacy to fulfill
test requirements, and their accuracy.
Dynamic analysis techniques involve execution, or simulation, of a
development activity product to detect errors by analyzing the response of a
product to sets of input data [FIPS101]. For these techniques, the output
values, or ranges of values, must be known. Testing is the most frequent
dynamic analysis technique. Prototyping, especially during the software
requirements V&V activity, can be considered a dynamic analysis technique;
in this case the exact output is not always known but enough knowledge exists
to determine if the system response to the input stimuli meets system
requirements.
Formal analysis is the use of rigorous mathematical techniques to analyze the
algorithms of a solution [FIPS101]. Sometimes the software requirements may
be written in a formal specification language (e.g., VDM, Z) which can be
verified using a formal analysis technique like proof-of-correctness. The
term formal often is used to mean a formalized process, that is, a
process that is planned, managed, documented, and is repeatable. In this
sense, all software V&V techniques are formal, but do not necessarily meet
the
definition of the mathematical techniques involving special notations and
languages.
Table 3-1, at the end of this section, lists the software V&V techniques
addressed in this report and indicates under which V&V activities these
techniques can be applied. This report does not necessarily address all
software V&V techniques.
3.1 Strategies for Choosing Techniques
Some software V&V techniques used during software requirements V&V
tasks are control flow analysis, data flow analysis, algorithm analysis, and
simulation. Control and data flow analysis are most applicable for real time
and data driven systems. These flow analyses transform logic and data
requirements text into graphic flows which are easier to analyze than the text.
PERT, state transition, and transaction diagrams are examples of control flow
diagrams. Algorithm analysis involves re-derivation of equations or
evaluation
of the suitability of specific numerical techniques. Simulation is used to
evaluate the interactions of large, complex systems with many hardware, user,
and other interfacing software units.
Some software V&V techniques used during software design V&V tasks
include algorithm analysis, database analysis, sizing and timing analysis, and
simulation. Algorithm analysis examines the correctness of the equations or
numerical techniques as in the software requirements activity, but also
examines truncation and round-off effects, numerical precision of word
storage and variables (e.g., single- vs. extended-precision arithmetic), and data
typing influences. Database analysis is particularly useful for programs that
store program logic in data parameters. A logic analysis of these data values
is
required to determine the effect these parameters have on program control.
Sizing and timing analysis is useful for real-time programs having response
time requirements and constrained memory execution space
requirements.
Some software V&V techniques used during code V&V tasks are control flow
analysis, database analysis, regression analysis, and sizing and timing
analysis.
For large code developments, control flow diagrams showing the hierarchy of
main routines and their subfunctions
are useful in understanding the flow of program control. Database analysis is
performed on programs with significant data storage to ensure common data
and variable regions are used consistently between all call routines. Data
integrity is enforced and no data or variable can be accidentally overwritten
by
overflowing data tables. Data typing and use are consistent throughout all
program elements. Regression analysis is used to reevaluate software
requirements and software design issues whenever any significant code
change
is made. This technique ensures project awareness of the original system
requirements. Sizing and timing analysis is done during incremental code
development and compared against predicted values. Significant deviations
between actual and predicted values is a possible indication of problems or the
need for additional examination.
Another area of concern to software V&V is the ability of compilers to
generate object code that is functionally equivalent to the source code, that is,
reliance on the correctness of the language compiler to make data dependent
decisions about abstract programmer coded information. For critical
applications, this problem is solved by validating the compiler or by
validating that the object code produced by the compiler is functionally
equivalent to the source.
Code reading is another technique that may be used for source code
verification. An expert reads through another programmer's code to detect
errors. In an experiment conducted at the National Aeronautics and Space
Administration Goddard Space Flight Center, code reading was found to be
more effective than either functional testing or structural testing [BASILI].
The reason was attributed to the expertise of the readers who, as they read the
code, were simulating its execution and were able to detect many kinds of
errors.
Other techniques commonly used are walkthroughs, inspections and reviews.
These tasks occur in interactive meetings attended by a team which usually
includes at least one member from the development group. Other members
may belong to the development group or to other groups involved in software
development. The duration of these meetings is usually no more than a few
hours in which code is examined on a line-by-line basis. In these dynamic
sessions, it may be difficult to examine the code thoroughly for control logic,
data flow, database errors, sizing, timing and other features which may
require considerable manual or automated effort. Advance preparation for
these activities may be necessary and includes code analysis techniques. The
results of these techniques provide appropriate engineering information for
discussion at meetings where code is evaluated. Regardless of who conducts
or
participates in walkthroughs and inspections, software V&V analyses may be
used to support these meetings.
A comprehensive test management approach to testing recognizes the
differences in strategies and in objectives for unit, software integration, and
software system test. Unit test verifies the design and implementation of
software units. Software integration test verifies functional requirements as
the software units are integrated. Special attention is focused on software,
hardware, and operator interfaces. Software system test validates the entire
software program against system requirements and software performance
objectives. Software system tests validate that the software executes correctly
within its stated operating environment. The software's ability to deal
properly
with anomalies and stress conditions is emphasized. These tests are not
intended to duplicate or replace the user and development group's test
responsibilities, but instead supplement the development testing to test
behavior not normally tested by the user or development group.
Effective testing requires a comprehensive understanding of the system. Such
understanding develops from systematically analyzing the software's concept,
requirements, design, and code. By knowing internal software details,
software V&V testing is effective at probing for errors and weaknesses that
reveal hidden faults. This is considered structural, or white-box, testing. It
often finds errors for which some functional, or black-box, test cases can
produce the correct output despite internal errors.
Functional test cases execute part or all of the system to validate that the user
requirement is satisfied; these test cases cannot always detect internal errors
that will occur under special circumstances. Another software V&V test
technique is to develop test cases that violate software requirements. This
approach is effective at uncovering basic design assumption errors and
unusual operational use errors. The process of planning functional test cases
requires a thorough examination of the functional requirements. An analyst
who carefully develops those test cases is likely to detect errors and omissions
in the software requirements. In this sense test planning can be effective in
detecting errors and can contribute to uncovering some errors before test
execution.
The planning process for testing must take into account the specific objectives
of the software V&V for the software and the impact of different test
strategies
in satisfying these objectives. Frequently, the most effective strategy may be
to
combine two or more strategies. More information and references on software
testing may be found in [WILEY].
Criticality analysis may be used to identify software V&V techniques to
address high-risk concerns. The selection of V&V techniques for use on each
critical area of the program is a method of tailoring the intensity of the
software V&V against the type of risk present in each area of the software.
For example, software V&V would apply algorithm analysis to critical
numerical software functions, and techniques such as sizing and timing
analysis, data and control flow analysis and interface analysis to real-time
executive functions.
3.2 Descriptions of Techniques
The following are summary descriptions of techniques taken from [BAHILL],
[BEN], [EWICS3], [KIRANI], [NBS93], [NGUYEN], [NIST209], [NIST5589],
[NUREG6316], [OKEEFE], [OLEARY], [TURING], [VOAS91,92,95],
[WALLACE94], and [WILEY]. Issues (in italics at the end of each
description) include the types of errors the technique may find, the tasks the
technique supports, and other related techniques (to or from which
supporting
information is provided).
Algorithm analysis examines the logic and accuracy of
the software requirements by translating algorithms into some language or
structured format. The analysis involves rederiving equations or evaluating
the suitability of specific numerical techniques. It checks that algorithms are
correct, appropriate, stable, and meet all accuracy, timing, and sizing
requirements. Algorithm analysis examines the correctness of the
equations and numerical techniques, truncation and rounding effects,
numerical precision of word storage and variables (single vs.
extended-precision arithmetic), and data typing influences.
Issues: accuracy; algorithm efficiency; correctness; consistency in
computation; error propagation; numerical roundoff; numerical stability;
space utilization evaluation; system performance prediction; timing.
Analytic modeling provides performance evaluation and
capacity planning information on software design. It represents the program
logic and processing of some kind of model and analyzes it for sufficiency.
Issues: accuracy; algorithm efficiency; bottlenecks; error propagation;
feasibility; modeling; numerical roundoff; numerical stability; processing
efficiency; system performance prediction.
Back-to-back testing detects test failures by comparing the
output of two or more programs implemented to the same specification. The
same input data is applied to two or more program versions and their outputs
are compared to detect anomalies. Any test data selection strategy can be
used
for this type of testing, although random testing is well suited to this
approach.
Also known as comparison testing. Issues: anomalies or discrepancies
between versions.
Boundary value analysis detects and removes errors
occurring
at parameter limits or boundaries. The input domain of the program is
divided into a number of input classes. The tests should cover the boundaries
and extremes of the classes. The tests check that the boundaries of the input
domain of the specification coincide with those in the program. The value
zero,
whether used directly or indirectly, should be used with special attention (e.g.,
division by zero, null matrix, zero table entry). Usually, boundary values
of the input produce boundary values for the output. Test cases should also
be
designed to force the output to its extreme values. If possible, a test case
which
causes output to exceed the specification boundary values should be specified.
If output is a sequence of data, special attention should be given to the first
and
last elements and to lists containing zero, one, and two elements. Issues:
algorithm analysis; array size; inconsistencies between limits; specification
error.
Code reading involves an expert reading through another
programmer's code to detect errors. The individual is likely to perform a
pseudo-execution (mentally) of the code to pick up errors before compilation.
Issues: correctness; misuse of variables; omitted functions; parameter
checking; poor programming practices; redundancy.
Control flow analysis transforms text describing software
requirements into graphic flows where they can be examined for correctness.
It checks that the proposed control flow is free of problems (e.g., unreachable
or incorrect software design). Control flow analysis is used to show the
hierarchy of main routines and their subfunctions and checks that the
proposed control flow is free of problems (e.g., unreachable or incorrect code
elements). It detects poor and potentially incorrect program structures.
Issues: assertion testing/violations; bottlenecks; boundary test cases;
branch and path identification; branch testing; cell structure of units;
correctness; software design evaluation; error propagation; expected vs.
actual results; file sequence error; formal specification evaluation; global
information flow and consistency; hierarchical interrelationship of units;
inaccessible code; software integration tests; inter-unit structure; loop
invariants; path testing; processing efficiency; retest after change; system
performance prediction; test case preparation; unit tests.
Coverage analysis measures how much of the structure of a
unit or system has been exercised by a given set of tests. System level coverage
measures how many of the unit parts of the system have been called by a test
set. Code coverage measures the percentage of statements, branches, or lines
of code (LOC) exercised by a test set. Issues: unit tests, software
integration tests, software system tests.
Critical timing/flow analysis checks that the process and
control timing requirements are satisfied by modeling those aspects of the
software design. Issues: modeling; synchronization; timing.
Database analysis ensures that the database structure and
access methods are compatible with the logical design. It is performed on
programs with significant data storage to ensure that common data and
variable regions are used consistently between all calling routines; that data
integrity is enforced and no data or variable can be accidentally
overwritten by overflowing data tables; and that data typing and use are
consistent throughout the program. Issues: access protection; data
characteristics and types; software design evaluation; file sequence error;
global information flow; processing efficiency; space utilization evaluation;
unit tests.
Data flow analysis is important for designing the high level
(process) architecture of applications. It can check for variables that are read
before they are written, written more than once without being read, and
written but never read. Issues: assertion testing/violations; bottlenecks;
boundary test cases; branch and path identification; branch testing; cell
structure of units; data characteristics; environment interaction; error
propagation; evaluation of program paths; expected vs actual results; file
sequence error; global information flow and consistency; hierarchical
interrelationship of units; inter-unit structure; loop invariants; processing
efficiency; retest after changes; software design evaluation; software
integration tests; system performance prediction; test case preparation;
uninitialized variables; unused variables; variable references.
Decision (truth) tables provide a clear and coherent analysis
of complex logical combinations and relationships. This method uses
two-dimensional tables to concisely describe logical relationships between
boolean program variables. Issues: logic errors.
Desk checking involves the examination of the software
design
or code by an individual, usually an expert other than the author, for obvious
errors. It can include looking over the code for obvious defects, checking for
correct procedure interfaces, reading the comments to develop a sense of what
the code does and then comparing it to its external specifications, comparing
comments to software design documentation, stepping through with input
conditions contrived to "exercise" all paths including those not directly
related to the external specifications, and checking for compliance with
programming standards and conventions. Issues: anachronistic data;
calls to subprograms that do not exist; data fields unconstrained by data
boundaries; failure to implement the design; failure to save or restore
registers; improper nesting of loops and branches; improper program
linkages; improper sequencing of processes; incomplete predicates; incorrect
access of array components; inefficient data transport; infinite loops;
initialization faults; input-output faults; instruction modification; inverted
predicates; mismatched parameter lists; missing labels or code; missing
validity tests; misuse of variables; prodigal programming; unauthorized
recursion; undeclared variables; unreachable code; unreferenced
labels.
Error seeding determines whether a set of test cases is adequate by inserting (
seeding ) known error types into the program and executing it with the test
cases. If only some of the seeded errors are found, the test case set is not
adequate. The ratio of found seeded errors to the total number of seeded
errors is an estimation of the ratio of found real errors to total number of
errors, or
Number Seeded Errors Found Number Real Errors Found
-------------------------- = ------------------------
Total Number Seeded Errors Total Number Real Errors
One can solve for the total number of real errors, since the values of the other
three are known. Then, one can estimate the number of errors remaining by
subtracting the number of real errors found from the total number of real
errors. The remaining test effort can then be estimated. If all the seeded
errors are found, this indicates that either the test case set is adequate, or that
the seeded errors were too easy to find. Issues: test case
adequacy.
Event tree analysis uses a bottom-up approach to model the
effects of an event that may have serious repercussions. The initiating event is
the root of the event tree. Two lines are drawn from the root, depicting the
positive and negative consequences of the event. This is done for each
subsequent consequence until all consequences are considered. Issues:
hazard analysis; safety; threat analysis; timing.
Finite state machines (FSM) check for incomplete and
inconsistent software requirements by modeling the software in terms of its
states, inputs and actions. For example, a system is in state S1, receives an
input I, then carries out action A, and moves to state
S2. FSMs can check
that
there is an action and new state for every input in every state, and that only
one state change is defined for each state and input pair. Issues:
incomplete software requirements specification; inconsistent software
requirements; modeling.
Functional testing executes part or all of the system to
validate
that the user requirement is satisfied. Issues: boundary test cases;
branch and path identification; branch testing; file sequence error; path
testing; program execution characteristics; retest after change; statement
coverage testing; system performance prediction; software system tests; test
case preparation; test thoroughness; unit test; uninitialized variables; unused
variables; variable references; variable snapshots/tracing.
Inspections are evaluation techniques whereby the software
requirements, software design, or code are examined by a person or group
other than the author to detect faults, violations of development standards,
and
other problems. An inspection begins with the distribution of the item to be
inspected (e.g., a specification). Each participant is required to analyze the
item on his own. During the inspection, which is a monitored meeting of all
the participants, the item is jointly analyzed to find as many errors as
possible.
All errors found are recorded, but no attempt is made to correct the errors at
that time. However, at some point in the future, it must be verified that the
errors found have actually been corrected. Issues: accuracy; checklists
(software requirements, software design, code); effective forerunners to
testing; formal specification evaluation; go-no-go decisions; information
flow consistency; logic errors; loop invariants; manual simulation; retest after
change; space utilization evaluation; technical reviews; status reviews; syntax
errors; uninitialized variables; unused variables.
Interface analysis is a static analysis technique. It is used to
demonstrate that the interfaces of subprograms do not contain any errors that
lead to failures in a particular application of the software. Interface analysis
is
especially important if interfaces do not contain assertions that detect
incorrect
parameter values. It is also important after new configurations of pre-existing
subprograms have been generated. The types of interfaces that are analyzed
include external, internal, hardware/hardware, software/software,
software/hardware, and software/database. Issues: actual and formal
parameters mismatch; inconsistencies between subroutine usage list and
called
subroutine; inconsistency of attributes of global variables; inconsistency
between COTS parameter usage relative to other system parameters;
incorrect assumptions about static and dynamic storage of values; incorrect
functions used or incorrect subroutine called; input-output description
errors.
Interface testing is a dynamic analysis technique. Similar to interface
analysis,
except test cases are built with data that tests all interfaces. Interface testing
may include the following: testing all interface variables at their extreme
positions; testing interface variables individually at their extreme values with
other interface variables at normal values; testing all values of the domain of
each interface variable with other interface variables at normal values; testing
all values of all variables in combination (may be feasible only for small
interfaces). Issues: actual and formal parameters mismatch;
inconsistencies between subroutine usage list and called subroutine;
inconsistency of attributes of global variables; inconsistency between COTS
parameter usage relative to other system parameters; inconsistent
interface parameters; incorrect assumptions about static and dynamic storage
of values; functions used or incorrect subroutine called; input-output
description errors.
Mutation analysis determines the thoroughness with which a
program has been tested, and in the process, detects errors. This procedure
involves producing a large set of versions or "mutations" of the original
program, each derived by altering a single element of the program (e.g.,
changing an operator, variable, or constant). Each mutant is then tested with
a
given collection of test data sets. Since each mutant is essentially different
from the original, the testing should demonstrate that each is in fact different.
If each of the outputs produced by the mutants differ from the output
produced by the original program and from each other, then the program is
considered adequately tested and correct. Issues: boundary test cases;
branch and path identification; branch testing; retest after change; test case
preparation.
Performance testing measures how well the software system
executes according to its required response times, CPU usage, and other
quantified features in operation. measurements may be simple to make (e.g.,
measuring process time relative to volumes of input data) or more
complicated
(e.g., instrumenting the code to measure time per function execution).
Issues: memory allocation; synchronization; timing.
Petri-nets model systems to assure software design adequacy
for catastrophic-failure and other safety problems. The system (including
software systems) is modeled using conditions and events represented by state
transition diagrams. Petri-nets consist of places (conditions--represented by
circles), transitions (events--represented by bars), inputs (pre-conditions--
represented by arrows originating from places and terminating at
transitions), outputs (post-conditions--represented by arrows originating from
transitions and terminating at places), and tokens (indication of true
condition--represented by dots). Petri-nets can be "executed" to see how the
software design will actually work under certain conditions. Specifically,
Petri-nets can be used to determine all the states (including hazardous states)
the
system can reach, given an initial condition. Issues: hazard analysis;
modeling; safety; threat analysis; timing.
Proof of correctness (formal verification) involves the use of
theoretical and mathematical models to prove the correctness of a program
without executing it. Using this method, the program is represented by a
theorem and is proved with first-order predicate calculus. Issues:
correctness; proof of critical sections.
Prototyping helps to examine the probable results of
implementing software requirements. Examination of a prototype may help
to
identify incomplete or incorrect software requirements and may also reveal if
any software requirements will not result in desired system behavior. It can
be
used as an aid in examining the software design architecture in general or a
specific set of functions. For large complicated systems prototyping can
prevent inappropriate software designs from resulting in costly, wasted
implementations. Issues: behavior; omitted functions (from software
requirements); incomplete software requirements specification; user
interface.
Regression analysis and testing is used to reevaluate software
requirements and software design issues whenever any significant code
change
is made. It involves retesting to verify that the modified software still meets
its
specified requirements. This analysis ensures awareness of the original
system
requirements. It is performed when any changes to the product are made
during installation to verify that the basic software requirements and software
design assumptions affecting other areas of the program have not
been violated. Issues: software integration tests; retest after change;
software system tests; unit tests.
Requirements parsing involves examination to ensure that
each software requirement is defined unambiguously by a complete set of
attributes (e.g., initiator of an action, source of the action, the action, the
object
of the action, constraints). Issues: accuracy; assertion testing/violations;
checklists; completeness; consistency; environment interaction; feasibility;
formal specification evaluation; hierarchical interrelationship of units;
information flow consistency; software integration tests; inter-unit
structure; path testing; proof of correctness; software requirements
evaluation; software requirements indexing; software requirements to design
correlation; retest after change; standards check; statement coverage testing;
software system tests; unit tests.
Reviews are meetings at which the software requirements,
software design, code, or other products are presented to the user, sponsor, or
other interested parties for comment and approval, often as a prerequisite for
concluding a given activity of the software development process. Reviews
check
the adequacy of the software requirements and software design according to a
set of criteria and procedures. Issues: effective forerunners to testing;
logic errors; syntax errors.
Sensitivity analysis is a prediction of the probability that a
software testing scheme will make programmer faults observable during
testing. It allows different testing strategies to be ranked, compared, and
evaluated. Sensitivity analysis is useful for assessing which regions of code are
most likely to be affected during software maintenance (code modifications).
It
can be twisted into an assessment of how fault-tolerant a program is to
software programmer faults (logic errors). Issues: correctness; logic
errors; reliability; test case adequacy.
Simulation is used to evaluate the interactions of large,
complex systems with many hardware, user, and other interfacing software
units. Simulation uses an executable model to examine the behavior of the
software. Simulation is used to test operator procedures and to isolate
installation problems. Issues: assertion testing/violations; behavior;
boundary test cases; branch and path identification; branch testing;
environment interaction; execution monitoring, sampling, support; feasibility;
file sequence error; inter-unit structure; path testing; program execution
characteristics; retest after change; statement coverage testing; system
performance prediction; software system tests; uninitialized variables; unused
variables; variable references; variable snapshot/tracing.
Sizing and timing analysis is useful for determining that
allocations for hardware and software are made appropriately for the
software
design architecture. It is performed during incremental code development by
obtaining program sizing and execution timing values to determine if the
program will satisfy processor size and performance requirements allocated to
the software. Significant deviations between actual and predicted values
is a possible indication of problems or the need for additional examination.
Issues: algorithm efficiency; bottlenecks; boundary test cases; branch
and path identification; branch testing; software integration tests; processing
efficiency; program execution characteristics; retest after change; space
utilization evaluation; software system tests; timing; unit tests.
Slicing is a program decomposition technique used to trace an
output variable back through the code to identify all code statements relevant
to a computation in the program. This technique may be useful to
demonstrate
functional diversity. Issues: allocation of V&V resources; common
code;
information flow consistency; program decomposition; variable
references.
Software failure mode, effects and criticality analysis reveals
weak or missing software requirements by using inductive reasoning to
determine the effect on the system of a unit (includes software instructions)
failing in a particular failure mode. A matrix is developed for each unit
depicting the effect on the system of each unit's failure in each failure mode.
Items in the matrix may include the failure mode and causes, effect on system,
criticality, change/action required, and prevention and control safeguards.
The criticality factor, that is, the seriousness of the effect of the failure, can be
used in determining where to apply other analyses and testing resources.
Issues: hazard analysis; safety; incomplete software requirements
specification; threat analysis.
Software fault tree analysis identifies and analyzes software
safety requirements. It is used to determine possible causes of known hazards.
Its purpose is to demonstrate that the software will not cause a system to
reach
an unsafe state, and to discover what environmental conditions would allow
the
system to reach an unsafe state. The analyst assumes that an already
identified hazard has occurred and then works backward to discover the
possible causes of the hazard. This is done by creating a fault tree, whose root
is the hazard. The system fault tree is expanded until it contains at its lowest
level basic events which cannot be further analyzed. Issues: hazard
analysis; safety; threat analysis.
Stress testing tests the response of the system to extreme
conditions to identify vulnerable points within the software, and to show that
the system can withstand normal workloads. Issues: design errors;
planning for defaults when system over-stressed.
Structural testing examines the logic of the units and may be
used to support software requirements for test coverage, i.e., how much of the
program has been executed. Issues: bottlenecks; error propagation;
evaluation of program paths; parameter checking; program execution
characteristics; retest after change.
Symbolic execution shows the agreement between the source
code and the software requirements specification. This is an evaluation
technique in which program execution is simulated using symbols rather than
actual values for input data, and program output is expressed as logical or
mathematical expressions involving these symbols. Issues: assertion
testing/violations; program execution characteristics; proof of correctness;
retest after change.
Test certification ensures that reported test results are the
actual finding of the tests. Test related tools, media, and documentation are
certified to ensure maintainability and repeatability of tests. This technique is
also used to show that the delivered software product is identical to the
software product that was subjected to V&V. It is used, particularly in
critical
software systems, to verify that the required tests have been executed and that
the delivered software product is identical to the product subjected to
software
V&V. Issues: incorrect product version shipped; incorrect test results;
reports on test cases that were omitted.
Walkthroughs are similar to reviews, but less formal and
much more detailed. A walkthrough is an evaluation technique in which a
designer or programmer leads one or more other members of the development
team through a segment of software design or code, while the other members
ask questions and make comments about technique, style, and identify
possible
errors, violations of development standards, and other problems.
Issues:
checklists; error propagation; effective forerunners to testing; formal
specification evaluation; go-no-go decisions; logic errors; manual simulation;
parameter checking; retest after change; small, but difficult, or error-prone
sections of design or code; status reviews; syntax errors; software system
tests;
technical reviews.
Reuse-Specific
Most V&V techniques are applicable to reused software. Guidance in section
3 provides suggestions on issues to be considered for deciding to reuse the
software; these issues may require application of V&V techniques. The two
techniques identified in this section are crucial.
- -- Consistency analysis compares the requirements of
any existing software with the new software requirements to ensure
consistency. Issues: consistency.
- -- Interface analysis (see interface analysis and interface
testing above) is especially important to exercise interfaces of reused software
to other parts of the system as part of the planning for the reused software, to
ensure correct adaption of the reused code to possible differences in the
software architecture, operating environment, and application domain from
its
original usage.
KBS-Specific Techniques
- -- Alternative model compares the domain model
implemented in the KBS to an alternate domain model for completeness and
accuracy.
- -- Control groups can be used during testing to compare
performance on executing a given task with or without the KBS available.
- -- Credibility analysis compares the results of the
system
to known expert s answers and reasoning to the same cases and judges the
credibility of the system.
- -- Field testing is used only for low risk applications. It
places the KBS in actual use and records the results of that use.
- -- Illegal attribute testing checks rules against
constraints for illegal attribute values. This as an effective method for
eliminating bugs during the implementation process of KBS development.
- -- Logical verification is the verification of the expert s
knowledge for completeness, consistency, etc., as the domain model for the
knowledge base system is being built.
- -- Meta models compare the knowledge and rules to
domain meta models.
- -- Partition testing selects test cases using partitions of
the input and output space as criteria and checks if the specification addresses
those cases. This as an effective method for eliminating bugs during the
requirements, design, and implementation processes of KBS development.
- -- Rule verification checks for completeness,
subsumed/redundant rules, inconsistent rules, dead end rules, circular rules,
unreachable conclusions, etc.
- -- Statistical validation examines how frequently a KBS
uses rules or clusters of rules int he knowledge base. If there are expectations
about the frequency of use expected for some rules then statics on rules use
can
be useful.
- -- Turing tests compare performance of the system
against that of an expert in blind trials.
- -- Weight analysis compares the statistical information
associated with a rule to statics known about the domain.
|
Table 3-1. Software V&V Techniques |
| TECHNIQUE |
REQ
|
DESIGN
|
CODE
|
UNIT |
INTEGR |
SYSTEM |
INSTALL |
OPER |
MAINT |
| Algorithm Analysis |
|
|
|
|
|
|
|
|
|
| Analytic Modeling |
|
|
|
|
|
|
|
|
|
| Back-to-Back Testing |
|
|
|
|
|
|
|
|
|
| Boundary Value Analysis |
|
|
|
|
|
|
|
|
|
| Code Reading |
|
|
|
|
|
|
|
|
|
| Control Flow Analysis |
|
|
|
|
|
|
|
|
|
| Coverage Analysis |
|
|
|
|
|
|
|
|
|
| Critical Timing/Flow Analysis |
|
|
|
|
|
|
|
|
|
| Database Analysis |
|
|
|
|
|
|
|
|
|
| Data Flow Analysis |
|
|
|
|
|
|
|
|
|
| Decision (Truth) Tables |
|
|
|
|
|
|
|
|
|
| Desk Checking |
|
|
|
|
|
|
|
|
|
| Error Seeding |
|
|
|
|
|
|
|
|
|
| Event Tree Analysis |
|
|
|
|
|
|
|
|
|
| Finite State Machines |
|
|
|
|
|
|
|
|
|
| Functional Testing |
|
|
|
|
|
|
|
|
|
| Inspections |
|
|
|
|
|
|
|
|
|
| Interface Analysis |
|
|
|
|
|
|
|
|
|
| Interface Testing |
|
|
|
|
|
|
|
|
|
| Mutation Analysis |
|
|
|
|
|
|
|
|
|
| Performance Testing |
|
|
|
|
|
|
|
|
|
| Petri-Nets |
|
|
|
|
|
|
|
|
|
| Proof of Correctness |
|
|
|
|
|
|
|
|
|
| Prototyping |
|
|
|
|
|
|
|
|
|
|
Table 3-1. Software V&V Techniques (continued)
|
| TECHNIQUE |
REQ
|
DESIGN
|
CODE
|
UNIT |
INTEGR |
SYSTEM |
INSTALL |
OPER |
MAINT |
| Regression Analysis and Testing |
|
|
|
|
|
|
|
|
|
| Requirments Parsing |
|
|
|
|
|
|
|
|
|
| Reviews |
|
|
|
|
|
|
|
|
|
| Sensitivity Analysis |
|
|
|
|
|
|
|
|
|
| Simulation |
|
|
|
|
|
|
|
|
|
| Sizing and Timing Analysis |
|
|
|
|
|
|
|
|
|
| slicing |
|
|
|
|
|
|
|
|
|
| SFMECA(9) |
|
|
|
|
|
|
|
|
|
| Software Fault Tree Analysis |
|
|
|
|
|
|
|
|
|
| Stress Testing |
|
|
|
|
|
|
|
|
|
| Structural Testing |
|
|
|
|
|
|
|
|
|
| Symbolic Execution |
|
|
|
|
|
|
|
|
|
| Test Certification |
|
|
|
|
|
|
|
|
|
| Walkthroughs |
|
|
|
|
|
(10)
|
|
|
|
|
Reuse-Specific |
| Consistency Analysis |
|
|
|
|
|
|
|
|
|
|
KBS-Specific |
| Alternative Model |
|
|
| |