Fundamental Nano-Patterns to Characterize and Classify Java Methods

Fundamental nano-patterns are simple, static, binary properties of Java methods, such as ObjectCreator and Recursive. We present a provisional catalogue of 17 such nano-patterns. We report statistical and information theoretic metrics to show the frequency of nano-pattern occurrence in a large corpus of open-source Java projects. We proceed to give two example case studies that demonstrate potential applications for nano-patterns. The first study involves a quantitative comparison of two popular Java benchmarking suites, in terms of their relative object-orientedness and diversity. The second study involves applying machine learning techniques to program comprehension, using method nano-patterns as learning features. In both studies, nano-patterns provide concise summaries of Java methods to enable efficient and effective analysis.

[1]  Manu Sridharan,et al.  Refinement-based context-sensitive points-to analysis for Java , 2006, PLDI '06.

[2]  Usama M. Fayyad,et al.  Knowledge Discovery in Databases: An Overview , 1997, ILP.

[3]  Chris F. Kemerer,et al.  A Metrics Suite for Object Oriented Design , 2015, IEEE Trans. Software Eng..

[4]  Itay Maman,et al.  Micro patterns in Java code , 2005, OOPSLA '05.

[5]  Jing Dong,et al.  Experiments on Design Pattern Discovery , 2007, Third International Workshop on Predictor Models in Software Engineering (PROMISE'07: ICSE Workshops 2007).

[6]  Sunghun Kim,et al.  Micro pattern evolution , 2006, MSR '06.

[7]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[8]  Rakesh Agarwal,et al.  Fast Algorithms for Mining Association Rules , 1994, VLDB 1994.

[9]  Christos Tjortjis,et al.  Clustering data retrieved from Java source code to support software maintenance: a case study , 2005, Ninth European Conference on Software Maintenance and Reengineering.

[10]  Welf Löwe,et al.  Automatic design pattern detection , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[11]  Einar W. Høst,et al.  The Programmer's Lexicon, Volume I: The Verbs , 2007, Seventh IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2007).

[12]  Ramakrishnan Srikant,et al.  Fast Algorithms for Mining Association Rules in Large Databases , 1994, VLDB.

[13]  Yann-Gaël Guéhéneuc,et al.  Fingerprinting design patterns , 2004, 11th Working Conference on Reverse Engineering.

[14]  Itay Maman,et al.  JTL: the Java tools language , 2006, OOPSLA '06.

[15]  Thierry Coupaye,et al.  ASM: a code manipulation tool to implement adaptable systems , 2002 .

[16]  Rajeev Motwani,et al.  Dynamic itemset counting and implication rules for market basket data , 1997, SIGMOD '97.

[17]  S. Marion,et al.  Decrypting The Java Gene Pool Predicting objects ’ lifetimes with micro-patterns , 2007 .

[18]  Tomasz Imielinski,et al.  Mining association rules between sets of items in large databases , 1993, SIGMOD Conference.

[19]  Einar W. Høst,et al.  The Java Programmer's Phrase Book , 2009, SLE.

[20]  Joost Visser,et al.  Quality Assessment for Embedded SQL , 2007 .

[21]  William Frawley,et al.  Knowledge Discovery in Databases , 1991 .

[22]  Richard E. Jones,et al.  Decrypting the Java gene pool , 2007, ISMM '07.

[23]  Sushil Krishna Bajracharya,et al.  Sourcerer: a search engine for open source code supporting structure-based search , 2006, OOPSLA '06.

[24]  Amer Diwan,et al.  The DaCapo benchmarks: java benchmarking development and analysis , 2006, OOPSLA '06.

[25]  Jeremy Singer,et al.  Exploiting the Correspondence between Micro Patterns and Class Names , 2008, 2008 Eighth IEEE International Working Conference on Source Code Analysis and Manipulation.