Swarnalath K S
Published: 2020-06-22
Total Pages: 172
Get eBook
An introductory course in Software Engineering remains one of the hardest subjects to teach largely because of the wide range of topics the area encompasses. We have believed for some time that we often tend to teach too many concepts and topics in an introductory course resulting in shallow knowledge and little insight on the application of these concepts. And Software Engineering is finally about the application of concepts to efficiently engineer good software solutions. We believe that an introductory course in Software Engineering should focus on imparting to students the knowledge and skills that are needed to successfully execute a commercial project of a few person-months efforts while employing proper practices and techniques. It is worth pointing out that a vast majority of the projects executed in the industry today fall in this scope—executed by a small team over a few months. I also believe that by carefully selecting the concepts and topics, we can, in the course of a semester, achieve this. This is the motivation of this book. The goal of this book is to introduce to the students a limited number of concepts and practices which will achieve the following two objectives: Teach the student the skills needed to execute a smallish commercial project. Provide the students with the necessary conceptual background for undertaking advanced studies in software engineering, through courses or on their own. I have included in this book only those concepts that I believe are foundational and through which the two objectives mentioned above can be met. Advanced topics have been consciously left out. As executing a software project requires skills in two dimensions—engineering and project management, this book focuses on key tasks in these two dimensions and discusses concepts and techniques that can be applied to effectively execute these tasks. The book is organized in a simple manner, with one chapter for each of the key tasks in a project. For engineering, these tasks are requirements analysis and specification, architecture design, module-level design, coding and unit testing, and testing. For project management, the key tasks are project planning and project monitoring and control, but both are discussed together in one chapter on project planning as even monitoring has to be planned. In addition, the book contains one chapter that clearly defines the problem domain of Software Engineering and another Chapter that discusses the central concept of software process which integrates the different tasks executed in a project. Each chapter opens with some introduction and what the reader can expect to learn from the chapter. For the task covered in the chapter, the important concepts are first discussed, followed by a discussion of the output of the task, the desired quality properties of the output, and some practical methods and notations for performing the task. The explanations are supported by examples, and the key learnings are summarized in the end for the reader.