Traversing Syntax Trees to Redefine Software Complexity
Persistent URL
Author(s)
Normile, Jeff
Date Issued
May 3, 2024
Abstract
Given the shortcomings of conventionally used software complexity metrics (LOC, Halstead's metrics, cyclomatic complexity, and cognitive complexity) there is a need for a new complexity metric that more closely approximates the human understanding of what makes a piece of software complex. Using the abstract syntax tree as a means for defining and quantifying the pieces of logic that make up a source code file, as well as the nested relationships between those pieces of logic, allows for a novel way to quantifiably measure what is an otherwise vague and abstract concept. Comparisons between this novel suite of metrics--collected and reported by an open source tool called plexity--and the aforementioned conventional metrics suggest that this approach has the potential to overcome some of the limitations of preceding complexity metrics. An experimental analysis applying this tool to a large, representative piece of open source software (vscode) further sheds light on the utility provided by the plexity tool and the new framework for considering software complexity that it presents. Perhaps most significantly, this perspective on complexity allows developers to apply complexity metrics to a category of languages (JSON, YAML, and TOML, to name a few) that have previously been incapable of being examined using most conventional complexity metrics, allowing researchers and developers alike to more wholistically consider the complexity of the entirety of our software (including configuration, build/deploy workflows, and dependency management) and not just the core logic that drives it.
Major
Software Engineering
Honors
Software Engineering, 2024
First Reader(s)
Kapfhammer, Gregory
Other Reader(s)
Luman, Douglas J.
Department
Computer and Information Science
Type of Publication
Senior Project Paper
File(s)![Thumbnail Image]()
Name
Jeff Normile Senior Thesis.pdf
Size
380.46 KB
Format
Adobe PDF
Checksum (MD5)
9393591bcaef2119cda5c4a8b658ecc5