Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
CSCI 2134 Final Exam
Submitted via Git . Before the Exam: Clone the Final Exam repository
Be sure that that stub code compiles and that the stub Junit tests run in IntelliJ. At the Start of the Exam Perform a pull on the repository to update it. You will find that your code base has been updated and that there is much more code in them. There should be several files in the src directory and one file in the test directory (Tests.java). This is the code base for your exam.
All code modifications must take place in the java files. All written answers are to be placed in a single comment at the top of the Tests.java file. Exam Rules • The exam should be written using whatever development tools that you prefer. • All exams will be reviewed by the course instructor • The exam is open book. You are permitted access to o Your course notes o All code that you have written previously o Any books that you have at the time of writing You are NOT permitted to o Perform web searches or get help from the Internet o Receive assistance from any other person either locally or remotely o To take any other unfair advantage of the situation • The exam is 3 hours (180 minutes) in length. o When you first begin the exam you must pull the new code, add your name and bannerID to Tests.java, git add, commit, and push. o If you have accommodations for writing exams, these will be reflected in your exam settings. o If you encounter any issues, please let the course instructor know immediately either via Teams or email. • To ask questions in the exam, email the instructor or use the private chat feature in Teams. Please do NOT post your questions in the Teams public discussion forum. The course instructor will reply to you directly if you write the exam on the exam day. The course instructor will reply if possible on the makeup day. • The exam is out of 100 marks. Good Luck! May the Source be with You! Questions 1. [10 marks] Using Git. Clone and pull the repository for your exam. Add your name and banner ID to Tests.java, git add, commit and push. You have used Git. NOTE: To get full marks you MUST perform a commit AND push after each question. This way, if some- thing goes wrong, I can check each part separately and give you the marks you deserve. Note: Your TARGET method will be specified at the top of the Tests.java file.
2. [15 marks] Testing a. Give three (3) test cases for the TARGET method (see above). Each test case should be one line long. b. Implement the unit tests in the test file. 3. [15 marks] Debugging: Debug the issues causing your tests to fail. There are at least a couple bugs in the code. List bugs you found and fixed. Give • a brief description of each bug • method where the bug occurs • how you fixed the problem 4. [15 marks] Defensive programming with assertions: a. Identify three (3) locations in the code where assertions would be appropriate. Give i. method where assertion should be used ii. what the assertions should assert b. Write the assertions in the code. 5. [15 marks] Defensive programming with exceptions a. Suggest one (1) exception that would be appropriate for the TARGET method and one (1) addi- tional exception somewhere else in the code. State the condition under which the exceptions should be thrown. b. Implement the exceptions you suggested. c. Add unit tests to test that the exceptions are thrown when appropriate. 6. [15 marks] Procedural Refactoring a. 6a. Identify three (3) procedural refactoring opportunities that can be done in the code. Give i. a brief description of each issue ii. the method where the issue is iii. how to fix the issue b. Perform the refactorings on the code. Be sure to do regression testing 7. [15 marks] Identify three (3) class-level refactorings that can be done in the code. Give i. a brief description of each issue ii. where the issue is iii. what SOLID principle (if any) are violated iv. whether a class implementation or class interface refactoring is needed v. how to fix the issue (do not perform the refactoring)