A Framework for Classifying and Comparing Software Reverse Engineering and Design Recovery Techniques