Students have enthusiastically taken to online programming lessons and contests. Unfortunately, they tend to struggle due to lack of personalized feedback when they make mistakes. The overwhelming number of submissions precludes manual evaluation. There is an urgent need of program analysis and repair techniques capable of handling both the scale and variations in student submissions, while ensuring quality of feedback.Towards this goal, we present a novel methodology called semisupervised verified feedback generation. We cluster submissions by solution strategy and ask the instructor to identify or add a correct submission in each cluster. We then verify every submission in a cluster against the instructor-validated submission in the same cluster. If faults are detected in the submission then feedback suggesting fixes to them is generated. Clustering reduces the burden on the instructor and also the variations that have to be handled during feedback generation. The verified feedback generation ensures that only correct feedback is generated.We have applied this methodology to iterative dynamic programming (DP) assignments. Our clustering technique uses features of DP solutions. We have designed a novel counter-example guided feedback generation algorithm capable of suggesting fixes to all faults in a submission. In an evaluation on 2226 submissions to 4 problems, we could generate verified feedback for 1911 (85%) submissions in 1.6s each on an average. Our technique does a good job of reducing the burden on the instructor. Only one submission had to be manually validated or added for every 16 submissions.1 To minimize instructor's efforts further, we discuss strategies to suggest potentially correct submissions to the instructor. 1 void main() { 2 int i, j, n, max; 3 scanf("%d", &n); // Input 4 int m[n][n], dp[n][n]; // dp is the DP array 5 for (i = 0; i < n; i++) 6 for (j = 0; j <= i; j++) 7 scanf("%d", &m[i][j]); // Input 8 dp[0][0] = m[0][0]; // Initialization 9 for (i = 1; i < n; i++) { 10 for (j = 0; j <= i; j++) { 11 if (j == 0) 12 dp[i][j] = dp[i-1][j] + m[i][j]; // Update 13 else if (j == i) 14 dp[i][j] = dp[i-1][j-1] + m[i][j]; // Update 15 else if (dp[i-1][j] > dp[i-1][j-1]) 16 dp[i][j] = dp[i-1][j] + m[i][j]; // Update 17 else dp[i][j] = dp[i-1][j-1] + m[i][j]; // Update 18 } 19 } 20 max = dp[n-1][0]; 21 for (i = 1; i < n; i++) 22 if (dp[n-1][i] > max) max = dp[n-1][i]; 23 printf("%d", max); // Output 24 } 2 http://www.codechef.com/problems/SUMTRIAN 1 int max(int a, int b) { 2 return a > b ? a : b; 3 } 4 int max_arr(int arr[]) { 5 int i, max; 6 max = arr[0]; 7 for (i = 0; i < 100; i++) 8 if (arr[i] > max) max = arr[i]; 9 return max; 10 } 11 int main() { 12 int n, i, j, A[101][101], D[101][101]; // D is the DP array13 scanf("%d", &n);// Input 14 for (i = 0; i < n; i++) 15 for (j = 0; j <= i; j++) 16 scanf("%d", &A[i][j]); // Input 17 D[0][0] = A[0][0] ; // Initialization 18 for (i = 1; i < n; i++) 19 for (j = 0; j <= i; j++) 20 D[i][j] = A[i][j] + max(D[i-1][j], D[i-1][j-1]); // Update 21 int ans = max...
Being able to automatically repair programs is at the same time a very compelling vision and an extremely challenging task. In this paper, we present MintHint, a novel technique for program repair that is a departure from most of today's approaches. Instead of trying to fully automate program repair, which is often an unachievable goal, MintHint performs statistical correlation analysis to identify expressions that are likely to occur in the repaired code and generates, using pattern-matching based synthesis, repair hints from these expressions. Intuitively, these hints suggest how to rectify a faulty statement and help developers find a complete, actual repair. MintHint can address a variety of common faults, including incorrect, spurious, and even missing expressions.We also present an empirical evaluation of MintHint that consists of two main parts. The first part is a user study that shows that, when debugging, developers' productivity can improve manyfold with the use of repair hints-compared to having only traditional fault localization information. The second part consists of applying MintHint to several faults of a widely used Unix utility program to further assess the effectiveness of the approach. Our results show that MintHint performs well even in situations, seen frequently in practice, where (1) the repair space searched does not contain the exact repair, and (2) the operational specification obtained from the test cases for repair is incomplete or even imprecise-which can be challenging for approaches aiming at fully automated repair.
No abstract
No abstract
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.
customersupport@researchsolutions.com
10624 S. Eastern Ave., Ste. A-614
Henderson, NV 89052, USA
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Copyright © 2025 scite LLC. All rights reserved.
Made with 💙 for researchers
Part of the Research Solutions Family.