software reusability characteristics