We close this chapter with presetting an organizational framework that may be applied in the actual teaching of a human aspects of software engineering course.
Table 18.1 presents a two-dimensional course framework [Hazzan03]. One dimension addresses the two human aspects of software engineering discussed in this book: the cognitive aspect and the social aspect. The second dimension refers to each of these aspects on the individual level and on the team level. Each cell presents several topics that can be categorized into it and several activities that are appropriate to be conducted with respect to the topic that the cell addresses. Needless to say, the table exhausts neither all the topics discussed in the course nor all the possible activities that can be conducted in such a course.
Aspect Level | Cognitive Aspects | Social Aspects |
---|---|---|
Individual Level | Topics: | Topics |
Program comprehension | Code of Ethics of Software Engineering | |
Reflective practitioner | Minorities and gender issues | |
Abstraction | ||
Activities: | Roles in teamwork | |
Personal reflections on topics such as software development process | Activities: | |
Construction of ladders of reflection | Examination of individual motives during the process of software development | |
Examination of ethical dilemmas concerning software development processes | ||
Team Level | Topics: | Topics: |
Code inspection | Team discussions, analysis, and reflections on code inspection sessions | |
Learning organization | ||
Customer requirements | Software development methods | |
Activities: | Activities: | |
Teamwork: structures, problems, benefits, and dilemmas | Analysis of social factors of software development methods and their influence on teamwork | |
Reflecting on communal learning processes | Analysis of connections between the structure of software teams and team social interaction |
Task |
|
We believe that a single course is not sufficient to include all the aforementioned. Covering the topics is not the problem, however. Rather, it is important to increase students awareness of the central role of the human aspects of software engineering in software development processes, and to equip them with learning skills that will enable them to cope successfully with new ( related to software engineering) situations, for which they will need to learn new topics. One of the best ways to achieve these goals is by addressing these issues throughout the entire undergraduate education.
Sometimes time constraints force us to squeeze the human aspects of software engineering course into a one-semester, or even smaller, timeframe. In such cases, we recommend the course not be based solely on lectures, but rather integrate interactive and reflective activities. Such an interactive nature of the course can be achieved by reflections, class discussions, case study analysis, and student presentations. For lecturers convenience, the Appendix of this book presents a sample of the course slides for several topics.