Software engineering can be considered to be the establishment and the use of sound methods for the efficient construction of large and right-quality software that solve the problems such as users identiy them. It includes the entire development process of the software, the requirements prescription and the domain prescription starting by a description of the application domain. Large software systems can be based on integrated component construction and architecture development. Treatment of quality of systems requires control of quality and check of quality for all products that have been developed during the software development. Thus, SE is based on methods (principles, analysis, construction, technique, tool, and artifact), on methodologies for use of methods and results in documents that are used for both description and analysis. We may base software development on principles (types, functions, relations, algebra, logic), techniques, and tools. Often software engineering is treated in an informal way leaving the foundations aside. Additionally verification and validation is often based on principles that have been developed for the programming in-the-small instead of programming in-the-large or programming in-the-world. We elaborate the common belief that software engineering can be given through a formal basis on the basis of abstract state machines. ASM may escort the entire software engineering process due to their abstraction, refinement, well-foundedness, scalability, flexibility, and universality. The software engineering course given at Christian-Albrechts-University Kiel also includes management of software engineering products, processes and software quality.