Software development and testing often involve very complex and abstract problems, and sometimes a shared understanding of the problem is difficult to achieve amongst team members. Furthermore, it ca…