  In 2006, Geoffrey Hinton proposed the concept of training ''Deep Neural
Networks (DNNs)'' and an improved model training method to break the bottleneck
of neural network development. More recently, the introduction of AlphaGo in
2016 demonstrated the powerful learning ability of deep learning and its
enormous potential. Deep learning has been increasingly used to develop
state-of-the-art software engineering (SE) research tools due to its ability to
boost performance for various SE tasks. There are many factors, e.g., deep
learning model selection, internal structure differences, and model
optimization techniques, that may have an impact on the performance of DNNs
applied in SE. Few works to date focus on summarizing, classifying, and
analyzing the application of deep learning techniques in SE. To fill this gap,
we performed a survey to analyse the relevant studies published since 2006. We
first provide an example to illustrate how deep learning techniques are used in
SE. We then summarize and classify different deep learning techniques used in
SE. We analyzed key optimization technologies used in these deep learning
models, and finally describe a range of key research topics using DNNs in SE.
Based on our findings, we present a set of current challenges remaining to be
investigated and outline a proposed research road map highlighting key
opportunities for future work.
