Cryptography Reference
In-Depth Information
by means of concrete examples and statistics—and C certainly offers
many opportunities for error. There is also comprehensive methodological
advice, which if heeded would lead to increased trust in software products.
[Lind] is an excellent and humorous topic, which reveals a deep under-
standing of the C programming language. Moreover, the author knows how
to transmit this understanding to the reader. Many of the topics considered
could be supplied the subtitle, “Did you know that ... ?” and only a very
few readers could honestly—hand on heart—reply in the affirmative.
[Magu] deals with the design of subsystems and is therefore of particular
interest to us. Here are discussed the interpretation of interfaces and
the principles of dealing with functions with input parameters. The
differences between risky and defensive programming are elucidated as
well. The effective use of assertions (see page 153) as testing aids and for
the avoidance of undefined program states is a further strong point of this
topic.
[Murp] contains a host of testing tools that can be put to use in testing
programs with little effort and that yield immediate useful results. Among
its other features the topic offers libraries on an accompanying diskette
for the implementation of assertions, testing the processing of dynamic
memory objects, and reporting the degree of coverage of tests, which were
also used for testing the FLINT/C functions.
[Spul] offers a broad view of methods and tools for testing programs in the
C and C++ languages and gives numerous pointers for their effective use.
The topic contains an extensive overview of programming errors typical in
C and C++ and discusses techniques for recognizing and eliminating them.
13.1 Static Analysis
The methodological approaches to testing can be divided into two categories:
static testing and dynamic testing . In the first category are to be found code
inspection, whereby the source code is carefully examined and inspected line
by line for such problems as deviations from specifications (in our case these
are the selected algorithms), errors in reasoning, inaccuracies with respect to the
arrangement of code lines or the style guide, doubtful constructions, and the
presence of unnecessary code sequences.
Code inspection is supported by the use of analytic tools, such as the well-
known Unix lint tools, that largely automate this laborious task. Originally, one of
the main applications of lint was to compensate for earlier existing deficits in C
in consistency checking of parameters that were passed to functions in separately
compiled modules. Meanwhile, there have appeared more convenient products
 
Search WWH ::




Custom Search