The goal of software engineers is to create practical software systems that have social and/or economic value using a systematic software development process. The software development process transforms a user's needs into software, and this process can integrate a subset of the following practices: requirements engineering, system analysis, architecture, design, coding, integration, design and code reviews, testing, maintenance, project management, and configuration management. Software engineers choose an appropriate subset of these practices that best fit the parameters of the software they are developing.
Members of the software industry face many unique challenges during development of a software application. Software is a tractable, not physical medium, which provides limitless opportunities to model a bounded world. Due to the tractability of software, requirements can change frequently during the course of the project, which can lead to uncertainty. Scheduling problems can arise due to schedule optimism and schedule pressure. Software engineers are optimistic on the time it will take to develop a project, and therefore will make aggressive commitments. Schedule pressure comes from these aggressive commitments and the feeling that a project hinges on specific feature. Software engineering deals with the entire process of creating a software product, and the best practices involved with development.
For a brief history of Software Engineering Refer: