Symbolic execution has long been a cornerstone of automated test generation, yet it continues to grapple with fundamental challenges such as path explosion and constraint-solving overhead. Decades of research have introduced advanced techniques---incl...
Symbolic execution has long been a cornerstone of automated test generation, yet it continues to grapple with fundamental challenges such as path explosion and constraint-solving overhead. Decades of research have introduced advanced techniques---including search heuristics, state pruning, and constraint-solving optimizations---but whether they outperform human test writers in practice remains unclear. We present a large-scale empirical study comparing human-written and symbolic execution–generated test cases across six real-world C programs. One hundred undergraduate students manually wrote 3,000 test cases per program, resulting in a total of 18,000 test cases, which we compared against those produced by four state-of-the-art symbolic execution techniques. Surprisingly, the human-written tests achieved up to 2.6× higher branch coverage, even though they were outnumbered 30 to 1. To understand this gap, we conducted a comparative analysis across three dimensions: surface-level input features, code coverage differences, and program-state complexity. Our results show that human inputs tend to be longer, more complex, and better suited to triggering behavior in challenging code regions---especially those involving regular expressions and switch statements. Finally, we explored simple human-inspired modifications to symbolic execution, including argument shaping, regular expression injection, and test case seeding. While these yielded mixed results, they exposed promising and underexplored directions for improving symbolic execution effectiveness.