Technical Report MSC-2017-27

Title: A Nano Patterns Language for Java
Authors: Ori Marcovitch
Supervisors: Prof. Yossi Gil
PDFCurrently accessibly only within the Technion network
Abstract: Patterns, micro-patterns, and nano-patterns have many applications: program comprehension, code transformations, documentation aides, improving code robustness, etc. This work revisits nano-patterns, taken here to be predicates on short code snippets that represent some common and elementary programming missions such as ‟\emph{for each~$m∈M$ do …}”, or, ‟\emph{use~$x$ (but if~$x$ is \kk{null},~$y$ is a substitute)}”.

The \papertype describes a taxonomized \emph{language} of~\total{nanos} nano-patterns for Java. We also describe the process of patterns harvesting we used and the underlying rationale, including the \emph{prevalence threshold} criterion, which, capitalizing on Hirsch's famous~$h$-index, makes a robust yard stick of pattern's significance.

An empirical survey of 78 OSS Java projects indicates that the language has substantial prevalence in code: about a third of commands (executable statements) and half of methods are instances of nano patterns in the proposed language. Also, the language's prevalence is typically higher than that of languages harvested in a project specific, automated machine learning process.

Nano-patterns are implementation/language level details for most high level software engineering purposes. A contribution here is in identifying this clutter, appreciating its presence, and imposing order on it. The language, the nano patterns in it, and the contributed automatic tool for tracing nano patterns in code, may help to deal systematically with this low-level, yet significant, portion of code.

CopyrightThe above paper is copyright by the Technion, Author(s), or others. Please contact the author(s) for more information

Remark: Any link to this technical report should be to this page (, rather than to the URL of the PDF files directly. The latter URLs may change without notice.

To the list of the MSC technical reports of 2017
To the main CS technical reports page

Computer science department, Technion