Decision-making techniques for software architecture design: a comparative survey