Teaching Undergraduate Software Engineering Using Open Source Development Tools

Introduction The computing sciences are complex fields that combine both theoretical and practical components. Students successfully completing an undergraduate computer science program should have instruction in both the mathematical and theoretical foundations of computing as well as the more practical aspects of how to effectively use computers to solve problems. Software engineering, as its name implies, is more directed toward the practical aspects of how to successfully develop complex software systems that meet user requirements and are reliable, usable, and maintainable. Computing Curricula 2005 recognizes the need for more extensive education to produce professional software engineers than what can be reasonably provided in a typical computer science program (ACM, 2005). As such, they propose software engineering be treated as a totally separate discipline within computer science education. However, while there has been some debate about the exact role software engineering should have in a computer science program (Curran, 2003), the ACM Curricula has maintained the importance of software engineering to all computer science students and has kept it as a core element in computer science education (ACM, 2008). For purposes of this paper, we will focus on the teaching of software engineering within the computer science discipline. Unlike other topics in the computer science major, the techniques and principles taught in software engineering are often first developed and refined in industry before arriving in the classroom. As commercial software development techniques and tools evolve, so pedagogical methodologies change. Computer science educators have taken different approaches to teaching software engineering over the years, both as a result of changing methodologies as well as individual beliefs about what teaching methods work best in a particular academic environment. This paper is a case study in applying current productivity tools (specifically Redmine) in a software engineering course at our institution. The objectives of the study are to investigate how to integrate the tools into the existing structure and evaluate their impact. We describe our experience in recently changing our approach to teaching software engineering to be more aligned with current tools and how to effectively use them in an academic environment. The paper begins with an overview of software engineering teaching methods, then describes our traditional approach and motivation for changing, how the new approach was integrated into the course, our experience with the change, and, finally, our plans for the future Software Engineering Education Background Software Engineering is defined as the "application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software" (Petkovic, Thompson, & Todtenhoefer, 2006, p. 294). The need to teach software engineering in colleges has been identified for decades. Stiller & LeBlanc (2002) point out as far back as the early 1990's, ACM Computing Curricula suggested that the at least one software engineering course should be required in accredited computer science programs. They point out that the number of large software projects in industry demand this and suggest that the proof of the success of these accredited computer science programs should be seen in the reduction of failure in the design and operation of large computer programs. Software engineering programs can be thought of as a replacement for the old apprenticeship programs which taught the trades to workman (Stroulia, Bauer, Craig, Reid, & Wilson, 2011). The issue, however, is how to bring this effect into the classroom. Many educators feel that current practices of teaching software engineering are not adequately preparing students for the real world of software development. Nurkkala & Brandle (2011) summarize the problems with current teaching approaches: * No product--students are creating projects, not commercial grade products * Short duration--single semester, or two-semester, courses impose an artificial time constraint * High turnover--new students each semester means the talent pool remains shallow and student skills are not developing based on previous experience * Low complexity--by necessity given time constraints and skill sets * No maintenance--as a result of short duration, students do not experience a key aspect of software development, the maintenance phase * No customer--most software engineering projects do not interface with a real customer To address these shortcomings, different approaches to teaching software engineering have emerged and been proposed in the literature. …