This assignment will also help you gain some experience with the integrated development environment that you will be using this semester in this course. Some of the tools you will be using this semester will be new to some of you, and we will discuss aspects of them as the semester progresses. However, at this point, regardless of whether you have used the tools in the past, you should be able to figure out everything that you need for this assignment.
This assignment will also, hopefully, lead you to improve the process that you use during the construction phase of the software engineering lifecycle. For example, it will hopefully get you to start earlier, work on a regular schedule, test properly, and ask questions appropriately.
Finally, this assignment will expose you to the kinds of software engineering documents you will be reading and writing throughout the semester, and the kinds of questions that you may need to ask while carefully reading these documents.
They are in the process of developing a suite of products for working with grading assignments of various kinds (e.g., exams, homework assignments, labs, programming assignments). They have hired you to construct several interfaces/classes that will, ultimately, become part of these products.
These classes/interfaces might be used by the first application they are creating (called Gradient) to calculate the numerical grade for a course that has 6 programming assignments (with the lowest dropped) that account for 40% of the course grade, 5 homework assignments that account for 10% of the course grade, one midterm exam that accounts for 20% of the course grade, and a final exam that accounts for 30% of the course grade. For example, assuming the the programming assignments and homework assignments are each graded on a 20-point scale and the exams are each graded on a 100-point scale, the following grades
20.0 18.0 5.0 15.0 20.0 20.0 20.0 5.0 0.0 10.0 15.0 80.0 75.0
should result in a PA grade of \(20.0 + 18.0 + 15.0 + 20.0 + 20.0 = 93.0\), a homework grade of \(20.0 + 5.0 + 0.0 + 10.0 + 15.0 = 50.0\) and a course grade of \(0.4 \cdot 93.0 + 0.1 \cdot 50.0 + 0.2 \cdot 80.0 + 0.3 \cdot 75.0 = 37.2 + 5.0 + 16.0 + 22.5 = 80.7\).
The terms that Sagacious Media uses when discussing Gradient and its functionality are described in the following document.
When using scrum, time is divided into time intervals called sprints that typically last 1-2 weeks, and product features are organized into stories. SagaciousMedia categorizes stories as either epics (abstract stories that might take several releases, developed over the course of many months, to completely realize), and sprintable stories (that describe what will be completed in a single sprint and included in the product at the end of the sprint). The sprintable stories (which are what you are concerned with for this assignment) for Gradient have been collected in the following document (along with some epics that are not part of this assignment).
The team you are working with at SagaciousMedia used the sprintable stories to create a set of tasks for this assignment. The other members of your team completed some of the tasks and have left others for you to complete. The complete set of tasks is contained in the following document.
The tasks that are "checked" have already been completed by other team members, the evidence for which is contained in the following documents (which are listed in alphabetical order).
Gradient
class
DropFilter
class
Grade
class
Missing
class
SizeException
class
TotalStrategy
class
WeightedTotalStrategy
class
You must complete the tasks that have not been "checked-off". The code you write must be consistent with the documents prepared by the team.
testing
and each test class must include
the word "Test" in its name.
For any project you should start as follows:
Gradient
class) so that you understand how the
classes you are implementing will be used.For this particular project, you should then:
Grade
class.Grade
class.Missing
class.Missing
class.SizeException
class.GradingStrategy
interface.WeightedTotalStrategy
and
TotalStrategy
classes should be related (if
at all).WeightedTotalStrategy
or
TotalStrategy
class (whichever one you think
should be implemented first).
WeightedTotalStrategy
or
TotalStrategy
class (whichever one you think should be
implemented second).
Filter
interface.DropFilter
class.DropFilter
class.
Note that, for Gradescope, you will need to have a stubbed-out version of all of the classes for your code to compile. This will, hopefully, encourage you to create and use stubs (i.e., pieces of code that stand in for the code that would be needed to provide full functionality) as part of your development process.
.zip
file named sub1.zip
that contains:
testing
.There is no limit on the number of submissions and no penalty for excessive submissions.
Points will be deducted manually (i.e., after the due date) for code that is unclear, inelegant, and/or poorly documented.
Be careful when you create classes in Eclipse that you put them in the appropriate package.
The course "Help" page on Eclipse explains how to provide an application with command-line arguments. You also may want to refer to and/or complete the "review labs" at the top of the syllabus.
.zip
file. So, you must not
compress the directory/folder containing these
directories/folders, you must compress the directories/folders
containing the packages. In other words, if you have a directory
named src
inside of a directory named h1
that contains the directories
math
and testing
, you must not
compress src
or h1
, you must
compress math
and testing
.
Help with creating .zip
files is available on the CS Wiki.
In particular, see:
If Gradescope reports errors in the "CompileOfficialTests" section it means
that your code does not conform to the specifications. In particular,
if you get an error that says SizeException
must be caught or
re-thrown it means that your SizeException
class is not
unchecked (as required by the specifications).
Copyright 2025