Refactoring object oriented software : cross-cutting concerns identification and isolation