Java bytecode static analysis: deriving structural testing requirements