Computer systems are growing rapidly in scale, complexity, distribution, and heterogeneity. For these reasons, it is increasingly important for engineers to reason quantitatively about a system's properties during design, before significant resources have been expended on implementing the system. This project is focusing on design-time evaluation of software systems' architectures with respect to one key property ? reliability. Reliability is defined as the probability that the system will perform its intended functionality under specified design limits. The approach developed in this project results in a multi-faceted, hierarchical model of a system, which allows assessment of the system's reliability in an incremental, scalable fashion. The approach combines standard software design models with stochastic models used to assess system reliability. Although several software reliability techniques exist, they either assume the availability of a running software system or fail to take into account the properties of the firmware underlying the software system. This project addresses both these deficiencies in the context of several representative case studies. The results of this research are evaluated along two measures of interest: tractability (intended to address scalability issues existing in real, complex systems) and sensitivity (intended to address issues of confidence in our predictions under numerous uncertainties existing at design time). The project's results are applied to real problems in mobile robotics, a domain that is representative of many complex, distributed, and embedded systems. The results are also actively transferred into the classroom.