Learning Human Aspects of Collaborative Software Development

Collaboration has become increasingly widespread in the software industry as systems have become larger and more complex, adding human complexity to the technological complexity already involved in developing software systems. To deal with this complexity, human-centric software development methods, such as Extreme Programming and other agile methods, have been developed and implemented. Aiming to prepare future software developers for today's software industry, this paper presents a framework for developing collaborative learning tools and activities, and examples that were developed for the course "Human Aspects of Software Engineering" in order to assist students in learning collaborative software development. The learning processes and knowledge construction undergone by the students in the study were examined empirically, both in general and with respect to collaboration in particular. Results indicate that, based on their individual and group in- class experiences and reflections, students developed skills and constructed both practical and theoretical knowledge relating to successful collaborative software development. Keywords: Software Engineering, Software Development, Software Engineering Education, Collaborative Learning. 1. INTRODUCTION The course "Human Aspects of Software Engineering" (Tomayko and Hazzan, 2004), offered to seniors at the Management Information Systems (MIS) department at the University of Haifa, opened with the question: What are the human aspects of software engineering? Students' initial responses surrounded one central issue: collaboration. These responses included themes such as teamwork and cooperation, mutual trust, the challenge of integrating contributions from different people, multiple perspectives of a single project, work allocation between team members, and so on. While collaboration in itself is an important part of the human aspects involved in software engineering (SE), other issues are also important, such as motivation, cognitive processes, work experience and professional skills. These issues were raised by the students only at a later stage of the discussion, and only after the instructor dropped them some hints. The students' responses suggest that collaboration is perceived as a central and very challenging issue in software development processes. This perception is quite closely tied to reality. While the SE industry deals with the ever-increasing complexity of its products, collaboration among different people participating in the same development project is essential and has already been considered as an everyday part of professional software development (DeMarco and Lister, 1999; Humphrey, 2000; Izquierdo et al., 2007; Sharp and Robinson, 2007; Venolia et al., 2005). Multi-participant collaboration adds to the already high technological complexity as well as to the many challenges related to human aspects created or affected by such collaboration. Today, many software development teams demonstrate collaborative work by using special tools and methods, such as Extreme Programming (Cf. Beck, 2000) and other agile software development methods (Cockburn, 2001; Highsmith, 2002), as well as internet-based multi-site cooperation tools that support remote (sometimes even international) collaborative software development (Herring and Rees, 2001). These changes in industry call for an adaptation of learning tools and environments in order to prepare future generations of software engineers. Thus, our research objective is to find ways, based on existing theories and principles of effective collaborative learning, for teaching collaborative software development. The research questions derived from this objective are: 1. What are the characteristics of effective collaborative learning? …