  Designing software compatible with cloud-based Microservice Architectures
(MSAs) is vital due to the performance, scalability, and availability
limitations. As the complexity of a system increases, it is subject to
deprecation, difficulties in making updates, and risks in introducing defects
when making changes. Microservices are small, loosely coupled, highly cohesive
units that interact to provide system functionalities. We provide a
comprehensive survey of current research into ways of identifying services in
systems that can be redeployed as microservices. Static, dynamic, and hybrid
approaches have been explored. While code analysis techniques dominate the
area, dynamic and hybrid approaches remain open research topics.
