E1853 write unit tests for menu: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
(Fixed image formatting, oof.)
(Updated motivation bit to explain that menu's underlying mechanics are complicated.)
Line 37: Line 37:


====Motivation====
====Motivation====
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes occur.
Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.

Revision as of 15:14, 27 October 2018

E1853. Write Unit Tests for Menu.rb


Introduction

Team

Zhewei Hu (zhu6) (mentor)

  • Joe Giallo (jfgiall2)
  • Senthil Sankar (ssankar9)
  • Vato Maskhulia (vmaskhu)

Task and Results

For this project, our task was to achieve at least 90% code coverage on the menu.rb model. We ended up with 100% code coverage, and mutation testing on our test suite yielded . We believe this is a demonstration of the exemplary thoroughness of our test suite, and that these changes should be pulled in to the Expertiza master branch. This image shows our test suite running.

This image shows an abbreviated version of /coverage/index.html page which is generate after running rspec. It shows us achieving 100% code coverage.

This image shows our mutation score. Of 531 mutations, we killed 479 and 52 were left alive. This is a mutation coverage of 90.21%. While we will leave it to the TA to verify this claim, examination of the living mutants shows that many of the mutations replaced lines with equivalent code (fetching a variable as opposed to just accessing it, or substituting equivalent variables for one another). Similarly, killing the remainder of the mutants would require binding our tests to implementation, to ensure that particular methods get called. As such, we believe our mutation score is quite good.

The files involved in this commit are:

  • menu.rb - the model being tested. Contains the menu class and the node class.
  • menu_spec.rb - the spec file for menu. Contains all of our tests.
  • spec_helper.rb - we added a limit on how long tests can take to run, as one of the mutations which was generated had infinite runtime.

Background

Expertiza

Expertiza is an open source web application based on Ruby on Rails framework. It provides instructors with the ability to create, customize, and assign projects. It provides students with the ability to form teams and collaborate on these assignments, submit those assignments, as well as review others and be reviewed on their work.

Menus and Nodes

Menus (and their sub-component, Nodes) provide the foundation for navigation within the Expertiza platform. With the role of the user as input, they present to the user all possible options a user of their role can have from the top of each Expertiza screen. The Menu is critical for navigating Expertiza and exposing the correct functionality to the correct users.

Motivation

Testing is critical to ensuring that software is functional. A robust test suite which tests the returns of query messages and the side effects of command messages will help expedite development by quickly ensuring nothing has broken when changes are made. While manually testing the behavior of the menu is quite straight-forward, automating the underlying mechanics of the menu, which are abstract and generic, is a good best practice to prove that the system for generating menus is not broken.