In my opinion, the greatest cause for cheating was severely unrealistic expectations from the professors. They often expected a far greater amount of memorization and understanding than could possibly be accomplished in the amount of time given to learn the material.
When confronted, their answer was almost universally that "you will have to know it in the real world, and people's lives could depend on your work." However, this logic is severely flawed in that, in the real world, we are given more than 2 hours to complete a set of tasks. And we have the internet and textbooks at our grasp if we need a refresher on a specific equation or concept. And others will be checking our work, especially if people's lives depend on it.
This discrepency between professor expectations and real-world expectations I think gave many students the view, "if the professors aren't playing fair, then why should I?"
As a result, I saw much much less cheating when the professors "played fair", meaning they made the tests open-book and/or open-note. However, there was probably also much less legitimate understanding of the material come test time. So, I'm not really offering up a solution. Just my observations.