Numerous software reliability growth models (SRGMs) are proposed in the last four decades to track the reliability growth of software during the testing phase. In many existing models, it is assumed that the faults in the software are of the same type. However, this assumption may not be realistic. Software contains different faults and the detection/correction of different faults can require different efforts. In this paper, we propose a more general software reliability model considering heterogeneous faults, where the parameters for the detection time and correction delay of different faults are assumed to be faults specific and allowed to follow arbitrary distributions. Considering different parameters makes the model more flexible and adaptable to different practical software development situations. Some specific models are derived under different assumptions on the distributions of fault detection time, fault correction delay, and the corresponding parameters. Both MLE and LSE are proposed for parameter estimation. Illustrative examples with real data set are studied to compare the proposed models with homogeneous faults model, and the results have shown advantages of our models. The optimal software release policy based on the proposed model is also studied.