CSE 498 - Fall 2025 @ MSU
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:
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.
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.
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.
Proficient Contributor: You have met all of the expectations and delivered your portion of the project. You worked diligently on the project throughout the semester and were a reliable member of the team. You will receive full points, as earned above, on this project.
Inconsistent Contributor: While you participated and contributed to the project, you have done so inconsistently or otherwise have failed to fully meet the group’s expectations (as put forth in your project agreement). You might have missed some tasks or not been substantially involved in the discussions or implementation. Points above will be scaled, typically by a factor between 50% and 90% of points earned.
Minimal Contributor: You frequently failed to actively participate in the project. Your contribution was negligible or missing, and your lack of involvement hampered the group’s overall success. You will receive between 0% and 50% of the overall project grade.
Additionally, we have two other categories that will be given out quite sparingly.
Resilient Contributor: You have showcased exceptional efforts, going above and beyond base expectations to enure that your group turns in a working project. You will make up for lost points by receiving up to a 25% bonus on the points above (though not raising your full points beyond 100%). This rating will typically be given to a student who put forth significant extra effort to make up for another group member’s failure to meet expectations.
Exemplary Contributor: You went substantially beyond project requirements, turning in code that is impressive on all levels. You will receive the full 45 points on the project, but this qualification also recognizes the incredible effort that you put forth with an “Exemplary Contributor” award that can be added to a resume. We are unlikely to give more than one of these per semester.
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.
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.
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:
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.
num_students or student_count, whereas you don’t want something too short to be confusing (like N or num_s) or too verbose that it’s annoying (like total_number_of_students_in_class).static constexpr size_t NUM_REGS = 6; at the top of the class to make it clearer what the 6 refers to (and, in this case so that I can change it if needed.)++x; // increments x). In general, comments should focus on why code is helpful, rather than belabor what that code does (though with complex code, the latter is useful too.)camelCase, snake_case, ALL_CAPS, or PascalCase, or prefixes and suffixes, like m_ at the beginning of a member variable.).-Wall and -Wextra flags without producing warnings? One option is to add -Werror to your list of options, which turns all warnings into errors and thus halts compilation when one occurs.namespace cse { ... } ? Does the code avoid the generic using namespace std as well as avoiding ALL namespace pollution in header files that will spread to users of those files.std::optional, or other modern C++ techniques? (In the future we will also look for proper use of templates, move semantics, lambdas, and constexpr, but only once we cover those topics).std::fill will fill a vector, std::remove_if will remove elements from a container based on a condition, or std::is_sorted will tell you if the values in a container are in order. See https://en.cppreference.com/w/cpp/algorithm for a full list (it’s LONG, but well worth being familiar with).std::unique_ptr, std::shared_ptr) or, only if needed, careful use of raw pointers with new and delete?const correctness. Are member functions to const if they don’t change the state of the class? Are parameters (especially reference parameters) marked const if they don’t change inside the function?assert statements used properly throughout the code to enforce invariants and ensure a valid state? (for example, checking that valid arguments are passed into functions.) Note that asserts should be used only to identify conditions that should never occur in properly working code; if code is expected to recover, error handling must be performed.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:
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).
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
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:
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.