should have done
“should have + 动词的完成式”表示本应该做而实际上没有做，它的否定形式表示某种行为本不该发生但却发生了。有责备的意味。
You should have started earlier, but you didn't.
You should have washed the wound
She shouldn't have taken away my dictionary, for I wanted to use it.
You shouldn't have been so rude to him.
注：“should have + 完成式”虽然可以表猜测，但因为会造成歧义，应少用。
ought to have done
1、“ought to have + 动词的完成式”表示过去应做某事而实际未做，它的否定形式表示本不应该做某事却做了（用法和should相同）。
You ought to have helped him, but you didn't.
You ought to have studied harder.
He ought not to have stopped his work halfway
He oughtn't to have done that.
2、“ought to have + 动词的完成式”还可以用来表猜测。
They ought to have arrived by now.
If he had started at nine o'clock, he ought to have been in London by eleven o'clock.