Reverse Engineering Heterogeneous Software Systems