A systematic mapping study on practical approaches to teaching software engineering

Background: Software engineering is a core subject in computing education. Today, there seems to be a consensus that teaching software engineering requires students to perform practical experiences that simulate the work in the software industry. This represents a challenge for universities and instructors, because these experiences are complex to setup and involve considerable time and effort. Although there are several experiences and proposals reported in the literature, there is no clear solution to address this challenge. Aim: Being knowledgeable about the several approaches reported in the literature for dealing with this challenge is the first step to proposing a new solution. Counting on this knowledge allows instructors to reuse lessons learned from other universities. In order to address this challenge, we conducted a systematic mapping study that intends to answer the following questions: What are the main approaches used to address the practical experiences in software engineering education? Is there an emerging tendency to address this challenge? Which software process models are used to support the practical experiences in software engineering courses? Have the universities changed the way of conducting these experiences over the years? What are the main forums to seek information on practical approaches for teaching software engineering? Method: We used a systematic mapping study to identify and classify available research papers that report the use of practical experiences in software engineering education. Results: There were 173 papers selected, analyzed and classified. The results indicate that universities have realized the value of including practical experiences as part of the software engineering teaching process. However, few proposals indicate how to address that challenge. The practical approaches identified in this study were game learning, case studies, simulation, inverted classrooms, maintenance projects, service learning, and open source development. Only one recent report on the use of traditional approaches (i.e., teaching using expositive lectures) was found. The use of a development process to support these practical experiences seems not to be a concern for software engineering instructors. Only 40% of these studies report the use of a development process to guide the process experience. The reported processes are mainly agile methods. Conferences are the most used forum to publish studies in this area (72%). One third of these studies have been published over the last five years. Conclusion: There is a clear concern for teaching software engineering involving practical experiences, and there are several initiatives exploring how to do it. The map gives us an overview of the different proposals to address this challenge, and also allows us to make some preliminary conclusions about the preferred approaches.