Test Generation: A Symbolic Approach