Symbolic execution computes the necessary inputs for a function to execute all its relevant paths. The test candidates are computed instead of being randomly chosen, resulting in the highest test coverage possible.
Symflower does not report redundant test cases. This means every generated test case adds value, because it executes some new behavior of a function.
A symbolic execution is not restricted to primitive data types and simple source code. Concepts such as complex data types, interfaces and object orientation can be applied and analyzed.
Symbolic Execution equips your production code with unit test cases that are computed instead of being randomly chosen, requiring no manual effort to reach a high unit test coverage.
Writing unit tests manually requires 30% to 50% of your development time, while still facing the risk of missing essential test cases.
Boundary value analysis does not take the actual code coverage into account, resulting in very low test coverages.
Fuzzing throws random values at your code, which means you rely on pure luck to find bugs in your software.
Symflower analyzes each operation to see whether there is an input that leads to erroneous behavior. For instance, every access to an array is checked for a possible buffer overflow.
Mocks for used interfaces are automatically generated, so there is no additional time required to specify their behavior.
Symflower targets each relevant path through your function. In addition to a high path coverage it aims to reach full MC/DC coverage on an expression level.
For each operation that can result in erroneous behavior, an explicit check is added to see whether the error can be provoked.
For each revealed bug, Symflower reports a dedicated unit test case that can be used to reproduce and fix the found issues.