6 CONCLUSION
Recovering non-functional design information from
source code is a difficult task. Since this informa-
tion is usually provided in the form of design patterns,
several DPD tools have been developed to extract it.
However, most tools are limited to identifying certain
known patterns in executable projects. In this work,
we presented DP-CORE, a DPD tool that can recover
patterns even from non-compilable source code. DP-
CORE uses a flexible and intuitive representation, al-
lowing developers to define their own patterns and
even use wildcards to express ambiguity in these def-
initions. Our tool is up-to-date, relying on the latest
compiler technology, while it offers a GUI and a CLI
so that it can be used for batch tasks. The evalua-
tion of DP-CORE has shown that it can be effective
for identifying patterns in source code that match the
representation provided by the developer.
Future work on our tool lies in several directions.
At first, the negation of current connections could be
added to the options of the representation, thus allow-
ing the developer to define patterns more strictly. Ad-
ditionally, the structural analysis of DP-CORE can be
further extended using semantics on the abilities of
the patterns. Finally, forthcoming versions may in-
clude graphical pattern representations by integrating
with known graphical editors. In any case, pattern re-
covery from source code should be connected to the
requirements of the developer, thus we believe DP-
CORE is an efficient alternative to existing tools.
ACKNOWLEDGEMENTS
Parts of this work have been supported by the FP7
Collaborative Project S-CASE (Grant Agreement No
610717), funded by the European Commission.
REFERENCES
Arcelli, F. and Christina, L. (2007). Enhancing Software
Evolution through Design Pattern Detection. In Pro-
ceedings of the 2007 Third International IEEE Work-
shop on Software Evolvability, pages 7–14, Paris,
France.
Arcelli, F. F., Perin, F., Raibulet, C., and Ravani, S.
(2008). Behavioral Design Pattern Detection through
Dynamic Analysis. In Proceedings of the 4th Interna-
tional Workshop on Program Comprehension through
Dynamic Analysis, pages 11–16, Antwerp, Belgium.
Beck, K. and Cunningham, W. (1987). Using Pattern Lan-
guages for Object-Oriented Programs. In Proceedings
of the OOPSLA-87 Workshop on the Specification and
Design for Object-Oriented Programming, Orlando,
FL, USA.
Birkner, M. (2007). Object-Oriented Design Pattern Detec-
tion Using Static and Dynamic Analysis of Java Soft-
ware. Master’s thesis, University of Applied Sciences
Bonn-Rhein-Sieg Sankt Augustin, Germany.
Dong, J., Lad, D. S., and Zhao, Y. (2007a). DP-Miner:
Design Pattern Discovery Using Matrix. In Proceed-
ings of the 14th Annual IEEE International Confer-
ence and Workshops on the Engineering of Computer-
Based Systems, ECBS ’07, pages 371–380, Tucson,
AZ, USA.
Dong, J., Zhao, Y., and Peng, T. (2007b). Architecture and
Design Pattern Discovery Techniques - A Review. In
Proceedings of the 2007 International Conference on
Software Engineering Research & Practice, volume 2
of SERP 2007, pages 621–627, Las Vegas, NV, USA.
Dong, J., Zhao, Y., and Peng, T. (2009). A Review of De-
sign Pattern Mining Techniques. International Jour-
nal of Software Engineering and Knowledge Engi-
neering, 19(06):823–855.
Gamma, E., Vlissides, J., Johnson, R., and Helm, R.
(1998). Design Patterns: Elements of Reusable
Object-Oriented Software. Addison-Wesley Longman
Publishing Co., Inc., Boston, MA, USA.
Gu
´
eh
´
eneuc, Y.-G. and Antoniol, G. (2008). DeMIMA: A
Multilayered Approach for Design Pattern Identifica-
tion. IEEE Trans. Softw. Eng., 34(5):667–684.
Kaczor, O., Gu
´
eh
´
eneuc, Y.-G., and Hamel, S. (2006). Effi-
cient Identification of Design Patterns with Bit-vector
Algorithm. In Proceedings of the 10th European Con-
ference on Software Maintenance and Reengineering,
CSMR 2006, pages 175–184, Bari, Italy.
Lucia, A. D., Deufemia, V., Gravino, C., and Risi, M.
(2009). Design Pattern Recovery Through Visual Lan-
guage Parsing and Source Code Analysis. J. Syst.
Softw., 82(7):1177–1193.
Nickel, U., Niere, J., and Z
¨
undorf, A. (2000). The FU-
JABA Environment. In Proceedings of the 22nd Inter-
national Conference on Software Engineering, ICSE
’00, pages 742–745, Limerick, Ireland.
Oracle (2015). Compiler Tree API. Avail. online: http://
docs.oracle.com/javase/8/docs/jdk/api/
javac/tree/index.html, [retrieved March, 2015].
Rasool, G. and Streitferdt, D. (2011). A Survey on Design
Pattern Recovery Techniques. International Journal
of Computer Science Issues, 8(6):251–260.
Shi, N. and Olsson, R. A. (2006). Reverse Engineering of
Design Patterns from Java Source Code. In Proceed-
ings of the 21st IEEE/ACM International Conference
on Automated Software Engineering, ASE ’06, pages
123–134, Tokyo, Japan.
Stencel, K. and Wegrzynowicz, P. (2008). Detection of Di-
verse Design Pattern Variants. In Proceedings of the
2008 15th Asia-Pacific Software Engineering Confer-
ence, APSEC ’08, pages 25–32, Beijing, China.
Tsantalis, N., Chatzigeorgiou, A., Stephanides, G., and
Halkidis, S. (2006). Design Pattern Detection us-
ing Similarity Scoring. IEEE Trans. Softw. Eng.,
32(11):896–909.
DP-CORE: A Design Pattern Detection Tool for Code Reuse
169