Abstract
This article presents an approach to identify abstract data types (ADT) and abstract state encapsulations (ASE, also called abstract objects) in source code. This approach, named similarity clustering, groups together functions, types, and variables into ADT and ASE candidates according to the proportion of features they share. The set of features considered includes the context of these elements, the relationships to their environment, and informal information. A prototype tool has been implemented to support this approach. It has been applied to three C systems (each between 30–38 Kloc). The ADTs and ASEs identified by the approach are compared to those identified by software engineers who did not know the proposed approach or other automatic approaches. Within this case study, this approach has been shown to have a higher detection quality and to identify, in most of the cases, more ADTs and ASEs than the other techniques. In all other cases its detection quality is second best. N.B. This article reports on work in progress on this approach which has evolved since it was presented in the original ASE97 conference paper.
Similar content being viewed by others
References
Aamodt, A. 1994. Explanation-based case-based reasoning. Topic in Case-Based Reasoning, Springer Verlag, pp. 274-288.
Biggerstaff, T.J. 1989. Design recovery for maintenance and reuse. IEEE Computer, 22:36-49.
Canfora, G., Cimitile, A., and Munro, M. 1996. An improved algorithm for identifying objects in code. Journal of Software Practice and Experience, 26(1):25-48.
Canfora, G., Cimitile, A., Munro, M., and Taylor, C.J. 1993. Extracting abstract data type from C programs: A case study. In International Conference on Software Maintenance, pp. 200-209.
Dean, T.R. and Cordy, J. 1995. A syntactic theory of software architecture. IEEE Transaction of Software Engineering, 21(4):302-313.
Garlan, D. and Shaw, M. 1993. An Introduction to Software Architecture Vol. 1, Advances in Software Engineering and Knowledge Engineering, New Jersey, World Scientific Publishing Company.
Ghezzi, C., Jazayeri, M., and Madrioli, D. 1991. Fundamental Software Engineering. Prentice Hall International.
Girard, J.-F. and Koschke, R. 1997. Finding components in a hierarchy of modules: a step towards architectural understanding. In International Conference on Software Maintenance. Bari, pp. 66-75.
Girard, J.-F., Koschke, R., and Schied, G. 1997. Comparison of abstract data type and abstract state encapsulation detection techniques for architectural understanding. In Working Conference on Reverse Engineering, Amsterdam, The Netherlands, pp. 66-75.
Guttag, J. 1977. Abstract data types and the development of data structures. Communications of the ACM, 20(6):396-404.
Keller, H., Stolz, H., Ziegler, A., and Bräunl, T. 1995. Virtual mechanics simulation and animation of rigid body systems with Aero. Simulation for Understanding, 65(1):74-79.
Liskov, B. and Zilles, S.N. 1974. Programming with abstract data types. SIGPLAN Notice, 9(4):50-60.
Liu, S. and Wilde, N. 1990. Identifying objects in a conventional procedural language: An example of data design recovery. In Conference in Software Maintenance. IEEE Computer Society Press, pp. 266-271.
Luckham, D.C., Kenney, J.H., Augustin, L.M., Vera, J., Bryan, D., and Mann, W. 1995. Specification and analysis of system architecture using rapide. IEEE Transaction of Software Engineering, 21(4):336-355.
Perry, D. and Wolf, A. 1992. Foundations for the study of software architecture. acm SIGSOFT, 17(4):40-52.
Richter 1992. Classification and learning of similarity measures. In Annual Conference of the German Society for Classification, number 16. Springer Verlag.
Schwanke and Hanson 1994. Using neural networks to modularize software. Machine Learning, 15:137-168.
Schwanke, R.W. 1991. An intelligent tool for re-engineering software modularity. In International Conference on Software Engineering, pp. 83-92.
Shannon, C.E. 1972. The Mathematical Theory of Communication. Urbana: Univ. of Ill. Press. ISBN 0-252-72548-4.
Shaw, M., DeLine, R., Klein, D.V., Ross, T.L., Young, D.M., and Zelesnik, G. 1995. Abstraction for software architecture and tools to support them. IEEE Transaction of Software Engineering, 21(4):314-335.
Sommerville, I. 1992. Software Engineering, 4th edition, Addison Wesley.
Yeh, A., Harris, D., and Reubenstein, H. 1995. Recovering abstract data types and object instances from a conventional procedural language. In Wills, L., Newcomb, P., and Chikofsky, E., editors, Second Working Conference on Reverse Engineering, Los Alamitos, California. IEEE Computer Society Press. pp. 227-236.
Author information
Authors and Affiliations
Rights and permissions
About this article
Cite this article
Girard, JF., Koschke, R. & Schied, G. A Metric-Based Approach to Detect Abstract Data Types and State Encapsulations. Automated Software Engineering 6, 357–386 (1999). https://doi.org/10.1023/A:1008715506131
Issue Date:
DOI: https://doi.org/10.1023/A:1008715506131