Fault localisation for WS-BPEL programs based on predicate switching and program slicing