You are on page 1of 71

 

B.E. Project 

ONLINE JUDGE WITH SOFTWARE CODE QUALITY 
ANALYSIS 
 
Submitted by: 
SURAJ GUPTA (348/CO/11) 
TUSSHAR SINGH (354/CO/11) 
UJJWAL RELAN (356/CO/11) 

 
Under the guidance of 
DR. SHAMPA CHAKRAVERTY 
 
 

 
 
 

DISSERTATION SUBMITTED IN PARTIAL FULFILMENT OF THE REQUIREMENT 
FOR THE DEGREE OF BACHELOR OF ENGINEERING (COMPUTER 
ENGINEERING) 
 

DEPARTMENT OF COMPUTER ENGINEERING 
Netaji Subhas of Technology 
University of Delhi 
 

2014 ­ 2015 
 
 
 

 
SELF­DECLARATION 
 
The project entitled “Online Judge with Software Code Quality Analysis” is a 
bonafide work carried out by  Suraj Gupta, Tusshar Singh  and  Ujjwal Relan  in 
Department of Computer Engineering, Netaji Subhas Institute of Technology, 
Delhi  under the supervision and guidance of  Dr. Shampa Chakraverty  in partial 
fulfilment of the requirement for the Degree of Bachelor of Engineering in Computer 
Engineering, University of Delhi for the year 2014­15. 
 
The content of this report is to the best of our knowledge and hasn’t been used for 
any other academic activity. 
 
Date: 
 
 
 
 
Suraj Gupta 
   Tusshar Singh 
   Ujjwal Relan 
 (348/CO/11)
    (354/CO/11)
    (356/CO/11)
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

 
 

CERTIFICATE 
 

This is to certify that the project entitled “ ONLINE JUDGE WITH SOFTWARE CODE 
QUALITY ANALYSIS”  is a bonafide work done by Mr. Suraj Gupta, Mr. Tusshar 
Singh and Ms. Ujjwal Relan, students of eighth semester, B.E. Computer 
Engineering, Netaji Subhas Institute of Technology, Delhi. 
 
This project work has been prepared as a partial fulfilment of the requirements for 
the award of the degree of Bachelor of Engineering in Computer Engineering, 
University of Delhi, in the academic year 2014­2015. 
 
This work has not been presented for any other academic purpose before. 
 
I wish them luck for all their future endeavours. 
  
 
 
 
Date: 1 June 2015 
 
 
Dr. Shampa Chakraverty 
Professor & Head, Deptt. of Computer Engineering 
Netaji Subhas Institute of Technology 

 
 
 
 
 
 

    Lastly. Their trust in our capabilities helped us in giving our best.                                          3  .  Netaji Subhas Institute of  Technology  for giving us this opportunity for research and development. Shampa Chakraverty  for her guidance. we would also like to thank our parents who supported us through our thick  and thin.    We sincerely thank our mentor. The regular  brainstorming sessions with her gave us a deep insight into the topic and evolved  our ideas.ACKNOWLEDGEMENT    We would like to take this opportunity to acknowledge the support of all those without  whom the project wouldn’t have been possible. We thank her for giving us this opportunity and supporting us throughout.  Dr. criticism  and encouragement which led to the completion of the project.    We wish to express heartfelt gratitude to our college.    We would also like to express our gratitude to the  lab assistants in  C   ADLAB  for  cooperating with us and providing us with the required resources.

.1.7..25  2..32    CHAPTER 3: PROPOSED DESIGN………………………………………………….17  2.11 WEKA ­ An Open Source Data Mining Tool………………………….7.....6...1    Collusion………………………………………………...…………………………………………………12  1.2 Commercial Tools………………………………………………..2..7.………………………………………………………………………..12  1.10  CHAPTER 1: INTRODUCTION………..1.32  2.1 Comment Analysis……………………………………………….7..8.23  2..2    Cppcheck……………………………………………….1 Importance of an Online Judge…………………………………..1..2 Limitations of Ruby on Rails…………………………………….5    No Reuse without Test……………………………….4 Advantages of C++ on the Backend…………………………………….1.18  2.3 Organisation of Chapters…………………………………………………15    CHAPTER 2: LITERATURE SURVEY………………………………………………….1 Web Application……………………………………………………………16  2.……………………………………………………….34  4  ..18  2.1.…………………………………………………………………..1..3.7  LIST OF FIGURES……….21  2..7.8  ABSTRACT………..……….22  2..8.23  2.6 Amazon Web Services………………………………………………….30  2.3  LIST OF TABLES……….3 Ruby on Rails……………………………………………………………....2 Online Judge ……………………………………………………………….22  2.2 Importance of Source Code Comments……………………….29  2.2 Motivation………………………………………………………………….27  2.16  2.8.8  Static Code Quality Analysis and Its Tools…………………………….1 Amazon Simple Storage Service………………………………..2.26  2..20  2..24  2.1    GCC……………………………………………………..9 Source Code Comments as a Metric of Software Quality……………30  2.22  2.20  2..7.13  1......13  1.21  2.22  2.2 Amazon Elastic Cloud Computing ……………………………….2    Unacknowledged Reverse Engineering…………….16  2..1.1 Software Requirement Specification for the Online Judge…………...23  2.8...10 GIT ­ An Open Source Version Control System……………………….3.24  2.9.………………………………………………………………..6.1.2  ACKNOWLEDGEMENT..1 Some Well Known Open Source Tools for Static  Code Analysis…………………………………………………….1 Different Forms of Plagiarism……………………………………..………………………………………………………………..7 Plagiarism Detection……………………………………………………..1 Objective……….1  CERTIFICATE………..34  3..………………………………………………………….4    Unacknowledged Code Generation…………………...1 Why Ruby on Rails Over Other Languages…………………….3    Unacknowledged Translation………………………..5 Python as a Scripting Language……………………………………….28  2.8..3    CPPLINT………………………………………………..13  1..INDEX    SELF DECLARATION………………………………………………………………….

59  4..35  3..1.61  5.1.4.52  4.1....2.1..3..58  4.61  5  .2    Functional Requirements…………………………….2 General Description …………………………………………….37  3...2    Using Python Scripts at the Backend……………….6.2 Components………………………………………………………………..60    CHAPTER 5: OBSERVATIONS AND RESULTS……………………………………..2    Code Evaluation………………………….42  4.1    Interfaces for the “User”……………………………….37      3..50  4.1.. Acronyms.arff…………………………………………….1.1.3 Implementation of Codechecker……………………………….3 Specific Requirements………………………………………….1.1 Implementation of Interface and Codeshell…………………….1    Database ……………………………………………….3.1.2.59  4..3.1.3    Good vs Bad Commenting…………………………….....2    Creating .49  4.2.35  3.4 Implementation of Plagiarism Detection……………………….1 Programming Languages and Tools…………………………………….1.34  3.3    User Characteristics…………………………………..2.2.34  3...2..2.1.2..1    User Interfaces…………………………….5    Static Code Analysis ……………………… 38  3.4    Overview……………………………………………….1.2.1.2.2    Scope………………………………………………….36      3.42  4.2    Product Functions…………………………………….34  3.1    Finding Dataset…………………………………………59  4.2.1 Introduction……………………………………………………….36      3.6 Comment Classifier……………………………………………….4    Plagiarism Analysis ……………………….2.37      3.35  3.... and Abbreviations………….59  4.1 Results of Codechecker…………………………………………………..42  4.2.2.1.2    Interfaces for the “Admin”…………………………….3.1.1.42  4. 39  3.1    User management……………………….3.6.1    Product Perspective………………………………….1..2 Integration of Client and Server………………………………….34  3.1    Purpose……………………………………………….36  3.47  4..3.1.1....3    Non­Functional Requirements ……………………….38      3...2.56  4.2..35  3. 39  3..2...4 Other Requirements ……………………………………………….5 Integration with Cppcheck………………………………………. 39  Comment Classification………………………………………………….3    Definitions.2.49  4.34  3.6.......1 Comment Categories…………………………………………….42  4.3...2.2.1.3.1.1    External Interface Requirements…………………….1.3.1.39  3.1.1.1..7 Using GIT………………………………………………………….1.3.2 Extracting Features for Classification……………………………40    CHAPTER 4: IMPLEMENTATION………………………………………………………....1..1...3.36  3.2 3..2.1..1.39  3.2.2.2..38      3.3    Software Interfaces………………………..2.2..1.37      3.4    General Constraints and Features…………………..2    Hardware Interfaces…………………….3    Contest Management…………………….37      3.2.3.1    Using AWS S3 Buckets………………………………..

..……………………………………………………....70                                  6  ......65  Comparison with Different Algorithms………………………………….4 Plagiarism Detection Results……………………………………………...1 Conclusion…………………………………………………………………67  6..3 Future Scope………………………………………………………………68    REFERENCES…………...64  Cppcheck Results……………………………………………………….2 5.66    CHAPTER 6: CONCLUSION AND FUTURE WORK………………………………..3 5.67  6..5........2 Limitations………………………………………………………………….67  6.

2 CODE SNIPPET USED FOR EXECUTING CODE    CHAPTER 5   Table 5.1 COMMANDS USED IN CODECHECKER  Table 4.1: MACHINE LEARNING FEATURES FOR COMMENTS    CHAPTER 4  Table 4.LIST OF TABLES    CHAPTER 3  Table 3.1 COMPARISON OF DIFFERENT MACHINE LEARNING ALGORITHMS                          7  .

19: SOURCE CODE FILES USED FOR PLAGIARISM DETECTION   Figure 4.1: SCREENSHOT OF LOGIN PAGE  Figure 4.4: SCREENSHOT OF CONTEST PAGE  Figure 4.8: SCREENSHOT OF EDIT PROFILE   Figure 4.9: SCREENSHOT OF REQUEST ADMIN RIGHTS PAGE   Figure 4.16: INTERACTION OF PYTHON SCRIPTS IN BACKEND   Figure 4.13: SCREENSHOT OF EDIT PROBLEM PAGE  Figure 4.21: GITHUB REPOSITORY USED FOR THE PROJECT     CHAPTER 5  Figure 5.3: WHEN CODE GIVES COMPILATION ERROR  Figure 5.15: SCREENSHOT OF LIST OF S3 BUCKETS USED  Figure 4.2: SCREENSHOT OF SIGNUP PAGE  Figure 4.5: SCREENSHOT OF SUBMIT PAGE  Figure 4.17: ORDER OF STEPS IN CODECHECKER   Figure 4.18: ORDER OF EXECUTION IN CODECHECKER   Figure 4.12: SCREENSHOT OF EDIT CONTEST PAGE  Figure 4.11: SCREENSHOT OF CREATE CONTEST PAGE  Figure 4.14: SCREENSHOT OF ADDING ADMIN  Figure 4.7: SCREENSHOT OF VIEW PROFILE  Figure 4.LIST OF FIGURES    CHAPTER 4  Figure 4.20: SOURCE CODE FILES USED FOR STATIC CODE ANALYSIS USING  CPPCHECK   Figure 4.4: WHEN CODE EXCEEDS TIME LIMIT  8  .1: WHEN CODE GETS ACCEPTED  Figure 5.3: SCREENSHOT OF HOME PAGE  Figure 4.10: SCREENSHOT OF STATIC CODE QUALITY CHECK OPTION  Figure 4.6: SCREENSHOT OF SUBMISSIONS PAGE  Figure 4.2: WHEN CODE GIVES WRONG ANSWER  Figure 5.

6: RESULTS AFTER MOSS BASED PLAGIARISM CHECK  Figure 5.Figure 5.7:  RESULTS AFTER CPPCHECK ANALYSES THE CODE                                                    9  .5: WHEN CODE GIVES RUNTIME ERROR  Figure 5.

     10  .  W   e have checked code quality through  Static Code Analysis  and  Comment classification. creativity and  expression but it needs to have some quality attributes like understandability. It is really useful in  maintaining customised company standards and also. thus helping in enhancement of one’s analytical and  programming skills. scalability. modifiability and reusability of the code. reusability and others so that the software’s life can be  extended and the previous effort doesn’t go waste. So.ABSTRACT    The digital world revolves around programming. Everything around us involves some  kind of programming today. for enhancing the quality of large  codebases. reliability. the code can still be updated and managed by  others. Writing a software is about innovation.  Source Code Comments also play a very important role in enhancing the quality of a code as  they increase the understandability.  Source Code Comments help team members to work collaboratively and if any  developer leaves the organisation. Comment Classification  and  Static Code Analysis .   As we know the cost of correction increases as we go down the Software Development  Lifecycle so Static Code Analysis helps in detecting errors early. Plagiarism Detection.  We have implemented the following main functionalities in our project:  Contest  Management. Static Code Analysis done before deployment can prevent huge failures.  modifiability. we have created an  online  judge  which checks the  algorithmic correctness along with complexity  and does  the  code quality analysis . Code Evaluation.

 Task.  11  . a local algorithm  for Document Fingerprinting. It uses Winnowing. This is how we have done the  Code Evaluation .    We have checked the algorithmic correctness of the codes using test cases and  algorithmic complexity by imposing time and memory limits. We have integrated the online judge with cppcheck. Code.    Static Code Analysis  looks for errors which the compiler can’t catch like uninitialized  memory and null pointers. problem addition and participation by  users.Contest Management  includes contest creation. This classification helps in  analysing the importance given to comments in the given code.  We created our own  dataset  and then applied different  Supervised Machine Learning  algorithms in order  to identify the  best classifier .    We have  checked for Plagiarism  amongst the accepted codes using the concept of  Stanford’s MOSS  (Method of Software Similarity).    We have  classified  the comments into six categories on the basis of their context:  Header. We have integrated the front end and the back end using  AWS S3 Bucket  which  act as an intermediate storage platform for the server and the client side. Section. a well  known Static Code Analysis tool for C/C++. The user’s code is  executed against some predefined test cases by matching the user’s output with the  expected output and it should pass within the time and memory limit set in order to get  accepted.  We have performed the classification by using the  Weka tool. Interface and Inline .

 implementation of the build system. generating algorithms. Create an online judge with the following functionalities:  a.  verification of requirements of algorithms including their correctness and resources  consumption. Everything around us involves some kind of programming today ([1] and [2]). and implementation (commonly referred to as coding) of algorithms in  a target programming language. developing understanding.  Related tasks include  testing .  b.  12  .1. Introduction  Computer programming is a collection of instructions in a human­readable  programming language that solve a particular problem. and management  of derived artifacts such as  machine code  of  computer programs .  debugging .     1. It allows users to submit solutions for the contest problems. the need of good competitive  programming platforms in also increasing.  Programming involves  activities such as analysis. and  maintaining the  source code . or "coding" reserved for the actual writing of source  code.  "implementation".  Due to the increasing need of good programming. These might be  considered part of the programming process. These platforms help in enhancing the  analytical and problem solving skills of the programmers. It allows the admin to manage contests and set problems. but often the term " software  development " is used for this larger process with the term "programming".1 OBJECTIVE  Following are the objectives of this project:  i.

Problem Solving Skills  2. Optimised use of resources  3.    1. Create a classifier which categorises comments on the basis of their context.1 IMPORTANCE OF AN ONLINE JUDGE  Programming skills are becoming ever more important.2 IMPORTANCE OF SOURCE CODE COMMENTS  13  .2 MOTIVATION  1.2. All the accepted codes are checked for Plagiarism. quickly turning into the core  competency for all kinds of 21st Century workers. the motivation of this project was to create an online judge which can help a programmer  enhance the following capabilities:  1.  So. Debugging and Testing Skills  1. Every submitted code is checked against predefined test cases and is accepted only  if the generated output matches the expected output and this happens within the  predefined memory and time limit. startups and nonprofits to find ways to  help them and businesses to search for innovative approaches to finding the coders they so  desperately need[3].c. Efficient and Quick solving  4. Writing codes of good quality   5.  d.  ii.  e. It provides an interface where the user can assess the static code quality of the code.  Competitive programming is playing a great role in spreading this programming culture  amongst the beginners. That inescapable fact is leading  individuals to seek out new ways of learning to code.2.

 it need to be understandable. design decisions. and reminder notes.    In our project. within the program code. In other words. comments ­  which act as beacons ­ help the programmer not only form hypothesis. in Brooks' top­down model. not its presence or absence[4]. such as the functionality. For example. we have classified the comments into six categories: Header. nature of input and output data. Thus. Source code comments play an important role in making such a  code. the  quality of the code can be detected. Task.  14  . but refine them to  closer representations of the program. Section. it is the  quality of the comment that is important.  algorithms.    Program comments within and between modules and procedures usually convey information  about the program. By determining the proportion of these comments in the code. Considering that the  program source code may be the only way of obtaining information about a program. It has to be pointed out that comments  in programs can be useful only if they provide additional information. Code and Interface.  The comments provide information that the understander can use to build a mental  representation of the target program. describe how  these goals are achieved.Along with the algorithmic correctness of the code. Prologue comments precede a program  or module and describe goals.  maintainable and reusable. it is  important that the programmers should accurately record useful information about these  facets of the program and update them as the system changes. Common types of comments  used are prologue comments and inline comments. In­line comments. theoretically there is a strong case for  commenting programs. assumptions. The importance of comments is further strengthened by evidence  that the lack of good comments in programs constitutes one of the main problems that  programmers encounter when maintaining programs.  Inline. declarations.

we explain the detailed design of the  online judge by giving its software requirement specification and also.3 ORGANISATION OF CHAPTERS  In the upcoming chapters.  Finally. In chapter 4. we will provide more details to provide an insight into the  work done.                      15  . In chapter 3. we talk about the implementation  details of the project. in chapter 6 we present the limitations.1. observations and the results. future scope and the conclusion of  our work. the method  used for comment categorisation. Chapter 5 covers the analysis. Chapter 2 talks about the literature survey conducted before  implementing each functionality.

2. PHP.  Web applications commonly use a combination of server­side script (ASP.  A web application relieves the developer of the responsibility of building a client for a  specific type of computer or a specific operating system.2 ONLINE JUDGE  Online judges provide a platform for competitive programming. These sites have high  16  .[5]    2. The  application can be as simple as a  message board  or a guest sign­in book on a  website.1 WEB APPLICATION  A web application is any application that uses a web browser as a client. Literature Survey  This chapter talks in detail about the theoretical and practical concepts explored  before starting with the project.Topcoder. Javascript. etc. the user could be using an IBM­compatible or a Mac. or as complex as a word processor or a spreadsheet. The  client­side script deals with the presentation of the information while the server­side  script deals with all the hard stuff like storing and retrieving the information. Codechef. though some applications require a specific web browser.  and Codeforces are some of the well known online judges. They can be  running Windows XP or Windows Vista. etc)  and client­side script (HTML. They can even be using Internet Explorer or  Firefox.) to develop the application. Since the client runs in a  web browser.    2.

 Smalltalk. and domain specific knowledge. Yukihiro “Matz” Matsumoto. Ada. design skills (patterns/oops  et. Eiffel.  unambiguous.[6]  These online judges help one  in like acing a language (your primary tool for coding). Rails thinks that there is a “best” way to do things and  in order to get the most of of Rails. [8]  Rails is a web application development framework written in the Ruby language." By not  17  . Its creator.  Ruby is an object oriented language. authoritative representation within a system. debugging techniques.    2.3 RUBY ON RAILS  Ruby is a language of careful balance.al ). one should follow that method. writing readable/maintainable code.quality of problems and also allow you to see other’s code post contest completion. it allows fast development.  blended parts of his favorite languages (Perl. It is  designed to make programming web applications easier by making assumptions  about what every developer needs to get started. and Lisp) to form  a new language that balanced functional programming with imperative programming.  These also categorize problems based on the topic.   The Rails philosophy includes two major guiding software engineering principles:  ● Don't Repeat Yourself:  DRY is a principle of software development  which states that "Every piece of knowledge must have a single. It allows you to write less code  while accomplishing more than many other languages and frameworks.  Rails is opinionated software. system  knowledge. Having a  standard framework.

3.  ● Rails and most of its libraries are open source unlike other standard frameworks.  ● It follows design patterns which encourage less code redundancy.  this  is  primarily  because it can be  more  resource  intensive  than  PHP. more extensible.  thus saving on the license cost.2 LIMITATIONS OF RUBY ON RAILS  ● Not all website hosts can support Rails. and defaults to this set of  conventions. rather than require that you specify every minutiae  through endless configuration files.  ● RoR allows faster design and development.writing the same information over and over again.  While  it  is  true  that  not  all  web  hosts  support  Rails.1 WHY RUBY ON RAILS OVER OTHER LANGUAGES?  RoR is preferred over other languages as it provides:  ● It provides a standard framework so designing a Web Application using Ruby on  rails is easier. and less buggy.3.  ● Convention Over Configuration:  Rails has opinions about the best  way to do many things in a web application.  ● It allows code reusability through the use of gems.  ● It has a clear code structure which allows faster development. our code is more  maintainable.  2. [9]  2.  ● Ruby code is very readable and self documenting.  a  fact  which  deters  low­end  shared­hosting  18  .

 and Gov.  Rails­friendly  hosts  do  exist.  ● Java  and  PHP  are  more  widely  used.  One  of  the  main  differences  between  the  Ruby  and  other  communities  is  the  amount  of  open  source  code  (gems)  which  is  publicly  available.providers.  However.711  gems  which  you  can  use  to  enhance  your  application.  Heroku  and  EngineYard. [10]      19  .  and  there  are  more  developers  in  these  languages   The  number  of  Ruby  developers  is  growing  year  on  year  as  more  people  switch  to  it  from  other  programming  languages. Groupon.  Alternatively.  as  of  writing  there  are  63.  There  is  also  the  option  of  running  your  application  under  JRuby  and  then  you  have  the same performance characteristics as Java. which  is  true.  for  example.  or  Linode.uk. Channel 5.  but  for  the  majority  of  applications  it  is  fast  enough.  You  will  then  have  full  control  over  the  server  and can allocate sufficient resources for your application.  ● Performance and Scalability  There  have  been  concerns  that  Rails  applications  are  not  as  fast  as  Java or C.  Yellow  Pages.  Rackspace. you can host your Rails application on a Virtual Private Server (VPS) with  Amazon  EC2.  There  are  plenty  of  high  profile  organisations  which  rely  on  Rails  to  power  their  sites  including  AirBnB.

 This  makes Python an ideal language for scripting. It supports procedural as well  as object oriented paradigm. meaning there is no compile stage. it gives optimised performance in terms of memory and  CPU. which allows you to try out new code quickly in an interpreted  way. This lets the developer tinker with ideas without having to write the full  program out into a file.  ● Python is an interpreted language. Opening a  command line and typing python immediately will drop you into a Python  interpreter. Python has a very easy to read and understand syntax. It is easy to learn as it is quite similar to C.  Using C++ on the backend can be really advantageous as it is faster than the  scripting languages.5 PYTHON AS A SCRIPTING LANGUAGE   The following points highlight why Python can be considered as a beneficial  replacement for bash scripting:  ● Python is installed by default on all the major Linux distributions.2.4 ADVANTAGES OF C++ ON THE BACKEND  C++ is a general purpose programming language.  20  .  2. It requires relatively less  memory space and is closer to low level languages which makes it extremely  fast. and it is integrable with other scripting languages. Its style  emphasizes minimalism and clean code while allowing the developer to write  in a bare­bones style that suits shell scripting. Python also comes with a Read  Eval Print Loop.

com. Scripts easily can be extended or built upon.6 AMAZON WEB SERVICES  Amazon Web Services is a collection of services which constitute the cloud  computing platform provided by amazon. Python's standard library includes datetime  libraries that allow you to parse dates into any format that you specify and  compare it to other dates easily. highly­scalable object storage. with a simple  web services interface to store and retrieve any amount of data from anywhere on the web. Code reuse is simple. provides developers and IT teams with  secure.1 AMAZON SIMPLE STORAGE SERVICE  Amazon Simple Storage Service (Amazon S3). Amazon S3 is easy to use. The two most used web services  provided by AWS are:   2. read in standard input and write to standard output) as it  is to write Python replacements for existing shell commands.● Python is a fully featured programming language.  because Python modules easily can be imported and used in any Python  script.  ● Python has access to an excellent standard library and thousands of  third­party libraries for all sorts of advanced utilities. such as parsers and  request libraries. Python should not replace all the  bash commands. [11]    2. durable.  ● Python can be a simple link in the chain. For instance. It is as powerful to write Python programs that behave in a  UNIX fashion (that is. such as cat and  sort.6.  Amazon S3 provides cost­effective object storage for a wide variety of use cases including  21  .

1.    2. In such a  case. work that is re­used without  proper acknowledgement can be hard to identify. When the  help is significant then it is normal for the person who has given the help to be credited in a  more formal way. content distribution.1 DIFFERENT FORMS OF PLAGIARISM  All forms of plagiarism involves claiming other people's’ work as your own (or assisting  someone to make such false claims).  However. there is no direct reuse of software in the classical engineering sense.7.6. and big data  analytics[13].1 Collusion  In all practical projects. Amazon EC2 provides developers the tools to  build failure resilient applications and isolate themselves from common failure scenarios[14].Amazon EC2’s simple web service interface allows us to obtain and configure  capacity with minimal friction. Following are the kinds of software  plagiarism commonly found :­  2. and there is collusion between the parties  involved. This help must be  publically acknowledged when the work is presented for evaluation or publication. Software — of any reasonable complexity — is   22  . it is a simple matter for no public acknowledgement of this to be made. disaster recovery. It provides complete control of computing resources and runs  on Amazon’s proven computing environment.7 PLAGIARISM DETECTION  2. In software engineering. backup and archiving. It is designed to make web­scale cloud computing easier for  developers.cloud applications.7. this collusion is plagiarism. Where help has been given.2 AMAZON ELASTIC CLOUD COMPUTING   Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides resizable  compute capacity in the cloud.  2. it is considered normal practice to be given help.

 and a student submitting this  code as their own. provided the original code is  properly acknowledged.1. In final year projects.2 Unacknowledged Reverse Engineering  Often software engineers will look at some code and be able to reverse engineer some  abstract property of that code in order to re­use that abstraction to help them write their own  code.  23  . so  removing these credits would be considered as deliberate deception on the part of the  student. When the original piece of  code is not acknowledged then this is also commonly known as “stealing someone else’s  idea(s)”.4 Unacknowledged Code Generation  Software engineering tools. Students should not be discouraged from engineering software in  this way (it is a reasonably advanced technique) but they should be strongly encouraged to  correctly acknowledge where the original design originated. there are tools to generate C++  code from data flow diagrams. Collusion in software development involves a third  party writing the code for at least one of these components.7. often found as part of complex development environments. template or  pattern for their own code.7.   2. yet similar. This type of automated software engineering is good.  provided the role of the tool is properly acknowledged.   2. problem. Any such generated code must be explicitly  identified and correctly acknowledged.  2. Again.7.3 Unacknowledged Translation  Suppose. Note that these tools usually credit themselves.1. This can be thought of as a specific form of reuse through abstraction. For example. the student “finds” the Java code to solve a problem and re­uses it to generate a  C++ code. and disciplinary action would follow. this  may be considered a good approach in some circumstances. this type of plagiarism often results when a student re­uses  the design of a software system (or part of a software system) as a structure. usually as a solution to a different.structured and has different components. can  be used to automatically generate code.1.

 avoiding the risk of being accused of deliberate deception when the  plagiarism is a result of incompetency: Explicitly acknowledge the use of someone else’s  code — no matter how small — by testing it against your requirements. In all practical approaches. and  2.5 No Reuse Without Test  From the examples above. The algorithm behind moss is a significant improvement over other  cheating detection algorithms.  It uses the local Winnowing Algorithm on k­grams:­  a.  b. In the case that a  student does not properly test the software that they are reusing. A fingerprint also contains positional  information. we find substring matches between them that satisfy two  properties:  1. Given a set of documents. We do not detect any matches shorter than the noise threshold.7. Moss has been very  effective in this role. t.1.2 MEASURE OF SOFTWARE SIMILARITY [16]  Moss (for a Measure Of Software Similarity) is an automatic system for determining the  similarity of programs. it seems that care needs to be taken about acknowledging any  reuse of code. where k is a parameter chosen by the user and  where.2. Since its development in 1994.[15]  2. the set of fingerprints is a small  subset of the set of all k­gram hashes. then this  match is detected. There is a simple guideline to ensure that a student never forgets the  acknowledgement.  24  .7. Now hash each k­gram and select some subset of these hashes to be the  document’s fingerprints.  c. k. the main application of Moss has been in detecting  plagiarism in programming classes. a k­gram is a contiguous substring of length k. If there is a substring match at least as long as the guarantee threshold. Divide a document into k­grams. To date. this student should be  advised that the re­use is unacceptable.

 Their main benefit lies in  improving the quality of code in early development stages.  e. C# and many others [18]. noise suppression and whitespace sensitivity. In each window select the minimum hash value. It has been designed with a special focus on computer programming code rather  than text. static code analysis  techniques and tools are numerous for established programming languages like  C/C++.  3. Thus.  The constants t and k ≤ t are chosen by the user. If there is more than one hash  with  the minimum value. [17]  5. thus reducing the number of false positives. Java etc.  MOSS has a limitation that  it can be broken with change in the structure if there are several  ways of writing  the same logic.8 STATIC CODE QUALITY ANALYSIS AND ITS TOOLS  Static code analysis techniques and tools [19] are widely spread and intensively  used in the development of software systems.    2.  k should be large enough (to find significant matches) but not too large otherwise  relocation of strings would change the result. Compare the fingerprints of the documents to determine the percentage of similarity  between the two.  4.    MOSS is a preferable method for Plagiarism Detection because :­  1. It has already been implemented for multiple languages like C. Java. It is efficient. It ensures positional independence. Now save all selected hashes  as the fingerprints of the document.  2.  d. C++.    25  . select the rightmost occurrence. It excludes template code and keywords.

1. Static code analysis provides an effective way for  detecting critical defects early in the software lifecycle.  Static code quality contributes widely to good software quality. which search for patterns in  programs that represent known problems and possible defects. where a program is executed with symbolic values to  show certain run­time properties.This  26  . is that static code analysis works fully automated without user  involvement and does not require elaborate test settings. elaborate data flow  analysis techniques to reveal the data dependencies in a program [20]. as well as  abstract interpretation [22].8.1 SOME WELL KNOWN OPEN SOURCE TOOLS FOR STATIC CODE  ANALYSIS [23]    2. Its C and C++ compilers are widely used in the open­source  community and they come installed by default in practically every Linux distribution. which is employed independently from compilers. It is therefore usually based on the source  code of a program or an intermediate representation thereof. The main benefit. It  complements program inspection as well as software testing techniques by providing  means to reveal bad code smells [21].Static code analysis works by analyzing the static structure and the elements of a  program without actually executing it. They include elementary rule­based approaches.1 GCC   The GNU Compiler Collection provides a suite of several compilers for different  programming languages. control flow analysis.  which allows checking the possible branches of a program [19]. Nowadays static code  analysis has evolved to a self­contained program quality assessment and  improvement technology.   2.  The techniques employed for static code analysis are manifold (see for example [19]  ). violations of programming conventions and  guidelines. and potential defects. in distinction to inspection and  testing techniques.8.

 These compilers  come with several documented flags for reporting potential issues in source code. the ­wformat flag enables format string verification for printf. The software comes in both a  command line version as well as a graphical version. Cppcheck is an open­source static analysis tool that  has been part of several benchmarks [14. With this flag the compiler is instructed to only check for  syntax errors. which can be used on function parameters.2 CPPCHECK  Originally created by Daniel Marjamäki. In addition to this. GCC does not instantiate C++ templates when this  flag is enabled. Both versions use the same analysis  engine and thus have identical checks. etc.  This is very useful for analysis as the compiler can then be used as a pure static analyzer  without code generation. the compiler also reports warnings with this flag enabled. is the compile­time division by zero check. One of the more interesting compiler flags for analysis  purposes is the ­fsyntax­only flag. Unfortunately. The  analyzer builds a simplified abstract syntax tree (AST) using its own custom parser and  lexical analysis. and may therefore not always conform to the latest C++ standard due to  bugs or lack of features. thus making it less than ideal as a static analyzer.benefit does come with the downside of a lack of full POSIX compatibility. The  compiler also supports source code annotations in the form of custom attributes. 59].  2. which is actually enabled by default.  Functions where these non­null parameter exist are checked by the compiler in case they  are called with null arguments. 40.8. although some old checkers still use their own  27  . Many checkers  have been modified to use this new system. One very  interesting attribute is the nonnull attribute. To support more elaborate checks. 24. scanf.1. Another  warning. the latest version implements a  generic data­flow This new framework supports general­purpose context sensitive  interprocedural data­flow analysis and can be used by individual checkers. For  example. although the command line version is more suitable  for automated analysis due to it being easier to run in non­interactive environments.

   • performance for some common performance related suggestions. Although convenient. written uses a mixture of regular  28  .  2. inconclusive checks where the analyzer might not  be completely sure about the existence of a problem. Cpplint19 is a code analysis and style checking program that  enforces the Google C++ Style Guide20.  There are two very different extension mechanisms in Cppcheck for creating custom checks. The  analyzer comes with many different checkers. The framework also performs abstract interpretation when  tracking values in loops.  One way to create them is by modifying the source code to create new C++ classes  containing the desired checks. custom checks can also be created by specifying regular  expression in an XML formatted configuration file.  These severities are   • error for more severe issues like syntax errors.  • portability for 64­bit and general platform portability issues. This program. some previously  hidden problems might be detected while significantly increasing the number of false  positives.3 CPPLINT  Originating from Google.specific data­flow tracking.   • style for dead code and other stylistic issues. By enabling this flag.  Cppcheck is also able to give even more warnings if enabled with the ­­inconclusive flag.8. Program options are available for enabling or disabling checks by their severities. as the name suggests.   • warning for suggestions about possible problems. and   • information for informational messages about problems with the analysis.  This flag enables. These classes work as visitors on the tokenized AST stream. These checkers are categorized by their  severity.   In addition to this method. these regular  expressions do not provide the same capabilities as the source modifying method.1. The regular expressions are used find  defects by matching them against the token stream.

 As it is  a style convention checking tool created for Google projects. These commercial tools are typically either smaller standalone tools or parts  of a larger suite of tools. like Chromium21. It mostly detects style issues. it analyzes even large projects relatively fast.   • legal for missing copyright messages. Some of the well known commercial tools are:­   ● Klocwork Insight [23]  ● Coverity SAVE [23]  ● LLBMC [23]          2. whitespace irregularities. whole  categories of checks can be enabled or disabled. Due to its simplicity. and   • whitespace for whitespace usage conventions  2.   • readability for correct but unreadable code. The currently existing categories are  • build for build and preprocessing issues.expression matching and other line based heuristics to detect various problems in the  analyzed code. Fortunately. its use is  somewhat limited for general­purpose analysis. irrelevant checks can be  disabled through the use of command line flags.9 SOURCE CODE COMMENTS AS A METRIC OF SOFTWARE  QUALITY    29  . tool customization.   • runtime for runtime related issues. and various other  potential problems. With the significant costs of some of these tools comes useful  benefits like extensive on­site support. In addition to individual checks. and project­specific tuning for the  customer.8.2 COMMERCIAL TOOLS  Several commercial static analysis tools have been made since the creation of the first  lint­type tools.

 the  quality of code comments plays only a minor role in assessing a software system’s  maintainability. the results differed greatly among the different test cases such that no unique  answer can be given. However. lines of commented out code were also counted in the ratio between  comments and source code.9. Header comments are written prior to a function  definition.  2.. Commented out code should be excluded in this metric  because it does not provide any information gain for system understanding. g.  In previous work. the authors did not differentiate between different types of  comments. However. As software is often maintained by people who  30  .  Some authors also evaluate the ratio between comments and source code over time to give  a trend analysis whether developers increase or decrease their effort on code commenting. The authors monitor the percentage of functions with header  comments. e. we try to emphasize the quality of source code comments as a metric of  software quality. the study reveals a constant percentage of commented  functions except for early fluctuation due to the commenting style of a particular active  developer. whereas all other comments inside a function body or trailing the function are  non­header comments. In particular. It is a commonly accepted fact that poor documentation constitutes a major  problem affecting software maintainability [4]. the authors provide a coarse categorization of comments into  header and non­header comments.  They claim that developers commonly change code without updating its associated  comments and that uncommented interfaces or interfaces with outdated comments are likely  to cause bugs. assuming that a drop over time indicates that developers are not updating the  interface documentation. We highly suspect that this leads to a useful metric to assess  the effort of code commenting.Here. maintenance productivity has been studied extensively.1 COMMENT ANALYSIS  Jiang and Hassan [26] study the evolution of comments over time in the PostgreSQL project. For their study.  However.

 and testability.did not develop it. containing the percentage of  comment lines in the whole program and the percentage of modules with header comments.  the authors apply several metrics. maintainability is  related to understandability. increase the  number of lines of comments without contributing to understandability.  In [28].  In a similar way. analyze costs and benefits of maintainability.    31  . Both  the work of [28] and [29] lack a differentiation between comments with different purposes.  To overcome this problem. for example. However. analyzing  maintainability with metrics requires a more detailed analysis of code comment quality.  For component commenting they measure intra module commenting as the number of lines  with comments divided by the total number of lines in the module. In order to measure those concepts. The number of  lines of comments is thereby considered to be an understandability measure. among them lines of source code including comments. poor documentation can cause a variety of effects ­ ranging from an  increase in time to understand and maintain a software to a complete redesign and rebuild of  the system. again. they  define the overall program commenting ratio as a 2­tuple. only measuring the number of comment lines can not be sufficient  as these lines can contain any arbitrary content not contributing to understandability. Thereby. this indicates the importance of code comments for software maintenance. the number of lines of comments (LC) can not be a sufficient metric to  assess understandability: Commented out code or copyrights. On the one  hand. it is easier to rebuild a system completely than to  understand and modify an existing one. Hence. detailed comment categorisation was proposed in order to  analyse how comments affect understandability of the code [25]. modifiability. Garcia et al. In a worst case scenario. the authors of [29] use the number of lines of comments to calculate metrics  assessing a software system’s maintainability: For system commenting characteristics. and lines of error detection. lines of easy modification.  On the other hand. averaged over all  modules.  lines of comments.

  Weka is open source software issued under the  GNU General Public License . association rules. Weka contains tools for data pre­processing. and visualization.  Git is easy to learn and has a tiny footprint with lightning fast performance. and ClearCase with features  like cheap local branching.It is freely available under GNU General Public License.It has a very large collection of different data mining algorithms. It is also well­suited for developing  new machine learning schemes. so the system is very easy to  use.11 WEKA ­ AN OPEN SOURCE DATA MINING TOOL [24]  Weka is a collection of machine learning algorithms for data mining tasks.  It has the following advantages :­   1.  Thus. It  outclasses SCM tools like Subversion.  2. classification.  4. regression. Perforce. CVS. Git makes collaborative work very convenient and simplified.10 GIT ­ AN OPEN SOURCE VERSION CONTROL SYSTEM  Git is a free and open source distributed version control system designed to handle  everything from small to very large projects with speed and efficiency.    32  .Weka s/w has a user­friendly graphical interface.    2. convenient staging areas.  3.2.As weka is fully implemented in java programing languages.  clustering. it is platform  independent & portable. and multiple workflows. The  algorithms can either be applied directly to a dataset or called from your own Java  code.

 plagiarism detection and static code analysis has been done  for C++ only.    33  .                          3. Proposed Design  The code evaluation.

  Both sections of the document describe the same software product in its entirety. Online judge is a part of the project which also contains the comment classifier.  3.1. The application is used to platform to manage contests.1 SOFTWARE REQUIREMENT SPECIFICATION FOR THE ONLINE  JUDGE    3. of this document is written primarily for the  developers and describes in technical terms the details of the functionality of the application.1. Program: A set of computer instructions capable of performing some function  3.2 Scope  This specification gives the details of the online judge. It explains how users can submit their  codes and get them evaluated. It will  explain the purpose and features of the system. and Abbreviations  1. the algorithms  used in implementation.1 Purpose  The purpose of this document is to present a detailed description of the online judge. It describes the informal requirements and is used to  establish a context for the technical requirements specification in the next section. Plagiarism: Act of copying someone else's work illegitimately  2. functionality of the system. the interfaces of the system.  It highlights the plagiarism detection and static code analysis done by  the judge.1.  34  .3 Definitions.  3. SCA: Static Code Analysis  4. General Description.1. of this document gives an overview of the  functionality of the application. and the constraints under which it must  operate.1. Acronyms. MOSS: Measure of Software Similarity  3.   but are intended for different audiences and thus use different language. Specific Requirements.1.1.1 Introduction    3.  The third section. It also explains how the problem setters can add problems  and manage contests.1.1.4 Overview  The next section.3.

  4. The email­id used for login should be valid. The user should be aware of interfaces. The user must have an internet connection in order to use the web application.  2.SCA and plagiarism testing are supported.3 User Characteristics    1.2 Product Functions  1. Only authorized users should be given the admin rights.4 General Constraints and Features  1. the ones who can manage the contests. the ones who can  participate in the contests and Admin.2 General Description    3.1 Product Perspective  The main purpose of our project is to create a user­friendly web application that can  enhance user’s problem solving and programming skills.2. Contest Management: The admins can create. Code Evaluation: A platform where the user can test his code for the correctness and  adequate algorithmic complexity. Evaluation.  3.   3.  3.  3.The SRS is in IEEE 830 format.User management: The platform supports two user role: User.1.2.  3. Any Operating System   2. Static Code Analysis: User can perform the static code quality check on his/her code. edit and delete contests and problems as  and when required.1.1. Plagiarism Detection: All the accepted codes are checked for plagiarism.1.  3.  4.   5. The user must have a valid email­id and password in order to log into the system.  35  .2.1.  2.    3.2. The application was developed  keeping in mind the increasing use of programmed all around.

Login or signup into the system  b. Grant admin rights  36  . View Submissions  f. edit and delete contests  d.  2. The user has a web browser on the system and an internet connection. Add.5 Assumptions and Dependencies  1.1. edit and delete problems and test data  e. View profile  g.3 Specific Requirements    3.1 External Interface Requirements  3.1.1 User Interfaces  Interfaces should allow a “User” to:  a.3. Check static code quality of a code  Interfaces should allow an “Admin” to:  a. View problems of an ongoing contest  d.3.1. The judge is only available for C++. View profile  g. Edit profile  h. Login or signup into the system  b.1. View upcoming and ongoing contests  c.  3.2.1. View upcoming and ongoing contests  c. Add. Edit profile  h. View Submissions  f.3. Request admin rights  i. Submit solution  e.  3. The user is aware about competitive programming.

2 Code Evaluation  1.3. Processing: The system adds the user in case of signup and in case of login it validates  the user.  2.1.  4. Introduction: Here. Error Handling: In case user doesn’t select the problem properly or there is some other  error.3.2 Hardware Interfaces  Apart from the recommended configuration no other specific hardware is required to run the  software.  3.3 Software Interfaces  Operating system: Any operating system  Tools: Web browser  3.3.  2.  37  . Accepted. Time limit  exceeded or Runtime error.1. Inputs: User submits the code in C or C++.  3.  3. the submitted code is checked for algorithmic correctness and required  algorithmic complexity.3.1. Inputs: For signup.1.  5. Wrong.  3. Processing: The system checks the generated output against the expected output for  predefined test cases and checks if the time and memory used is within predefined limits or  not.2 Functional Requirements  3.  4.1. Outputs: The user can view the site.  5.3. Outputs: The system displays the status: Compilation error.3.1 User management  1.2.1. user gives his personal details and for login. Error Handling: In case of invalid details.1. appropriate message is displayed.2. proper message is displayed. user just gives the  email­id and password. Introduction: This explains the login/signup functionality.

  3.1.3.  2.  5.  3.3.  5.  3.3 Contest Management  1.  3. Processing: cppcheck checks the code.  2. Outputs: Database is updated and corresponding updates become visible. In case of  delete. Inputs: Accepted codes are the input.  4. Inputs: User submits the code in C++.  2) Reliability  The application should not crash under any circumstance such as a user showing entering  some invalid details during signup.2.1.5 Static Code Analysis  1.4  Plagiarism Analysis  1. edit. Introduction: All the accepted codes are checked for plagiarism.2. the admin selects the delete option.2.3 Non­Functional Requirements  1) Performance  Correct result should be displayed to the user as fast as possible on to the terminal.1. Processing: Action is taken as per user’s input.3.3.  4. the admin can view.  3. Inputs: In case of new or edit.  3) Portability  38  .  4.  5. Error Handling: Appropriate message is shown in case of valid inputs.1. Error Handling: Error handling is done in case of any fault.  3. Introduction: Here. Processing: The codes are analysed using Measure of Software Similarity. the admin enters the details of the contest. add or delete contests/problems  2. Introduction: User can check the static code quality of the code. Error Handling: Error handling is done in case of any fault. Outputs: Static code errors are displayed.3. Outputs: Plagiarised files are shown.

2 COMMENT CLASSIFICATION    3.4 Other Requirements    3. the revision number. They can provide information for the developer and be used for an API of  the project.   •  Section : A section comment summarizes a larger part of a class that covers one functional  aspect.1 COMMENT CATEGORIES  After analysing and referring [25]. it can  provide information about the author of the class.1.  •  Inline : Developers use inline comments to comment on code within a  method/structure/class definition. It describes the parameters required for interfacing.  3. Interface  comments are therefore located either before a method/field definition or in the same line as  a field definition.  4) Interoperability  It can work on any web browser.    3.   39  . Header comments are mostly found in the beginning of the code. we have classified the comments into the following  categories :­  •  Header :  It can include the information about the copyright or the license of the source  code file or it can give an overview about the functionality of the class. It usually addresses several methods (or fields) together which belong to the same  functional aspect.2. In addition.The application is portable and runs on any machine with good internet connection.1. on any of the operating systems.4.    •  Interface : An interface comment describes the functionality of a method or a field. the peer review status  etc. Inline comments describe implementation decisions or  other details.1 Database  We will use sqlite3 as the database in the development phase.

 “hack” or “fixme”  specialchars  real  percentage of special characters in the code  40  . a note a about a bug that needs to be fixed. Often code is temporarily commented out for debugging purposes or for potential  later reuse.2.*****) multiple  times  length  real  length of comment (in words)  task  boolean  true if it contains “todo”.   •  Task : A task comment is a note for the developer about an unfulfilled task.•  Code : Commented out code is source code that developers want to be ignored by the  compiler.2 EXTRACTING FEATURES FOR CLASSIFICATION  We are using the Weka tool for classification.  3.1: MACHINE LEARNING FEATURES FOR COMMENTS  FEATURE  TYPE  CRITERIA  copyright  boolean  true if it contains the word “license” or “copyright”  header  boolean  true if it contains the word “author”  section  boolean  true if it contains separator strings (­­­­. It either  contains a remaining todo./////. or a remark about an  implementation hack.                                    Table 3. We use 10 features for machine learning as  indicated in Table 3.1.

1 PROGRAMMING LANGUAGES AND TOOLS  Programming languages used :­  a.    4. Javascript  b. HTML. CSS.code  boolean  true if it contains code  insidemethod  boolean  true if it inside a method/class/struct  parenthesis  real  number of outstanding open parenthesis  first  boolean  true if it is the first comment of the file    We classify comments in Weka using multiple machine learning algorithms and analyse the  results.                4.Ruby  41  . Frontend: Ruby. Python. Backend: C++. Implementation  This chapter deals with the implementation details of the project.

The “Devise” ruby gem was used for implementing login/signup.1 INTERFACES FOR THE “USER”  a.1. Interface of the login  page is as shown in Figure 4. cppcheck: For static code analysis  b.2. Codemirror: An open source editor  Framework used :­  Frontend uses Ruby on Rails web application framework.2.2 COMPONENTS  4.  42  .2. Weka: For machine learning  c.Tools used :­  a.1: SCREENSHOT OF LOGIN PAGE  b.1.    4.1 IMPLEMENTATION OF INTERFACE AND CODESHELL  The following interfaces were implemented using Ruby on Rails :­  4.   Figure 4. Interface of the signup page is as shown in Figure 4.

3: SCREENSHOT OF HOME PAGE  d.  43  . View problems of an ongoing contest  Interface of the contest page is as shown in Figure 4.2: SCREENSHOT OF SIGNUP PAGE  c. View upcoming and ongoing contests  Interface of the home page is as shown in Figure 4.  Figure 4.      Figure 4.4.3.

5.5: SCREENSHOT OF SUBMIT PAGE  f. a versatile text editor  implemented in Javascript for the browser.Interface of the submit page is as shown in  Figure 4.  Figure 4.4: SCREENSHOT OF CONTEST PAGE  e.        Figure 4. View Submissions  44  . Submit solution  The editor portion of the interface uses Codemirror[32].

8.6. Edit profile  Interface of the edit profile page is as shown in Figure 4.6: SCREENSHOT OF SUBMISSIONS PAGE  g. View profile  Interface of the profile page is as shown in Figure 4.7.    Figure 4.      Figure 4.Interface of the submissions page is as shown in Figure 4.7: SCREENSHOT OF VIEW PROFILE   h.  45  .

  Figure 4.  46  .8: SCREENSHOT OF EDIT PROFILE   i.9: SCREENSHOT OF REQUEST ADMIN RIGHTS PAGE   j.9. Check static code quality of a code  Interface for checking code quality is as shown in Figure 4. Request admin rights  Interface of the admin request page is as shown in Figure 4.      Figure 4.10.

  Figure 4.  47  .11: SCREENSHOT OF CREATE CONTEST PAGE  d.  b.12.   Figure 4. Edit contest details  Interface of the edit contest page is as shown in Figure 4.2 INTERFACES FOR THE “ADMIN”  a.11.10: SCREENSHOT OF STATIC CODE QUALITY CHECK OPTION  4. Add new contest  Interface of the new contest page is as shown in Figure 4.  c. Login page  Same as for “user”.2. Signup page   Same as for “user”.1.

 
Figure 4.12: SCREENSHOT OF EDIT CONTEST PAGE 
e. View upcoming and ongoing contests  
Same as for “user” but also has a delete option. 
f.

View problems of ongoing contest 
Same as for “user” but also has a delete option. 

g. Add/Edit problem 
Interfaces for adding is same as for editing problems as shown in Figure 4.13. 

 
Figure 4.13: SCREENSHOT OF EDIT PROBLEM PAGE 
h. View profile 
Same as for “user”. 

48 

i.

Edit profile 
Same as for “user”. 

j.

Grant admin rights 
Interface of the creating admin page is as shown in Figure 4.14. 

 
Figure 4.14: SCREENSHOT OF ADDING ADMIN 

4.2.2 INTEGRATION OF CLIENT AND SERVER 
4.2.2.1 USING AWS S3 BUCKETS 
Amazon Simple Storage Service (S3) helps in integration between the client and the server.  

 
Figure 4.15: SCREENSHOT OF LIST OF S3 BUCKETS USED 
The S3 buckets created (as shown in Figure 4.15) and their purposes are as follows :­ 
a. coderunneraccepted:  The codes which get accepted after evaluation are uploaded 
to this bucket for Plagiarism Detection. 

49 

b. coderunnersubmissions:  As soon as a user submits a solution, it is uploaded to the 
bucket in with the following filename format : 
username#contestcode#problemcode#timestamp#time_limit#memory_limit#.cpp 
c. coderunnerusers:  This bucket contains the response file for each user with the 
name in the following format: 
username_response.html 
d. coderunnerdetails:  It contains the contest and problem data files in the following 
format: 
TEST DATA:  problemcode#contestcode#data#.zip  which contain an Input and Output 
folder. 
CONTEST DETAILS:  contestcode#metadata#.txt 
e. cppchecksubmissions:  This bucket contains the codes submitted for static code 
analysis in the following format: 
username#timestamp#.cpp 
f.

cppcheckresponses:  This bucket contains the responses generated after static 
code analysis in the following format: 
username_response.html 

4.2.2.2 USING PYTHON SCRIPTS AT THE BACKEND 

50 

16: INTERACTION OF PYTHON SCRIPTS IN BACKEND   The python scripts used in backend have been described below.py.py  It downloads the user submissions from coderunnersubmissions bucket and saves it to a  local submissions folder from where monitor. The interactions between  the scripts has been shown in Figure 4.  download.  InitiateJudge.py  51  .py can access it. download.py  Initialises the contest.  monitor. Downloads the test data of problems from coderunnerdetails bucket  and creates the folders needed for the codechecker to function properly.py  extractor. It also resets the  response pages of users in coderunnerusers bucket.py   Starts other auxiliary scripts which include extractor.  Figure 4.16.py and monitor.

  4. It fetches submissions from local submission folder  and sends it to codechecker where it gets evaluated.3 IMPLEMENTATION OF CODECHECKER  Basically. the phases involved in functioning of a  codechecker (as shown in Figure 4.2.cpp ­o filename)  To ensure  limits  system(ulimit ­t time_limit ­m memory_limit; file_to_be_executed)  To compare  files  system(diff generated_output expected_output)  Table 4. It receives a verdict from codechecker  which it converts to html format and appends to user response file and uploads it to  coderunnerresponses.This script is the heart of codechecker.17) are:  Phase 1:  Checking for Compilation Errors during Compilation  Phase 2:  Running the source code with hidden test cases  Phase 3:  Ensuring the execution completes within time and  memory limits  Phase 4:  Checking for Runtime Errors  Phase 5:  Comparing Generated Output with Actual Output  Phase 6:  Deleting user­generated files  Figure 4.1 COMMANDS USED IN CODECHECKER  PHASE 1: Compilation of User­Code and checking for Compilation Error  52  . It does the processing of submissions parallely and uses mutex to  lock “codechecker” which is the common resource for all the threads.17: ORDER OF STEPS IN CODECHECKER   PURPOSE  COMMAND  To compile  system(g++ filename.

  PHASE 5: Comparison of output  After successful execution of the user­code. Illegal instruction. It is impractical to manually design them. When a runtime error comes up.  PHASE 3: Ensuring Time and Memory limits  Time and Memory limits are specific to every problem and the user­code must finish  execution within those limits for successful termination. then it is executed.  PHASE 2: Running source code with hidden test cases  After successful compilation. Standard GCC compiler is used in our application. A separate compilation  error file is generated for every source code. Different conditions can cause  runtime errors. test scripts are written to automate this process. Designing test cases is a tedious task.  Phase 4: Checking for Runtime Errors  Runtime errors come up while execution of the program. The most common causes are : Accessing illegal memory.  File size limit exceeded etc. the source code is executed using predefined test cases. If  the source code is compiled successfully.  This signal is handled by a signal handler which terminates the execution and displays the  Runtime error to the user. If the generated outputs  53  . the program raises a signal. the generated output for different test cases are  compared to the expected outputs for the respective test cases. As a  consequence. then for correctness  with the help of predefined test cases. These limits are ensured by using  ulimit command with '­t' and '­m' flags for time and memory limits respectively.  These test cases are hidden from the user.The program uploaded by the user is first checked for compiler errors. Otherwise the user is provided  information about the compilation error and the execution is aborted. They are used to test the correctness of the  code.

 the user­code is considered to be correct otherwise it is  considered wrong. log_files etc.cpp:  This file is invoked by the server end to start checking the code.  This file then executes the language specific file – Cplusplus. It  also contains the code which is common to all the languages.exactly match the expected outputs.  Working of Code­checker:  The Code­checker has been divided into multiple files.cpp. This is done in order to make the  application scalable.   PHASE 6: Deleting user­generated files  While Compilation and Execution. files specific to those  languages (like cplusplus. Currently there is support for C++. multiple user­specific files are generated.  54  .1.  The system call invokes function corresponding to the phase as listed in Table 4. These include  compilation_error_files. This file then executed  codechecker. This executes the user­code with the  predefined test cases and ensures the time and memory limits.  Invoker. generated_output. But the codechecker can easily be  scaled to include support for other languages like python and Java.cpp) have to be added.cpp:  This is language specific file.cpp:  This file is generic. These files need to be deleted after  completion of execution. The operations provided by  this file include comparison of output. This contains the code to identify the extension of the user­code file. To add support for other languages.  Codechecker. deleting user­generated files and displaying the result.cpp  Cplusplus.

18.18: ORDER OF EXECUTION IN CODECHECKER   The order of execution of these files has been shown in Figure 4.  Figure 4.2 CODE SNIPPET USED FOR EXECUTING CODE        pid_t pids[MAX];  int status;  for(int i=0; i<files_count; i++)  {  pids[i] = fork();    if(pids[i] < 0)  {  perror("Process could not be created");  abort();  55  .   Execution of User­Code  The user code is executed with various test cases.  Code Snippet:    Table 4. Each test case is handled by a separate  process.

rb  Configure set to use filter. It uses cpp. executable_name.4 IMPLEMENTATION OF PLAGIARISM DETECTION    Figure 4. executable_name) == ­1)   abort();  exit(20);  }   else  {  waitpid(­1. problem_name.    56  .19: SOURCE CODE FILES USED FOR PLAGIARISM DETECTION   We modified the open source project [33] for implementing Plagiarism Detection. Following  are the source code files used (also depicted in Figure 4.conf which contains keywords specific to c++ and how comments are  specified in c++.&status. A configure set is a keywords set+comment type specific to the  language.}  else if(pids[i] == 0 )  {   if(execute_file(i.  contest_name.0);  }  }    4.2. argv[4].19):   filter_confset.

      4.rb   This file filters the source file.2.rb  Implementation of Robust Winnowing. It uses winnower.  detect_plagiarism. It removes whitespace. Generates fingerprints from filtered text.py  It runs detect_plagiarism. t is the window size from which at least one  fingerprint is chosen and q is the prime number used for hashing. Find common fingerprints and  print percentage similarity on the basis of common fingerprints.rb file on all pairs of accepted solutions and prints those who have  a percentage similarity over a threshold value(currently set to 50%). k is the size of fingerprint. capitalization.rb  Read the conf file to get parameters for Winnower.conf which contains the  values of k.rb  Filter text from the two files and generate their fingerprints.  robust_winnower. punctuations and  identifiers. Keywords are always the same.rb  A rolling hash function similar to Rabin Karp Algorithm  winnower_confset.  plagiarism_detector.t and q.5 INTEGRATION WITH CPPCHECK  57  .  rollhasher.noise_filter. so need to be filtered out.

20: SOURCE CODE FILES USED FOR STATIC CODE ANALYSIS USING  CPPCHECK   Following source code files (shown in FIgure 4.py  cppdownload.py  This script fetches submissions from local cppsubmission folder and sends it to cppcheck  tool where its static analysis is done. It does the  processing of submissions parallely and uses mutex to lock “cppcheck” which is the common  resource for all the threads.  monitor.py can access it.20) were implemented and used for static  code analysis:  InitiateCppcheck.  Figure 4. It receives a verdict from cppcheck which it converts to  html format and adds to user response file and uploads it to cppcheckresponses.py and cppmonitor.py  It downloads the user submissions from cppchecksubmissions bucket and saves it to a local  cppsubmissions folder from where cppmonitor.  58  .py   Starts other auxiliary scripts which include cppdownload.

inline    4.false.  4.6 COMMENT CLASSIFIER  4.2 PORTION OF THE TRAINING DATASET  14.2.6.'exceptiondemo_496'.  4.8.2.2.34.false.false.false.2.false.3 GOOD VS BAD COMMENTING  After classifying.7.7 USING GIT   We maintained a GIT Repository for working collaboratively:  59  .false.4.6.arff file) to be used by Weka.false.2.     4.false.5 * Method comments < Number of inline comments < 4 * method comments.false.false.5. extracted features from those  comments and created our own training data (.13.inline  16.false.2.false.false.6.  2. There should be at least 2 ­10 section comments to show modularity in the code. 0.  Table 4.'exceptiondemo_478'.2 CREATING .1 FINDING DATASET   We picked up the C++ source code datasets from the LLVM[30] and BOOST[31] libraries.4.false.  5.false.method  15. we can tell about the quality of commenting from the results of the  classification.  3.false. A code is said to have good quality source code comments if :­  1.false. ARFF  We picked up the comments from the above datasets.2.  Large number of inline comments would indicate more redundancy and less number  of inline comments would indicate poor documentation.true.false.true.1.2. A portion of the  dataset has been shown in Table 4.'exceptiondemo_370'. There should be as many method names as many methods at least.false. Header comment must be present. There should be least number of task and code comments.

  Figure 4.com/tussharsingh13/coderunner  (  shown in  Figure 4.21: GITHUB REPOSITORY USED FOR THE PROJECT   The codebase is available at  h   ttps://github.21).                5. Observations and Results  60  .

1 RESULTS OF CODECHECKER  Following kinds of responses are given by the codechecker :­  1. When the code fails some test cases. it  gives the wrong answer (WA) status  as shown in Figure 5.5. When the code passes all test cases.2:  61  .1:    Figure 5.1: WHEN CODE GETS ACCEPTED  2. it  gives the accepted (ACC) status as  shown in Figure 5.

 it  gives the compilation error (CE)  status as shown in Figure 5.3: WHEN CODE GIVES COMPILATION ERROR  62  .3:    Figure 5.2: WHEN CODE GIVES WRONG ANSWER  3. When the code fails during compilation.    Figure 5.

5:  63  .4. When the code exceeds time limit on some case.4: WHEN CODE EXCEEDS TIME LIMIT  5. it  gives the runtime error (RE) status as  shown in Figure 5.4:    Figure 5. it  gives the time limit  exceeded (TLE) status as shown in Figure 5. When the code gives runtime error.

5: WHEN CODE GIVES RUNTIME ERROR    5.  Figure 5.6:    64  .2 PLAGIARISM DETECTION RESULTS  The MOSS based Plagiarism detector gave the results as shown in Figure 5.

3 CPPCHECK RESULTS  The online judge gives an output as shown in Figure 5.7: RESULTS AFTER CPPCHECK ANALYSES THE CODE      65  .6: RESULTS AFTER PLAGIARISM CHECK    5.    Figure 5.7 after cppcheck has  analysed the code.  Figure 5.

54  24.72  100  24.94  84.4 COMPARISON WITH DIFFERENT ALGORITHMS  Table 5.1.5.91    J48 gives the best results as summarised in Table 5.                    66  .1 COMPARISON OF DIFFERENT MACHINE LEARNING ALGORITHMS    J48 (Trees)  NaiveBayes  (Bayes)  Logistic  (Functions)  ZeroR  (Rules)  IBk  (Lazy)  Percentage  Split  93.74  91.75  Training set  90.27  90.66  85.57  84.88  27.74  100  96.91  Cross validation  88. Others either  overfit over the data set or have less accuracy.85  87.

 AWS S3 buckets are unable to handle the load.  ● The online judge lacks security.   ● When the number of download/upload requests  are high i. code evaluation. we were able to implement an online judge which allowed contest  management.  67  . the  number of false positives during plagiarism detection increase. static code quality analysis and plagiarism detection.  ● The online judge is currently implemented for C++ only.  We were also able to classify comments with a decent accuracy. it needs training every time the data is  changed. Conclusion and Future Work  This chapter discusses the limitations and future scope of the project and finally  summarises the conclusion.2 LIMITATIONS  Following are the limitations of the project :­  ● False positives for section comments increase.    6. if training dataset includes  comments present inside struct/method/class.  ● J48 is not an online algorithm.  ● For algorithms having conventional implementation like Floyd Warshall.    6.6.  ● MOSS has a limitation that  it can be broken with change in the structure if  there are several ways of writing  the same logic.e around 1000 per  second.1 CONCLUSION  Thus.

  thus maximizing efficiency. reference comments can be added which are  used to refer to the existing codes and libraries used. IP Tables can be added to the online judge to  make it secure. the number of computing instances scale up as per the load. Python.  ● The interface can be made more user friendly and advanced. Java etc. It can act as a  platform for problems as well i.  ● The support for other languages like C.  ● Automatic test case generation can be added using libraries like Networkx for  graph based problems.  ● Advanced sandboxing techniques like SECCOMP can be used to provide  high level security.   ● Elastic Cloud Computing (EC2) service can be used in place of S3 so that  computations happen directly on the cloud and the time wasted in  download/upload on the server end is saved. In EC2. can be provided. This will make the judge  efficient.  ● Usefulness and coherence of the comments can be analysed after  classification by using various techniques like the  parsing the function name  and the comment.  ● Security features like chroot.  ● The judge currently provides a platform for contests only.6.  68  . and then evaluating the percentage of common words  between the two to assess the usefulness of the comment and its coherence  with the code.e it can maintain a set of problems for practice  as well.3 FUTURE SCOPE  ● Another category of comments.

 pg 7. Paris. Aws. U.ht ml  [7] ”Does this competitive programming really helps in industry”.com/ec2/  [15] J Paul Gibson.cshe. 217.  [6] Kaushik MV (2013). Retrieved 2014­03­03.  “Learn to code by Competitive Programming”.  [16] Saul Schleimer. 5­21.edu.hackerearth.com/content/python­scripts­replacement­bash­utility­scripts  [12] “Amazon EC2”. Available at: http://aws.REFERENCES    [1] Shaun Bebbington (2014). 2003. Available at:  http://blog.linuxjournal. Available at: https://www.com/questions/46837/does­this­competitive­programming­re ally­helps­in­industry  [8] ”About Ruby”. "Web Applications". et. Nilsson. Emanuelsson.  [17] “Overview of Plagiarism Detection Software”. Available at:  http://www.com.  Available at: http://readwrite. CA. June 9­12. "What is coding".al.au/assessinglearning/03/plagsoftsumm1.  [2] Shaun Bebbington (2014).org/en/about/  [9] “What is Rails“.ruby­lang.com/2013/05/31/programming­core­skill­21st­century  [4]Penny Grubb and Armstrong Takang. “A Comparative Study of Industrial Static Analysis  Tools“. “Software Reuse and Plagiarism: A Code of Practice. Daniel. Vol.  [5] Nations. pp.  Available at:  http://www.com/blog/2014/7/ruby­on­rails­what­it­is­and­why­we­use­it­for­w eb­applications  [11] Richard Delaney (2013). 2009.html  [18] P.  [13] “Amazon s3”.  69  . San Diego. France.com/2013/09/competitive­programming­getting­started_11.ruby­lang. Retrieved 20 January 2014. About. Electronic Notes in Theoretical Computer Science.” in  ITiCSE’09. "What is programming". Available  at:  http://www. Software Maintenance: Concepts and  Practice.amazon. 2008.com (2014­07­01). 120­121. Available at: http://aws. Available at: Amazon Elastic Compute Cloud (Amazon EC2).amazon. 2003.  Cloud Computing Servers.com/s3/  [14] “Amazon EC2”. Retrieved 2014­03­03. Retrieved on  2014­07­01. “Why Programming Is The Core Skill Of The 21st Century”. Available at: https://www.bitzesty. SIGMOD 2003.amazon. “Python Scripts as a Replacement for bash scripts”.  [3] Lauren Orsini (2013) . Available at:  http://discuss.codechef.unimelb. July 6–9.org/en/about/  [10] “Ruby on Rails: What It is and Why We use it for Web Applications”. “Winnowing: Local Algorithms for Document  Fingerprinting.

org/releases/3.xz  [32] Codemirror. 2006.  [21] M. ACM. Hassan. Available at:  http://softlayer­sng. Mauborgne.49. Maintainability as  a Key Factor in Maintenance Productivity: A Case Study. Addison­Wesley. 83 ­ 92.  Monniaux.ac. CASCON ’93. pages 87–93. June 7­14. 1992. Cousot. Improving the Design of Existing Code.0/boost_1_49_0.  pages 337–344. Aalto University. ACM  Conf. and C. R.  [22] B. Nielson. Available at: https://github. Principles of Program Analysis. Austin. 2014  [24] “Weka 3: Data Mining Software in Java”. 20­21 May.tar. Barranco Garc ́ ıa and Juan Carlos Granja Alvarez.src. Hartzman and Charles F. Available at:  http://llvm. MSR ’06. “Quality Analysis of Source Code Comments”. P. F. ICSM ’96.sourceforge.  Springer­Verlag New York. Hankin.net/  [33] timfel/moss. 1993.  [29] Paul Oman and Jack Hagemeister.  [28] Manuel J. Nielson. Degree Programme in Computer Science and Engineering. Miné. San  Diego. pp.dl. San  Francisco. Cousot.  1999. 1996.  [27] Carl S. CA. A. on Programming Language Design and Implementation (PLDI 2003). J.tar. 196­207. 2003  [23] Elias Pentilla.[19] H. IEEE. D. Refactoring. 2013  [26] Zhen Ming Jiang and Ahmed E. In Proceedings of the 1992 Conference on Software Maintenance. 2013 IEEE 21st International Conference on. School  of Science.net/project/boost/boost/1. Metrics for Assessing a Software System’s  Maintainability.  [20] S.rb.0/libcxx­3. Available at: http://codemirror.nz/ml/weka/  [25] Daniela Steidl.rb    70  .0. 1997. R. In Proceedings of the 1993  Conference of the Centre for Advanced Studies on Collaborative Research: Software  Engineering ­ Volume 1. Fowler. Available at:  http://www. Muchnick. et. pp. Blanchet. Maintenance productivity: Observations  based on an experience in a large system environment. 1999.” Proc. Examining the Evolution of Code  Comments in PostgreSQL. Advanced compiler design and implementation.waikato. In Proceedings of the 1996  “International Conference on Software Maintenance. Feret. Program  Comprehension (ICPC). “A Static Analyzer for Large Safety­Critical Software.  Master’s Thesis.6.6. X. California.  [30] Boost library dataset.g zboost  [31] LLVM library dataset. Rival. Morgan Kaufmann  Publishers. pages 179–180. In Proceedings of the 2006 International Workshop on  Mining Software Repositories. pages 138–170.cs. “Improve C++ Software Quality with Static Code Analysis”. al.com/timfel/moss. L.