Some types of erroneous situations that Wasp is able to detect
in Java programs are listed below:
- usage of an uninitialized variable
- null pointer exception
- assignment of a variable whose value is never used
- impermissible cast of variable value of reference type
- unreachable branches in the if and switch statements and
in conditional expressions
- unreachable catch clauses
- method has no normal completion
- array index is out of bounds
- overflow (underflow) in arithmetic operators
- division by zero
- for or while statement repeats zero times
- etc.

Static error checker seems to be an exotic tool unknown for the most
of Java programmers. All known to us source code analyzers (e.g. for
the C/C++ languages) that detect run-time errors may produce only long
lists of messages of possible errors (warnings) due to weakness of
analysis. A user has to waste much time to analyse all warnings. As
a rule, such analyzers are useless and not popular.

The analyser Wasp performs powerful data flow analysis that
recognizes obligatory relations in a program. All Wasp error messages
are produced from obligatory relations. Erroneous situations which
may be derived from possible relations are ignored by Wasp.

In many cases, Wasp is able to determine that a certain potentially
erroneous situation is in fact a definite error. It was shown in our
scientific article that definite errors can be automatically
recognized only for obligatory relations.

The analyzer Wasp has been successfully applied for Modula-2 and
Oberon-2 programs during last three years. It was known as
Oberon-2/Modula-2 Static Analyzer (OSA). Wasp has proven its ability
to find subtle bugs in real programs intensively exploited some years
because Wasp detects situations of real complexity. Wasp applications
to several embedded systems written in Modula-2 were the most
successful.