M.Sc Thesis

M.Sc StudentSofia Sherman-Kolker
SubjectComputer Science students Perceptions of Human Aspects of
Software Engineering
DepartmentDepartment of Education in Science and Technology
Supervisors Full Professors Hazzan Orit
Dr. Hadar Irit
Full Thesis text - in Hebrew Full thesis text - Hebrew Version


Software Engineering is a dynamic, multifaceted field that stands in the forefront of today's technology. Many consider the code writing to be the main activity of software development carried out in order to achieve the objectives and requirements of the customers, while, in fact, this conception is not totally accurate; Software life-cycle includes different stages such as requirements elicitation, design, implementation, testing and maintenance. Usually, the complexity of this processes require a team of software engineers to handle all aspects of software development, adding human complexity to the technological complexity already involved in the development of software systems. In this spirit, teamwork facilitated in very complex software projects empowers the influence of different human aspects of the work process and its product. accordingly, along the evolution of the software engineering field, the focus of the engaged community has been constantly shifted from the development process itself towards the people involved in it.

The awareness to human aspects of software engineering, which grew in recent years, emphasizes the different aspects of software development process. The term 'Human Aspects of Software Engineering' refers to cognitive and social aspects of the software development processes. Cognitive aspects include mental processes, such as the development of complex code, abstract thinking and program comprehension, whereas social aspects relate to interpersonal processes in software development processes, such as teamwork and interactions with customers.

Computer science students are familiar with human aspects of software engineering.
Although usually they do not learn those issues in a systematic way, their knowledge is based on their own personal experience while working on software development exercises in pairs or teams, planning them, estimating time, and working on other aspects of software project management.

The literature review conducted as part of the research presented in this thesis, indicates that the community of software development recognizes the importance of studying human aspects of software engineering and as a result integrates them in the curriculum guidelines for undergraduate degree programs. However, in reality, the priority given to these topics still seems to be low and they hardly can be found in actual curricula. At the same time, many software education researches claim that educational programs do not reflect the complex world of software engineering, as the latter requires skills to cope with human aspects, such as collaboration, teamwork, problem solving and more. As a result, graduate students of software engineering programs find themselves often unprepared to cope with these aspects in the real software development world. Those facts fostered our motivation to develop and teach the course 'Human Aspects of Software Engineering'.

The objective of the study presented in this thesis was to examine students' perceptions of human aspects in software engineering. The research questions,

    formulated in accordance with this objective, were:
  1. To which characteristics of software development activities students refer to?
  2. Which issues do students recognize in the context of human aspects of software engineering?

The research was conducted at the Department of Education in Technology and Science at the Technion and at the Department of Management Information Systems at the University of Haifa, in a course entitled "Human Aspects of Software Engineering". The research was conducted in two stages: the first stage included the development of an educational framework for effective collaborative learning and the construction of supporting activities based on the developed framework;
in the second stage, these activities were applied within the course in order to identify the students' perceptions of human aspects of software engineering and their characterization.

The research method was qualitative and its tools included observations, interviews, questionnaires, various documents and researcher's diary. The data obtained via these tools was inductively analyzed.

In more details, in the first stage, an educational framework for collaborative learning was developed based on features and attributes suggested by the literature for enhancing collaborative learning effectiveness. For this purpose, collaborative learning activities, based on 4 attributes: Active learning, Cooperation, Problem Solving and Reflection, were designed, a collaboration tool (on-line forum) was used, and an atmosphere encouraging collaboration was created and maintained. The results of first stage of the research indicates that based on their individual and group in class experiences and reflection, students developed skills and constructed both practical and theoretical knowledge relating to successful collaborative software development.

The analysis of the data gathered in the second stage revealed the emergence of a theoretical framework. This framework is based on three levels of students' perception - execution level, individual level and team level, and two types of activities - human-centric and code-centric activities.

The execution level addresses technical issues of software development processes.
For example, in the Specification phase of the development process, the execution level is expressed by the elicitation processes and requirements analysis, time planning and work scope estimation; in the Design phase, the execution level is emphasized by design characteristics; in the Implementation phase - by coding, code correctness and its efficiency; and in the Testing phase - by testing characteristics and refactoring processes.

The individual level is related to human factors of the development environment and focuses on cognitive-mental processes which software developers experience during the development process, and social processes created during interaction among software developers and other stakeholders.

The team level addressed human factor of the environment and focuses on social processes which software teams experience during the development process.

The framework is demonstrated in the thesis with three human-centric activities (Planning Game, Pair Programming, Program Comprehension) and three code-centric activities (Refactoring, Coding Standards, Test Driven Development).

In the context of code-centric and human-centric issues, the students identified both technical and human aspects of software development. This framework stresses students' awareness of various aspects of software engineering, including the aforementioned human aspects.

This research has both practical and theoretic contribution. The theoretical contribution is manifested in expending and deepening the knowledge of the scientific community with respect to students' perceptions of human aspects of software engineering and understanding the different perception levels which is recommended to take into consideration when developing curriculums for related courses. Its practical contribution stems from possible implications of its results on the structure of various courses in the software engineering in general and on the structure of the "Human Aspects of Software Engineering" course in particular.