Design pattern detection and software architecture reconstruction: an integrated approach based on software micro-structures