  Recent studies have largely investigated the detection of class design
anomalies. They proposed a large set of metrics that help in detecting those
anomalies and in predicting the quality of class design. While those studies
and the proposed metrics are valuable, they do not address the particularities
of software interfaces. Interfaces define the contracts that spell out how
software modules and logic units interact with each other. This paper proposes
a list of design defects related to interfaces: shared similarity between
interfaces, interface clones and redundancy in interface hierarchy. We identify
and describe those design defects through real examples, taken from well-known
Java applications. Then we define three metrics that help in automatically
estimating the interface design quality, regarding the proposed design
anomalies, and identify refactoring candidates. We investigate our metrics and
show their usefulness through an empirical study conducted on three large Java
applications.
