What is an utility tree and what is it's purpose in case of Architecture tradeoff analysis method(ATAM)?
Thanks
Software architecture is a type of design. While "regular" design is mainly about functional requirements - architecture is mainly about "non-functional" or "-illities" or the better name "quality attributes".
If you'd go to stakeholders and ask them about quality attributes they'd say they want performance, availability, scalability etc. but that's not really helpful. ATAM (and other methods) promote expressing quality attributes as scenarios in context. e.g.
Availability -> Time to repair -> Under normal conditions, the system will detect a failure in a component in less than 5 sec.
Adaptability -> add/remove feature -> Once in production, a change in an interface will be compatible at least one version back
Utility trees are a way to organize these quality attributes. In regard to ATAM they serve as a way to prioritize quality attributes and later to evaluate the suitability of a candidate architecture vs. the requirements. I also like to use them as reference requirements and stories (or themes depending on size) as part of a backlog in agile development.
You can read a little more on quality attributes and utility tress in a couple of posts I wrote a while back: Quality attributes introduction and Utility trees - hatching quality attributes. If you want to read about them in the context of ATAM you should read Evaluating Software Architectures: Methods and Case Studies Paul Clements, Rick Kazman & Mark Klein (and there's an old presentation I made on the subject).
Edit: Added a blog post expanding on the explanation above.