Scope of the Book
As mentioned previously, the importance of the human aspects of software engineering is widely acknowledged today. For example, many failures of software systems are explained by human factors. Taking into the consideration the complexity of the topic, this book focuses on social and cognitive aspects of software engineering, and addresses topics such as teamwork, customer/software-engineer relationships, and learning processes in software development.
It is important to emphasize that this book is not a human-computer-interaction (HCI) book. While HCI focuses on people-software interaction, this book focuses on people-people interaction during the course of software development.
Readership of the Book
This book is for readers who have some experience in software development. While we cannot quantify this experience, it would be preferable if the reader has already developed a program that is beyond several hundred lines of code and is familiar with software engineering methods . Our working assumption during the process of writing this book is that one needs some experience in software development in order to understand the essence of what is discussed. Thus, for example, many tasks are based on an individual s reflection on personal experience.
Structure of the Book
The book consists of five parts . Part I, Software Development Environments , addresses the nature of software engineering, software development methods , teamwork, and software as a product. Part II, The World of Software Engineering , presents the following viewpoints regarding software engineering: the code of ethics of software engineering, international perspective of software engineering, different perspectives of software engineering, and the history and future of software engineering. Part III, Software-Human Interaction , looks at program comprehension , learning processes in software engineering, abstraction and other heuristics of software development, and connections between software characteristics and human aspects of software engineering. Part IV, Business Analysis of Software Engineering , examines software project management, software as a business, and e-commerce. Part V, Software Engineering Education , analyzes case studies, suggests options for students summary projects and presentations, and concludes with some discussion remarks about software engineering education.
We now describe each chapter in more detail.
Part I: Software Development Environments
Chapter 1, The Nature of Software Engineering, deals with the nature of software engineering, emphasizing its human aspects. To illustrate the cognitive and social aspects involved in software development, descriptions of two working days in the life of a software developer are presented to point out how much of such days are about human and not technical aspects. In this sense, these stories establish the rationale of the book.
Chapter 2, Software Engineering Methods, deals with software development methods. Both heavyweight and agile methods are referred to and analyzed from a human perspective. The aim of this chapter is to illustrate that both technical and human factors should be considered when evaluating what software development method to adopt for a specific software project.
Chapter 3, Working in Teams, focuses on teamwork, which is a central topic in software development. It presents types and structures of software development teams and discusses issues related to communication within software development teams . A special emphasis is placed on team members roles in software development teams. In addition, dilemmas that may arise during software development processes and outsourcing related topics are discussed.
Chapter 4, Software as a Product, brings the software development customer into the picture. In this chapter, customers play a central role and software products are analyzed as merchandise for which one pays. The motivation for this chapter stems from the well-known fact that in many cases, customers do not get the software they require. This reality is partially explained by misunderstandings on the part of the software developers with respect to customers needs. This chapter suggests tools to overcome such problems. For example, we illustrate how software developers can improve their understanding of software requirements when data is gathered and analyzed by different data collection tools.
Part II: The World of Software Engineering
Chapter 5, Code of Ethics of Software Engineering, focuses on just that. The essence of the code is presented and different scenarios taken from the world of software development are presented and analyzed. When ethical considerations are intertwined with problems related to human behavior, the right solution is not always simple to figure out.
Chapter 6, International Perspective on Software Engineering, discusses software engineering from the international perspective. The focus in this chapter is on several events that affected the global information technology market and on two countries, India and Israel, that are unique in some sense with respect to software development. Many software companies have an international market. We believe that a software engineer s awareness of different cultures in general and of different cultures of software development in particular may improve software development processes. The idea is to highlight the fact that software development may be influenced by local and cultural characteristics that software engineers have to take into consideration when they cooperate with people from other countries and other cultures. This chapter also discusses the topic of gender in the information technology sectors.
Chapter 7, Different Perspectives on Software Engineering, addresses various perspectives on software engineering in general and on software development processes in particular. Our aim in this chapter is to show that there may be different focal issues in software development and to present tools for analyzing different approaches toward the process of software development.
Chapter 8, The History of Software Engineering, summarizes software engineering from a historical angle and outlines the development of the field from its early days, through the 1968 NATO conference in Germany, until today. This chapter illustrates the dynamic nature of the field. Naturally, human aspects that have influenced its development are emphasized .
Part III: Software-Human Interaction
Chapter 9, Program Comprehension, Code Inspections, and Refactoring, and Chapter 10, Learning Processes in Software Engineering, focus again on software team members and their activities during the process of software development. In Chapter 9, the topic of program comprehension is reviewed. It presents different theories of program comprehension and examines code inspection processes. The recent awareness of these two activities reveals that more and more attention is placed on code readability in particular and on the human aspects of software engineering in general.
In Chapter 10, additional learning processes involved in software development are discussed. The rationale for this chapter stems from the continual development of the software engineering world. Consequently, software engineers must continually learn what is new in the field. Specifically, two topics are addressed. The first is software engineering as a reflective practice. Analysis of the field of software engineering and the kind of work that software engineers usually accomplish supports the adoption of the reflective practice perspective to software engineering processes. In this chapter, we examine how a reflective mode of thinking may improve the performance of some of the basic activities of a software engineer. The second part of the chapter deals with learning organizations in general and their implications in the context of software organizations in particular. Knowledge and information are critical assets in software organizations. Thus, they should be managed and thought about in the same manner as many of the more tangible assets.
Chapter 11, Abstraction and Other Heuristics of Software Development, focuses on software development principles. The discussion is illustrated by focusing on the concept of abstraction. Specifically, connections between abstraction and human aspects of software engineering in general, and the cognitive aspect of software development in particular, are explored.
Chapter 12, The Characteristics of Software and Human Aspects of Software Engineering, examines the code again. Specifically, connections between characteristics of quality software and the human aspects of software engineering are analyzed. In addition, this chapter examines effective aspects of software development, focusing on debugging.
Part IV: Business Analysis of Software Engineering
The three chapters in this part (Chapters 13, 14, and 15) deal with the business side of software; namely, software project management, software as a business, and the Internet and the human aspects of software engineering, respectively. This view highlights the impact that the business aspect of the software industry may have on the human aspects of software engineering.
Specifically, Chapter 13, Software Project Estimation and Tracking, discusses main topics, especially time management, of software project management. Chapter 14, Software as a Business, consists of two main parts: a brief account of how software became profitable and stories of making money with software. The first part of Chapter 15, The Internet and the Human Aspects of Software Engineering, is about e-commerce. In this chapter, the focus is placed on the end users, closing the circle of developers “clients “end users. Accordingly, while in some of the earlier chapters the developers- clients interrelation has been discussed, in this chapter we explore possible connections between developers and end-users by addressing cognitive and social aspects of e-commerce. The second part of this chapter focuses on the timeless nature of the Internet and its application to the human aspects of software development.
Part V: Software Engineering Education
The next three chapters of the book (Chapters 16, 17, and 18) deal with software engineering education. These chapters wrap up the book with case studies, students and practitioners summary projects, and a discussion about software engineering education.
Chapters 16 and 17 summarize the book by case study analysis. Such analysis, we believe, may increase students and practitioners awareness, sensitivity, and analytic skills when they participate in software development environments. The analysis is based on theories learned in previous chapters. Chapter 16, Case Studies of Software Engineering, presents the readers with case studies. Chapter 17, Students Summary Projects and Presentations, suggests ideas for students summary projects and presentations. Each student (or a group of students) is asked to select a topic that belongs to the human aspect of software engineering and to identify an interesting problem to be researched. They are asked to research the topic, to analyze data based on the theories discussed in this book, and, based on that exploration, to construct a case study. Chapter 18, Remarks about Software Engineering Education, comments on software engineering education in general and about the organization of a course that deals with human aspects of software engineering in particular. Chapter 19, Additional Information on Resources Used in This Book, closes the book.