Investigating How Software Characteristics Impact the Effectiveness of Automated Software Fault Tolerance