  Quantum software plays a critical role in exploiting the full potential of
quantum computing systems. As a result, it has been drawing increasing
attention recently. This paper defines the term "quantum software engineering"
and introduces a quantum software life cycle. The paper also gives a generic
view of quantum software engineering and discusses the quantum software
engineering processes, methods, and tools. Based on these, the paper provides a
comprehensive survey of the current state of the art in the field and presents
the challenges and opportunities we face. The survey summarizes the technology
available in the various phases of the quantum software life cycle, including
quantum software requirements analysis, design, implementation, test, and
maintenance. It also covers the crucial issues of quantum software reuse and
measurement.
