Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software or we can say that Software Engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and work efficiently on real machine.
Software crisis was a term used in the early days of computer science. The term was used to describe the impact of rapid increase in computer power and complexity of the problems that could be solved. In essence, it refers to the difficulty of writing correct, understandable, and verifiable computer programs. The roots of the software crisis are complexity, expectations, and change. The apparent problem of incomplete, poorly performing software became referred to as "the software crisis" Software crisis is characterized by inability to develop the desired Software Project because of such problems:
1.Projects running over-budget.
2.Projects running over-time.
3.Software is inefficient.
4.Software is of low quality.
5.Software does not meet requirements.
6.Project is unmanageable/ Code difficult to maintain.
The term “Software Crisis”  is used in the software industry to emphasize the complexity in developing quality software. There are five common problems in the software development process. They are miscommunication, software complexity, programming errors, changing requirements and unrealistic schedule.
•Miscommunication: There is widespread miscommunication of information during all the phases of software development, because humans tend to assume and misinterpret a lot of things when communicating.
•Software Complexity: Any software, that’s developed to serve some useful purpose, is enormously complex and no single person can fully understand it .
•Programming Errors: Software is created by...