Book cover

Web Version | Dark Mode | Cite

Software Engineering: A Modern Approach

Marco Tulio Valente

Preface

This book is an English translation of a work originally published in early 2020. Initially intended for Brazilian students, we chose to write it in Portuguese to maximize accessibility and make an impact on software engineering education throughout our country.

Fortunately, the book has been a considerable success, surpassing our expectations by a wide margin. It is now adopted by numerous Brazilian universities in different states across the country. Although estimating exact figures is difficult, we have evidence that over 400 instructors have used or are currently using the book. We frequently receive messages with positive feedback from students, instructors, and industry professionals who are using the book to improve their skills in the field.

Thus, with the book firmly established in Brazil by late 2023, we decided to embark on an English translation project to reach a global audience. This decision was also motivated by requests from Brazilian colleagues working abroad. Furthermore, the Portuguese edition remains relevant and doesn’t require significant updates.

For a deeper insight into the motivations behind writing the book, its organization, and features, we recommend that readers refer to the original preface, which we have reproduced in the following pages.

Website

The book has an open access version, available at https://softengbook.org. To report any errors, inconsistencies, or typos, please use the form at (link).

Marco Tulio Valente

Belo Horizonte, March 19, 2024

Preface to the Brazilian Edition

The uselessness of prefaces is a commonplace in the history of prefaces, so I will be brief. – Eduardo Giannetti

The idea of writing this book emerged in early 2019 when I was assigned to teach the software engineering course for the bachelor’s degree in computer science at UFMG, Brazil. To prepare for the course, I began by analyzing well-known software engineering books. To my surprise, I found they had changed little since I had taken the course during my undergraduate studies more than 25 years earlier.

My goal was to find a book that would allow me, at the beginning of a class, to inform the students: Today, we will study this topic, which corresponds to this chapter in the book. At the end of the class, I wanted to suggest to the students: To better comprehend the topics we just covered, I suggest you do these exercises. Unfortunately, I couldn’t find such a book. Instead, I had to conduct extensive research and read at least 15 books.

As a result, I created 600 slides covering the essential material for an undergraduate course in software engineering, particularly for programs that have only one course in the field. However, studying solely from slides does not provide the comprehensive learning experience obtained from reading a full and contextualized text.

Thus, I decided to transform the slides into my ideal textbook. It could also help other instructors who might face similar challenges when teaching an introductory software engineering course.

I would like to highlight the following points about the content, organization, and writing strategy of the book:

Audience

This book is intended for undergraduate students and was designed for curricula with a single 60-hour software engineering course. However, in conjunction with other books, it can be used in programs with two or more courses in the field.

It is also suitable for technical and technological degree programs. We have deliberately employed clear, accessible language to facilitate comprehension and widespread adoption. We also wrote the book with industry professionals in mind, especially those looking to improve their knowledge of modern software engineering topics.

Prerequisites

Readers are expected to have knowledge of basic programming concepts, algorithms, and data structures. Knowledge of object-oriented programming concepts is also recommended. Assuming a four-year undergraduate degree, the book is best suited for students in the latter half of their studies.

Marco Tulio Valente

Belo Horizonte, February 10, 2020

Author

Marco Tulio Valente holds a Ph.D. in Computer Science from the Federal University of Minas Gerais, Brazil, where he is an Associate Professor in the Department of Computer Science since 2009. Previously, he was an adjunct professor at PUC Minas for 11 years and a senior systems analyst at a telecommunication company for 4 years. He is the author of over 150 scientific papers and has supervised more than 30 master’s theses and 15 doctoral dissertations.

Acknowledgments

I would like to thank the 30 students who have been part of the ASERG research group over the last decade. A substantial part of the book’s content has its origin in the work of our group. Special thanks to Professors Eduardo Figueiredo and André Hora, my colleagues at DCC/UFMG, who reviewed some chapters of the book. Also, to Prof. José Luis Braga, who gave valuable suggestions to improve the text. I’d like to thank the students of the postgraduate course we offered in the second semester of 2019 who helped us to calibrate and refine the book’s content—especially Ulisses Fernandes and Fábio Ferreira, for their careful review. Thanks also to Aline Brito, who helped convert the text into the final format, and to João Eduardo Montandon and Hudson Borges, for reviewing the appendix on Git. Lastly, thanks to Osvaldo and Cynthia Valente, for proofreading parts of the manuscript.