Skip to main content
留学咨询

辅导案例-COMP1531 /

By May 15, 2020No Comments

2019/10/20 上午12’43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 1 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master ๋ݸ൉Ի mailto:[email protected] Updating config in public /COMP1531/19T3-cs1531- project/commit/ff393613240f4555100ff0845bc02eb80f3a5857 ኧ Hayden Smith mailto:[email protected] ൉Իԭ ᕅ 9 ੜ෸ڹ ff393613 ݷᑍ ๋ݸๅෛ ! frontend /COMP1531/19T3-cs1531-pr… Updating config in public /COMP1531/… ᕅ 9 ੜ෸ڹ ! server /COMP1531/19T3-cs1531-proje… Commit for draft release /COMP1531/1… 3 จ๗ڹ ! system_utils /COMP1531/19T3-cs1531… Frontend integrated /COMP1531/19T3… 1 ॠڹ ” .gitignore /COMP1531/19T3-cs1531-pr… Iteration 2 setup /COMP1531/19T3-cs1… 1 จ๗ڹ ” HOWTORUN.md /COMP1531/19T3-cs… Frontend integrated /COMP1531/19T3… 1 ॠڹ ” README.md /COMP1531/19T3-cs1531… Upload photo clarification /COMP1531… 1 ॠڹ ” run /COMP1531/19T3-cs1531-project/… Changing port to something chrome lik… ᕅ 14 ੜ෸ڹ ” server.py /COMP1531/19T3-cs1531-pr… Updating config in public /COMP1531/… ᕅ 9 ੜ෸ڹ A video describing this project and the background here can be found here. To provide students with hands on experience testing developing and maintaining a backend server in python. To develop students’ problem solving skills in relation to the software development lifecycle. Learn to work effectively as part of a team by managing your project planning and allocation of responsibilities among the members of your team< Gain experience in collaborating through the use of a source control and other associated modern team-based tools. Apply appropriate design practices and methodologies in the development of their solution Develop an appreciation for product design and an intuition of how a typical customer will use a product. 11/10/2019: Search function clarified that it searches over all channels a user is in 13/10/2019: name_first and name_last length requirement inverted to make more sense 14/10/2019: standup/send errors updated to make more sense. One ValueError modified one AccessError modified 15/10/2019: standup/start has error "An active standup is currently running in this channel" added to it 16/10/2019: is_unread removed from the message structure 17/10/2019: Rules for handle creation updated " If the concatenation is longer than 20 characters it is cutoff at 20 characters. If the handle is already taken you may modify the handle in any way you see fit to make it unique." 17/10/2019: Clarification added to "permissions" by providing examples to explain the difference more between general permissions and channel permissions 18/10/2019: "note: this is not requried to be completed until iteration 3" added to uploadphoto An overview of this background and this project can be found in a short video found HERE https://youtu.be/Mzg3UGv3TSw. " README.md /COMP1531/19T3-cs1531-project/blob/master/README.md COMP1531 Major Project Aims: Changelog cleared 5th October in git hash "84cc5a90 (/COMP1531/19T3- cs1531- project/commit/84cc5a90991143babead17179abedf063e78bc6d)" Overview 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 2 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master To manage the transition from trimesters to hexamesters in 2020 UNSW has established a new focus on building an in- house digital collaboration and communication tool for groups and teams. Rather than re-invent the wheel UNSW has decided that it finds the functionality of Slack https://slack.com/intl/en-au/ to be nearly exactly what it needs. For this reason UNSW has contracted out Rayden Pty Ltd a small software business run by Rob and Hayden to build the new product. In UNSW's attempt to connect with the younger and more "hip" generation that fell in love with flickr Tumblr etc they would like to call the new UNSW-based product slackr. Rayden Pty Ltd has sub-contracted two software firms: BananaPie Pty Ltd two software developers Sally and Bob who will build the initial web-based GUI YourTeam Pty Ltd a team of talented misfits completing COMP1531 in 19T3 who will build the backend python server and possibly assist in the GUI later in the project In summary UNSW contracts Rayden Pty Ltd who sub contracts: BananaPie Sally and Bob for front end work YourTeam you and others for backend work Rayden Pty Ltd met with Sally and Bob the front end development team 2 weeks ago to brief them on this project. While you are still trying to get up to speed on the requirements of this project Sally and Bob understand the requirements of the project very well. Because of this they have already specified a common interface for the front end and backend to operate on. This allows both parties to go off and do their own development and testing under the assumption that both parties comply will comply with the common interface. This is the interface you are required to use Beside the information available in the interface that Sally and Bob provided you have been told so far that the features of slackr that UNSW would like to see implemented include: e. Ability to login register if not logged in and log out f. Ability to reset password if forgotten it g. Ability to see a list of channels h. Ability to create a channel join a channel invite someone else to a channel and leave a channel i. Within a channel ability to view all messages view the members of the channel and the details of the channel j. Within a channel ability to send a message now or to send a message at a specified time in the future k. Within a channel ability to edit remove pin unpin react or unreact to a message l. Ability to view user anyone's user profile and modify a user's own profile name email handle and profile photo m. Ability to search for messages based on a search string en. Ability to modify a user's admin privileges: MEMBER ADMIN OWNER ee. Ability to begin a "standup" which is a 15 minute period where users can send messages that at the end of the period will automatically be collated and summarised to all users To get further information about the requirements Rayden Pty Ltd has provided a pre-recorded video briefing with verbal and visual descriptions of what UNSW would like to see in the Slackr product. This can be found HERE https://youtu.be/0_jaxpOSoj4. Hint: This video should be the main source of information from which you derive your user stories After your week 2 tutorial you should know who your team members are. Follow the instructions on the tutorial sheet to ensure your team is registered. You need to do this by Thursday 9PM in week 2. If you registered your team on time then on Sunday of week 2 you should have access to an individual repository at this URL: https://gitlab.cse.unsw.edu.au/COMP1531/19T3/team_name https://gitlab.cse.unsw.edu.au/COMP1531/19T3/team_name where team-name is the name of your group as registered on the course website. During your lab class in weeks without demonstrations see below you and your team will conduct a short stand-up in the presence of your tutor. Each member of the team will briefly state what they have done in the past week what they intend to do over the next week and what issues they faced or are currently facing. This is so your tutor who is acting as a representative of the client is kept informed of your progress. They will make note of your presence and may ask you to elaborate on the work you've done. COMPLETED Setup Progress check-in Iteration 1: Tests and Stories Iteration 2: Servers and Products 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 3 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master In this iteration you are expected to: e. Implement the backend interface functions including storage of the data and wrap them in a flask webserver f. Provide assurances that your backend implementation is fit for purpose. Consider both verification and validation when doing this. This will at a minimum require acceptance criteria for your user stories. Briefly describe the strategies you followed and tools you used to achieve this in assurance.md . g. Track your progress via the task board on GitLab. h. Reflect on your use of agile practices and how you worked as a team. Your reflection should at a minimum include: How often you met and why you met that often What methods you used to ensure that meetings were successful What steps you took when things did not go to plan during iteration to Details on how you had multiple people working on the same code Write this in teamwork.md . This iteration is due to be submitted at 8pm Sunday 27th October week 6. You will then be demonstrating this in your week 7 lab week 8 for monday tutes. All team members must attend this lab session. To submit one team member must run this command in the CSE environment: 1531 submit iteration2 Only one team member is required to submit for the entire groups submission to be recorded. Make sure that everything you intend to submit is included in your repo. When you submit the following commands will be executed in the root of your repo. It is up to you how you choose to use the results of these commands but you will need to confirm your submission if any of them fail. python3-coverage run --branch --source=server -m pytest Runs pytest over all python files in server and collects coverage information. python3-coverage report Generates a simple report based on the above test run. pylint3 server/* Runs pylint over the all files in server . Open a terminal and in your project directory run: python3 server.py This will begin a very simple server. To play around with this server in another terminal you can run the following commands to make a GET request and get a response: curl 'http://127.0.0.1:5000/echo/get?echo=helloworld curl -d "echo=helloworld" -X POST 'http://127.0.0.1:5000/echo/post' More information about running this server will be provided in week 4. As you know in this iteration you will have to store data to implement the backend. This will be discussed in week 5/6 lectures but in the meantime you can simply use a single global variable containing nested dictionaries/lists to store the data. Details concerning the front-end will be released in week 5. Task Submission Running the server Storage of data Connecting to the frontend Project/COMP1531/19T3-cs1531-project Repository/COMP1531/19T3-cs1531-project/tree/master ෈կ/COMP1531/19T3-cs1531-project/tree/master ൉Ի/COMP1531/19T3-cs1531-project/commits/master ړඪ/COMP1531/19T3-cs1531-project/branches ຽᓋ/COMP1531/19T3-cs1531-project/tags ᨯሠᘏ/COMP1531/19T3-cs1531-project/graphs/master ړඪࢶ/COMP1531/19T3-cs1531-project/network/master ྲ᫾/COMP1531/19T3-cs1531-project/compare?from=master&to=master ᕹᦇࢶ/COMP1531/19T3-cs1531-project/graphs/master/charts CI / CD/COMP1531/19T3-cs1531-project/pipelines Wiki/COMP1531/19T3-cs1531-project/wikis/home Snippets/COMP1531/19T3-cs1531-project/snippets Members/COMP1531/19T3-cs1531-project/settings/members 1 … … … /COMP1531/19T3- cs1531-project 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 4 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master Section Weighting Criteria Implementation 50% All interface functions are implemented correctly based on the specification Backend tested and working with frontend provided Appropriate data structures are used to store application state. The flask wrapper for the interface is complete and functional. Assurance 25% Demonstration of an understanding of the need for software verification and validation Development of appropriate acceptance criteria based on user stories and requirements. Demonstration of appropriate tool usage for assurance code coverage linting etc. Teamwork 25% Consistent work towards the goal of a working backend. Task board is always up to date and reflects ongoing work Demonstration of appropriate use of agile practices to work effectively as a team. When you demonstrate this iteration the breakdown will go approximately like this: 5 minutes of presenting your code tests and how it integrates with the provided front-end 10 minutes of Q&A from the tutors including questions about how your team worked as a group Details will be released in week 7 Variable name Type named exactly email string named exactly id integer named exactly password string named exactly token string named exactly message string contains substring name string contains substring code string has prefix is_ boolean has prefix time_ datetime Marking Criteria Demonstration Iteration 3: Improvements from customer feedback Interface specifications from Sally and Bob Data types 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 5 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master has suffix _id integer has suffix _url string has suffix _str string has suffix end integer has suffix start integer outputs only named exactly messages List of dictionaries where each dictionary contains types { message_id u_id message time_created reacts is_pinned } outputs only named exactly reacts List of dictionaries where each dictionary contains types { react_id u_ids is_this_user_reacted } where react_id is the id of a react and u_ids is a list of user id's of people who've reacted for that react. is_this_user_reacted is whether or not the authorised user has been one of the reacts to this post outputs only named exactly channels List of dictionaries where each dictionary contains types { channel_id name } outputs only named exactly members List of dictionaries where each dictionary contains types { u_id name_first name_last } Many of these functions nearly all of them need to be called from the perspective of a user who is logged in already. When calling these "authorised" functions we need to know: 1 Which user is calling it 2 That the person who claims they are that user is actually that user We could solve this trivially by storing the user ID of the logged in user on the front end and every time the front end from Sally and Bob calls your background they just sent a user ID. This solves our first problem 1 but doesn't solve our second problem! Because someone could just "hack" the front end and change their user id and then log themselves in as someone else. To solve this when a user logs in or registers the backend should return a "token" an authorisation hash that the front end will store and pass into most of your functions in future. When these "authorised" functions are called you can check if a token is valid and determine the user ID. The details of how to deal with this authroisation will be covered in week 5. The AccessError is not one of Python's built in types. For iteration one you can either: Just use another error as a placeholder for now Make your own AccessError as per instructions that we have provided https://webcms3.cse.unsw.edu.au/COMP1531/19T3/resources/35860 Members in a channel have two permissions. 1 Owner of the channel the person who created it and whoever else that creator adds 2 Members of the channel Slackr user's have three permissions 1 Owners which have the same privileges as an admin permission_id 1. 2 Admins who have special permissions that members don't permission_id 2 Admins have the same capabilities as owners except that admins cannot change owner's permissions 3 Members who do not have any special permissions permission_id 3 All slackr members are by default members except for the very first user who signs up who is an owner A user's primary permissions are their "Slackr" permissions. Then the channel permissions are layered on top. For example: An owner of slackr is an owner in every channel An admin of slackr is an owner in every channel Token Access Error Permissions: 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 6 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master A member of slackr is a member in channels they are not owners of A member of slackr i s an owner in channels they are owners of Once standups are finished all of the messages sent to standup/send are packaged together in one single message posted by the user who started the standup and sent as a message to the channel the standup was started in timestamped at the moment the standup finished. The structure of the packaged message is like this: For example hayden: I ate a catfish rob: I went to kmart michelle: I ate a toaster isaac: my catfish ate a toaster HTTP Request Endpoint name Parameters Return type Exception Description POST echo/post echo {echo} Returns the input GET echo/get echo {echo} Returns the input POST auth/login email password { u_id token } ValueError when: Email entered is not a valid email using the method provided here https://www.geeksforgeeks.org/check- if-email-address-valid-or-not-in- python/ unless you feel you have a better method Email entered does not belong to a user Password is not correct Given a registered users' email and password and generates a valid token for the user to remain authenticated POST auth/logout token { is_success } N/A Given an active token invalidates the taken to log the user out. If a valid token is given and the user is successfully logged out it returns true otherwise false. POST auth/register email password name_first name_last { u_id token } ValueError when: Email entered is not a valid email using the method provided here https://www.geeksforgeeks.org/check- if-email-address-valid-or-not-in- python/ unless you feel you have a better method. Email address is already being used by another user Password entered is less than 6 characters long name_first not is between 1 and 50 characters in length name_last is not between 1 and 50 characters in length Given a user's first and last name email address and password create a new account for them and return a new token for authentication in their session. A handle is generated that is the concatentation of a lowercase-only first name and last name. If the concatenation is longer than 20 characters it is cutoff at 20 characters. If the handle is already taken you may modify the handle in any way you see fit to make it unique. POST auth/passwordreset/request email {} N/A Given an email address if the user is a registered user send's them a an email containing a specific secret code that when entered in auth_passwordreset_reset shows that the user trying to reset the password is the one who got sent this email. POST auth/passwordreset/reset reset_code {} ValueError when: Given a reset code for a Standups Interface 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 7 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master new_password reset_code is not a valid reset code Password entered is not a valid password user set that user's new password to the password provided POST channel/invite token channel_id u_id {} ValueError when: channel_id does not refer to a valid channel that the authorised user is part of. u_id does not refer to a valid user AccessError when the authorised user is not already a member of the channel Invites a user with user id u_id to join a channel with ID channel_id. Once invited the user is added to the channel immediately GET channel/details token channel_id { name owner_members all_members } ValueError when: Channel ID is not a valid channel AccessError when Authorised user is not a member of channel with channel_id Given a Channel with ID channel_id that the authorised user is part of provide basic details about the channel GET channel/messages token channel_id start { messages start end } ValueError when: Channel ID is not a valid channel start is greater than or equal to the total number of messages in the channel AccessError when Authorised user is not a member of channel with channel_id Given a Channel with ID channel_id that the authorised user is part of return up to 50 messages between index "start" and "start + 50". Message with index 0 is the most recent message in the channel. This function returns a new index "end" which is the value of "start + 50" or if this function has returned the least recent messages in the channel returns -1 in "end" to indicate there are no more messages to load after this return. POST channel/leave token channel_id {} ValueError when: Channel ID is not a valid channel Given a channel ID the user removed as a member of this channel POST channel/join token channel_id {} ValueError when: Channel ID is not a valid channel AccessError when channel_id refers to a channel that is private when the authorised user is not an admin Given a channel_id of a channel that the authorised user can join adds them to that channel POST channel/addowner token channel_id u_id {} ValueError when: Channel ID is not a valid channel When user with user id u_id is already an owner of the channel AccessError when the authorised user is not an owner of the slackr or an owner of this channel Make user with user id u_id an owner of this channel POST channel/removeowner token channel_id u_id {} ValueError when: Channel ID is not a valid channel When user with user id u_id is not an owner of the channel AccessError when the authorised user is not an owner of the slackr or an owner of this channel Remove user with user id u_id an owner of this channel 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 8 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master GET channels/list token { channels } N/A Provide a list of all channels and their associated details that the authorised user is part of GET channels/listall token { channels } N/A Provide a list of all channels and their associated details POST channels/create token name is_public { channel_id } ValueError when: Name is more than 20 characters long Creates a new channel with that name that is either a public or private channel POST message/sendlater token channel_id message time_sent { message_id } ValueError when: Channel ID is not a valid channel Message is more than 1000 characters Time sent is a time in the past AccessError when: the authorised user has not joined the channel they are trying to post to Send a message from authorised_user to the channel specified by channel_id automatically at a specified time in the future POST message/send token channel_id message { message_id } ValueError when: Message is more than 1000 characters AccessError when: the authorised user has not joined the channel they are trying to post to Send a message from authorised_user to the channel specified by channel_id DELETE message/remove token message_id {} ValueError when: Message based on ID no longer exists AccessError when none of the following are true: Message with message_id was sent by the authorised user making this request The authorised user is an admin or owner of this channel or the slackr Given a message_id for a message this message is removed from the channel PUT message/edit token message_id message {} AccessError when none of the following are true: Message with message_id was sent by the authorised user making this request The authorised user is an admin or owner of this channel or the slackr Given a message update it's text with new text POST message/react token message_id react_id {} ValueError when: message_id is not a valid message within a channel that the authorised user has joined react_id is not a valid React ID Message with ID message_id already contains an active React with ID react_id Given a message within a channel the authorised user is part of add a "react" to that particular message POST message/unreact token message_id react_id {} ValueError when: message_id is not a valid message within a channel that the authorised user has joined react_id is not a valid React ID Message with ID message_id does not contain an active React with ID react_id Given a message within a channel the authorised user is part of remove a "react" to that particular message POST message/pin token message_id {} ValueError when: message_id is not a valid message Given a message within a channe l mark it as 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 9 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master The authorised user is not an admin Message with ID message_id is already pinned AccessError when The authorised user is not a member of the channel that the message is within "pinned" to be given special display treatment by the frontend POST message/unpin token message_id {} ValueError when: message_id is not a valid message The authorised user is not an admin Message with ID message_id is already unpinned AccessError when The authorised user is not a member of the channel that the message is within Given a message within a channel remove it's mark as unpinned GET user/profile token u_id { email name_first name_last handle_str } ValueError when: User with u_id is not a valid user For a valid user returns information about their email first name last name and handle PUT user/profile/setname token name_first name_last {} ValueError when: name_first is not between 1 and 50 characters in length name_last is not between 1 and 50 characters in length Update the authorised user's first and last name PUT user/profile/setemail token email {} ValueError when: Email entered is not a valid email using the method provided here https://www.geeksforgeeks.org/check- if-email-address-valid-or-not-in- python/ unless you feel you have a better method. Email address is already being used by another user Update the authorised user's email address PUT user/profile/sethandle token handle_str {} ValueError when: handle_str must be between 3 and 20 characters handle is already used by another user Update the authorised user's handle i.e. display name POST user/profiles/uploadphoto note: this is not requried to be completed until iteration 3 token img_url x_start y_start x_end y_end {} ValueError when: img_url is returns an HTTP status other than 200. any of x_start y_start x_end y_end are not within the dimensions of the image at the URL. Given a URL of an image on the internet crops the image within bounds x_start y_start and x_end y_end. Position 00 is the top left. POST standup/start token channel_id { time_finish } ValueError when: Channel ID is not a valid channel An active standup is currently running in this channel AccessError when The authorised user is not a member of the channel that the message is within For a given channel start the standup period whereby for the next 15 minutes if someone calls "standup_send" with a message it is buffered during the 15 minute window then at the end of the 15 minute window a message will be added to the message queue in the channel from the user who started the standup. POST standup/send token {} ValueError when: Sending a message to get 2019/10/20 上午12'43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 10 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master channel_id message Channel ID is not a valid channel Message is more than 1000 characters An active standup is not currently running in this channel AccessError when The authorised user is not a member of the channel that the message is within buffered in the standup queue assuming a standup is currently active GET search token query_str { messages } N/A Given a query string return a collection of messages in all of the channels that the user has joined that match the query POST admin/userpermission/change token u_id permission_id {} ValueError when: u_id does not refer to a valid user permission_id does not refer to a value permission AccessError when The authorised user is not an admin or owner Given a User by their user ID set their permissions to new permissions described by permission_id For all functions except auth_register auth_login Error thrown when token passed in is not a valid token The behaviour in which channel_messages returns data is called pagination. It's a commonly used method when it comes to getting theoretially unbounded amounts of data from a server to display on a page in chunks. Most of the timelines you know and love - Facebook Instagram LinkedIn - do this. For example if we imagine a user with token "12345" is trying to read messages from channel with ID 6 and this channel has 124 messages in it 3 calls from the client to the server would be made. These calls and their corresponding return values would be: channel_messages"12345" 6 0 => { >messages@ 0 49 } channel_messages”12345″ 6 50 => { >messages@ 50 99 } channel_messages”12345″ 6 100 => { >messages@ 100 -1 } Iteration Code and report due Demonstration to tutors Assessment weighting of project % 1 8pm Sunday 6th October week 3 In YOUR week 4 laboratory week 5 for monday tutes 30% 2 8pm Sunday 27th October week 6 In YOUR week 7 laboratory 40% 3 8pm Sunday 17th November week 9 In YOUR week 10 laboratory 30% While it is up to you as a team to decide how work is distributed between you for the purpose of assessment there are certain key criteria all members must. Code contribution Documentation contribution Usage of git/GitLab Attendance Peer assessment Errors for all functions AccessError Pagination Due Dates and Weightings Expectations 2019/10/20 上午12’43⽂文件 · master · COMP1531 / 19T3-cs1531-project · GitLab 第 11 ⻚页(共 11 ⻚页)https://gitlab.cse.unsw.edu.au/COMP1531/19T3-cs1531-project/tree/master Academic conduct The details of each of these is below. While in general all team members will receive the same mark a sum of the marks for each iteration if you as an individual fail to meet these criteria your final project mark may be scaled down most likely quite significantly. All team members must contribute code to the project. Tutors will assess the degree to which you have contributed by looking at your git history and analysing lines of code number of commits timing of commits etc. If you contribute significantly less code than your team members your work will be closely examined to determine what scaling needs to be applied. All team members must contribute documentation to the project. Tutors will assess the degree to which you have contributed by looking at your git history but also asking questions essentially interviewing you during your demonstration. Note that contributing more documentation is not a substitute for not contributing code. You will be required to complete a form in week 10 where you rate each team member’s contribution to the project and leave any comments you have about them. Information on how you can access this form will be released closer to Week 10. Your other team members will not be able to see how you rated them or what comments you left. If your team members give you a less than satisfactory rating your contribution will be scrutinised and you may find your final mark scaled down. It is generally assumed that all team members will be present at the demonstrations and at weekly check-ins. If you’re absent for more than 80% of the weekly check-ins or any of the demonstrations your mark may be scaled down. If due to exceptional circumstances you are unable to attend your lab for a demonstration inform your tutor as soon as you can so they can record your absence as planned. The work you and your group submit must be your own work. Submission of work partially or completely derived from any other person or jointly written with any other person is not permitted. The penalties for such an offence may include negative marks automatic failure of the course and possibly other academic discipline. Assignment submissions will be examined both automatically and manually for such submissions. Relevant scholarship authorities will be informed if students holding scholarships are involved in an incident of plagiarism or other misconduct. Do not provide or show your project work to any other person except for your group and the teaching staff of COMP1531. If you knowingly provide or show your assignment work to another person for any reason and work derived from it is submitted you may be penalized even if the work was submitted without your knowledge or consent. This may
apply even if your work is submitted by a third party unknown to you. Note you will not be penalized if your work has the potential to be taken without your consent or knowledge. Code contribution Documentation contribution Peer Assessment Attendance Plagiarism

admin

Author admin

More posts by admin