A Hierarchical Framework For Estimating Heterogeneous Architecture-Based Software Reliability