Despite the fact we had significant gains of SoC metrics and reuse of DbC features
in favor of the AO implementations of HW system, we found out that reusing contracts
in some cases can be more di±cult than usually advertised. Contracts
reuse depends directly on their types (e.g. postconditions) and mainly if such contracts
is homogeneous or heterogenous. Since an invariant crosscuts several methods in a single class, it is naturally more reusable than pre- and postconditions
that are relative to one or few particular methods. Hence, the reuse of pre- and
postconditions are directly related to their homogeneity. In other words, if several
constrained methods present an intersection of common contracts, their reusability
can be improved. As an example, similarly to Lippert and Lopes [30], we found that
several methods in HW present the following homogeneous postcondition: JC.
ensures(result !¼ null). This postcondition states that every method using this
contract must return an object that is non-null. The same situation also occurred for
preconditions on input object parameters.