Part A)
Question: Make a Student inheritance hierarchy. This must comprise the given requirements:
i) Make the Student class. Student can be the super class and an abstract class. At least one method on Student will be abstract.
ii) Student class holds the attributes first name, last name, student ID, GPA, status and mentor. All the attributes will be inherited by subclasses.
iii) Prepare suitable overloaded constructors for the super class, Student.
iv) Student has an abstract method, calculateTuition(), that can be implemented in the subclasses Undergraduate, Graduate and Part-time, making use of the polymorphism principle.
v) Prepare the subclasses Undergraduate, Graduate, and Part-time, that inherits from the Student class. Every subclass will encapsulate the specialization of Student.
vi) Prepare an abstract method, update(). Whenever this method is called, the database entry for the student is updated.
vii) Prepare an abstract method, add() method. Whenever this method is called, the database entry for the student is made.
viii) Prepare an abstract method, delete(). Whenever this method is called, the database entry for the student is deleted.
ix) Prepare an abstract method, query(). Whenever this method is called, a query is made to the database to retrieve the information and is then printed to the screen.
Question: Create subclasses. This must comprise the given requirements:
i) Prepare the subclass Undergraduate that inherits from Student. Undergraduate has the additional attribute, "level" (freshman, sophomore, junior, senior).
ii) Prepare the subclass Graduate, which inherits from Student. Graduate has additional attributes, "thesisTitle", and "thesisAdvisor".
iii) Prepare the subclass Part-time that inherits from Student. Part-time students are working adults. Part-time students have an attribute, "company" that is the name of their sponsoring employer.
iv) Incorporate the method of information hiding by making suitable attributes private and creating getters and setters to access and modify each and every private attribute.
v) Prepare overloaded constructors for each Student type. The super class constructor must be used by each and every subclass's constructors to set such attributes found in the super class. Prepare adequate constructors for each class to initialize the instance variables (attributes) of an object, either by initial values passed into the constructor or default values employed if none is passed in. All values passed in must be verified for validity.
Question: Implement the given methods using polymorphism. This must comprise the given requirements:
i) Implement calcuateTuition() method as shown:
• Status of resident: undergraduate tuition = number of credit hours 200
• Status of nonresident: undergraduate tuition = number of credit hours 400
• Status of resident: undergraduate part time = number of credit hours 250
• Status of nonresident: undergraduate part time = number of credit hours 450
• Status of resident: graduate = number of credit hours 300
• Status of nonresident: graduate = number of credit hours 350
ii) Student objects must know how to show the information. Override the toString() method on each subclass. Use inheritance to display attributes given by super class by calling super.toString() method.
Question: Override the given methods. This must include the given requirements:
i) For each subclass, implement method query(). Whenever this method is called, a query is made to the database to retrieve the information and then the information is printed to the screen. If proper, use toString() within the print() method.
ii) For each subclass, implement method update(). Whenever this method is called, the database entry for the student is updated.
iii) For each subclass, implement method add() method. Whenever this method is called, the database entry for the student is made.
iv) For each subclass, implement method delete(). Whenever this method is called, the database entry for the student is deleted.
Question: Make an application that tests the given requirements:
i) Application has to allow the user to add, update, delete, and query any student type.
Note: The application may have a graphical user interface (GUI) or can be run from the command prompt. It have to be clear how to use the application. Prompts must be clearly worded and mechanics of the prompt or receive input should work well. If essential, give a short user manual that explains how to use the application.
Part B: Prepare UML Use Case Diagrams which could be inserted into a Software Requirement Specification (SRS) document which captures all functional needs for this application. Use the task description in part A to elicit the needs. You will only be needed to document the functional needs and provide Use Case diagrams. You don't have to complete a complete SRS document.
Question: Document the functional requirements with UML use case diagrams for each requirement.
For each functional requirement give the following:
• Requirement number and title.
• Description of the functionality.
• Input.
• Results of processing or output.
• Error handling or recovering requirements outlined.
• UML use case diagrams (It is very important that your UML use case diagrams are complete and proper UML 2.0 Modeling notation is used).
Part C: Make UML Class and Sequence Diagrams which could be inserted into a Software Design Specification (SDS) document. (It is very significant that your UML diagrams are complete and proper UML 2.0 Modeling notation is used. Your design should be an object-oriented design.) You will only be needed to submit the class and sequence diagrams and not have to complete a SDS document.
Question: Your UML Diagrams must comprise the following:
a) Comprehensive Class Diagrams: Show all classes and all relationships among all classes. These must comprise the following:
• Relationships: Your object oriented design will require you to diagram all class relationships using correct UML 2.0 Modeling notation that minimally comprises:
- Inheritance
- Association Relationships
• Multiplicity: Note any multiplicity in the relationships (example: 1-1, 1-many, and so on) using correct UML 2.0 Modeling notation.
• Attributes: For each and every class, all attributes with types (example: int, double and so on) and access control (example: private, public, protected) need to be noted using proper UML 2.0 Modeling notation.
• Methods: Methods with signatures and access control must be given. All methods have to be indicated, comprising all constructors, setters and getters.
• Abstract Classes and Interfaces: Any abstract classes and interfaces employed in your design should be properly indicated by using UML 2.0 Modeling notation.
b) Sequence Diagrams: Model the object interactions needed for each functional scenario. For each Use Case provided in the functional requirements section, at least one sequence diagram must be given to model the interaction between the objects within the application.
Part D: Develop a test plan which includes test cases which test all functional requirements of the system.
Note: The test plan is on the whole approach to how the application will be tested. The test cases are the steps a tester will take to test a single behavior. Pass/Fail criteria need to be given for each test case; all test cases must have been run, and the Pass/Fail section must be completed. For each functional requirement, one or more test cases must be provided.
Note: All compiler and runtime errors should be corrected before you submit. Your application must correctly satisfy all requirements. Your application must have passed all test cases before being submitted for evaluation.
1) The test plan must comprise at least the following sections:
• Title Page.
• Introduction: Brief description (suggested length of 1-2 paragraphs) of the application under test.
• Overview of Testing Strategy: See part D1a.
• Resource Requirements: Discuss hardware and software required to complete the test plan.
• List of Features to Test: A simple table is sufficient. If features are numbered, the feature number can be used in your test cases.
• Acceptance Criteria: Identify the standards that must be met when considering if the application is ready for release. In your case, this means that the application should be ready to be submitted for grading.
• Test Cases: Should be submitted as an appendix to the test plan
a) In the "Overview of Testing Strategy" section, compare white box testing, black box testing, unit testing, and integration testing and how they can be used to verify your application.
• Identify which testing strategy you will use.
2) Execute the test plan, comprising running all test cases.
a) Discuss the results of each test case in the "Test Cases" section. (A Pass/Fail value should be indicated as a result for each test case.)