CompSci 590
Spring 2026
Software Development Studio

Individual Onboarding Project: Maze Search Algorithms

This project is intended to be an introduction to the course's procedures and to help you practice improving your coding process and design. It will not be explicitly graded but, instead, serve as a starting point for us to see your coding strengths and weaknesses (and how well you follow directions). Thus, you will get the most out of this assignment by putting in a good faith effort.

You will be given code that implements several maze search algorithms:

Your goal is to improve the design of the code in the model package, not its functionality, and practice using GIT effectively in two iterations:

  1. Planning: Update your development environment, evaluate the code to understand how it works (and find a bug), then make refactoring and test plans
  2. Refactoring: Take time to use GIT more intentionally to manage your project and implement your plans

You will be provided a GIT repository, maze_NETID, hosted in the course's Gitlab group to work on this project.

Submission

You will not "submit" projects as in many other CompSci classes. Instead, what is in the main branch of your Gitlab repository at the deadline is what will be graded.

The final version of the code must:

You are responsible for ensuring that all files are correctly pushed to the repository on time.

Specifications

Phase 1

Install and connect the latest version of the necessary development tools for this project. Later projects will provide you with more freedom :)

Clone the project repository created for you on the course Gitlab server.

Evaluate only the code in the model package to determine how best to factor out as much of the duplicated code as possible (you can add any new non-public classes or methods as you want: protected (for subclasses to override) and private (to factor out common functionality)). You are strongly encouraged to write many small methods that clearly identify the general steps of a search algorithm and that can be overridden or shared as needed.

Make a refactoring plan, in the file REFACTOR_PLAN.md, for the changes you intend to make that identify issues you find in the code and justify how your proposed changes will improve its design. Include the following points:

Note, an algorithm's data structure is essential to why it works (i.e., a Stack organizes its data completely differently than a Queue or PriorityQueue), so you will not be able to use a single concrete data structure for all the algorithms. However, Java does have a Collection abstraction (of which they are all concrete instances) that may help in storing the data structures in a common variable but, at some point, you will need to call the Stack's push() or pop() method.

Create a test plan, in the file TEST_PLAN.md, using the ZOMBIES acronym to think of both positive and “negative” tests, for each non-random, non-trivial public method in the model package code. Include the following for each:

Describe the existing bug in the program, in the file TEST_PLAN.md, that you can find by running the program or perhaps when coming up with your tests, by answering the following questions:

Practice using Gitlab to manage Phase 2 of your project by creating Issues for your Refactoring and Test plans:

Phase 2

Implement your Refactoring and Test plans, using GIT effectively and intentionally rather than a few large "kitchen sink" or "submit-only" commits:

All programming languages have at least one logging library to make it as easy as possible. In Java, use Log4j2 to output different levels of information rather than println() statements, including any time an Exception is thrown:

All programming languages have at least one testing library to make it as easy as possible. In Java, use JUnit to write separate Test classes and methods:

While you are not required to practice TDD strictly (always writing a test before writing any code), you are expected to create tests frequently during the coding process rather than waiting until the end. In addition to helping regularize your programming session, it provides a host of other benefits and even more! No matter what you decide, to demonstrate you are regularly attempting to test your code, all GIT commits must include at least one new or updated test.

Optional Extra Credit

Add a new search algorithm (such as A*).

Add public methods to the SearchAlgorithm abstraction for any of the following behaviors and implement them for all search algorithms without duplicating the code:

Add any of the following interactive elements to the view package:

Keep the display code as clean as possible, rather than assuming that it has to have long methods because "OpenJFX has to be that way" or the code can be repetitious because "it is only called once". The example code in MazeDisplay provides one such way to keep your methods small (but, unless you are careful, it may also encourage you to write duplicated code as you add features).