previous years. This implied that the quality of the code was
not textbook-perfect thus allowing for a more realistic feel
to the assignment. Student reports show that they did go
through the maintenance stages identified in the literature.
Students were also able to identify and report on the factors
that influence software maintenance, as tool support,
software quality, and programmer experience. These factors
have also been identified by existing literature when looking
at mature programmers. The use of a medium-sized codebase
as a maintenance codebase proved beneficial with respect
to student learning as the students were able to reflect
on their own practices as software engineers, as outlined by
the analysis of their reflections. Student reports also highlighted
areas that we had overlooked in our teaching, specifically
discussions about reverse engineering approaches and
about testing in large software systems. In the future, we
aim to expand this assignment and its associated teaching to
include these aspects. Furthermore, we plan to explore how
the cognitive program model of the novice software engineer
evolves as the student becomes more familiar with the code
through its maintenance