Index
Note: Page numbers followed by b indicate boxes, f indicate figures and t indicate tables.
A
Abstract base classes (ABCs)
plugin implementation,
366
Abstraction
Access control
and getter/setter routines,
30
Access levels
encapsulation, language variations,
27
and logical hiding,
26–27
Active Server Pages (ASP), web development,
8
Actors, use case template elements,
115
Acumen Threadspotter, multithreading analysis,
240
Adaptable systems, architecture classifications,
129
Adapter pattern
Advanced API versions, parallel products,
248
Aggregation, UML class diagram,
23
Agile development, definition,
117–118
AIX, memory-based analysis,
239
Algorithms
behavioral patterns,
65–66
functionality compatibility,
252
functionality mismatch,
11
parallel development example,
9
Allocators
plugin implementation,
366
AMD CodeAnalyst, for performance analysis,
238
Android platform, API versions,
373t
Anonymous namespace, and external linkage,
205
ANSI C API
Apache Portable Runtime,
15t
API (Application Programming Interface) basics
contractor analogy,
1–2,
3f
encapsulation, language variations,
27b
and network protocols,
16–17
parallel development,
9–10
API design
API development stages,
106f
architecture design
OpenSceneGraph example,
125f
class design
Liskov Substitution Principle,
135–139
documentation usability,
281
free operator overloading,
192
functional requirements
function design
technical debt
use cases
API design patterns
abstract base classes, overview,
86–87
Factory Methods
extensible example,
88–91
Observer pattern
Pimpl idiom
opaque pointers in C,
75–76
Singleton
vs. dependency injection,
81–82
implementation in C++,
77–79
API performance
and array references,
235
and functional compatibility,
252
#include minimization
input arguments via const reference,
210–212
and member variable hiding,
31
nonfunctional requirements,
112
API qualities (C++−specific)
const correctness
constructors and assignment
compiler-generated functions,
176–177
function parameters
pointer
vs. reference parameters,
198–199
operator overloading
operator addition to class,
193–195
templates
explicit instantiation API design,
187–190
API qualities (general)
coupling
class coupling reduction,
54–56
ease-of-use
misuse considerations,
40–42
platform independence,
51–52
resource allocation,
47–50
implementation detail hiding
minimal completeness
problem domain model
API reviews
API styles
ANSI C
data-driven APIs
object-oriented C++ APIs
template-based APIs
Application Binary Interface (ABI)
backward compatibility,
257
Architecture Description Languages, architecture design communication,
130
Architecture design
OpenSceneGraph example,
125f
Second Life Viewer,
14,
14f
Arrays
and initialization lists,
220
reference parameters,
198
references and iterators,
235
variant argument lists,
168
Array subscript
Assertions
contract programming,
315
implicit instantiation design,
186
Assignment operator
compiler-generated functions,
177
C++−specific APIs
compiler-generated functions,
176–177
initialization lists,
220
Association, UML class diagram,
23
at() method, and random access,
234
AutoDuck, documentation generation,
275
Automated documentation, creation,
274–276
Automated GUI testing, overview,
294
Automated Teller Machine (ATM)
Automated testing
continuous build systems,
326,
327f
B
Backward compatibility
API reviews
definition and types,
251
maintenance
removing functionality,
261
Basic API versions, parallel products,
248
Basic block coverage, testing tools,
323
Basic course
ATM use case example,
116
use case template elements,
115
Behavioral design patterns, examples,
65–66
Behaviors
defining with documentation,
268–269
Best practices
plugin implementation,
366
“The Big Three” rule,
176
Binary compatibility
in object-oriented C++ APIs,
159
Binary instrumentation, time-based performance analysis,
236
Binary operators
Bit fields, memory optimization,
222,
225
Black box testing
integration testing as,
297
Booleans
Boost library
implicit instantiation API design,
187
Boost Python
cross-language polymorphism,
345–346
scripting and language barrier,
333
Boost Test, overview,
320
Boundary conditions, definition,
302
Breadcrumbs, documentation usability,
280
Buffer overruns, definition,
303
Bug tracking
Bullseye Coverage, testing tools,
323
Business logic, data-driven APIs,
166
Business requirements, definition,
111
C
Caching
and getter/setter routines,
29
Callbacks
and architecture design,
130
and Factory methods,
88–89
Callgrind, for performance analysis,
238
Calling convention, adapter pattern,
96
Case studies
Cast operators, variant argument lists,
168
CcDoc, documentation generation,
275
Chaining
Change control process, API design,
5
Change request process, API design,
5
Circular dependency, architecture design,
129f
plugin system design,
364
C++ language basics
plugin implementation,
366
Class concept
documentation basics,
272
in object-oriented C++ APIs,
158
Class design
Liskov Substitution Principle,
135–139
Class diagrams
implementation hiding,
33–34
Class hierarchy
Class invariant, contract programming,
270
Client applications, and API performance,
226
Client/server protocol, and APIs,
16
C linkage
plugin implementation,
366
Cocoa (Apple)
Code bloat, and API performance,
226
Code coverage
Code duplication, and API code robustness,
7
Code examples
C++ usage
compiler-generated functions,
176–177
explicit instantiation,
188
implicit instantiation,
186
design
Liskov substitution principle,
135–136
design patterns
extensible factory methods,
89
Pimpl and smart pointers,
72–73
simple factory methods,
87
singleton
vs. dependency injection,
81–82
singleton
vs. monostate,
83
thread-safe singletons,
79
documentation
documentation usability,
280,
281
Doxygen documentation
extensibility
adding functionality,
374
policy-based templates,
386
general
“Hello World” with Qt,
13
STL for vector iteration,
12
TIFF dimensions with libtiff,
12
triangle render with OpenGL,
13
performance
constant declarations,
217
forward declarations,
213
initialization lists,
219
quality basics
class coupling reduction,
54–55
difficult to misuse APIs,
40
intentional redundancy,
56
platform independence,
51
robust resource allocation,
48–49
scripting
scripting with Boost Python
cross-language polymorphism,
345
scripting via Ruby with SWIG,
357–359
cross-language polymorphism,
356–357
styles
templates
vs. macros,
162
testing
contract programming,
315
playback functionality,
317
versioning
binary compatibility,
253
forward compatibility,
255
source compatibility,
252
version API creation,
244
versioning and backward compatibility
deprecating functionality,
260
CodeProphet Profiler, for performance analysis,
238
Code reuse
Code robustness, and API usage,
6–7
Coding conventions, C++−specific APIs,
207–208
Coding standards, as test quality,
302
Commenting
Doxygen
Common Lisp, and SWIG,
334
Common Object Request Broker Architecture (CORBA), features,
336–337
Communication
Community catalyst, plugin-based extensibility,
362
Compatibility levels
Compile errors
Compiler-generated functions, C++−specific APIs,
176–177
Compile-time speed
and explicit instantiation,
184
and redundant #include guards,
215t
Completion, API life cycle,
249f,
250
Component Object Model (COM), features,
335–336
Composition
Concurrency
architecture constraints,
123
nonfunctional requirements,
112
singleton thread safety,
80
Condition coverage
Condition testing, definition,
302
Configuration file
factory method example,
88
member variable hiding,
29
and parallel development,
9
Consistency
automated API documentation,
274
and backward compatibility,
261
documentation “look and feel”,
280
random access functionality,
234–235
Constants (general)
documentation basics,
272
Const correctness
Const references
and assignment operators,
175
forward declarations,
214
return value const correctness,
182–183
Constructors
behavior documentation,
268
Boost Python bindings,
339,
341
compiler-generated functions,
176–177
implementation method hiding,
32
input argument passes,
211
singleton
vs. dependency injection,
82
singleton
vs. monostate,
84
static initialization,
81
Container classes
forward compatibility,
256
language compatibility,
332
variant argument lists,
168
Continuous build systems
Contractor analogy, API definition,
1–2,
3f
Contract programming
Convenience APIs
Conversion operators
and explicit keyword,
180
Copy constructor
input argument passes,
211
Copyleft license, definition,
278
Copy-on-write techniques
Copy semantics, Pimpl idiom,
71–72,
73
Core API
plugin API communication,
367
Counter monitoring, time-based performance analysis,
236
Coupling
API qualities
class coupling reduction,
54–56
and operator overloading,
192
Coverity, for performance analysis,
239
CppDoc, documentation generation,
275
CppUnit
Creational design patterns, examples,
65–66
Cross-language polymorphism
Cross-Platform Component Object Model (XPCOM), COM automation,
336
C# language
formal design notations,
127
robust resource allocation,
47–48
Curiously Recurring Template Pattern (CRTP), for extending,
387–389
Cyclic dependency, architecture design,
129f
D
Data-driven APIs
Data formats, documentation usability,
281
Data types
Dates, as version numbers,
243
Debugging
and getter/setter routines,
29
Debug modes, proxy patterns,
93
Decision coverage, testing tools,
323
Declarations
automated API documentation,
274
and explicit keyword,
179
and external linkage,
205
implementation detail hiding,
25–26
singleton
vs. monostate,
83
templates
vs. macros,
162
template terminology,
184
Default arguments
binary compatibility,
254
Default constructor
compiler-generated functions,
176–177
initialization lists,
220
singleton implementations,
77
#define (general)
version API creation,
244
Definition
API and parallel branches,
248
explicit instantiation design,
187–188
forward declarations,
54,
213
Dependency injection,
vs. Singleton,
81–82
Dependency problems
#include minimization
Deprecation
overview documentation,
276
Description
ATM use case example,
116
use case template elements,
114
Destructors
compiler-generated functions,
176–177
input argument passes,
211
object-oriented API disadvantages,
159
and resource allocation,
49
singleton
vs. monostate,
84
Diagrams, as documentation type,
280
DirectX, 3D graphics APIs,
12
Discoverability
automated API documentation,
274
Distributed systems, architecture classifications,
129
Doc++, documentation generation,
275
Doc-O-Matic, documentation generation,
275
Documentation
Apache HTTP Server example,
279f
API problem domain model,
21–22
Doxygen
overview documentation,
276
Qt Reference Documentation,
275f
Documentation lead, prerelease API reviews,
263
Double Check Locking Pattern (DCLP), Singleton thread safety,
80
Doxygen
documentation generation,
275
HTML output example,
285f
interface documentation,
159
private code testing,
312
sample header with documentation,
287–289
DRD, multithreading analysis,
240
“Dry run” modes, proxy patterns,
93
DTrace, for performance analysis,
238
Dynamic libraries
binary compatibility,
253
plugin system design,
364,
365
E
Ease-of-use
misuse considerations,
40–42
platform independence,
51–52
resource allocation,
47–50
Eiffel language, contract programming,
316
Electric Cloud, definition,
326
Embedding
forward declarations,
214
private code testing,
312
Encapsulation
and class coupling,
54–55
implementation member hiding,
32
member variable hiding,
28–29
in object-oriented C++ APIs,
159
return value const correctness,
183
enum keyword (general)
and binary compatibility,
254
documentation basics,
272
Environmental factors, architecture design,
123
Equivalence classes, definition,
302
Error codes
contract programming,
316
internalization support,
318
Error handling
record/playback functionality,
317
Event domains, key objects,
126
Event ordering, definition,
60
Evolution strategy, definition,
108
Examples, as documentation type,
276–277
Exceptions
and binary compatibility,
255
documentation basics,
273
plugin implementation,
366
Expert users, scripting advantages,
331
Explicit instantiation
and backward compatibility,
258
explicit keyword
conversion operators,
198
Explicit specialization, definition,
185
Expressiveness, scripting advantages,
331
Extensibility
via inheritance
functionality modification,
375–376
via plugins
Netscape Plugin API,
363b
plugin implementation,
366
scripting advantages,
331
via templates
Extensions
ATM use case example,
116
use case template elements,
115
External linkage
private code testing,
313
External metadata, plugin system design,
365
F
Façade pattern
Facebook, and C++ APIs,
8
Factory Methods
extensible example,
88–91
Failure reproducibility, as test quality,
302
Fake Object, definition,
308
Fast Fourier Transform (FFT), API avoidance,
11
Feature tags, version API creation,
245
FIFA 10, version numbers,
243
File formats
software branching strategies,
248–249
Fixture setup, unit testing,
296
Flat C APIs
backward compatibility,
258
binary compatibility,
255
Flexibility
nonfunctional requirements,
112
FMOD API
Formatting, coding conventions,
208
Forward compatibility
Forward declaration
Foundation Class library (Microsoft), and MVC,
100
Fragility, technical debt,
107
Framework
Free, Libre, Open Source Software (FLOSS)
Free functions
plugin implementation,
366
Free and Open Software (FOSS), definition,
277
Free operators,
vs. member operators,
191–193
Free Software Foundation (FSF), FLOSS licenses,
278
Frequently Asked Questions (FAQs), as documentation type,
277
Friend function
private code testing,
311
Friends
and binary compatibility,
254
and operator additions,
194
private code testing,
311
Friendship, and encapsulation,
27
Functional compatibility
Functionality extension, via inheritance,
374–376
Functionality mismatch, API avoidance,
11
Function calls
constant declarations,
218
contract programming,
314
operators and syntax,
195t
playback functionality,
317
Function coverage
Function design
Function documentation,
272
Function parameters
pointer
vs. reference parameters,
198–199
Future proofing, plugin-based extensibility,
362
G
Gcov
Generalization
Generic Plugin Manager, plugin system design,
365
GenHelp, documentation generation,
275
Getter/setter methods
and class coupling,
54–55
constant declarations,
218
language compatibility,
332
member variable hiding,
28–29
singleton
vs. dependency injection,
82
Global constants, declaration,
218
Global state, Singleton design pattern,
76–77
GNOME GLib, as flat API,
152
GNU C++ compiler
performance analysis,
238
GNU General Public License (GPL)
API and licence restrictions,
10
GNU Image Manipulation Program (GIMP), plugin-based extensibility,
362–364
Goal
ATM use case example,
116
use case template elements,
114
Google Mock, testable code writing,
309–310
Google Test, overview,
321
GProf, for performance analysis,
238
GPS devices, API platform independence,
51
Graphics User Interface (GUI)
Gray box testing, definition,
293
GTK+
H
Hardcoded assumptions, and API code robustness,
7
HeaderDoc, documentation generation,
275
Header files
automated documentation,
274
forward declarations,
213
platform independence,
51
Helgrind, multithreading analysis,
240
“Hello World” program
Help Generator, documentation generation,
275
HP-UX, memory-based analysis,
239
Hypertext Mark-up Language (HTML)
Doxygen output example,
285f
gcov/lcov code example,
324f
Hypertext Transfer Protocol (HTTP), data-driven APIs,
165–166
I
IBM Rational Purify, for performance analysis,
239
IDLscript, and CORBA,
336
Image APIs, definition,
12
Image Libraries, as flat API,
152
Immobility, technical debt,
107
Implicit instantiation
import keyword, Boost Python bindings,
340–341
Inclusion Model, templates,
187
Independence
Index page, documentation usability,
280
Information hiding
and #define for constants,
201
initialization lists,
220
object-oriented API disadvantages,
159
and platform independence,
51–52
private code testing,
311
scope-free functions,
205
singleton
vs. monostate,
83
Information overload, performance testing,
300
Inheritance
contract programming,
271
for extending
functionality modification,
375–376
and minimal completeness,
36
in object-oriented C++ APIs,
158,
159
In-house instrumentation, time-based performance analysis,
236
Initialization
reference parameters,
198
singleton implementation,
78
singleton
vs. monostate,
83
singleton thread safety,
79
Initialization function
plugin system design,
365
Initialization lists
Inline methods
Input argument pass, by const reference,
210–212
Instantiation
and backward compatibility,
258
singleton thread safety,
80–81
Integration testing, overview,
297–298
Intel Code-Coverage Tool, testing tools,
324
Intel Parallel Studio, multithreading analysis,
240
Intel Thread Checker, multithreading analysis,
239
Intel Thread Profiler, multithreading analysis,
240
Intel VTune, for performance analysis,
237
Intentional debt, definition,
106–107
Interaction domains, key objects,
126
Interactive systems, architecture classifications,
129
Interface description language (IDL), COM automation,
335–336
Internalization, testable code writing,
318
Internal metadata, plugin system design,
365
Intimacy, and coupling,
53
Invariant relationships, and getter/setter routines,
30
Iostream library, STL extension,
377
Iterators
and array references,
235
language compatibility,
332
J
Java
formal design notations,
127
robust resource allocation,
47–48
JavaScript
JavaScript Object Notation (JSON),
165–166
JPEG File Interchange Format (JFIF)
header specification,
16t
JScript, and COM automation,
335
JUnit testing, overview,
296b
K
KDOC, documentation generation,
275
KDU JPEG-2000 decoder library, Façade pattern,
99
Key objects
object-oriented API advantages,
159
problem domain modeling,
21
Keyword definitions, ANSI C,
153–154
L
Lambert Conformal Conic, adapter pattern,
95
Language APIs, definition,
12
Language barrier, and scripting,
333
Language compatibility, and scripting,
331–332
LaTeX
Law of Demeter (LoD), class design,
140–141
Lazy initialization, singleton
vs. monostate,
83
Lazy instantiation
singleton thread safety,
80–81
Lcov
Legacy code
libjpeg library, image APIs,
12
libpng library
Libraries (general)
Library Size, definition,
210
libtiff library, image APIs,
12
License information, as documentation type,
277–280
License restrictions, API avoidance,
10
Lifetime management, definition,
60
Linden Lab (LL)
constant declarations,
218
Line coverage, testing tools,
323
Linux
architecture constraints,
123
memory-based analysis,
239
multithreading analysis,
239,
240
Linux Kernel API
Second Life Viewer architecture,
14f
Liskov Substitution Principle (LSP)
LLSD, data-driven APIs,
168
Load testing, definition,
294
Localization, testable code writing,
318
Logging domains, key objects,
126
Logical hiding
implementation details,
26–28
Loki, template-based APIs,
161
Longevity, and API code robustness,
7
Lua
M
Mac OS X
architecture constraints,
123
redundant #include guards,
215
Second Life Viewer architecture,
14f
TotalView MemoryScape,
239
Macros
backward compatibility,
260
contract programming,
315
internationalization,
318
playback functionality,
317
private code testing,
311
vs. template-based APIs,
162
Maintenance
and backward compatibility
removing functionality,
261
Major version number, definition,
242
Manager classes
singleton
vs. monostate,
84
Maya, array references,
235
Member functions
private code testing,
311
Member operators,
vs. free operators,
191–193
Member variables
class coupling reduction,
54–55
and initialization lists,
221
Memory-based analysis, API performance,
238–239
Memory management, API resource allocation,
49–50
Memory model semantics, API consistency,
43
Memory optimization
Memory ownership, definition,
304
Memory performance, analysis tools,
239
menvshared, architecture patterns,
130b
Metadata
internal
vs. external,
365
Method comments, Doxygen,
286
Microsoft .NET languages
Microsoft Visual Studio
Middleware services, and APIs,
16
Minimal completeness
Minor version number, definition,
242
Misuse considerations, API quality,
40–42
Mock objects
Model–View–Controller (MVC) pattern
dependencies overview,
100f
script-based applications,
330
Modularization
and API code robustness,
7
Mono
Monostate design pattern,
vs. Singleton,
82–84
Mozilla
Mozilla Public License, definition,
278–279
Multithreading performance, analysis,
239–240
Mutex lock, Singleton thread safety,
79–80,
81
N
Name
ATM use case example,
116
use case template elements,
114
Named Parameter Idiom (NPI),
146,
170
Namespaces
and external linkage,
205
Naming conventions
language compatibility,
331
Natural language, key objects,
126
Negative testing, definition,
303
NetBeans project, precommit API reviews,
265
Netscape Plugin API (NPAPI), overview,
363b
Netscape Portable Runtime (NSPR)
Network protocols, and APIs,
16–17
Non-default constructors
Non-friend function
and class coupling,
54–55
Nonfunctional requirements
Nonfunctional testing techniques, types,
294–295
Non-member non-friend functions, class coupling reduction,
55
Nontransferability, technical debt,
107
Non-virtual destructor
Non-Virtual Interface (NVI),
37
Notes, use case template elements,
115
Notifications
and getter/setter routines,
29
NULL pointer
documentation decisions,
272
functional compatibility,
252
O
Object concept, definition,
132
Object hierarchy
Objective-C
language compatibility,
332
Object modeling
object-oriented API disadvantages,
159
Object-oriented C++ APIs
binary compatibility,
255
Object-oriented design
composition
vs. inheritance,
138
Object-oriented programming (OOP)
Observer pattern
Observers, and coupling,
59–62
OGRE, 3D graphics APIs,
12
Opaque pointers
and forward compatibility,
256
Open/Closed Principle (OCP), class design,
139–140
OpenGL (GL)
convenience APIs,
38,
39f
OpenGL Utility Library (GLU)
OpenGL Utility Toolkit (GLUT), convenience APIs,
39,
39f
Open Inventor, visitor patterns,
379
OpenJPEG library, Façade pattern,
99
OpenSceneGraph
Open Source Initiative (OSI), FLOSS licenses,
278
Open SpeedShop, for performance analysis,
238
Operating system (OS) APIs, definition,
11
Operational factors, architecture design,
123
Operation order, testing,
303
Operator compatibility, language issues,
332
Operator overloading
vs. default arguments,
200
operator addition to class,
193–195
Operator symmetry, and overloading,
192
OProfile, for performance analysis,
238
Optimization, and API code robustness,
7
Organizational factor
Orthodox canonical class form, definition,
176
Orthogonality
Overloadable operators, categories,
190–191
Overloading, virtual functions,
37
Overview documentation, characteristics,
276
P
Package-private, definition,
27
Parabuild, definition,
326
Parallel branches, software branching strategies,
247–248
Parallel development, and API usage,
9–10
Parallel products, software branching strategies,
248–249
Parameter order, API consistency,
43
Parameter testing, definition,
303
Parasoft Insure++, for performance analysis,
239
Partial specialization, templates,
185
Patch version number, definition,
242
PDF
Peer-to-peer applications, and APIs,
16
Performance testing
Perl
vs. C++ web development,
8
extending
vs. embedding,
329
Permissive license, definition,
278
PHP
Physical hiding
implementation details,
25–26
Pimpl idiom (Pointer to Implementation)
binary compatibility,
255
nested implementation class,
71
opaque pointers in C,
75–76
Pixar
API performance approach,
210
extensibility example,
361
script-based applications,
330
Platform compatibility
nonfunctional requirements,
112
Platform idioms
Platform independence, API ease-of-use,
51–52
Playback functionality, testable code writing,
317–318
Plugin API
Plugin-based extensibility
Netscape Plugin API,
363b
plugin implementation,
366
Plugin Manager
as Core API component,
364f
generic
vs. specialized,
365
PngSuite
Pointer
vs. reference parameters,
198–199
Pointer symbols, coding conventions,
207
Policy-based templates, for extending,
386–387
Policy decisions, software branching strategies,
246–247
Polymorphism
object-oriented C++ APIs,
151,
158
Portability
POSIX API, definition,
11
Postcondition
ATM use case example,
116
contract programming,
270,
315
use case template elements,
115
Precommit API reviews, overview,
265
Precondition
contract programming,
269,
315
use case template elements,
115
Preprocessor symbols, overloadable operators,
190–191
Prerelease
Primitiveness, convenience APIs,
37
Private access level
implementation method hiding,
32–33
Private code
Private inheritance
Problem domain
functional requirements,
111
modeling, API qualities
platform independence,
51
Process standards, coding conventions,
208
Product owner, prerelease API reviews,
263
Properties, key objects,
126
Proprietary license, definition,
277
Protected access level
implementation method hiding,
32–33
Prototypes, key objects,
126
Proxy API, record/playback functionality,
317
Proxy design patterns
Public access level
implementation method hiding,
32–33
Public headers
automated documentation,
274
#define for constants,
201
explicit instantiation API design,
189
forward declarations,
214
implicit instantiation API design,
186
platform independence,
51
source compatibility,
253
Public symbols
private code testing,
313
Pull-based observers,
vs. push-based,
103–104
Push-based observers,
vs. pull-based,
103–104
extending
vs. embedding,
329
scripting and language barrier,
333
variant argument lists,
168
Q
Qt API
automated GUI testing,
294
backward compatibility functionality,
261
extensibility via inheritance,
375,
375f
scripting and language barrier,
333
Quality assurance (QA)
record/playback functionality,
317
QVariant, data-driven APIs,
168
R
Random access, and iterators,
234–235
Rational PureCoverage, testing tools,
324
Record functionality, testable code writing,
317–318
Redundancy
Reentrancy, definition,
60
Reference
vs. pointer parameters,
198–199
Reference symbols, coding conventions,
207
Regression testing, definition,
303
Relational operators, adding to class,
193–194
Release notes, as documentation type,
277
Resource Acquisition Is Initialization (RAII),
49–50
Resource allocation, API ease-of-use,
47–50
Resource sharing, proxy patterns,
93
Return values
backward compatibility,
258
conversion operators,
198
Review process, software branching strategies,
248
Revolution strategy, definition,
108
Rigidity, technical debt,
107
R language, and SWIG,
334
ROBODoc, documentation generation,
276
Role domains, key objects,
126
Ruby
extending
vs. embedding,
329
language compatibility,
331
script bindings with SWIG
cross-language polymorphism,
356–357
scripting advantages,
330
Run-time memory overhead, definition,
209
Run-time speed, definition,
209
S
Sampling, time-based performance analysis,
236
Sapir–Whorf hypothesis,
331
Scalability, nonfunctional requirements,
112
Scalability testing, definition,
294
Scene graph
Scoped pointers
Scoping
templates
vs. macros,
162
Script-based applications, scripting advantages,
330
Script-binding technologies
Scripting
architectural patterns,
130
Boost Python bindings
cross-language polymorphism,
345–346
plugin implementation,
366
Ruby with SWIG
cross-language polymorphism,
356–357
Search, documentation usability,
280
Second Life
architecture diagram,
14,
14f
monostate design pattern,
83–84
open-/closed-source APIs,
15t
time-based performance analysis,
236,
237f
Security domains, key objects,
126
Security issues
architecture constraints,
123
functionality deprecation,
260
functionality removal,
261
nonfunctional requirements,
112
plugin system design,
365
Security testing
compliance assurance,
292
Separation Model, templates,
187
Session state,
vs. Singleton,
84–85
Shared pointers
Shark (Apple), for performance analysis,
238
Shlaer–Mellor domains, key objects,
126
Short examples, as documentation type,
276
Signals and slots, and coupling,
62
Simple examples, as documentation type,
276
Simplified Wrapper and Interface Generator (SWIG)
for Ruby bindings
cross-language polymorphism,
356–357
Singleton design pattern
vs. dependency injection,
81–82
implementation in C++,
77–79
Size-based types, and memory optimization,
223
Smalltalk language
Smart pointers
API resource allocation,
48
architecture constraints,
124
policy-based templates,
386
Soak testing, definition,
294
SOAP, and COM automation,
335
Software branching strategies
Software Design Engineer in Test (SDET), duties,
305
Software Development Kit (SDK), and APIs,
15b
Software Test Engineer (STE), duties,
305
Solaris
memory-based analysis,
239
multithreading analysis,
240
Source compatibility
adding functionality,
256
Source control management (SCM), software branching strategies,
247
Specialization
explicit instantiation,
184,
187
Specialized Plugin Manager, plugin system design,
365
Squish, automated GUI testing,
294
Stability
overview documentation,
276
plugin-based extensibility,
362
plugin future proofing,
362
Stack declaration, template-based API,
161
Stakeholder
ATM use case example,
116
use case template elements,
115
Standard C Library
Second Life architecture,
14f
Standard Template Library (STL)
forward declarations,
214
input arguments via const reference,
211–212
plugin implementation,
366
Startup time
Statement coverage, testing tools,
323
Static declaration, and external linkage,
205
Static initialization
singleton thread safety,
81
Static libraries
binary compatibility,
253
plugin system design,
365
Stream operators, adding to class,
194
Structs
implementation detail hiding,
26–27
Structural design patterns
architecture classifications,
129
Stub objects
Subclassing
constructors and assignment,
176
Symbian platform
precommit API reviews,
265
public interface change request process,
264f
Symbol names
binary compatibility,
253
#define for constants,
201
Symbol table
#define for constants,
201
Synchronization
and getter/setter routines,
29
multithreading analysis,
240
Sysprof, for performance analysis,
238
T
Tangible domains, key objects,
126
Task focus, documentation usability,
281
Tcl
TeamCity, definition,
326
Technical debt
Technical lead, prerelease API reviews,
263
Template arguments, definition,
184
Template-based APIs
Template parameters, definition,
184
Templates
backward compatibility,
258
explicit instantiation API design,
187–190
for extending
implicit instantiation API design,
185–187
Template Unit Test (TUT), overview,
321
Terminology in documentation,
280
Testable code
internalization support,
318
record/playback functionality,
317–318
scripting advantages,
331
Test-driven development (TDD), overview,
305–307
Test harnesses
Testing
Testing tools
continuous build systems,
326,
327f
Test writing
TeX document processing system, version numbering,
243
Threading Build Blocks (TBB), C++−specific APIs,
174
Thread safety
singleton design pattern,
79–81
Three-dimensional graphics APIs, definition,
12
Three Laws of Interfaces, error handling,
146–147
TIFF files, image APIs,
12
Time-based analysis
Tinderbox
TotalView MemoryScape, for performance analysis,
239
Trigger
ATM use case example,
116
use case template elements,
115
“Trunk” code line, software branching strategies,
246,
248
Tutorials, as documentation type,
276–277
TwinText, documentation generation,
276
Type checking
#define for constants,
201
templates
vs. macros,
162
Type coercions
conversion operators,
198
typedef keyword (general)
forward compatibility,
256
forward declarations,
214
policy-based templates,
387
Type safety, and enum,
202
U
Ubuntu, numbering schemes,
243
Unary operators, overloading,
190
Unified Modeling Language (UML)
architecture design communication,
130
Singleton design pattern,
76f
Unintentional debt, definition,
106–107
Unions
variant argument lists,
169
Unit testing
Universally unique identifier (UUID)
API key object modeling,
24
Universal Transverse Mercator, adapter pattern,
95
UNIX
TotalView MemoryScape,
239
Usability
nonfunctional requirements,
112
scripting advantages,
331
Use cases
User contributions, as documentation type,
276
V
Valgrind, for performance analysis,
239
Validation, and getter/setter routines,
29
Variant argument lists, data-driven APIs,
168–170
Versioning
API reviews
backward compatibility,
251
backward compatibility maintenance
removing functionality,
261
plugin system design,
365
software branching strategies
Version number
ATM use case example,
116
use case template elements,
114
Virtual constructors, Factory Methods,
85
Virtual destructor
compiler-generated functions,
176–177
Virtual functions
and memory optimization,
223
and minimal completeness,
36–37
virtual inheritance, diamond problem,
135
Virtual Reality Modeling Language (VRML), visitor patterns,
379
Visibility
Visitor pattern
Visual Basic, and COM automation,
335
void keyword, definition,
154
void* pointers
W
Walkthroughs, as documentation type,
276
Weak pointers, definition,
48
Web development, and C++ APIs,
8b
Web services, data-driven APIs,
165–166
White box testing
Wiki pages
architecture design communication,
130
Windows (Win32)
architecture constraints,
123
backward compatibility,
258
memory-based analysis,
239
Second Life Viewer architecture,
14f
“Winnebago” headers, #include dependency minimization,
212–213
Working demos, as documentation type,
276
Wrapping patterns
wxWidgets library, GUI APIs,
13
X
XML (Extensible Markup Language)
record/playback functionality,
317
software branching strategies,
248