Building reliable component-based software systems