Date of Award
Master of Science (MS)
Code tracing is fundamental to students’ understanding of a program, and symbolic reasoning that entails learning to use assertions with abstract input and output values, as opposed to concrete values, enhances that understanding. Symbolic reasoning teaches students valuable abstraction and logic skills that will serve them well in all aspects of programming and their software
We use lessons integrated into an online educational tool to supplement classroom instruction to help students learn symbolic reasoning. We explore two ways for students to learn about assertions: Writing assertions to capture the behavior of given code and solving Parsons-style problems in which statements are composed to produce behavior specified in assertions. A subsequent assessment tests students’ ability to select multiple assertions given code and to select the appropriate code fragment for given assertions.
The same experiment was conducted with two different populations: a large public R1 research institution and a public R2 Hispanic-Serving Institution (HSI). Overall the impacts were more pronounced at the larger institution with a bigger sample size. Students’ assessment scores showed that they could reason symbolically at both institutions. They did better at Parsons-style problems of matching code to assertions at both institutions, though the difference varied by code type. The two populations had different trends in their performance for conditional code questions as they were asked to select from among increasingly formal assertions. Students from the R1 institution had a strong downward trend, while students from the HSI maintained or slightly increased their performance. The analysis also yielded insight into student misconceptions and suggested directions for further research.
Blankenship, Sarah, "Learning to Reason About Code with Assertions: An Exploration with Two Student Populations" (2022). All Theses. 3950.
Educational Assessment, Evaluation, and Research Commons, Educational Technology Commons, Software Engineering Commons