Model driven reverse engineering