Task Conceptually, Assignment 2 is fairly straightforward: Organize a meeting with your assigned team members. Get together online. Establish a ‘team charter’ setting out the teams expectations (rights and responsibilities) of each team member. Establish a version control repository. Download the provided code and import it to the repository as a code baseline. Create an individual branch for each team member. Equitably divide up the required development task between team members. Carry out your assigned development tasks using best practice version control within your individual branch. When you have completed your development task, conduct a static code review. Merge your reviewed code with the team repository. Note: Steps 1 through 4 constitute the engagement task which is used to monitor your involvement in the subject. Because of the dependencies between students in a team assignment, the engagement task is marked as satisfactory/unsatisfactory and you can fail the subject if you receive an unsatisfactory assessment for that task. Note: You are expected to establish and use a push communication mechanism to facilitate rapid and responsive communication between team members outside of the scheduled online meetings. Tasks 1. Teamwork (40 marks) a) Initiate contact with other team members. Organise and hold an initial team meeting*. You will be notified of your team members and allocated an online meeting room URL by your subject coordinator. You will also be provided access to your team’s wiki via the subject Interact site. At that meeting: i. Establish a clear set of expectations, obligations and guidelines for communication and coordination. Document these in a team charter document. ii. Establish a schedule of fortnightly team meetings and include that schedule in the team charter document. For the duration of this assignment, hold fortnightly meetings as scheduled, and record minutes for each meeting. Rotate the role of meeting chairperson together with responsibility for recording minutes between team members. Each team member should be responsible for chairing and recording meeting minutes for at least one meeting by the due date for the assignment. At each team meeting: * Record attendance at the meeting, and any reasons provided for non-attendance. * Review work items scheduled to have been completed over the previous fortnight. Record the completion status and any explanatory information for non-completion in the minutes of the meeting. * Discuss and plan work items to be completed in the following fortnight. Record the work items identified and who is assigned to complete which work item in the meeting minutes. * Upload the meeting minutes to your team wiki. b) Carry out your assigned work items as assigned at the team meeting in the scheduled timeframe. c) Participate effectively in at least 3 static code reviews, taking on the role of mediator, reviewer, and author at least once per role. d) At the completion of the assignment, perform a confidential assessment of your own and other team members contribution to the success or otherwise of this assignment, using the form provided on the subject website. Upload your completed peer assessments to EASTS. 2. Version Control (20 marks) a) As a group, download the files provided for the assignment from the subject website, and establish a code baseline under version control. Use github or any other free publically accessible GIT or SVN repository. Make sure every member of the team has read/write access. Grant the lecturer at least read access, and email them the URL for the repository. Post the URL in the team wiki as well. b) As an individual, create a branch for your own line of code development. Grant the lecturer read access and email them the URL for your individual repository. Post the URL in the team wiki as well. c) As an individual, carry out the development tasks assigned to you by the group, committing your work to version control following best practice guidelines. d) As an individual, when you have finished individual development, at the beginning of the static code review process, when you are notified by the review mediator, update your branch with the latest version of the main line of development (ie the version produced by the merge following the latest static review), and ensure that the updated branch version works as required. Note: you may find it easier and more convenient to create a 'merge branch' from the central repository following any previous merge, and then combine your local branch with that in order to generate an 'update' containing all the code you have developed based on the most recent verion of the main line of development. e) Following the static code review process detailed as Task 3 of this assignment, merge your code with the main line of development**. Ensure that the main line of development functions correctly following your merge. Correct operation of the main line of development must be verified after the merge by the mediator for the static review. 3. Static Code Review (40 marks) a) As a group, organise a set of tool assisted static code reviews to ensure each team member’s code development is acceptable before allowing a merge with the main line of development***. You will be supplied with a URL and a login to access an online code review tool during the first few weeks of semester. A HowTo video demonstrating how to submit code for review will also be made available. It is mandatory to use the supplied code review tool, since this provides the audit trail necessary to assess this section of the assignment. The entire team should participate in each review. Each review should consist of at least three roles: a mediator/organizer, a reviewer, and an author. If there are more than 3 team members, enact additional review roles. The code to be reviewed is all code developed by the author, including any changes made to the mainline of development in order to resolve conflicts during the merge. IE the code to be reviewed is the final code that will be incorporated without change in the main line of development. * It is the mediator’s responsibility to ensure that the author delivers code for review by the time the review is scheduled, and that the reviewer carries out the review within the scheduled period. It is also the mediator’s role to ensure that any follow up work required is carried out in a timely manner. It is the mediator’s role to clarify any misunderstandings and mediate any disagreements between reviewers and author, or between reviewers. It is the mediator’s responsibility to ensure that the main line of development is working as expected before notifying the author to update their branch with the results of the latest merge prior to the static code review process****. It is also the mediator’s responsibility to verify that the main line of code is working properly after the author has carried out the final merge. * It is the reviewer’s responsibility to review the submitted code and ensure it meets the required standards*****, within the scheduled period. The reviewer must record every instance of non-compliance with standards and all detected bugs. It is also the reviewer’s responsibility to promptly review any rework submitted in response to one of their comments, and to notify the mediator when rework has been approved. * It is the author’s responsibility to provide the required code at the required standard by the time the review is scheduled. It is also the author’s responsibility to carry out any follow up work needed to address every recorded issues and submit the revised code to the mediator’s satisfaction in a timely manner. (Timely as defined by the team, not the author) Most importantly it is the author’s responsibility to merge approved code with the team repository and ensure that the main line of development works as it should following the final merge. b) Carry out the code review for each team member’s development. Once the mediator has established that all issues have been satisfactorily addressed, the author may perform a merge** with the main line of development. The mediator for the review must verify the success of the merge and inform the next scheduled review’s mediator that the main line of development is ready. *Distributed teamwork is difficult and inconvenient, and the essence of teamwork is compromise. You must make yourself available to participate in team meetings once a week at a time that is generally acceptable to a majority of team members, even if it is somewhat inconvenient to yourself. Negotiation is acceptable. Rigid insistence on personal preference is not. Make it happen. Use weekends if necessary. If you can’t make it to a generally favoured time be prepared to explain your objections with substantive reasons. Reasons such as favourite televisions shows, or preferring to go out at that time are not acceptable. **By far the best and safest way to perform a merge is to update the individual branch with the latest version of the main line of development and ensure that everything works properly in the branch, before merging the final result in the branch with the main line of development. Note also that it is absolutely critical that updates/merges with the main line of development should be coordinated and sequential. No modifications to the main line should occur between the merges following the successful completion each team member’s static review. The static reviews and merges should be sequential, and following the first review, each team member should update their branch with the results of a successful merge from the previous review. It is a good idea to organize reviews and update/merges in order from least experienced to most experienced programmer. ***Do not underestimate the difficulty and time required to review and integrate three or more separate developer’s code contributions. The submit/review/rework/approve cycle can take several days, so the entire process can easily take over a week. Aim to complete individual development well before the due date for the assignment (at least a week) in order to leave sufficient time to complete the review process properly. Remember, the focus in this assignment is on teamwork, correct use of version control, and correct carrying out of the static code review process – not on the actual code development, which is quite trivial. ****Clearly, combining the work of multiple developers is a complicated, brittle process that requires a great deal of coordination. It is not just an individual’s effort that needs review, but how that effort fits together with previous work. This is why reviews have to be sequential, and why the results of the previous review and merge need to be incorporated before each subsequent review. The alternative is to conduct a code review both before and after merging with the main line of development, which is impractical for this subject. You may find that it greatly facilitates a rapid and problem free formal review to conduct informal peer reviews (over-the-shoulder reviews) during development. Given the multiple sequential dependencies, it is critical that mediators coordinate their reviews closely, and it is also critical that early reviews and merges complete in a timely fashion. *****A copy of relevant coding standards will be available on the subject web site. Rationale To demonstrate and apply taught concepts, and exercise skills related to teamwork, version control, and static code review. Marking criteria Teamwork - (Peer assessment 60%, lecturer assessment 40%) Criteria Fail Pass Credit Distinction High Distinction How well did the student perform as part of a team? Generally described by the following characteristics: Generally described by the following characteristics: Generally described by the following characteristics: Generally described by the following characteristics: Generally described by the following characteristics: Effort Did practically nothing Did minimal required work when monitored. Did required work without monitoring. Went beyond basic requirements to facilitate progress. Did whatever was necessary to ensure success. Reliability Almost never did what they said. Sometimes did what they said. Generally did what they said. Nearly always did what they said. Always did what they said. Timeliness Almost never delivered on time. Sometimes delivered on time. Generally delivered on time. Nearly always delivered on time. Always delivered on time. Competence Consistently unacceptably poor work. Not worth reworking, had to be redone from scratch. Work generally of low standard, many errors. Required a lot of rework to reach required standard. Work of reasonable standard. Some rework required. Work of high standard. Minimal rework required. Work of very high standard. No rework required. Group Dynamics Did not contribute or was pointlessly argumentative. Would not compromise. Constantly distracted or distracting. Feedback tended to be personal criticism. Reacted negatively to constructive feedback. Contributed when prompted. Possibly obstinate. Easily distracted. Feedback generally not constructive.t. Not readily accepting of constructive feedback. Contributed usefully to group discussions. Able to compromise. Tended to stay on topic, but could be distracted. Feedback focused on work but tended to be negative. Open to constructive feedback and discussion. Contributed usefully and creatively to group discussions. Willing to compromise. Stayed on topic, hard to distract. Valuable feedback focused on work and constructive. Open to constructive feedback and discussion. Actioned feedback. Lead discussions, sought out other’s contributions. Synthesized compromise to facilitate progress. Stayed on topic, hard to distract, brought group back on topic. Feedback always insightful, constructive, and actionable. Willingly accepted and actioned feedback. Meeting Chair Extremely late or did not show up. Unfamiliar with current status of work. Disorganized. Ineffective at keeping meeting on topic. Allowed discussions to degenerate into personal arguments. Failed to record meeting minutes. Failed to post meeting minutes in wiki. Late. Somewhat familiar with current status of work. Somewhat organized. Somewhat effective at keeping meeting on topic. Intervened after discussions had become personal. Meeting minutes sketchy and incomplete. Meeting minutes posted days after meeting occurred. On time. Generally familiar with current status of work. Organized. Generally effective at keeping meeting on topic. Intervened at the point when discussions became personal. Meeting minutes minimal but complete. Meeting minutes posted a day after meeting occurred. Early. Completely familiar with current status of work. Highly organized. Had agenda. Effective at keeping meeting on topic. Intervened before discussions became personal. Meeting minutes thorough and complete. Meeting minutes posted within a day after meeting occurred. All distinction requirements plus: Sought out status information before meeting. Distributed agenda before meeting. Synthesized and summarized contributions to keep meeting making progress. Meeting minutes posted within an hour or two after meeting occurred. Version Control Criteria Fail (Bad) Pass (OK) Credit (Good) Distinction (Very Good) High Distinction (Excellent) How well did the student follow version control best practice? Generally described by the following characteristics: All and any updates committed once at the very end. No comments. No pushes to central repository. Local branch not updated from team repository before code review/merge. Broke main line of development, and left it like that. Generally described by the following characteristics: Very few commits, applied at long intervals (> 1 week). Comments uninformative One push to online repository at the end of development. Local branch updated from team repository before code review/merge. Required intervention from other team members to successfully complete merge. Generally described by the following characteristics: Few commits, applied when major chunks of work completed (ie >6-8 hours) Comments brief and understandable only in context. Few pushes to online repository. Local branch updated from team repository before code review/merge. Merge successful after a couple of attempts. Generally described by the following characteristics: Many commits, applied when significant chunks of work completed (ie 2-4 hours) Comments brief but understandable. Several pushes to online repository, coordinated with major advances in functionality. Local branch updated from team repository before code review/merge. Merge successful. Generally described by the following characteristics: Many commits, applied whenever it became desirable not to lose completed work (ie ~ 2 hours) Comments thorough and understandable. Many pushes to online repository, coordinated with local commits. Local branch updated from team repository before code review/merge. Merge successful. Static Code Review Criteria Fail Pass Credit Distinction High Distinction How well did the team member perform as part of the code review? Generally described by the following characteristics: Generally described by the following characteristics: Generally described by the following characteristics: Generally described by the following characteristics: All Distinction requirements plus: Author Did not provide code on time. Code quality very poor. Did not respond to reviewers comments. Did not provide code on time. Code quality poor. Responded slowly to reviewers comments. Had to be chased to complete work. Provided code on time. Code quality acceptable. Responded to reviewers comments in a timely manner. Completed work without prompting. Code ready for review early. Code quality very good. Responded to reviewers comments quickly. Completed work without prompting. Code quality extremely high. Reviewer Did not carry out review on time. Review quality poor. Slow carrying out review. Review quality inconsistent. Many errors and inconsistencies unremarked. Had to be chased to complete review. Carried out review on time and without prompting. Review quality reasonable. Some errors and inconsistencies unremarked. Carried out review quickly and without prompting. Review quality high. Few errors and inconsistencies unremarked. No errors or inconsistencies unremarked. Mediator Did not liaise with previous review. Failed to notify author and reviewer that review should commence. Did not keep track of progress of review. Failed to notify next review's mediator when review complete. Passive liaising with previous review. Slow to notify author and reviewer that review should commence. Passive keeping track of progress of review. Slow to notify next review's mediator when review complete. Liaised with previous review in timely manner. Notifed author and reviewer that review should commence in timely manner. Kept track of progress of review. Notifed next review's mediator when review complete. Actively liaised with previous review to track progress. Gave author and reviewers progressive warnings on review's expected commencement. Notified author and reviewers that review should commence in timely manner. Actively tracked of progress of review, and coordinated/mediated reviewer and author activities. Actively liased with next review to inform of progress and completion. Smoothly and politely expedited completion of code review. Presentation There are three aspects of presentation for this assignment: The team wiki. This should contain: Your team charter. The URL for the combined team repository (the main line of development) The URLs for the individual team members development branches. The minutes for each of the team meetings. The combined team version control repository. This should initially contain the provided code baseline, and eventually contain the results of merging each team members separate development. Your individual development repository. This should initially contain the code baseline as branched from the team repository. Eventually it should contain a record of the successive commits you make during development, and finally the results of updating your branch from the central repository prior to code review and merge.