UMN Transit System Simulation

Project Type: Software
Role: Project designer, Software Engineer.

This is an individual project in CSCI3081W, titled Program Design and Development, offered by the University of Minnesota. The goal of this software project is to develop a robust transit simulator in which simulations can be controlled via external configuration (without code change) and be visualized within a graphics window. The default configuration of the simulation uses the map and routes of the campus busses of the University of Minnesota.

My Work

The design, development and implementation of the project was mainly done by me with assistance from CSCI 3081 instructor crew. The realization of the project was divided in steps throughout the entire semester.

Design Process: I used a UML diagram to visualize a system in all phases of software development life-cycle. View the UML

Iteration 1: The first iteration is focused on building domain entities and getting practiced in the software development process. Being supported by CSCI3081 team, I constructed classes of building domain entities for a transit system such as Bus, Route, Stop and Passenger. The code is organized such that simulation behavior (i.e. the model) is separate from the visualization (i.e. the view), which allows for automated unit testing using Google Test. Therefore, preliminary unit tests were conducted to test each domain entity to make sure they had accurate functionality. In addition, there have been a few entities that have been made into abstractions to allow for extension. The Simulator is the primary driver of the application. In iteration 1, the only implementation of this was the LocalSimulator which was relatively primitive. It was hard-coded with the campus's transit system in mind and displayed the simulation results on Terminal. Although I created an alternative simulator scenario that output the results in a file, there was no external control of the simulation; it could only be changed by modifying the code.

Iteration 2: While the hard-coded simulator is not ideal, I added additional structures in domain entities to realize the visualization of the simulation and created a new configuration simulator. The configuration simulator takes in the configuration file specified by the users and runs simulation on it. To verify the functionality, heavy unit tests and integration tests were constructed.

Iteration 3: I extended some abstract classes to implement regression tests on the program which is essential for further development of the project. I also refactored the program to make it into a clearer and more robust version.

Documentation: I used Doxygen compliant comments to comment on my code and then automatically generate code documentation. I also wrote a User Guide and a Developer Guide for potential program users.

Testing and code style checking: For testing, we adopted google tests for unit testing. For code style checking, we used the CSE-check-style tests which had developed by the Computer Science Department, University of Minnesota, Twin Cities. The whole project’s codes satisfied the Google coding style after the style check tests have been implemented.


Meaning to Me

As a person who is always driven to create things, this is the first time that I developed functional software with my CSCI 3081 instructor team. In the process of implementing the transit system simulation, I did most of the coding work, thanks to the advice from my instructors. I learned a lot of software design methodology and put them into use. For example, I discovered the concept of UML diagram and created one for this project. In this way, I designed the structure of the program. Also, I got to know the importance of testing and adopted different testing methods such as unit testing, integration testing and regression testing. Apart from these, It was my first time making detailed documentation on a program. Literally, this project provided me with throughout experience and idea on how to develop a software application.


Resources

Github: Click here to view
Mainpage of the project: Click here to view