Software Systems are now everywhere. Almost all electrical equipment now includes some kind of software; software is used to help run manufacturing, schools and universities, healthcare, finance and government; many people use different types of software for entertainment and education. The specification, development, management and development of these software systems constitute the discipline of software engineering. Even simple software systems have a high inherent complexity, so engineering principles must be used in their development. Therefore, software engineering is an engineering discipline, and software engineers use computer science methods and theories, and apply this in a cost-effective way to solve problems. These difficult problems mean that many software development projects have not been successful. However, most modern software provides users with good service; we should not let high-profile failures blur the true success of software engineers over the past 30 years. Software engineering w s developed to address the issue of building large custom software systems for defines, government, and industrial applications. We are now developing a wider range of software, from games on professional consoles to PC products and network-based systems to large-scale distributed systems. While some technologies for custom systems, such as object-oriented development, are common, new software engineering technologies are being developed for different types of software. It's impossible to cover everything in a book, so we focus on developing common technologies and technologies for large systems rather than individual software products. Although this book is intended as a general introduction to software engineering, it is geared toward system requirements engineering. We think this is especially important for software engineering in the 21st century. The challenge we face is to ensure that our software meets the actual needs of users without damaging them or the environment. The approach we take in this book is to present a broad perspective on software engineering, and we won't focus on any particular method or tool. There are no simple solutions to software engineering problems, and we need a wide range of tools and techniques to solve software engineering problems.