Software engineering involves specification, development, validation, and evolution of software. It focuses on practical application, while computer science focuses more on theory. Software engineering is a part of system engineering, which deals with all aspects of computer systems including hardware, software, and processes. Key challenges include developing trustworthy software within reduced timelines for increasingly diverse needs. Software is affected by heterogeneity across devices, as well as security, business needs, and social changes. Development costs make up 60% of software costs, while testing costs are 40%. Good software has maintainability, dependability, reusability, efficiency, and acceptability. Designing web systems considers reusing existing software, incremental development, and interface constraints of browsers.