Cooperative Thinking: Analyzing a new framework for software engineering education