I. Introduction
Software engineering has evolved greatly from its humble beginnings in the late 1950s when it was largely defined by coding. Today software engineering is concerned with how best to create software in ways that promote sustainable development and maximize quality. This evolution has been influenced by 40 years of advances in software engineering including; abstraction, modularity, generality, anticipation of changes, separation of concerns and several software development paradigms. There is general consensus amongst researchers and practitioners alike that these advances have greatly improved the quality and delivery of the software produced today [1]. This means that we have been generally successful for transferring software engineering knowledge to industry through various forms of education [2] [3]. However, many challenges in software engineering training remain. A key amongst these is how best to energise software engineering education with realworld software engineering practices.