A framework for system reliability analysis considering both system error tolerance and component test quality