If your Java program has been thoroughly tested but still error-prone,
the Wasp analyser can help to detect subtle run-time errors
and weak points in your program.
The following kinds of errors may be statically detected:
null pointer exception, impermissible cast,
array index out of bounds, division by zero, etc.
The following kinds of weak points may be detected:
uninitialised variable,
unreachable branch in conditional or switch statement,
unreachable loop body or catch clause,
assignment of variable whose value is never used,
unreachable main exit of method, etc.
Wasp produces detailed and precise method call graph.
The method call graph of a program helps to know for each method
what actual methods are called in its body.
Additionally, for each method you may know where this method may be called.
In comparison with other static error analysers,
Wasp has two important advantages.
Wasp is able to distinguish between a definite error,
a possible error (warning), and a potentially erroneous situation.
In the latter case, Wasp produces a message called
conditional error that in practice appear to indicate an error
in approximately one case from five.
Wasp performs context-sensitive data flow analysis,
so it is able to recognize an error that appears only for some calls
of the method containing it, but does not for other ones.
All known to us static analysers (e.g. QStudio Java, MetaMata Audit, etc)
that statically detect run-time errors may produce
only long lists of warnings because they
can not recognize definite errors in a program due to weak
analyses applied. A user has to waste much time to analyse all warnings.
Wasp has proven its ability to find subtle bugs in programs even
after debugging and testing stages of development because Wasp
detects situations of real complexity.