CSC/ECE 517 Fall 2013/oss E814 vd: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 40: Line 40:


===remove_redundant_edges and remove_redundant_vertices===
===remove_redundant_edges and remove_redundant_vertices===
The remove_redundant_edges method also suffered from high code complexity, so we extracted a new method called find_redundant_edges to reduce such complexity.  The screenshots below show the contents of the original code (on top) and the extracted method code (on the bottom).  A find_redundant_vertices method was also extracted from remove_redundant_vertices.  It should be noted that in the future, the edges and vertices methods should probably be combined, but such was outside the scope of our project (given the many other refactoring needs).
The remove_redundant_edges method also suffered from high code complexity, so we extracted a new method called find_redundant_edges to reduce such complexity.  The screenshots below show the contents of the original code (on top), the changed code with the extracted method, and the extracted method code (on the bottom).  A find_redundant_vertices method was also extracted from remove_redundant_vertices.  It should be noted that in the future, the edges and vertices methods should probably be combined, but such was outside the scope of our project (given the many other refactoring needs).


===search_edges===
===search_edges===

Revision as of 22:45, 30 October 2013

Expertiza is a web application that supports peer-review for a variety of entities. As it is still evolving, expertiza has several areas that require work. Among these include areas that require refactoring existing code to improve code quality. The graph_generator.rb file is one such area. This write-up describes our refactoring decisions for this file.

Background

The graph_generator.rb file an automated metareview feature responsible for parsing the test from a review and creating a graph of the content. This file was plagued with several cases of duplication and a very high complexity. We attempted to identify areas in need of refactoring and fix as many of these areas as possible. In the rest of this page, we go method-by-method to describe our changes to the original file. After doing so, we describe the improvements (based on Code Climate's metrics) we achieved. Finally, we identify areas that proved quite problematic for our assignment.

Changes by Method

generate_graph

tagged_token_check

The first change that can be seen within this method is the extracting of code that adds on to a previous vertex or creates a new one, all based upon the part of speech defined of the tokens encountered while parsing the review. We called our extracted method tagged_token_check. BY extracting this method, we were able to reduce duplication (since such similar code occurred four times in the method for tokens that are nouns, adjectives, adverbs, and verbs. Since the code contained nested if statements, we also were able to reduce the complexity of the method. Screenshots of the code before and after refactoring are included below. The top picture is the code before refactoring, the middle is the code after, and the bottom is the code within the extracted method.









update_pos_property

The next extracted method in generate_graph is called update_pos_property, and it helps reduce duplication (previously, there were two occurrences of the extracted code) and complexity (the extracted code removes a nested if statement). The pictures below, from top to bottom, show the code in the original file, the generate_graph code changed by extracting the method, and the extracted code for the extracted method.









add_nonexisting_edge

As seen in the code for update_pos_property, add_nonexisting_edge was further extracted from update_pos_property to reduce complexity.





remove_redundant_edges and remove_redundant_vertices

The remove_redundant_edges method also suffered from high code complexity, so we extracted a new method called find_redundant_edges to reduce such complexity. The screenshots below show the contents of the original code (on top), the changed code with the extracted method, and the extracted method code (on the bottom). A find_redundant_vertices method was also extracted from remove_redundant_vertices. It should be noted that in the future, the edges and vertices methods should probably be combined, but such was outside the scope of our project (given the many other refactoring needs).

search_edges

search_edges_to_set_null

print_graph

find_parents

set_semantic_labels_for_edges

Results







Appendix

Issues

Resources

References