Glossary

Abstract data type (ADT)

A data type whose properties (domain and operations) are specified independently of any particular implementation

Abstraction

A model of a complex system that includes only the details essential to the perspective of the viewer of the system

Acceptance test

The process of testing the system in its real environment with real data

Activation record (stack frame)

A record used at run time to store information about a function call, including the parameters, local variables, register values, and return address

Adjacency list

A linked list that identifies all vertices to which a particular vertex is connected; each vertex has its own adjacency list

Adjacency matrix

For a graph with N nodes, an N by N table that shows the existence (and weights) of all edges in the graph

Adjacent vertices

Two vertices in a graph that are connected by an edge

Algorithm

A logical sequence of discrete steps that describes a complete solution to a given problem, computable in a finite amount of time

Assertion

A logical proposition that can be true or false

Average case complexity

Related to the average number of steps required by an algorithm, calculated across all possible sets of input values

AVL tree

A binary search tree that rebalances itself when the heights of the two subtrees of any node differ by no more than 1

Balance factor

A value associated with a tree node that is the difference in height between its two subtrees

Balanced node

A node whose balance factor is no more than 1

Base case

The case for which the solution can be stated nonrecursively

Base class

The class being inherited from

Best case complexity

Related to the minimum number of steps required by an algorithm, given an ideal set of input values in terms of efficiency

Big-O notation (order of magnitude)

A notation that expresses computing time (complexity) as the term in a function that increases most rapidly relative to the size of a problem

Binary search tree

A binary tree in which the key value in any node is greater than the key value in its left child and any of its children (the nodes in the left subtree) and less than the key value in its right child and any of its children (the nodes in the right subtree)

Binary tree

A structure with a unique starting node (the root), in which each node is capable of having two child nodes, and in which a unique path exists from the root to every other node

Binding time

The time at which a name or symbol is bound to the appropriate code

Bit vector

A representation that maps each item in the component type to a Boolean flag

Black-box testing

Testing a program or function based on the possible input values, treating the code as a “black box”

Black-height

A property of Red-Black trees that dictates that every path from a given node to a NULL node must have the same number of black nodes

Bounded ADT

An ADT for which there is a logical limit on the number of items in the structure

Branch

A code segment that is not always executed; for example, a switch statement has as many branches as there are case labels

Bucket

A collection of elements associated with a particular hash location

Cardinality

The number of items in a set

Chain

linked list of elements that share the same hash location

Circular linked list

list in which every node has a successor; the “last” element is succeeded by the “first” element

Class

An unstructured type that encapsulates a fixed number of data components with the functions that manipulate them; the predefined operations on an instance of a class are whole assignment and component access

Class constructor

A special member function of a class that is implicitly invoked when a class object is defined

Clear- (white-) box testing

Testing a program or function based on covering all the statements, branches, or paths of the code

Client

(i) Software that declares and manipulates objects (instances) of a particular class (ii) User of the software

Clustering

The tendency of elements to become unevenly distributed in the hash table, with many elements clustering around a single hash location

Collision

The condition resulting when two or more keys produce the same hash location

Complete binary tree

A binary tree that is either full or full through the next-to-last level, with the leaves on the last level located as far to the left as possible

Complete graph

A graph in which every vertex is directly connected to every other vertex

Component (base) type

The data type of the components or items in a set

Composite data type

A data type that allows a collection of values to be associated with an object of that type

Composition (containment)

A mechanism by which an internal data member of one class is defined to be an object of another class type

Constructor

An operation that creates a new instance of a class

Copy constructor

A special member function of a class that is implicitly invoked when passing parameters by value, initializing a variable in a declaration, and returning an object as the value of a function

Data abstraction

The separation of a data type’s logical properties from its implementation

Data encapsulation

The separation of the representation of data from the applications that use the data at a logical level; a programming language feature that enforces information hiding

Data structure

A collection of data elements whose organization is characterized by accessing operations that are used to store and retrieve the individual data elements; the implementation of the composite data members in an abstract data type

Debugging

The process of removing known errors

Deep copy

An operation that not only copies one class object to another but also makes copies of any pointed-to data

Dereference operator

An operator that, when applied to a pointer variable, denotes the variable to which the pointer points

Derived class

The class that inherits

Deskchecking

Tracing an execution of a design or program on paper

Difference

A binary set operation that returns a set made up of all the items that are in the first set but not the second set

Direct recursion

When a function directly calls itself

Directed graph (digraph)

A graph in which each edge is directed from one vertex to another (or the same) vertex

Doubly linked list

A linked list in which each node is linked to both its successor and its predecessor

Dynamic allocation

Allocation of memory space for a variable at run time (as opposed to static allocation at compile time)

Dynamic binding

The run-time determination of which implementation of an operation is appropriate

Edge (arc)

A pair of vertices representing a connection between two nodes in a graph

Empty set

A set with no members

Exception

An unusual, generally unpredictable event, detectable by software or hardware, that requires special processing; the event may or may not be erroneous

Folding

A hash method that breaks the key into several pieces and concatenates or exclusive-ORs some of the pieces to form the hash value

Free store (heap)

A pool of memory locations reserved for dynamic allocation of data

Full binary tree

A binary tree in which all of the leaves are located on the same level and every nonleaf node has two children

Functional domain

The set of valid input data for a program or function

Garbage

Memory locations that can no longer be accessed

General (recursive) case

The case for which the solution is expressed in terms of a smaller version of itself

Generic data type

A type for which the operations are defined but the types of the items being manipulated are not

Graph

A data structure that consists of a set of nodes and a set of edges that relate the nodes to one another

Hash function

A function used to manipulate the key of an element in a list to identify its location in the list

Hashing

The technique used for ordering and accessing elements in a list in a relatively constant amount of time by manipulating the key to identify its location in the list

Header node

A placeholder node at the beginning of a list; used to simplify list processing

Heap

A complete binary tree, each of whose elements contains a value that is greater than or equal to the value of each of its children

Height

The maximum level

Implementing a test plan

Running the program with the test cases listed in the test plan

Indirect recursion

When a chain of two or more function calls returns to the function that originated the chain

Information hiding

The practice of hiding the details of a function or data structure with the goal of controlling access to the details of a module or structure

Inheritance

A mechanism used with a hierarchy of classes in which each descendant class inherits the properties (data and operations) of its ancestor class

Inorder traversal

A systematic way of visiting all nodes in a binary tree that visits the nodes in the left subtree of a node, then visits the node, and then visits the nodes in the right subtree of the node

Inspection

A verification method in which one member of a team reads the program or design line by line and the other members point out errors

Integration testing

Testing performed to integrate program modules that have already been independently unit tested

Intersection

A binary set operation that returns a set made up of all the items that are in both of the input sets

Iterator

An operation that allows us to process all components in a data structure sequentially

Key

(i) A member of a record (struct or class) whose value is used to determine the logical and/or physical order of the items in a list; (ii) a value in the base type of a map, used to look up its associated value

Key-value pair

An item in a map, consisting of two values: the key, which is taken from the base type, and the associated value, which can be retrieved by looking up the key

Leaf node

A tree node that has no children

Left-right rotation

A type of double rotation, with a left rotation followed by a right rotation

Left rotation

A type of rotation where it appears as though nodes are being rotated around the root of the right subtree

Length

The number of items in a list; the length can vary over time

Level

The distance of a node from the root; the root is level 0

Linear probing

Resolving a hash collision by sequentially searching a hash table beginning at the location returned by the hash function

Linear relationship

Each element except the first has a unique predecessor, and each element except the last has a unique successor

Map

An unordered collection of distinct components, each consisting of a key-value pair, where the key is a unique value chosen from the possible values of a single data type, called the base type; values may be retrieved by looking up the associated key

Memory leak

The loss of available memory space that occurs when memory is allocated dynamically but never deallocated

Metric-based testing

Testing based on measurable factors

Module

A cohesive system subunit that performs a share of the work

Object class (class)

The description of a group of objects with similar properties and behaviors; a pattern for creating individual objects

Observer

An operation that allows us to observe the state of an object without changing it

Overloading

Giving the same name to more than one function or using the same operator symbol for more than one operation; usually associated with static binding

Parallel processing

Computation in which multiple operations are performed simultaneously

Path

(i) A combination of branches that might be traversed when a program or function is executed; (ii) a sequence of vertices that connects two nodes in a graph

Path testing

A testing technique whereby the tester tries to execute all possible paths in a program or function

Polymorphism

The ability to determine which of several operations with the same name is appropriate; a combination of static and dynamic binding

Postconditions

Assertions that state what results are expected at the exit of an operation or function, assuming that the preconditions are true

Postorder traversal

A systematic way of visiting all nodes in a binary tree that visits the nodes in the left subtree of a node, then visits the nodes in the right subtree of the node, and then visits the node

Preconditions

Assertions that must be true on entry into an operation or function for the postconditions to be guaranteed

Preorder traversal

A systematic way of visiting all nodes in a binary tree that visits a node, then visits the nodes in the left subtree of the node, and then visits the nodes in the right subtree of the node

Program validation

The process of determining the degree to which software fulfills its intended purpose

Program verification

The process of determining the degree to which a software product fulfills its specifications

Quadratic probing

Resolving a hash collision by using the rehashing formula (HashValue ± I2) % array-size, where I is the number of times that the rehash function has been applied

Queue

An abstract data type in which elements are added to the rear and removed from the front; a “first in, first out” (FIFO) structure

Radix

The number of possibilities for each position; the digits in a number system

Random probing

Resolving a hash collision by generating pseudorandom hash values in successive applications of the rehash function

Recursive algorithm

A solution that is expressed in terms of (1) smaller instances of itself and (2) a base case

Recursive call

A function call in which the function being called is the same as the one making the call

Recursive definition

A definition in which something is defined in terms of a smaller version of itself

Refactor

To rewrite existing code to reflect changes in requirements and design decisions

Regression testing

Reexecution of program tests after modifications have been made to ensure that the program still works correctly

Rehashing

Resolving a collision by computing a new hash location from a hash function that manipulates the original location rather than the element’s key

Requirements

A statement of what is to be provided by a computer system or software product

Right-left rotation

A type of double rotation, with a right rotation followed by a left rotation

Right rotation

A type of rotation where it appears as though nodes are being rotated around the root of the left subtree

Robustness

The ability of a program to recover following an error; the ability of a program to continue to operate within its environment

Root

The top node of a tree structure; a node with no parent

Run-time stack

A data structure that keeps track of activation records during the execution of a program

Scenario

A sequence of steps that describes an interaction between a client and an application or program

Self

The object to which a member function is applied

Serial (sequential) processing

Computation that proceeds one step at a time

Set

An unordered collection of distinct values (items or components), chosen from the possible values of a single data type, called the component (base) type

Shallow copy

An operation that copies one class object to another without copying any pointed-to data

Software engineering

The discipline devoted to the design, production, and maintenance of computer programs that are developed on time and within cost estimates, using tools that help to manage the size and complexity of the resulting software products

Software process

A standard, integrated set of software engineering tools and techniques used on a project or by an organization

Software specification

A detailed description of the function, inputs, processing, outputs, and special requirements of a software product; it provides the information needed to design and implement the program

Sorted list

A list that is sorted by the value in the key; a semantic relationship exists among the keys of the items in the list

Stable sort

A sorting algorithm that preserves the order of duplicates

Stack

An abstract data type in which elements are added and removed from only one end; a last-in, first-out (LIFO) structure

Stack overflow

The condition resulting from trying to push an element onto a full stack

Stack underflow

The condition resulting from trying to pop an empty stack

Statement coverage

Every statement in the program is executed at least once

Static binding

The compile-time determination of which implementation of an operation is appropriate

Stub

A special function that can be used in top-down testing to stand in for a lower-level function

Subset

A set X is a subset of set Y if each item of X is an element of Y; if at least one element of Y is not in X, then X is a proper subset of Y

Syntactic sugar

An alternative form or syntax that makes programs easier to express and read; often translated into programming constructs supported by the base language

Tail recursion

The case in which a function contains only a single recursive invocation and it is the last statement to be executed in the function

Template

A C++ language construct that allows the compiler to generate multiple versions of a class type or a function by allowing parameterized types

Test driver

A program that sets up the testing environment by declaring and assigning initial values to variables, then calls the subprogram to be tested

Test plan

A document showing the test cases planned for a program or module, their purposes, inputs, expected outputs, and criteria for success

Testing

The process of executing a program with data sets designed to discover errors

Trailer node

A placeholder node at the end of a list; used to simplify list processing

Transformer

An operation that changes the internal state of an object

Unbalanced node

A node whose balance factor is greater than 1

Unbounded ADT

An ADT for which there is no logical limit on the number of items in the structure

Undirected graph

A graph in which the edges have no direction

Union

A binary set operation that returns a set made up of all the items that are in either of the input sets

Unit testing

Testing a module or function by itself

Universal set

The set containing all the values of the component type

Unsorted list

A list in which data items are placed in no particular order; the only relationships between data elements are the list predecessor and successor relationships

Use case

A collection of scenarios related to a common goal

Vertex

A node in a graph

Walk-through

A verification method in which a team performs a manual simulation of the program or design

Weighted graph

A graph in which each edge carries a value

Worst case complexity

Related to the maximum number of steps required by an algorithm, given the worst possible set of input values in terms of efficiency