Heterogeneous redundancy analysis based on component dynamic fault trees