AUTOMATIC TESTING PROGRAM


Description of research project


Creating an automatic testing program (autograder) is my summer research project. Grading of student programs is usually difficult to do in a fair, timely and comprehensive manner. Therefore, this difficulty often results in assignment of fewer programming assignments than professors would desire. Also, it is a security risk for teaching assistants to run unfamiliar code in their user space. These are a few of the reasons why creating an autograder for grading student code became a great concept for research. I am creating the autograder in Perl programming language and it will be able to test student code with putting the user space at risk. Then once I have finished the first section, I will put this program on the web and create a web interface for professors and their students.

Weekly journal of my research results


Week1:- Review of the Perl programming language.

Week2:- Using Perl to create a program that will compare the output of two sort programs I created in C++. One sort program should be the student program and the other the oracle. The Perl program is called the tester and it calls the oracle and the student executable file first. So it will not work if the student or the oracle will not compile or execute. I will address this problem later on but first I have to get the Perl program to call the executable files. Also, I must redirect any standard in/out from the C++ code to the tester in order to 1) create a way to use test files as input and 2)compare the outputs from the tests ran for correctness purposes. I had problems getting the Perl program to call the executables using fork. But I did get it to work so the redirection of input/output part was pushed to next week.

Week3:- Redirection of input/output is complicated when using fork. Especially since I am forking two child processes. I got the redirection to work using the Perl system function. But the system function is not very flexible for what needs to be accomplished in the future. Therefore, the fork function is better and in order to redirect input/output using fork, I need to create pipes. So I researched pipes and implemented the redirection. So the process of testing my pipes is pushed to next week along with creating the comparison code using regular expressions.

Week4:- During this long process I have also been trying to create my webpage for submission. I am creating my webpage without using any web editors so that's why it took so long. This week I am also testing the pipes and getting my tester to compare the output files.

Week5:- Still researching piping for the interprocess communication. This portion is so complicated because the function that I am using is open(). Open is very flexible because it allows me to fork, pipe and redirect, all in one call to the function. But getting all of these parts of the function to work together is taking some time.

Week6:- Finally I got the piping, forking and redirection all to work within the open function call and now I am cleaning up my code, by modularizing and commenting as much as possible. This is of course after I have completed testing the code to make sure it works correctly.

Week7:- Currently, the project status is incomplete and probably will not be fully completed before the end of this program. During the last 7wks, I have been getting very well acquainted with Perl programming language. I have created a very basic simulation of the project, tested it and it works. Now I am in the process of creating a web interface for the project. This way we can make the project easily accessible to both students and professors. After I am finished creating the web portion, I will be spending the rest of my time fine tuning the project. Basically, I will be making it look better and upgrading the functions to be able to handle large amounts of code.

Week8:- The webpage for the program is done and it is very basic. There is a login prompt before accessing files. But the web page isn't processing the information because it is not going through a server. I created a cgi script for the login information and now I have to get the scripts to run on the web page but we need a server. I have research a little about servers and found Abyss server for Windows. It is very easy to use.

Week9:- The server needed to be configured so that is in process. Also, I have to upload my scripts to the server in order for the forms to be able to find them. I am getting the hang of the Abyss web server and I have gotten everything to work on the server. The login screen, the display of the student's name and files is also up and running and you can also upload files from the computer to the student or professor folder. It depends on the user ID where the uploaded files go.

Week10:- The final week of the DMP project and I just got released from the hospital. I was diagnosed for meningitis. But now I am back in full effect. But I keep getting this error now that I have linked all the files through forms and cgi scripts. The error is "Access Denied" when I try to execute the .exe file that is being called. Now remember how long I worked on getting the open function to work correctly and now that I am passing it through the server it doesn't like that. I feel like I am back at the beginning again.

After reviewing all the possible problems, my mentor and I figured out the problem. I have surpassed the capabilities of Windows OS and so I have to switch over to Unix which means I will have to learn about the Unix server and configure it for the program. Whew!! I have a lot of work cut out for me, but this is where it ends as far as the CRA-DMP program.

Final report of my research project