**1. Introduction**

The term 'software' has been used for many kinds of computer programs such as a single program or suite of programs ranging from operating systems, middleware, environment, database, desktop, mobile, embedded or web applications. All software products have many unique perspectives such as functionality, development environment, development environment, platforms, users, and way it is being developed and used and hence any single software development and management framework cannot be effectively used for all kinds of software products. Software development and management is a process of developing and managing the required software by adopting various well defined software development life cycle stages. The SDM practice must emphasis on making software reliable, high-quality, and easy to use for users [1]. There are many software-development models that can be

used to manage the software development process for achieving these goals however methodology should be selected carefully. Unique challenge presented is that selected SDM must support modern computing environment such as web and cloud where various sub operating environment are dynamic and not fully controlled by any one organization. Deciding which model to use for developing a certain type of software is a complex task. The software developers and managers need to work closely to acquire some knowledge about the software project and then decide which model would work best for the team. The success and failure of the project depends on the selection of the software model [1, 2]. Hence, selecting a proper software model and managing all associated processes and artifacts through various phases of development, are the keys for the effective software development and management. These models articulate the various stages of the process and the order in which the process must be carried out to achieve the required objectives. This paper discusses the various technical and management activities, workflows of the models, and how the models can be improved for future use. Modern and innovative approaches such as continuous integration and Continuous development, and extreme programming are discussed in detail.
