How can optimization models support the maintenance of component-based software?