CSE 498

Logo

CSE 498 - Fall 2025 @ MSU

Home

Schedule

Projects

Project Groups

Quizzes

Weekly Updates

Resources

Project and Review Guidelines

Project Overview

The largest chunk of the work for this course will be developing a set of C++ modules that you will use for a larger semester project. It will be worth a total of 45 points, plus an additional 12 points associated with turning in weekly updates. Here are the project details for each group.

Your final grade on the project will be based on three factors:

1. Functionality (25 points)

Throughout the semester we will develop C++ code modules and refine a set of goals for your overall project. You will earn points based on how well you meet these goals or demonstrate a deep understanding of why the goals cannot be fully met. We will have a series of milestones over the course of the semester involving building modules that you will use in the final project. The instructors will be in regular communication about your progress and you will be heavily involved in the setting of goals. Progress checkpoints toward functionality will be worth a total of 10 points, and the overall state of the project at the end of the course will be worth an additional 15.

2. Code Quality (20 points)

While the ultimate functionality of your code is clearly important, being able to write code that is reliable, reusable and easy to understand by other programmers is also a high level goal for this course. Code quality will be judged based on:

You will be getting regular in-class advice and feedback on these topics throughout the semester, including peer reviews from fellow students. A total of up to 10 points will be awarded during development and up to an additional 10 for the final product.

3. Individual Contribution (A multiplier applied to the other points)

It is important that each group member provides a meaningful contribution to the overall group effort and to the course-level project as a whole. Based on ratings by your teammates and your role on the team (and audited by the instructors, if needed, using progress reports, git logs, and the work agreement) you will receive a qualification for how effective of a contributor you were to the project.

Additionally, we have two other categories that will be given out quite sparingly.

Project Groups

You will be in a group of five people to work on a semester-long project. Students will have the opportunity to discuss potential project ideas with each other and propose groups to the instructors. The instructors will form groups as needed, trying to match appropriate skill combinations and interests.

Once groups are formed, members will devise a working agreement with a plan for how they will all contribute to the project and support one another. Here is an example agreement.

Project License

To simplify working together and allowing all students in the course to be able to use the code we develop after the course is over, all communal code will be created under the MIT Public License. This license allow others to use the provided code however they want as long as they include the Copyright notice with it. Once you contribute to the project, make sure to add your own name to the license.

Project Topics

Each group will be assigned a number of modules to develop proportional to the number of students in that group. While each student should plan to take the lead on at least one of the modules, they should participate in the development of all of them. Indeed, some of the modules will be fairly easy to get an initial version working, and other will require more of the skills that you will develop over the course of the semester. That said, all of the modules are expected to illustrate strong C++ coding technique.

Some example modules include:

Write-up for Initial Class Development

Due: Jan 29, 2025

For each of the assigned classes, you should include in your writeup:

1) A class description, including what it’s goals are, and what it’s high-level functionality should look like. This does not need to perfectly match the description you were given, but it should be in the same general spirit unless you confirm any changes with the instructors ahead of time.

2) A list of similar classes in the standard library that you should be familiar with or use to inform the functionality you will be developing.

3) A list of key functions that you plan to implement. This does not need to be an exhaustive list, but it should give a strong indication of how the the class should be used.

4) A set of error conditions that you will be responsive to. For each, indicate if it’s source was (1) programmer error, such as invalid arguments to a function, which should be caught by an assert, (2) a potentially recoverable error, such as a resource limitation, which should trigger an exception, or (3) a user error, such as invalid input, which needs to simply return a special condition for the programmer to respond to (note: these can usually be handled with exceptions as well if you prefer.)

5) Any expected challenges that you will be facing, an especially any extra topics you need to learn about. This information will help me make sure to cover topics early in the course or else provide your group with extra guidance on the project.

6) A list of any other class projects from other groups that you think you may want to use, either in the development of your own classes or in your final application.

Rubric for initial code reviews (Round 1)

Design

Implementation

Testing and Error Checking

Rubric for Code Reviews of Advanced C++ Classes (Round 2)

During this second round of code reviews, you will have a more specific assignment for what aspects of the target code you need to review.

The five areas where review needs to be done are:

  1. Code Design
  2. Implementation Quality
  3. Testing and Error Checking
  4. Use of Advanced C++ Features (e.g., templates, lambdas, constexpr, value semantics, etc.)
  5. Code Optimization and Flexibility.

Items 1 through 3 are the same as the first review round (see above!), but this time we will have higher expectations. If you do not find any issue with a particular topic area, you should comment in your writeup about what you believe the developers did particularly well with their code.

For Item 4, you should comment on how well the developers incorporated some of the more advanced course topics into their code. While not every advanced topic needs to be represented, at least two (done very well) or three newer techniques should be there.

For Item 5, you should identify ways that the code under review could be better optimized or be made more flexible (ideally without being made too much more complex).

Writing your Reviews

For these reviews, you should look at the appropriate pull request and comment on the specific areas that you are assigned. Any review comments that you can place directly on the code, that’s where it should go (note that code that has not changed will not be able to be commented on in place). All other comments (and review summaries) should be placed in a general review comment.

Keep a tab on the comments and please engage with any questions or comments the developers have, as appropriate, especially if clarifications are requested.

For your specific review assignments, go here

Rubric for Code Reviews of Final Applications (Round 3)

Due: April 28th, 2025

During this final round of code reviews, you will again have a more specific assignment for what aspects of the target code you need to review. This time, however, we are testing code that produces an actual application, not just a C++ library, so we need to be doing more thorough testing considering how the application is likely to be used.

The five areas where review needs to be done are:

  1. Code Design: Is the code designed in a logical and intuitive manner that allows others to easily understand it? Feel free to refer to the list of specific topics in the round 1 reviews, but you should also consider other subjective areas, identifying any point that you may be confused in your own attempt to understand the code. Please try to provide suggestions for how to fix any problems.
  2. Implementation Quality: Is the code written to be safe, efficient, and flexible? Feel free to refer to the specific topics in round 1, but you should more generally be looking for any places where implementation may currently be problematic, inefficient, or likely to have problems in the future as new added features cause other issues to arise.
  3. Testing and Error Checking: Has sufficient testing been performed to verify the reliability of the current state of the code? This should include both internal testing (e.g., asserts that are avoided, exceptions that are caught in the app, or returning of error codes / optional that are checked) and external testing (e.g., unit tests including thorough checking of edge cases as well as actual alpha testing of the app itself.) In particular, make sure that bad user input is caught and handled properly; if you can cause the app to crash (as opposed to it reporting a coherent error), that is a problem to report.
  4. Use of Modern C++: Have the authors of the app made good use of modern featured in C++, such as appropriate use of templates, use of concepts, use of std::optional, use of [[attributes]], etc.? Not all code will be expected to use every technique, but it is still helpful to point out where more modern techniques improve the code quality and the experience of the authors.
  5. User Experience: Is the app easy to use with an intuitive interface? Most of this course has focused on good code development practices, but applications are built for end users and user experience ia a critical quality that always needs to be considered. Are app features easy to find? Are the most common use cases placed in intuitive places? Is the application useful and does it meet its intended goal? Make suggestions on how the user experience can be improved overall.

Writing your Reviews

For these reviews, you should look at the appropriate pull request and comment on the specific areas that you are assigned. Any review comments that you can place directly on the code, that’s where it should go. All other comments (and review summaries) should be placed in a general review comment. Your final review should be done as a proper GitHub review and should include a checklist of the biggest points that you believe are most in need of fixing.

Keep a tab on the comments and please engage with any questions or comments the developers have, as appropriate, especially if clarifications are requested.

For your specific review assignments, go here

NOTE: All feedback is expected to be constructive and helpful. You should identify helpful improvements or places to refactor, but never denigrate the code or its authors. Constructive criticism is fine, but should be frames positively; any needlessly hurtful comments will result in points deducted from the review.