Java – INFS2605 Intermediate Business Programming

Page 1 of 16 Revision 1, 5 October, 2020 (20t3) UNSW Business School Information Systems and Technology Management INFS2605 Intermediate Business Programming Term 3, 2020 INFS2605 Mid Term Assessment This document describes the requirements and assessment criteria for the Mid Term Assessment for INFS2605. For general enquiries, please use the edstem.org forum. For enquiries about this document, please contact your lecturer via email (d.mitra@unsw.edu.au) or via MS Teams referencing the “INFS2605 Mid Term Assessment”. Contents (1)
Mid Term Assessment Overview
…………………………………………………………………………………………………………………
2 (2) Scenario and Code
………………………………………………………………………………………………………………………………………….
3 (3) Assessment Questions
………………………………………………………………………………………………………………………………..
12 (4) Assessment Criteria
……………………………………………………………………………………………………………………………………..
13 (4.1) Marking Rubric
…………………………………………………………………………………………………………………………………………
13 (4.2) Assessments and Plagiarism
………………………………………………………………………………………………………………
13 (4.3) Problem-Solving Process
……………………………………………………………………………………………………………………..
14 (5) Submission
………………………………………………………………………………………………………………………………………………………
15 (5.1) Software Recommendations for recording
………………………………………………………………………………………
15 (5.2) Submission
……………………………………………………………………………………………………………………………………………….
15 (5.3) Late Submission Penalty
………………………………………………………………………………………………………………………
15 (6) FAQ
……………………………………………………………………………………………………………………………………………………………………
16 Page 2 of 16 Revision 1, 5 October, 2020 (20t3) (1) Mid Term Assessment Overview The INFS2605 Mid Term Assessment is worth 20% of your overall INFS2605 mark. The assessment involves creating a video recording of the student’s screen and voice to answer questions and analyse a small Java program. The student must submit their recording in MP4 format (and any other visual aids used) via OneDrive by the submission date. The Mid Term Assessment tests the student’s understanding of the first four weeks of content in INFS2605. This document outlines three questions which students are required to answer for this assessment. All questions are based around a fictional and incomplete Java application named Lockdown Companion, created for the purpose of this assessment. As included in the INFS2605 Field Manual, the topics covered in the first four weeks and tested in this assessment include: – INFS1609 Revision – Data structures – Database Connections – Object-Relational Mapping – Introduction to UX – UI Elements – Introduction to JavaFX As per the INFS2605 Course Outline, the following Course Learning Outcomes will be tested in this Mid Term Assessment: – Interpret, review and share software code – Design, write and evaluate programming solutions for small to medium scale problems – Explain and apply MVC architecture in developing programming solutions For questions on the Mid Term Assessment, consult the FAQ section of this document. If you have a question that is not answered in this section, contact your lecturer by email (d.mitra@unsw.edu.au) or via MS Teams. Page 3 of 16 Revision 1, 5 October, 2020 (20t3) (2) Scenario and Code All questions in the Mid Term Assessment will be based off a fictional and incomplete Java application named Lockdown Companion. Do you miss travelling Or do you simply yearn to see the world, but have been locked down due to external factors out of your control Then the Lockdown Companion is the perfect application for you! The Lockdown Companion application offers virtual guided tours for anyone from the comfort of their own home. Whether it’s a guided tour of The Louvre in France, a boat ride through the canals of Venice, or a virtually tiresome trek through the trails of Machu Picchu, the Lockdown Companion app can provide you the experiences of a lifetime without you leaving your home! The lockdown companion application will eventually be able to show you 3D virtual reality representations of your favourite places around the world, and be able to recommend virtual trips to you based off your previous virtual travels. Tours can either be Live with a tour guide showing you around, or be pre-recorded sessions that you can view at any time at your leisure. The Lockdown Companion application is a Java based application with a SQLite database that stores user data and data on the virtual tours available on the platform. As a software and UX Design expert, you are asked to analyse the codebase and design part of the UI of the Lockdown Companion application. You are asked to provide your response to the questions in the form of a screen and audio recording. The original developer of the partially-built Lockdown Companion application has provided the following Java files for your review (note that .fxml files and App.java are not included). The files can be grouped into Controller and Model classes, and include an extra DatabaseManager class for help with running SQL queries: Controller Classes LoginController.java ToursController.java Model Classes User.java TourGuide.java Customer.java Tour.java LiveTour.java PreRecordedTour.java Database Helper DatabaseManager.java LoginController.java: package LockdownCompanion; import java.io.IOException; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TextField; /** * FXML Controller for Login.fxml * @author Devesh Mitra * @version 0.1 */ Page 4 of 16 Revision 1, 5 October, 2020 (20t3) public class LoginController { @FXML TextField txtUsername; @FXML TextField txtPassword; @FXML Label lblLoginError; @FXML protected void initialize() { // initialize login page here lblLoginError.setText(“”); } @FXML private void btnLoginWasClicked() throws IOException { String username = txtUsername.getText(); String password = txtPassword.getText(); String pwdHash = DatabaseManager.fetchPasswordHashByUsername(username); if (BCrypt.checkpw(password, pwdHash)) { lblLoginError.setText(“Sorry, incorrect credentials.”); } else { // login successful, clear error label and switch to Tours screen lblLoginError.setText(“”); App.setRoot(“tours”); } } } ToursController.java: package LockdownCompanion; import javafx.fxml.FXML; import java.util.ArrayList; /** * FXML Controller for Tours.fxml * @author Devesh Mitra * @version 0.1 */ public class ToursController { @FXML ArrayList allTours; @FXML protected void initialize() { // initialize tours page here allTours = DatabaseManager.fetchAllTours(); } } Page 5 of 16 Revision 1, 5 October, 2020 (20t3) User.java: package LockdownCompanion; import java.util.UUID; /** * Model Class for generic User of application * @author Devesh Mitra * @version 0.1 */ public class User { private UUID userUUID; private String firstname; private String lastname; private String username; public User(UUID userUUID, String firstname, String lastname, String username) { this.userUUID = userUUID; this.firstname = firstname; this.lastname = lastname; this.username = username; } /** * @return the userUUID */ public UUID getUserUUID() { return userUUID; } /** * @return the firstname */ public String getFirstname() { return firstname; } /** * @param firstname the firstname to set */ public void setFirstname(String firstname) { this.firstname = firstname; } /** * @return the lastname */ public String getLastname() { return lastname; } /** * @param lastname the lastname to set */ public void setLastname(String lastname) { this.lastname = lastname; Page 6 of 16 Revision 1, 5 October, 2020 (20t3) } /** * @return the username */ public String getUsername() { return username; } /** * @param username the username to set */ public void setUsername(String username) { this.username = username; } } TourGuide.java: package LockdownCompanion; import java.util.UUID; /** * Model Class for Tour Guide (a type of user) * @author Devesh Mitra * @version 0.1 */ public class TourGuide implements User { private String tourCompanyName; private String countryOfBirth; public TourGuide (UUID userUUID, String firstname, String lastname, String username, String tourCompanyName, String countryOfBirth) { super(userUUID, firstname, lastname, username); this.tourCompanyName = tourCompanyName; this.countryOfBirth = countryOfBirth; } /** * @return the tourCompanyName */ public String getTourCompanyName() { return tourCompanyName; } /** * @param tourCompanyName the tourCompanyName to set */ public void setTourCompanyName(String tourCompanyName) { this.tourCompanyName = tourCompanyName; } /** * @return the countryOfBirth */ public String getCountryOfBirth() { return countryOfBirth; Page 7 of 16 Revision 1, 5 October, 2020 (20t3) } /** * @param countryOfBirth the countryOfBirth to set */ public void setCountryOfBirth(String countryOfBirth) { this.countryOfBirth = countryOfBirth; } } Customer.java: package LockdownCompanion; import java.util.UUID; /** * Model Class for Customer (a type of User) * @author Devesh Mitra * @version 0.1 */ public class Customer extends User { /** * TODO: add new fields for Customisation / User Settings */ public Customer (UUID userUUID, String firstname, String lastname, String username) { super(userUUID, firstname, lastname, username); } } Tour.java: package LockdownCompanion; /** * Model Class for generic Tour * @author Devesh Mitra * @version 0.1 */ public class Tour { private TourGuide tourGuide; public Tour (TourGuide tourGuide) { this.tourGuide = tourGuide; } /** * @return the tourGuide */ public TourGuide getTourGuide() { return tourGuide; } /** * @param tourGuide the tourGuide to set */ public void setTourGuide(TourGuide tourGuide) { Page 8 of 16 Revision 1, 5 October, 2020 (20t3) this.tourGuide = tourGuide; } } LiveTour.java: package LockdownCompanion; import java.time.LocalDateTime; /** * Model Class for Live Tour (a type of Tour) * @author Devesh Mitra * @version 0.1 */ public class LiveTour extends Tour { private LocalDateTime startTime; private LocalDateTime endTime; public LiveTour (TourGuide tourGuide, LocalDateTime startTime, LocalDateTime endTime) { super(tourGuide); this.startTime = startTime; this.endTime = endTime; } /** * @return the startTime */ public int getStartTime() { return startTime; } /** * @param startTime the startTime to set */ public void setStartTime(LocalDateTime startTime) { this.startTime = startTime; } /** * @return the endTime */ public LocalDateTime getEndTime() { return endTime; } /** * @param endTime the endTime to set */ public void setEndTime(LocalDateTime endTime) { this.endTime = endTime; } } PreRecordedTour.java: package LockdownCompanion; Page 9 of 16 Revision 1, 5 October, 2020 (20t3) /** * Model Class for Pre-Recorded Tour (a type of Tour) * @author Devesh Mitra * @version 0.1 */ public class PreRecordedTour extends Tour { private int lengthInMinutes; private boolean supportsVirtualReality; public PreRecordedTour (TourGuide tourGuide, int lengthInMinutes, boolean supportsVirtualReality) { super(); this.lengthInMinutes = lengthInMinutes; this.supportsVirtualReality = supportsVirtualReality; } /** * @return the lengthInMinutes */ public int getLengthInMinutes() { return lengthInMinutes; } /** * @param lengthInMinutes the lengthInMinutes to set */ public void setLengthInMinutes(int lengthInMinutes) { this.lengthInMinutes = lengthInMinutes; } /** * @return the supportsVirtualReality */ public boolean getSupportsVirtualReality() { return supportsVirtualReality; } /** * @param supportsVirtualReality the supportsVirtualReality to set */ public void setSupportsVirtualReality(boolean supportsVirtualReality) { this.supportsVirtualReality = supportsVirtualReality; } } DatabaseManager.java: package LockdownCompanion; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; Page 10 of 16 Revision 1, 5 October, 2020 (20t3) import java.util.ArrayList; /** * Database helper methods for LockdownCompanion app * @author Devesh Mitra * @version 0.1 */ public class DatabaseManager { private static final String TABLE_NAME_FOR_USERS = “users”; private static final String TABLE_NAME_FOR_TOURS = “tours”; private static Connection sharedConnection; /** * This method is shared by all the `public static` methods in this class, to reuse the same code. * @return whether or not the connection was successfully opened */ private static boolean openConnection() { boolean wasThisMethodSuccessful = false; try { DatabaseManager.sharedConnection = DriverManager.getConnection(“jdbc:sqlite:Tours.db”); wasThisMethodSuccessful = true; } catch (SQLException e) { e.printStackTrace(); } finally { return wasThisMethodSuccessful; } } public static ArrayList fetchAllTours() { ArrayList allTours = new ArrayList(); try { DatabaseManager.openConnection(); String sqlString = “SELECT * FROM ” + DatabaseManager.TABLE_NAME_FOR_TOURS; Statement smt = sharedConnection.createStatement(); ResultSet rs = smt.executeQuery(sqlString); while (rs.next()) { if (rs.getString(“tour_type”) == “live”) { allTours.add(new LiveTour(rs.getString(“tour_guide”), rs.getTimestamp(“start_time”).toLocalDateTime(), rs.getTimestamp(“end_time”).toLocalDateTime())); } else { allTours.add(new PreRecordedTour(rs.getString(“tour_guide”), rs.getInt(“length_of_tour_minutes”), rs.getBoolean(“supports_vr”))); } } } catch (SQLException e) { e.printStackTrace(); } finally { return allTours; } } public static String fetchPasswordHashByUsername(String username) { Page 11 of 16 Revision 1, 5 October, 2020 (20t3) String preparedReturn = “”; try { DatabaseManager.openConnection(); String sqlString = “SELECT pwdHash FROM ” + DatabaseManager.TABLE_NAME_FOR_USERS + ” WHERE username = *”; PreparedStatement psmt = sharedConnection.prepareStatement(sqlString); psmt.setString(1, username); ResultSet rs = psmt.executeQuery(); while (rs.next()) { preparedReturn = rs.getString(“pwdHash”); } } catch (SQLException e) { e.printStackTrace(); } finally { return preparedReturn; } } } Page 12 of 16 Revision 1, 5 October, 2020 (20t3) (3) Assessment Questions The following are the three questions required to be answered for the Mid Term Assessment. 1. The original developer of the Lockdown Companion codebase rushed their development process and did not test their code. Find 5 errors in the Java codebase for the Lockdown Companion Application, determine the fix for these errors, and present your fixes for the coding errors. The errors may be syntactical or logical errors. Use visual aids to help explain why your changes will fix the coding mistakes made by the original developer. (5 marks) 2. Design User Interfaces for the following Lockdown Companion App screens: the User Customisation screen, and Tour Recommendations screen. Through the User Customisation screen, the user of the application can customise their experience of the application. For example, they can specify which countries or continents they would like to visit next, change their visual and audio settings for the application, and customise reminders and notifications of tours coming up. Through the Tour Recommendations screen, the user can see upcoming tours recommended to them by the application, and view a quick summary of the tours (including how much time is left until the tour, how long the tour is, and who is organising or created the tour). You may add your own creative ideas and functionality you think may be appropriate to these screens. Create your user interfaces in a similar fashion to your Week 3 In-Tute exercise, and present your designs in your video recording. Explain your use of Nielsen’s 10 Design Heuristics in the User Interfaces you have designed. (10 marks) 3. Without writing out the code for the UIs mentioned, design and describe the new classes required to support the “Tour Recommendations” feature of the application, including the methods and variables required by them. Your answer should take into account the MVC framework, including classes required for Models and classes required for Controllers. Think about what data is required to be stored by the Application, and how the user would interact with the application. In your video, you should present (e.g. via a class diagram) the classes and their methods and variables required to support the functionality. (5 marks) It is recommended to use visual aids to support your recordings as you answer these questions. For example, use PowerPoint slides to show your fixes for the errors from question 1, present your UI designs for question 2, and use a Java Class diagram to show the classes (including methods and variables) you designed for question 3. Page 13 of 16 Revision 1, 5 October, 2020 (20t3) (4) Assessment Criteria (4.1) Marking Rubric The following marking rubric will be used to mark the INFS2605 Mid Term Assessment: Question 1 Question 2 Question 3 1-2 errors and solutions are correctly found and explained (1 Mark) UI designs make a poor attempt at meeting the requirements for the 2 screens, and may be cluttered or lack in consistency. Communication of ideas and information is presented in simplistically and ineffectively. (2 Marks) Minimal effort is put into designing new classes with a lack of visual aids to help explain the student thought process (1 Mark) 2-3 errors and solutions are correctly found however poorly explained (2 Marks) UI designs meet most requirements for the 2 screens, however may be cluttered or lack in consistency. Communication of ideas and information is presented in simplistically and ineffectively. (4 Marks) Classes, methods and variables are well defined, however some required variables are missing, and design is poorly explained with a lack of visual aids (2 Marks) 3-5 errors and solutions are explained in a sound manner, however communication is not clear or consistent (3 Marks) UI designs accurately display the requirements of the 2 screens and follow Nielsen’s 10 heuristics. UI may be cluttered or lack in consistency. Communication of ideas and information is presented in a sound manner. (6 Marks) Classes, methods and variables are well defined. Communication of ideas and information is presented in a sound manner, with little effort put into visual aids. (3 Marks) 4-5 errors and solutions are adequately explained with good use of visual aids (4 Marks) UI designs accurately display the requirements of the 2 screens and follow Nielsen’s 10 heuristics. Explanation is clear and consistent, with good use of visual aids (8 Marks) All newly designed classes are clearly explained (including methods and variables) with good use of visual aids (4 Marks) All 5 errors and solutions are clearly explained with strong use of visual aids. Student also notices further improvements that could be made within the code. (5 Marks) UI designs accurately display the requirements of the 2 screens and follow Nielsen’s 10 heuristics. Student has added their own useful features to the screens. Explanation is clear and consistent, with strong use of visual aids (10 Marks) All newly designed classes are clearly explained (including methods and variables) with strong use of visual aids such as a class diagram. Student includes design for their own useful features (5 Marks) (4.2) Assessments and Plagiarism Assessments in INFS2605 are submitted and assessed pursuant to the UNSW Student Code of Conduct (2020) and the UNSW Plagiarism Policy (2020). Although assessments in INFS2605 are Page 14 of 16 Revision 1, 5 October, 2020 (20t3) not traditional essays with traditional bibliographies, they are nonetheless works produced from intellectual endeavour and respected as such. The table below gives INFS2605 examples the plagiarism types defined in the UNSW Plagiarism Policy (2020). UNSW definition INFS2605 example Copying Using the same or very similar words to the original text or idea without acknowledging the source or using quotation marks. Submitting a verbatim (line for line identical) copy of a code fragment / video found on a website or a textbook, or written by a private tutor. Inappropriate paraphrasing Changing a few words and phrases while mostly retaining the original structure and/or progression of ideas of the original, and information without acknowledgement. Finding a solution to a very similar problem from the internet and applying it with minimal changes to the INFS2605 scenario at hand, without acknowledging the source using in- code comments. Collusion Presenting work as independent work when it has been produced in whole or part in collusion with other people. Working with INFS2605 classmates to produce similar solutions to individual exercises. Self-plagiarism ‘Self-plagiarism’ occurs where an author republishes their own previously written work and presents it as new findings without referencing the earlier work, either in its entirety or partially. Submitting an assignment that has been previously submitted to another course. (4.3) Problem-Solving Process Students in INFS2605 are level 2 undergraduates who are expected to have the independently tackle problems. However, it is recognised that problems are often very challenging and additional support shall be provided to assist students in their endeavour to progress through the course at a steady pace. The following process is recommended for students tackling problems: a) Individual revision and research: a. Revision of INFS2605 course materials: lecture slides and students’ individual notes written during INFS2605 lecture attendance b. Revision of pre-requisite courses’ materials (e.g. INFS1609) c. Individual research: Google / Stack Overflow searches, textbooks, etc. b) Peer-assisted support *: a. Open discussions on Ed b. Attending PASS (Peer Assisted Study Session) for INFS2605 c) Instructor support: a. Lecturer consultation appointment b. Email to tutor (see section 4 below) * Please note that peer-assisted support is limited to discussion about general concepts discussed in the course; assistance for individual assessments is not permitted in accordance with section 4.2 above. Page 15 of 16 Revision 1, 5 October, 2020 (20t3) (5) Submission (5.1) Software Recommendations for recording Students using Apple Mac computers can use the built-in QuickTime program to record their response. Students using Microsoft Windows computers can use the built-in Xbox Game Bar program to record their response. Students using either platform can use OBS Studio if these previous options do not work. Each screen recording video file is to be uploaded as a 720p MP4 file. Students can use the Handbrake program to convert files to this format (use the “Fast 720p30” setting). Further instructions can be found in slide 6 of the Module 2 lecture slides. (5.2) Submission Students will be recording their voice and screens, and produce an MP4 video of the full recording. Students are encouraged to use visual aids such as PowerPoint slides or images to help explain their answers to the Mid Term Assessment questions. As a UNSW student, you have access to 5TB of storage using Microsoft OneDrive (see https://www.myit.unsw.edu.au/services/students/storage/microsoft-onedrive). Create a folder in your student OneDrive following the naming convention zXXXXXXX_firstName_lastName_Mid_Term e.g. z1234567_Devesh_Mitra_Mid_Term. In this folder, place your MP4 video recording and any visual aids you have used in your recording e.g. PowerPoint slides or images. Once your files have been uploaded to this folder, share them with your lecturer (d.mitra@unsw.edu.au). OneDrive will send an email to the sharing recipient to confirm the sharing. The timestamp of this email, together with the last edit timestamp of the files in the folder will be used as the submission timestamp. If you do not want a late penalty, please make sure your files in the submission folder are not edited after they are shared. (5.3) Late Submission Penalty Each day late will incur a 10% penalty, for example, submitting the files 2 days late means your score will be capped at 80%. Page 16 of 16 Revision 1, 5 October, 2020 (20t3) (6) FAQ This section will be updated regularly to reflect common questions received from students 1. What is the due date Friday, Week 5, 16th October, 11pm. Submission is via OneDrive (see Submission section for instructions). 2. Do I have to record my face / use a webcam No, you are only required to record your screen and audio. You may choose to record your face if you wish. 3. How long does the video recording have to be The video recording is recommended to be 8-10 minutes long. You will not be penalised for going below or above this recommended amount, however it should be taken into account that there are marks for clarity and communication. 8-10 minutes is an appropriate amount of time to explain the content in a concise and well thought out way. 4. How professional does the video recording have to be Is there an example video somewhere Take your lecturer’s lecture recordings as an example. Treat the video recording as if you are talking to your lecturer or tutor and explaining your answers to the questions to them. Having a look at the marking criteria, you will gain marks for clarity and communication, so make sure your voice is clear, but do not worry about creating an oscar-winning short film. 5. I am unable to install new software on my machine, or do not have a hardware recording device, how can I do the recording We recommend in-built tools on MacOS and Windows machines, so it is not required to install new software. Please see the Software Recommendations section in this document. For microphones, most phones and laptops come with in-built microphones, as do some inexpensive off-the-shelf earphones. There are microphone recommendations in slide 6 of Module 2 lecture slides if you’d like to purchase professional ones. 6. Question 2 asks for UI designs. Should these be designed for a mobile interface or web interface Also, are we limited to only a single screen for the user customisation / tour recommendation UI The UI designs should be designed for a Desktop based Java application i.e. landscape view instead of a mobile portrait view. For the UI screens, you are not limited to one screen. If you feel multiple screens are necessary for the features and to meet UX heuristics, you are free to split the functionality across multiple screens. 7. I have questions about the marking criteria / submission instructions / other Please email (d.mitra@unsw.edu.au) or message your lecturer on MS Teams.