Software Systems

Completed

EdgeCase

Timothy contributed breadth-first-search pathfinding, the Qt desktop interface, automated tests, team coordination, and CSV and HTTP/JSON ingestion within a five-person C++ software-engineering project.

EdgeCase wordmark beside a fan of connected blue lines.
Outcome
Delivered a test-backed desktop application for loading or generating people, building weighted top-N similarity connections, visualizing the graph, and finding degrees of separation.
Timothy’s contribution
Timothy contributed the BFS pathfinding workflow, Qt interface, automated tests, team coordination, and data ingestion through local CSV and HTTP-delivered JSON.
Role
Software Engineering Team Member
Institution
Boston University EC327 Introduction to Software Engineering
Date
Fall 2025
Academic term
Fall 2025
Team
5 people
Technologies
C++17, Qt6, CMake, GoogleTest, nlohmann_json, cpp-httplib, OpenSSL
Methods
Breadth-first search, Weighted similarity calculation, Directed top-N graph construction, CSV ingestion and export, HTTP/JSON ingestion, Automated unit testing

Problem and constraints

The project turns mixed person attributes into a graph that remains understandable and explorable. Each node can include graduation year, region, operating system, engineering focus, study time, course load, favorite colors, hobbies, and languages. Weighted similarity converts those values into ranked connections, and the user-selected top-N value controls graph fan-out.

The repository's public description defines these top-N relationships as directed: a connection from one person to another does not guarantee the reverse connection. The case study preserves that definition and describes BFS only in terms of the connections the implementation explores; it does not claim that every edge is reciprocal.

Timothy's role

Timothy worked as one member of the five-person software-engineering team. His approved contribution areas are BFS pathfinding, the Qt desktop interface, automated tests, team coordination, and CSV or JSON data ingestion. The finished application is presented as a team result.

Team composition

The source archive names five team members: John, Tim, Dylan, Cat, and Yechan. Work spanned core C++ domain types, similarity and graph algorithms, file and network ingestion, desktop visualization, data management, and tests.

C++ architecture and data flow

The CMake project requires C++17 and separates the reusable core from the optional Qt6 GUI target. Core source files compile into both the desktop application and the GoogleTest executable, allowing algorithm and data behavior to be exercised without the interface.

The Person model and enumerations represent the nine compared attributes. A common PersonReader interface supports concrete CSV and JSON readers. The CSV path parses local files; the JSON path uses cpp-httplib with OpenSSL support to request JSON over HTTP and nlohmann_json to parse the response. A CSV writer persists the in-memory people collection.

PersonHelper coordinates the selected reader, the in-memory person cache, similarity calculation, graph requests, and CSV output. The Qt6 widgets call that core layer for loading, generation, weight changes, connection queries, pathfinding, add/remove actions, and saving.

Similarity graph and breadth-first search

SimilarityCalc compares nine attributes with configurable weights and ranks each person's strongest matches. Graph construction retains the top-N connections requested by the user, producing the directed similarity structure described in the project README.

For pathfinding, the implementation uses a queue and parent tracking. Starting from one person, BFS explores the top-N connections associated with each encountered node, records how each new node was reached, and reconstructs a path when it reaches the destination. Within the connection structure traversed by the implementation, this produces the shortest path in number of edges. Missing people or an unreachable destination return an empty path.

The Qt interface exposes the same operation as “Degrees of Separation” and highlights a returned path on the graph. This keeps the algorithm in the core layer while the GUI handles input, status, and visualization.

Automated tests and engineering tradeoffs

The GoogleTest target compiles against the non-GUI core. The archive includes tests for BFS paths, weighted similarity, person helpers and generation, CSV parsing, person ingestion, CSV writing, JSON parsing, and JSON-to-person conversion.

That separation gives graph and data behavior a direct test path even when Qt6 is unavailable. CMake makes the GUI conditional on Qt6 while still configuring the unit-test executable around the reusable core and its OpenSSL, HTTP, JSON, and GoogleTest dependencies.