Formal Methods for Component-Based Systems