One thing that I am in favor of is letting students correct their mistakes. English teachers do this when they allow students to write a draft, review it with the teacher and have someone edit it, and then fix it. This is also what happens in many jobs. You do it until it is correct. You work on something, your boss checks it, gives you feedback, and you make changes. As an engineer, we constantly had to make changes because things wouldn't work out at first. We would test it, note the issues, and then fix it.
I think this should be done in education more. I don't grade my Physics or AP Physics students on the correctness of their homework. I grade it on effort. How complete is it? Did they at least set up the problems and try them? Then give them the answers. Depending on how well everyone did, we will go over them in class or I will go over a few to help them and then let them try the others again, in class, with me to help them, so that they can learn how to do it.
In my AP Physics class, I give them back their tests and quizzes with the incorrect problems marked. I answer some questions and do some examples, and then have them take them home and try to get the correct answer. They get a few extra points added onto the original grade for doing this, and more importantly they learn.
I use a lot of projects and labs in my classes. They don't just stop when done if it is wrong, or incomplete, or not working. They analyze it and make changes and try again.
If a student doesn't get something right and can't fix it, they will often get discouraged and not try anymore or not "like" a class.
Learning is the main purpose of education. Shouldn't we give them the chance to learn from their mistakes too and not just penalize them?
UPDATED: Clarifications on what I do:
1. They don't always get any kind of extra points and it's not a retest. I force them to learn the material. Many times, there is no extra points or improved grade for fixing their work.
2. There is no late policy. If their work is late, it is a letter grade off for every day late (just like at a job, if you are late, there are penalties and consequences). Some things are a zero (like homework) if not turned in on time.
3. If they come in asking about a retest or extra credit, they aren't getting any. This is to help them learn when they have tried.
4. I agree it is a case-by-case, situational decision. I don't do this with every test or assignment. But, it is important to have them redo to learn the material vs. just having a bad grade.
5. Not much extra time. They get graded, get it back, redo it, and turn it back in. It usually takes only a few minutes to check their wrong answers. I don't do it every time or with every level class so it's not a huge time commitment.