1. A method of automatically extracting a plurality of services from a software application based on at least one matching pattern, the method comprising: defining one or more service patterns each corresponding to a type of service in the software application, wherein the one or more service patterns are a functional service pattern or a structural service pattern, and wherein the software application is a legacy software application, and wherein the legacy software application is built with inter-twined source code jointly corresponding to the plurality of services, and wherein the plurality of services are not distinctly identifiable in the legacy software application; inputting the one or more service patterns to a workbench to generate a service pattern matcher, wherein the workbench uses a specification driven approach backed by program search and analysis to generate the service pattern matcher, wherein the service pattern matcher corresponds to the one or more service patterns; parsing the inter-twined source code of the legacy software application using a language specific parser to generate an intermediate representation of the inter-twined source code; performing tool-based analysis to build a subroutine-call hierarchy and control-flow graph for each subroutine upon parsing the inter-twined source code; defining initial service boundaries for the plurality of services by identifying interface statements; identifying control statements from the legacy software application, wherein the control statements control an execution of the initial service boundaries and form additional service boundaries; identifying the plurality of services from the intermediate representation of the inter-twined source code using the service pattern matcher, wherein the structural service pattern comprises identifying a plurality of user interface statements as the initial service boundaries and the functional service pattern comprises a plurality of pre-determined data entities and values; and marking the identified plurality of services to obtain extracted services in human readable format, wherein the extracted services form a basis for re-factoring the inter-twined source code.