Towards on-demand system reliability: software implemented fault tolerance and testing