Reasoning with qualitative preferences for optimization of component-based system development