1. A method comprising: generating an abstract representation of a computer code, in a form of a code model maintaining semantics and dependencies of said computer code; visualizing said computer code on a graphical user interface (GUI); conducting a plurality of iterations, wherein each of said iterations comprising: applying manipulations to said code model by a user; recording said manipulations to said code model on said graphical user interface (GUI) presenting said code model on a display; calculating a series of code refactorings to the computer code that represents the recorded manipulations to said code model; validating, on said code model, that said calculated series of code refactorings maintains said semantics of said computer code; and upon successful validation, carrying out the series of code refactorings within the computer code, wherein at least one of: the generating, the recording, the calculating, and the carrying out, is executed by a processor; determining when the carrying out the series of code refactorings requires splitting of low level software elements within the computer code, wherein each of said low level software elements comprises at least one of a method of a class, a method of a package, a field of a class and a field of a package, of said computer code; upon determining that splitting of low level software elements is required, the carrying out of the series of code refactorings further comprises: applying code analysis to detect dependencies between first software elements of a first component of the computer code and second software elements of a second component of the computer code; applying code analysis to detect dependencies between a plurality of software elements and said first software elements within said first component; creating a new component that contains new software elements having functionalities of said first software elements; referring said new software elements to said second software elements of the second component; and modifying said plurality of software elements in the first component to refer to said new software elements in said new component.