  Cognition plays a fundamental role in most software engineering activities.
This article provides a taxonomy of cognitive concepts and a survey of the
literature since the beginning of the Software Engineering discipline. The
taxonomy comprises the top-level concepts of perception, attention, memory,
cognitive load, reasoning, cognitive biases, knowledge, social cognition,
cognitive control, and errors, and procedures to assess them both qualitatively
and quantitatively. The taxonomy provides a useful tool to filter existing
studies, classify new studies, and support researchers in getting familiar with
a (sub) area. In the literature survey, we systematically collected and
analysed 311 scientific papers spanning five decades and classified them using
the cognitive concepts from the taxonomy. Our analysis shows that the most
developed areas of research correspond to the four life-cycle stages, software
requirements, design, construction, and maintenance. Most research is
quantitative and focuses on knowledge, cognitive load, memory, and reasoning.
Overall, the state of the art appears fragmented when viewed from the
perspective of cognition. There is a lack of use of cognitive concepts that
would represent a coherent picture of the cognitive processes active in
specific tasks. Accordingly, we discuss the research gap in each cognitive
concept and provide recommendations for future research.
