This site is from a past semester! The current version is here.
CS2113/T Aug '19
  • Week 1 [Aug 12]
  • Week 2 [Aug 19]
  • Week 3 [Aug 26]
  • Week 4 [Sep 2]
  • Week 5 [Sep 9]
  • Week 6 [Sep 16]
  • Week 7 [Sep 30]
  • Week 8 [Oct 7]
  • Week 9 [Oct 14]
  • Week 10 [Oct 21]
  • Week 11 [Oct 28]
  • Week 12 [Nov 4]
  • Week 13 [Nov 11]
  • Textbook
  • Admin Info
  • Report Bugs
  • Slack
  • Forum
  • Project Info
  • Instructors
  • Announcements
  • File Submissions
  • Tutorial Schedule
  • Duke
  • Project Phase1 Dashboard
  • Java Coding Standard
  • samplerepo-things
  • Projects List
  • config.json templates for Reposense
  • PersonalAssistant-Duke
  • Project Phase2 Dashboard
  • Reference project - Addressbook
  • Repl.it classroom
  • Project: v1.4 [week 13]Project: Assessment


    Project: Deliverables

    Here is a list of main deliverables of the project; their details are given in the subsequent sections.

    Deliverable: Executable

    • The product should be delivered as an executable jar file.
    • Ideally, the product delivered at v1.4 should be a releasable product. However, in the interest of lowering your workload, we do not penalize if the product is not releasable, as long as the product is acceptance testable.

    Deliverable: Source code

    • The source code should match the executable, and should include the revision history of the source code, as a Git repo.

    Deliverable: User Guide (UG)

    • The User Guide (UG) of the product should match the proposed v2.0 of the product and in sync with the current version of the product.
    • Features not implemented yet should be clearly marked as Coming in v2.0
    • Ensure the UG matches the product precisely, as it will be used by peer testers (and any inaccuracy in the content will be considered bugs).

    Deliverable: Developer Guide (DG)

    • The Developer Guide (DG) of the product should match the proposed v2.0 of the product and should be in sync with the current version of the product.
    • The appendix named Instructions for Manual Testing of the Developer Guide should include testing instructions to cover the features of each team member.
      💡 What to include in the appendix Instructions for Manual Testing? This appendix is meant to give some guidance to the tester to chart a path through the features, and provide some important test inputs the tester can copy-paste into the app. There is no need to give a long list of test cases including all possible variations. It is upto the tester to come up with those variations. However, if the instructions are inaccurate or deliberately misses/mis-states information to make testing harder  i.e. annoys the tester, the tester can report it as a bug  (because flaws in developer docs are considered as bugs).
    • Ensure the DG parts included in PPPs match the product precisely, as PPPs will be used by peer evaluators (and any inaccuracy in the content will be considered bugs).

    Deliverable: Product Website

    • Include an updated version of the online UG and DG that match v1.4 executable
    • README :
      • Ensure the Ui.png matches the current product

    💡 Some common sense tips for a good product screenshot

    Ui.png represents your product in its full glory.

    • Before taking the screenshot, populate the product with data that makes the product look good. For example, if the product is supposed to show photos, use real photos instead of dummy placeholders.
    • It should show a state in which the product is well-populated i.e., don't leave data panels largely blank
    • Choose a state that showcase the main features of the product i.e., the login screen is not usually a good choice
    • Avoid annotations (arrows, callouts, explanatory text etc.); it should look like the product is being in use for real.
         
    • AboutUs : Ensure the following:
      • Use a suitable profile photo
    • The purpose of the profile photo is for the teaching team to identify you. Therefore, you should choose a recent individual photo showing your face clearly (i.e., not too small) -- somewhat similar to a passport photo. Some examples can be seen in the 'Teaching team' page. Given below are some examples of good and bad profile photos.

    • If you are uncomfortable posting your photo due to security reasons, you can post a lower resolution image so that it is hard for someone to misuse that image for fraudulent purposes. If you are concerned about privacy, you can request permission to omit your photo from the page by writing to prof.

    • Contains a link to each person's Project Portfolio page
    • Team member names match full names used by LumiNUS

    Deliverable: Project Portfolio Page (PPP)

    At the end of the project each student is required to submit a Project Portfolio Page.

    • Objective:

      • For you to use  (e.g. in your resume) as a well-documented data point of your SE experience
      • For us to use as a data point to evaluate your,
        • contributions to the project
        • your documentation skills
    • Sections to include:

      • Overview: A short overview of your product (can use the product introduction you wrote earlier) to provide some context to the reader.

      • Summary of Contributions:

        • Code contributed: Give a link to your code on Project Code Dashboard, which should be https://nuscs2113-ay1920s1.github.io/dashboard/#=undefined&search=github_username_in_lower_case (replace github_username_in_lower_case with your actual username in lower case e.g., johndoe). This link is also available in the Project List Page -- linked to the icon under your photo.
        • Features implemented: A summary of the features you implemented. If you implemented multiple features, you are recommended to indicate which one is the biggest feature.
        • Other contributions:
          • Contributions to project management e.g., setting up project tools, managing releases, managing issue tracker etc.
          • Evidence of helping others e.g. responses you posted in our forum, bugs you reported in other team's products,
          • Evidence of technical leadership e.g. sharing useful information in the forum
      • Relevant descriptions/terms/conventions: Include all relevant details necessary to understand the document, e.g., conventions, symbols or labels introduced by you, even if it was not introduced by you.

      • Contributions to the User Guide: Reproduce the parts in the User Guide that you wrote. This can include features you implemented as well as features you propose to implement.
        The purpose of allowing you to include proposed features is to provide you more flexibility to show your documentation skills. e.g. you can bring in a proposed feature just to give you an opportunity to use a UML diagram type not used by the actual features.

      • Contributions to the Developer Guide: Reproduce the parts in the Developer Guide that you wrote. Ensure there is enough content to evaluate your technical documentation skills and UML modelling skills. You can include descriptions of your design/implementations, possible alternatives, pros and cons of alternatives, etc.

      • If you plan to use the PPP in your Resume, you can also include your SE work outside of the module (will not be graded)

    • Format:

      • File name: [TEAM_ID]-[Your Name]PPP.pdf e.g., [AY1920S1-CS2113T-F10-3][John Doe]PPP.pdf

      • Use one-half spacing between the lines for legibility

      • Follow this example. A PDF version of the same has been uploaded on LumiNUS.

      • 💡 You are free to choose any (collaborative) software to write the documents. However, try to follow the format of the sample user guide, developer guide and PPP given.

      • Do note that extra effort is needed in duplicating and maintaining consistency across UG/DG and PPP. This is a cost of not using automated document generation.

      • It is assumed that all contents in the PPP were written primarily by you. If any section is written by someone else  e.g. someone else described the feature in the User Guide but you implemented the feature, clearly state that the section was written by someone else  (e.g. Start of Extract [from: User Guide] written by Jane Doe).  Reason: Your writing skills will be evaluated based on the PPP

    • Page limit:

      Content Limit
      Overview + Summary of contributions 0.5-1 (soft limit)
      Contributions to the User Guide 2-4 (soft limit)
      Contributions to the Developer Guide 3-5 (soft limit)
      Total 5-8 (strict)
      • Reason for page limit: These submissions are peer-graded (in the PE) which needs to be done in a limited time span.

      • If you have more content than the limit given above, you can give a representative samples of UG and DG that showcase your documentation skills. Those samples should be understandable on their own. For the parts left-out, you can give an abbreviated version and refer the reader to the full UG/DG for more details.

      • It's similar to giving extra details as appendices; the reader will look at the UG/DG if the PPP is not enough to make a judgment. For example, when judging documentation quality, if the part in the PPP is not well-written, there is no point reading the rest in the main UG/DG. That's why you need to put the most representative part of your writings in the PPP and still give an abbreviated version of the rest in the PPP itself. Even when judging the quantity of work, the reader should be able to get a good sense of the quantity by combining what is quoted in the PPP and your abbreviated description of the missing part. There is no guarantee that the evaluator will read the full document.

    Deliverable: Demo

    • Duration: Strictly 18 minutes for a 5-person team and 15 minutes for a 4-person team. Exceeding this limit will be penalized. Any set up time will be taken out of your allocated time.

    • Target audience: Assume you are giving a demo to a higher-level manager of your company, to brief him/her on the current capabilities of the product. This is the first time they are seeing the new product you developed but they are familiar with CLI based products. The actual audience are the evaluators (the team supervisor and another tutor).

    • Scope:

      • Each person should demo the enhancements they added. However, it's ok for one member to do all the typing.
      • Subjected to the constraint mentioned in the previous point, as far as possible, organize the demo to present a cohesive picture of the product as a whole, presented in a logical order.  Remember to explain the profile of the target user profile and value proposition early in the demo.
      • It is recommended you showcase how the feature improves the user’s life rather than simply describe each feature.
      • No need to cover design/implementation details as the manager is not interested in those details.
      • Mention features you inherited from Duke only if they are needed to explain your new features.  Reason: existing features will not earn you marks, and the audience is already familiar with Duke features.
    • Structure:

      • Demo the product using the same executable you submitted, on your own laptop, using the TV.
      • It can be a sitting down demo: You'll be demonstrating the features using the TV while sitting down. But you may stand around the TV if you prefer that way.
      • It will be an uninterrupted demo: The audience members will not interrupt you during the demo. That means you should finish within the given time.
      • The demo should use a sufficient amount of realistic demo data.  e.g at least 20 data items. Trying to demo a product using just 1-2 sample data creates a bad impression.
      • Dress code : The level of formality is up to you, but it is recommended that the whole team dress at the same level.
    • Optimizing the time:

      • Spend as much time as possible on demonstrating the actual product. Not recommended to use slides (if you do, use them sparingly) or videos or lengthy narrations.
        Avoid skits, re-enactments, dramatizations etc. This is not a sales pitch or an informercial. While you need to show how a user use the product to get value, but you don’t need to act like an imaginary user. For example, [Instead of this] Jim get’s a call from boss. "Ring ring", "hello", "oh hi Jim, can we postpone the meeting?" "Sure". Jim hang up and curses the boss under his breath. Now he starts typing ..etc. [do this] If Jim needs to postpone the meeting, he can type … It’s not that dramatization is bad or we don’t like it. We simply don’t have enough time for it.
        Note that CS2101 demo requirements may differ. Different context → Different requirements.
      • Rehearse the steps well and ensure you can do a smooth demo. Poor quality demos can affect your grade.
      • Don’t waste time repeating things the target audience already knows. e.g. no need to say things like "We are students from NUS, SoC".
      • Plan the demo to be in sync with the impression you want to create. For example, if you are trying to convince that the product is easy to use, show the easiest way to perform a task before you show the full command with all the bells and whistles.
    • Special circumstances:

      • If a significant feature was not merged on time: inform the evaluator and get permission to show the unmerged feature using your own version of the code. Unmerged features earn much less marks than a merged equivalent but something is better than nothing.
      • If you have no user visible features to show, you can still contribute to the demo by giving an overview of the product (at the start) and/or giving a wrap of of the product (at the end).
      • If you are unable to come to the demo due to a valid reason, you can ask a team member to demo your feature. Remember to submit the evidence of your excuse e.g., MC to prof. The demo is part of module assessment and absence without a valid reason will cause you to lose marks.

    Deliverable: Practical Exam Dry Run (PE-D)

    What: The v1.3 is subjected to a round of peer acceptance/system testing, also called the Practical Exam Dry Run as this round of testing will be similar to the graded Practical Exam that will be done at v1.4.

    When, where: uses a 45 minute slot at the end of week 11 lecture

     

    Objectives:

    • Evaluate your manual testing skills, product evaluation skills, effort estimation skills
    • Peer-evaluate your product design , implementation effort , documentation quality
      • Note that significant project components are not graded solely based on peer ratings. Rather, PE data are mostly used to cross-validate tutors' grades and identify cases that need further investigation. When peer inputs are used for grading, they are usually combined with tutor evaluations with appropriate weight for each. In some cases ratings from team members are given a higher weight compared to ratings from other peers, if that is appropriate.
    • Do note that the PE is not a means of pitting you against each other. Developers and testers play for the same side; they need to push each other to improve the quality of their work -- not bring down each other.

    Grading:

    • Your performance in the practical exam will be considered for your final grade (under the QA category and under Implementation category, about 10 marks in total).
    • You will be graded based on your effectiveness as a tester (e.g., the percentage of the bugs you found, the nature of the bugs you found) and how far off your evaluation/estimates are from the evaluator consensus. Explanation: we understand that you have limited expertise in this area; hence, we penalize only if your inputs don't seem to be based on a sincere effort to test/evaluate.
    • The bugs found in your product by others will affect your v1.4 marks. You will be given a chance to reject false-positive bug reports.

    Preparation:

    • Similar to PE-Dry run
    • Ensure that you have accepted the invitation to join the GitHub org used by the module. Go to https://github.com/nusCS2113-AY1920S1 to accept the invitation.
      • If you cannot find the invitation, post in our forum.
    • Ensure you have access to a computer that is able to run module projects  e.g. has the right Java version.
    • Download the latest CATcher and ensure you can run it on your computer.
    • Create a public repo in your GitHub account with the following name:
      • PE Dry Run: ped
      • PE: pe
    • Enable its issue tracker and add the following labels to it (the label names should be precisely as given).

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    • Have a good screen grab tool with annotation features so that you can quickly take a screenshot of a bug, annotate it, and post in the issue tracker.

      • 💡 You can use Ctrl+V to paste a picture from the clipboard into a text box in GitHub issue tracker.
    • Download the product to be tested after you have been notified of which team you have been allocated to test.

      • Do this before you come to the testing session to minimize the network clogging due to large number of downloads happening at once.
    • Charge your computer before coming to the PE session. The testing venue (lecture theatre) does not have enough charging points.

    Phase 1: Testing / bug reporting

    When, where: Week 13 lecture

    Testing
    1. Take note of your team to test. It will be given to you by the teaching team (distributed via LumiNUS gradebook).
    2. Download from LumiNUS all files submitted by the team (i.e. jar file, User Guide, Developer Guide, and Project Portfolio Pages) into an empty folder.
    3. [60 minutes] Test the product and report bugs as described below:
    Testing instructions for PE and PE Dry Run

    Launching the JAR file

    • Put the jar file in an empty folder.
    • Open a command window. Run the java -version command to ensure you are using Java 11.
    • Launch the jar file using the java -jar command (do not use double-clicking).
    • If the product doesn't work at all: If the product fails catastrophically e.g., cannot even launch, you can test the fallback team allocated to you. But in this case you must inform us immediately during/after the session so that we can send your bug reports to the correct team.
      • PE-D: Download the JAR file from their GitHub page
      • PE: Download from LumiNUS all files submitted by the team (i.e. jar file, User Guide, Developer Guide, and Project Portfolio Pages) into an empty folder.

    What to test:

    • PE Dry Run (at v1.3):
      • Test the product based on the User Guide (the UG is most likely accessible using the help command).
      • Do system testing first i.e., does the product work as specified by the documentation?. If there is time left, you can do acceptance testing as well i.e., does the product solve the problem it claims to solve?.
    • PE (at v1.4):
      • Test based on the Developer Guide (Appendix named Instructions for Manual Testing) and the User Guide. The testing instructions in the Developer Guide can provide you some guidance but if you follow those instructions strictly, you are unlikely to find many bugs. You can deviate from the instructions to probe areas that are more likely to have bugs.
      • As before, do both system testing and acceptance testing but give priority to system testing as system testing bugs can earn you more credit.

    These are considered bugs:

    • Behavior differs from the User Guide (or Developer Guide)
    • A legitimate user behavior is not handled e.g. incorrect commands, extra parameters
    • Behavior is not specified and differs from normal expectations e.g. error message does not match the error
    • The feature does not solve the stated problem of the intended user i.e., the feature is 'incomplete'
    • Problems in the User Guide e.g., missing/incorrect info

    About posting suggestions:

    • PE Dry Run (at v1.3): You can also post suggestions on how to improve the product. 💡 Be diplomatic when reporting bugs or suggesting improvements. For example, instead of criticising the current behavior, simply suggest alternatives to consider.
    • PE (at v1.4): Do not post suggestions. But if a feature is missing a critical functionality that makes the feature less useful to the intended user, it can be reported as a bug.

    How/where/when to report bugs:

    • Post bugs as you find them (i.e., do not wait to post all bugs at the end) because bugs filed outside the testing duration will not be considered.
      • Do not use team ID in bug reports. Reason: to prevent others copying your bug reports
    • Launch CATcher, and login to the correct profile:
      • PE Dry Run: CS2113/T PE Dry run
      • PE: CS2113/T PE
    • Post bugs using CATcher.
    • Post bug reports in the following repo you created earlier:
      • PE Dry Run: ped
      • PE: pe

    Bug report format:

    • Each bug should be a separate issue.
    • Write good quality bug reports; poor quality (e.g., giving only screenshot with no description, details incomplete, etc.,) or incorrect bug reports will not earn credit.
    • Use a descriptive title.
    • Give a good description of the bug with steps to reproduce and screenshots.
    • Assign exactly one severity.* label to the bug report. Bug report without a severity label are considered severity.Low (lower severity bugs earn lower credit).

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.
    • Assign exactly one type.* label to the bug report. Bug report without a severity label are considered severity.Low (lower severity bugs earn lower credit).

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    Product evaluation

    [Remainder of the session] Evaluate the following aspects. Note down your evaluation in a hard copy (as a backup). Submit via TEAMMATES. You are recommended to complete this during the PE session but you have until the end of the day to submit (or revise) your submissions.

    • A. Product Design []:
      Evaluate the product design based on how the product V2.0 (not V1.4) is described in the User Guide.

      • unable to judge: You are unable to judge this aspect for some reason e.g., UG is not available or does not have enough information.
      • target user specified and appropriate: The target user is clearly specified, prefers typing over other modes of input, and not too general (should be narrowed to a specific user group with certain characteristics).
      • value specified and matching: The value offered by the product is clearly specified and matches the target user.
      • value: low: The value to target user is low. App is not worth using.
      • value: medium: Some small group of target users might find the app worth using.
      • value: high: Most of the target users are likely to find the app worth using.
      • feature-fit: low: Features don't seem to fit together.
      • feature-fit: medium: Some features fit together but some don't.
      • feature-fit: high: All features fit together.
      • polished: The product looks well-designed.
    • B. Quality of user docs []:
      Evaluate based on the parts of the user guide written by the person, as reproduced in the project portfolio. Evaluate from an end-user perspective.

      • UG/ unable to judge: Less than 1 page worth of UG content written by the student or cannot find PPP
      • UG/ good use of visuals: Uses visuals e.g., screenshots.
      • UG/ good use of examples: Uses examples e.g., sample inputs/outputs.
      • UG/ just enough information: Not too much information. All important information is given.
      • UG/ easy to understand: The information is easy to understand for the target audience.
      • UG/ polished: The document looks neat, well-formatted, and professional.
    • C. Quality of developer docs []:
      Evaluate based on the developer docs cited/reproduced in the respective project portfolio page. Evaluate from the perspective of a new developer trying to understand how the features are implemented.

      • DG/ unable to judge: Less than 0.5 pages worth of content OR other problems in the document e.g. looks like included wrong content.
      • DG/ too little: 0.5 - 1 page of documentation
      • DG/ types of UML diagrams: 1: Only one type of diagram used (types: Class Diagrams, Object Diagrams, Sequence Diagrams, Activity Diagrams, Use Case Diagrams)
      • DG/ types of UML diagrams: 2: Two types of diagrams used
      • DG/ types of UML diagrams: 3+: Three or more types of diagrams used
      • DG/ UML diagrams suitable: The diagrams used for the right purpose
      • DG/ UML notation correct: No more than one minor error in the UML notation
      • DG/ diagrams not repetitive: Same diagram is not repeated with minor differences
      • DG/ diagrams not too complicated: Diagrams don't cram too much information into them
      • DG/ diagrams integrates with text: Diagrams are well integrated into the textual explanations
      • DG/ easy to understand: The document is easy to understand/follow
      • DG/ just enough information: Not too much information. All important information is given.
      • DG/ polished: The document looks neat, well-formatted, and professional.
    • D. Feature Quality []:
      Evaluate the biggest feature done by the student for difficulty, completeness, and testability. Note: examples given below assume that AB3 did not have the commands edit, undo, and redo.

      • Feature/ difficulty: unable to judge: You are unable to judge this aspect for some reason.
      • Feature/ difficulty: low: e.g. make the existing find command case insensitive.
      • Feature/ difficulty: medium: e.g. an edit command that requires the user to type all fields, even the ones that are not being edited.
      • Feature/ difficulty: high: e.g., undo/redo command
      • Feature/ completeness: unable to judge: You are unable to judge this aspect for some reason.
      • Feature/ completeness: low: A partial implementation of the feature. Barely useful.
      • Feature/ completeness: medium: The feature has enough functionality to be useful for some of the users.
      • Feature/ completeness: high: The feature has all functionality to be useful to almost all users.
      • Feature/ not hard to test: The feature was not too hard to test manually.
      • Feature/ polished: The feature looks polished (as if done by a professional programmer).
    • E. Amount of work []:
      Evaluate the amount of work, on a scale of 0 to 30.

      • Consider this PR (history command) as 5 units of effort which means this PR (undo/redo command) is about 15 points of effort. Given that 30 points matches an effort twice as that needed for the undo/redo feature (which was given as an example of an A grade project), we expect most students to be have efforts lower than 20.
      • Count all implementation/testing/documentation work as mentioned in that person's PPP. Also look at the actual code written by the person.
      • Do not give a high value just to be nice. If your estimate is wildly inaccurate, it means you are unable to estimate the effort required to implement a feature in a project that you are supposed to know well at this point. You may lose marks if your estimate is wildly inaccurate

    Phase 2: Developer response phase

    Duration: The review period will start around 1 day after the PE (exact time to be announced) and will last until the following Tuesday midnight. However, you are recommended to finish this task ASAP, to minimize cutting into your exam preparation work.

    Bug reviewing is recommended to be done as a team as some of the decisions need team consensus.

    Instructions for Reviewing Bug Reports

    • First, don't freak out if there are lot of bug reports. Many can be duplicates and some can be false positives. In any case, we anticipate that all of these products will have some bugs and our penalty for bugs is not harsh. Furthermore, it depends on the severity of the bug. Some bug may not even be penalized.
    • CATcher does not come with a UG, but the UI is fairly intuitive (there are tool tips too). Do post in the forum or ask in slack if you need any guidance with its usage.
    • Also note that CATcher hasn't been battle-tested for this phase, in particular, w.r.t. multiple team members editing the same issue concurrently. It is ideal if the team members get together and work through the issues together. If you think others might be editing the same issues at the same time, use the Sync button at the top to force-sync your view with the latest data from GitHub.
  • Launch CATcher, and login to the profile CS2113/T PE. It will show all the bugs assigned to your team, divided into three sections:
    1. Issues Pending Responses - Issues that your team has not processed yet.
    2. Issues Responded - Your job is to get all issues to the second category.
    3. Faulty Issues - e.g., Bugs marked as duplicates of each other, or causing circular duplicate relationships. Fix the problem given so that no issues remain in this category.
  • Respond to the bug reports shown.
  • Issues created for PE-D and PE need to be in a precise format for our grading scripts to work. Incorrectly-formatted responses will have to discarded. Therefore, you are strongly recommended to use CATcher for PE-D and PE activities. If you want to give your response via GitHub instead, please get our permission first.

    • Go to the dev-response issue tracker
    • Use tutorial.* and team.* labels to filter bug reports your team received.
    • Do not edit the subject or the description. Your response (if any) should be added as a comment.
    • Add a comment using the following exact template.
      # Team's Response
      {replace this with your response}
      

      ## Duplicate status (if any):

      Here is an example:
      # Team's Response

      Yes this is a bug. But it is a duplicate. * Changed the bug type because this is just a bug in the UG. * Lowered the severity because users can still use the feature.

      ## Duplicate status (if any): Duplicate of #67

    • Do not close the bug report after you are done processing it.
    • Use the exact Duplicate of #123 format to indicate duplicates.
    • There should be exactly one comment per issue. If there are multiple comments, the last one will be taken for processing.
    • If a bug seems to be for a different product (i.e. wrongly assigned to your team), let us know ASAP (email prof).

    • If the bug is reported multiple times,

      • Mark all copies EXCEPT one as duplicates of the one left out (let's call that one the original) using the duplicate tag.
      • If the duplicates have different severity levels, you should keep the one with the highest severity as the original. But you can downgrade the severity of the original or the duplicates.
      • For each group of duplicates, all duplicates should point to one original i.e., no multiple levels of duplicates, and no cyclical duplication relationships.
      • If the duplication status is eventually accepted, all duplicates will be assumed to have inherited the type.* and severity.* from the original.

    • Apply exactly one of these labels (if missing, we assign: response.Accepted)

    Response Labels:

    • response.Accepted: You accept it as a bug.
    • response.NotInScope: It is a valid issue but not something the team should be penalized for e.g., it was not related to features delivered in v1.4.
    • response.Rejected: What tester treated as a bug is in fact the expected behavior. The may lose marks for rejecting a bug without an explanation or using an unjustifiable explanation.
    • response.CannotReproduce: You are unable to reproduce the behavior reported in the bug after multiple tries.
    • response.IssueUnclear: The issue description is not clear. Don't post comments asked the tester to give more info. The tester will not be able to see those comments because the bug reports are anonymized.
    • Apply exactly one of these labels (if missing, we assign: type.FunctionalityBug)

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    • If you disagree with the original severity assigned to the bug, you may change it to the correct level, in which case add a comment justifying the change. All such changes will be double-checked by the teaching team.

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.
    • Decide who should fix the bug. Use the Assignees field to assign the issue to that person(s). There is no need to actually fix the bug though. It's simply an indication/acceptance of responsibility. If there is no assignee, we will distribute the penalty for that bug (if any) among all team members.

      • If it is not easy to decide the assignee(s), we recommend (but not enforce) that the feature owner should be assigned bugs related to the feature, Reason: The feature owner should have defended the feature against bugs using automated tests and defensive coding techniques.

    • As far as possible, choose the correct type.*, severity.*, and assignees even for bugs you are not accepting or for bugs that are marked as duplicates. Reason: your non-acceptance or duplication status may be rejected in a later phase, in which case we need to grade it as an accepted/non-duplicate bug.

    • Justify your response. For all of the following cases, you must add a comment justifying your stance. Testers will get to respond to all those cases and will be double-checked by the teaching team in later phases. Indiscriminate/unreasonable dev/tester responses, if deemed as a case of trying to game the system, will be penalized.
      • downgrading severity
      • non-acceptance of a bug
      • changing the bug type
      • non-obvious duplicate

    Grading: Taking part in the PE dry run is strongly encouraged as it can affect your grade in the following ways.

    • If the product you are allocated to test in the Practical Exam (at v1.4) had a very low bug count, we will consider your performance in PE dry run as well when grading the PE.
    • PE dry run will help you practice for the actual PE.
    • Taking part in the PE dry run will earn you participation points.
    • There is no penalty for bugs reported in your product. Every bug you find is a win-win for you and the team whose product you are testing.

    Objectives:

    • To train you to do manual testing, bug reporting, bug triaging, bug fixing, communicating with users/testers/developers, evaluating products etc.
    • To help you improve your product before the final submission.

    Preparation

    • Ensure that you have accepted the invitation to join the GitHub org used by the module. Go to https://github.com/nusCS2113-AY1920S1 to accept the invitation.
      • If you cannot find the invitation, post in our forum.
    • Ensure you have access to a computer that is able to run module projects  e.g. has the right Java version.
    • Download the latest CATcher and ensure you can run it on your computer.
    • Create a public repo in your GitHub account with the following name:
      • PE Dry Run: ped
      • PE: pe
    • Enable its issue tracker and add the following labels to it (the label names should be precisely as given).

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    • Have a good screen grab tool with annotation features so that you can quickly take a screenshot of a bug, annotate it, and post in the issue tracker.

      • 💡 You can use Ctrl+V to paste a picture from the clipboard into a text box in GitHub issue tracker.
    • Download the product to be tested after you have been notified of which team you have been allocated to test.

      • Do this before you come to the testing session to minimize the network clogging due to large number of downloads happening at once.
    • Charge your computer before coming to the PE session. The testing venue (lecture theatre) does not have enough charging points.

    During the session:

    1. Take note of your team to test. Distributed via LumiNUS gradebook.
    2. Download the latest jar file from the team's GitHub page (if you haven't done yet). Copy it to an empty folder.
    3. Confirm you are testing the allocated product by comparing the product UI with the UI screenshot seen in the project dashboard.
    Testing instructions for PE and PE Dry Run

    Launching the JAR file

    • Put the jar file in an empty folder.
    • Open a command window. Run the java -version command to ensure you are using Java 11.
    • Launch the jar file using the java -jar command (do not use double-clicking).
    • If the product doesn't work at all: If the product fails catastrophically e.g., cannot even launch, you can test the fallback team allocated to you. But in this case you must inform us immediately during/after the session so that we can send your bug reports to the correct team.
      • PE-D: Download the JAR file from their GitHub page
      • PE: Download from LumiNUS all files submitted by the team (i.e. jar file, User Guide, Developer Guide, and Project Portfolio Pages) into an empty folder.

    What to test:

    • PE Dry Run (at v1.3):
      • Test the product based on the User Guide (the UG is most likely accessible using the help command).
      • Do system testing first i.e., does the product work as specified by the documentation?. If there is time left, you can do acceptance testing as well i.e., does the product solve the problem it claims to solve?.
    • PE (at v1.4):
      • Test based on the Developer Guide (Appendix named Instructions for Manual Testing) and the User Guide. The testing instructions in the Developer Guide can provide you some guidance but if you follow those instructions strictly, you are unlikely to find many bugs. You can deviate from the instructions to probe areas that are more likely to have bugs.
      • As before, do both system testing and acceptance testing but give priority to system testing as system testing bugs can earn you more credit.

    These are considered bugs:

    • Behavior differs from the User Guide (or Developer Guide)
    • A legitimate user behavior is not handled e.g. incorrect commands, extra parameters
    • Behavior is not specified and differs from normal expectations e.g. error message does not match the error
    • The feature does not solve the stated problem of the intended user i.e., the feature is 'incomplete'
    • Problems in the User Guide e.g., missing/incorrect info

    About posting suggestions:

    • PE Dry Run (at v1.3): You can also post suggestions on how to improve the product. 💡 Be diplomatic when reporting bugs or suggesting improvements. For example, instead of criticising the current behavior, simply suggest alternatives to consider.
    • PE (at v1.4): Do not post suggestions. But if a feature is missing a critical functionality that makes the feature less useful to the intended user, it can be reported as a bug.

    How/where/when to report bugs:

    • Post bugs as you find them (i.e., do not wait to post all bugs at the end) because bugs filed outside the testing duration will not be considered.
      • Do not use team ID in bug reports. Reason: to prevent others copying your bug reports
    • Launch CATcher, and login to the correct profile:
      • PE Dry Run: CS2113/T PE Dry run
      • PE: CS2113/T PE
    • Post bugs using CATcher.
    • Post bug reports in the following repo you created earlier:
      • PE Dry Run: ped
      • PE: pe

    Bug report format:

    • Each bug should be a separate issue.
    • Write good quality bug reports; poor quality (e.g., giving only screenshot with no description, details incomplete, etc.,) or incorrect bug reports will not earn credit.
    • Use a descriptive title.
    • Give a good description of the bug with steps to reproduce and screenshots.
    • Assign exactly one severity.* label to the bug report. Bug report without a severity label are considered severity.Low (lower severity bugs earn lower credit).

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.
    • Assign exactly one type.* label to the bug report. Bug report without a severity label are considered severity.Low (lower severity bugs earn lower credit).

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
     

    At the end of the project each student is required to submit a Project Portfolio Page.

    • Objective:

      • For you to use  (e.g. in your resume) as a well-documented data point of your SE experience
      • For us to use as a data point to evaluate your,
        • contributions to the project
        • your documentation skills
    • Sections to include:

      • Overview: A short overview of your product (can use the product introduction you wrote earlier) to provide some context to the reader.

      • Summary of Contributions:

        • Code contributed: Give a link to your code on Project Code Dashboard, which should be https://nuscs2113-ay1920s1.github.io/dashboard/#=undefined&search=github_username_in_lower_case (replace github_username_in_lower_case with your actual username in lower case e.g., johndoe). This link is also available in the Project List Page -- linked to the icon under your photo.
        • Features implemented: A summary of the features you implemented. If you implemented multiple features, you are recommended to indicate which one is the biggest feature.
        • Other contributions:
          • Contributions to project management e.g., setting up project tools, managing releases, managing issue tracker etc.
          • Evidence of helping others e.g. responses you posted in our forum, bugs you reported in other team's products,
          • Evidence of technical leadership e.g. sharing useful information in the forum
      • Relevant descriptions/terms/conventions: Include all relevant details necessary to understand the document, e.g., conventions, symbols or labels introduced by you, even if it was not introduced by you.

      • Contributions to the User Guide: Reproduce the parts in the User Guide that you wrote. This can include features you implemented as well as features you propose to implement.
        The purpose of allowing you to include proposed features is to provide you more flexibility to show your documentation skills. e.g. you can bring in a proposed feature just to give you an opportunity to use a UML diagram type not used by the actual features.

      • Contributions to the Developer Guide: Reproduce the parts in the Developer Guide that you wrote. Ensure there is enough content to evaluate your technical documentation skills and UML modelling skills. You can include descriptions of your design/implementations, possible alternatives, pros and cons of alternatives, etc.

      • If you plan to use the PPP in your Resume, you can also include your SE work outside of the module (will not be graded)

    • Format:

      • File name: [TEAM_ID]-[Your Name]PPP.pdf e.g., [AY1920S1-CS2113T-F10-3][John Doe]PPP.pdf

      • Use one-half spacing between the lines for legibility

      • Follow this example. A PDF version of the same has been uploaded on LumiNUS.

      • 💡 You are free to choose any (collaborative) software to write the documents. However, try to follow the format of the sample user guide, developer guide and PPP given.

      • Do note that extra effort is needed in duplicating and maintaining consistency across UG/DG and PPP. This is a cost of not using automated document generation.

      • It is assumed that all contents in the PPP were written primarily by you. If any section is written by someone else  e.g. someone else described the feature in the User Guide but you implemented the feature, clearly state that the section was written by someone else  (e.g. Start of Extract [from: User Guide] written by Jane Doe).  Reason: Your writing skills will be evaluated based on the PPP

    • Page limit:

      Content Limit
      Overview + Summary of contributions 0.5-1 (soft limit)
      Contributions to the User Guide 2-4 (soft limit)
      Contributions to the Developer Guide 3-5 (soft limit)
      Total 5-8 (strict)
      • Reason for page limit: These submissions are peer-graded (in the PE) which needs to be done in a limited time span.

      • If you have more content than the limit given above, you can give a representative samples of UG and DG that showcase your documentation skills. Those samples should be understandable on their own. For the parts left-out, you can give an abbreviated version and refer the reader to the full UG/DG for more details.

      • It's similar to giving extra details as appendices; the reader will look at the UG/DG if the PPP is not enough to make a judgment. For example, when judging documentation quality, if the part in the PPP is not well-written, there is no point reading the rest in the main UG/DG. That's why you need to put the most representative part of your writings in the PPP and still give an abbreviated version of the rest in the PPP itself. Even when judging the quantity of work, the reader should be able to get a good sense of the quantity by combining what is quoted in the PPP and your abbreviated description of the missing part. There is no guarantee that the evaluator will read the full document.

    After the session:

    • We'll transfer the relevant bug reports to your repo over the weekend. Once you have received the bug reports for your product, it is up to you to decide whether you will act on reported issues before the final submission v1.4. For some issues, the correct decision could be to reject or postpone to a version beyond v1.4.
    • You can navigate to the original bug report (via the back-link provided in the bug report given to you) and post in that issue thread to communicate with the tester who reported the bug e.g. to ask for more info, etc. However, the tester is not obliged to respond.
      • 💡 Do not argue with the issue reporter to try to convince that person that your way is correct/better. If at all, you can gently explain the rationale for the current behavior but do not waste time getting involved in long arguments. If you think the suggestion/bug is unreasonable, just thank the reporter for their view and close the issue.

    Deliverable: Practical Exam (PE)

    Objectives:

    • Evaluate your manual testing skills, product evaluation skills, effort estimation skills
    • Peer-evaluate your product design , implementation effort , documentation quality
      • Note that significant project components are not graded solely based on peer ratings. Rather, PE data are mostly used to cross-validate tutors' grades and identify cases that need further investigation. When peer inputs are used for grading, they are usually combined with tutor evaluations with appropriate weight for each. In some cases ratings from team members are given a higher weight compared to ratings from other peers, if that is appropriate.
    • Do note that the PE is not a means of pitting you against each other. Developers and testers play for the same side; they need to push each other to improve the quality of their work -- not bring down each other.

    Grading:

    • Your performance in the practical exam will be considered for your final grade (under the QA category and under Implementation category, about 10 marks in total).
    • You will be graded based on your effectiveness as a tester (e.g., the percentage of the bugs you found, the nature of the bugs you found) and how far off your evaluation/estimates are from the evaluator consensus. Explanation: we understand that you have limited expertise in this area; hence, we penalize only if your inputs don't seem to be based on a sincere effort to test/evaluate.
    • The bugs found in your product by others will affect your v1.4 marks. You will be given a chance to reject false-positive bug reports.

    Preparation:

    • Similar to PE-Dry run
    • Ensure that you have accepted the invitation to join the GitHub org used by the module. Go to https://github.com/nusCS2113-AY1920S1 to accept the invitation.
      • If you cannot find the invitation, post in our forum.
    • Ensure you have access to a computer that is able to run module projects  e.g. has the right Java version.
    • Download the latest CATcher and ensure you can run it on your computer.
    • Create a public repo in your GitHub account with the following name:
      • PE Dry Run: ped
      • PE: pe
    • Enable its issue tracker and add the following labels to it (the label names should be precisely as given).

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    • Have a good screen grab tool with annotation features so that you can quickly take a screenshot of a bug, annotate it, and post in the issue tracker.

      • 💡 You can use Ctrl+V to paste a picture from the clipboard into a text box in GitHub issue tracker.
    • Download the product to be tested after you have been notified of which team you have been allocated to test.

      • Do this before you come to the testing session to minimize the network clogging due to large number of downloads happening at once.
    • Charge your computer before coming to the PE session. The testing venue (lecture theatre) does not have enough charging points.

    Phase 1: Testing / bug reporting

    When, where: Week 13 lecture

    Testing
    1. Take note of your team to test. It will be given to you by the teaching team (distributed via LumiNUS gradebook).
    2. Download from LumiNUS all files submitted by the team (i.e. jar file, User Guide, Developer Guide, and Project Portfolio Pages) into an empty folder.
    3. [60 minutes] Test the product and report bugs as described below:
    Testing instructions for PE and PE Dry Run

    Launching the JAR file

    • Put the jar file in an empty folder.
    • Open a command window. Run the java -version command to ensure you are using Java 11.
    • Launch the jar file using the java -jar command (do not use double-clicking).
    • If the product doesn't work at all: If the product fails catastrophically e.g., cannot even launch, you can test the fallback team allocated to you. But in this case you must inform us immediately during/after the session so that we can send your bug reports to the correct team.
      • PE-D: Download the JAR file from their GitHub page
      • PE: Download from LumiNUS all files submitted by the team (i.e. jar file, User Guide, Developer Guide, and Project Portfolio Pages) into an empty folder.

    What to test:

    • PE Dry Run (at v1.3):
      • Test the product based on the User Guide (the UG is most likely accessible using the help command).
      • Do system testing first i.e., does the product work as specified by the documentation?. If there is time left, you can do acceptance testing as well i.e., does the product solve the problem it claims to solve?.
    • PE (at v1.4):
      • Test based on the Developer Guide (Appendix named Instructions for Manual Testing) and the User Guide. The testing instructions in the Developer Guide can provide you some guidance but if you follow those instructions strictly, you are unlikely to find many bugs. You can deviate from the instructions to probe areas that are more likely to have bugs.
      • As before, do both system testing and acceptance testing but give priority to system testing as system testing bugs can earn you more credit.

    These are considered bugs:

    • Behavior differs from the User Guide (or Developer Guide)
    • A legitimate user behavior is not handled e.g. incorrect commands, extra parameters
    • Behavior is not specified and differs from normal expectations e.g. error message does not match the error
    • The feature does not solve the stated problem of the intended user i.e., the feature is 'incomplete'
    • Problems in the User Guide e.g., missing/incorrect info

    About posting suggestions:

    • PE Dry Run (at v1.3): You can also post suggestions on how to improve the product. 💡 Be diplomatic when reporting bugs or suggesting improvements. For example, instead of criticising the current behavior, simply suggest alternatives to consider.
    • PE (at v1.4): Do not post suggestions. But if a feature is missing a critical functionality that makes the feature less useful to the intended user, it can be reported as a bug.

    How/where/when to report bugs:

    • Post bugs as you find them (i.e., do not wait to post all bugs at the end) because bugs filed outside the testing duration will not be considered.
      • Do not use team ID in bug reports. Reason: to prevent others copying your bug reports
    • Launch CATcher, and login to the correct profile:
      • PE Dry Run: CS2113/T PE Dry run
      • PE: CS2113/T PE
    • Post bugs using CATcher.
    • Post bug reports in the following repo you created earlier:
      • PE Dry Run: ped
      • PE: pe

    Bug report format:

    • Each bug should be a separate issue.
    • Write good quality bug reports; poor quality (e.g., giving only screenshot with no description, details incomplete, etc.,) or incorrect bug reports will not earn credit.
    • Use a descriptive title.
    • Give a good description of the bug with steps to reproduce and screenshots.
    • Assign exactly one severity.* label to the bug report. Bug report without a severity label are considered severity.Low (lower severity bugs earn lower credit).

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.
    • Assign exactly one type.* label to the bug report. Bug report without a severity label are considered severity.Low (lower severity bugs earn lower credit).

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    Product evaluation

    [Remainder of the session] Evaluate the following aspects. Note down your evaluation in a hard copy (as a backup). Submit via TEAMMATES. You are recommended to complete this during the PE session but you have until the end of the day to submit (or revise) your submissions.

    • A. Product Design []:
      Evaluate the product design based on how the product V2.0 (not V1.4) is described in the User Guide.

      • unable to judge: You are unable to judge this aspect for some reason e.g., UG is not available or does not have enough information.
      • target user specified and appropriate: The target user is clearly specified, prefers typing over other modes of input, and not too general (should be narrowed to a specific user group with certain characteristics).
      • value specified and matching: The value offered by the product is clearly specified and matches the target user.
      • value: low: The value to target user is low. App is not worth using.
      • value: medium: Some small group of target users might find the app worth using.
      • value: high: Most of the target users are likely to find the app worth using.
      • feature-fit: low: Features don't seem to fit together.
      • feature-fit: medium: Some features fit together but some don't.
      • feature-fit: high: All features fit together.
      • polished: The product looks well-designed.
    • B. Quality of user docs []:
      Evaluate based on the parts of the user guide written by the person, as reproduced in the project portfolio. Evaluate from an end-user perspective.

      • UG/ unable to judge: Less than 1 page worth of UG content written by the student or cannot find PPP
      • UG/ good use of visuals: Uses visuals e.g., screenshots.
      • UG/ good use of examples: Uses examples e.g., sample inputs/outputs.
      • UG/ just enough information: Not too much information. All important information is given.
      • UG/ easy to understand: The information is easy to understand for the target audience.
      • UG/ polished: The document looks neat, well-formatted, and professional.
    • C. Quality of developer docs []:
      Evaluate based on the developer docs cited/reproduced in the respective project portfolio page. Evaluate from the perspective of a new developer trying to understand how the features are implemented.

      • DG/ unable to judge: Less than 0.5 pages worth of content OR other problems in the document e.g. looks like included wrong content.
      • DG/ too little: 0.5 - 1 page of documentation
      • DG/ types of UML diagrams: 1: Only one type of diagram used (types: Class Diagrams, Object Diagrams, Sequence Diagrams, Activity Diagrams, Use Case Diagrams)
      • DG/ types of UML diagrams: 2: Two types of diagrams used
      • DG/ types of UML diagrams: 3+: Three or more types of diagrams used
      • DG/ UML diagrams suitable: The diagrams used for the right purpose
      • DG/ UML notation correct: No more than one minor error in the UML notation
      • DG/ diagrams not repetitive: Same diagram is not repeated with minor differences
      • DG/ diagrams not too complicated: Diagrams don't cram too much information into them
      • DG/ diagrams integrates with text: Diagrams are well integrated into the textual explanations
      • DG/ easy to understand: The document is easy to understand/follow
      • DG/ just enough information: Not too much information. All important information is given.
      • DG/ polished: The document looks neat, well-formatted, and professional.
    • D. Feature Quality []:
      Evaluate the biggest feature done by the student for difficulty, completeness, and testability. Note: examples given below assume that AB3 did not have the commands edit, undo, and redo.

      • Feature/ difficulty: unable to judge: You are unable to judge this aspect for some reason.
      • Feature/ difficulty: low: e.g. make the existing find command case insensitive.
      • Feature/ difficulty: medium: e.g. an edit command that requires the user to type all fields, even the ones that are not being edited.
      • Feature/ difficulty: high: e.g., undo/redo command
      • Feature/ completeness: unable to judge: You are unable to judge this aspect for some reason.
      • Feature/ completeness: low: A partial implementation of the feature. Barely useful.
      • Feature/ completeness: medium: The feature has enough functionality to be useful for some of the users.
      • Feature/ completeness: high: The feature has all functionality to be useful to almost all users.
      • Feature/ not hard to test: The feature was not too hard to test manually.
      • Feature/ polished: The feature looks polished (as if done by a professional programmer).
    • E. Amount of work []:
      Evaluate the amount of work, on a scale of 0 to 30.

      • Consider this PR (history command) as 5 units of effort which means this PR (undo/redo command) is about 15 points of effort. Given that 30 points matches an effort twice as that needed for the undo/redo feature (which was given as an example of an A grade project), we expect most students to be have efforts lower than 20.
      • Count all implementation/testing/documentation work as mentioned in that person's PPP. Also look at the actual code written by the person.
      • Do not give a high value just to be nice. If your estimate is wildly inaccurate, it means you are unable to estimate the effort required to implement a feature in a project that you are supposed to know well at this point. You may lose marks if your estimate is wildly inaccurate

    Phase 2: Developer response phase

    Duration: The review period will start around 1 day after the PE (exact time to be announced) and will last until the following Tuesday midnight. However, you are recommended to finish this task ASAP, to minimize cutting into your exam preparation work.

    Bug reviewing is recommended to be done as a team as some of the decisions need team consensus.

    Instructions for Reviewing Bug Reports

    • First, don't freak out if there are lot of bug reports. Many can be duplicates and some can be false positives. In any case, we anticipate that all of these products will have some bugs and our penalty for bugs is not harsh. Furthermore, it depends on the severity of the bug. Some bug may not even be penalized.
    • CATcher does not come with a UG, but the UI is fairly intuitive (there are tool tips too). Do post in the forum or ask in slack if you need any guidance with its usage.
    • Also note that CATcher hasn't been battle-tested for this phase, in particular, w.r.t. multiple team members editing the same issue concurrently. It is ideal if the team members get together and work through the issues together. If you think others might be editing the same issues at the same time, use the Sync button at the top to force-sync your view with the latest data from GitHub.
  • Launch CATcher, and login to the profile CS2113/T PE. It will show all the bugs assigned to your team, divided into three sections:
    1. Issues Pending Responses - Issues that your team has not processed yet.
    2. Issues Responded - Your job is to get all issues to the second category.
    3. Faulty Issues - e.g., Bugs marked as duplicates of each other, or causing circular duplicate relationships. Fix the problem given so that no issues remain in this category.
  • Respond to the bug reports shown.
  • Issues created for PE-D and PE need to be in a precise format for our grading scripts to work. Incorrectly-formatted responses will have to discarded. Therefore, you are strongly recommended to use CATcher for PE-D and PE activities. If you want to give your response via GitHub instead, please get our permission first.

    • Go to the dev-response issue tracker
    • Use tutorial.* and team.* labels to filter bug reports your team received.
    • Do not edit the subject or the description. Your response (if any) should be added as a comment.
    • Add a comment using the following exact template.
      # Team's Response
      {replace this with your response}
      

      ## Duplicate status (if any):

      Here is an example:
      # Team's Response

      Yes this is a bug. But it is a duplicate. * Changed the bug type because this is just a bug in the UG. * Lowered the severity because users can still use the feature.

      ## Duplicate status (if any): Duplicate of #67

    • Do not close the bug report after you are done processing it.
    • Use the exact Duplicate of #123 format to indicate duplicates.
    • There should be exactly one comment per issue. If there are multiple comments, the last one will be taken for processing.
    • If a bug seems to be for a different product (i.e. wrongly assigned to your team), let us know ASAP (email prof).

    • If the bug is reported multiple times,

      • Mark all copies EXCEPT one as duplicates of the one left out (let's call that one the original) using the duplicate tag.
      • If the duplicates have different severity levels, you should keep the one with the highest severity as the original. But you can downgrade the severity of the original or the duplicates.
      • For each group of duplicates, all duplicates should point to one original i.e., no multiple levels of duplicates, and no cyclical duplication relationships.
      • If the duplication status is eventually accepted, all duplicates will be assumed to have inherited the type.* and severity.* from the original.

    • Apply exactly one of these labels (if missing, we assign: response.Accepted)

    Response Labels:

    • response.Accepted: You accept it as a bug.
    • response.NotInScope: It is a valid issue but not something the team should be penalized for e.g., it was not related to features delivered in v1.4.
    • response.Rejected: What tester treated as a bug is in fact the expected behavior. The may lose marks for rejecting a bug without an explanation or using an unjustifiable explanation.
    • response.CannotReproduce: You are unable to reproduce the behavior reported in the bug after multiple tries.
    • response.IssueUnclear: The issue description is not clear. Don't post comments asked the tester to give more info. The tester will not be able to see those comments because the bug reports are anonymized.
    • Apply exactly one of these labels (if missing, we assign: type.FunctionalityBug)

    Bug Type Labels:

    • type.FeatureFlaw: some functionality missing from a feature delivered in v1.4 in a way that the feature becomes less useful to the intended target user for normal usage. i.e., the feature is not 'complete'. In other words, an acceptance testing bug that falls within the scope of v1.4 features. These issues are counted against the 'depth and completeness' of the feature.
    • type.FunctionalityBug: the bug is a flaw in how the product works.
    • type.DocTypo: A minor spelling/grammar error in the documentation. Does not affect the user.
    • type.DocumentationBug: A flaw in the documentation that can potentially affect the user e.g., a missing step, a wrong instruction
    • If you disagree with the original severity assigned to the bug, you may change it to the correct level, in which case add a comment justifying the change. All such changes will be double-checked by the teaching team.

    Bug Severity labels:

    • severity.Low : A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.
    • severity.Medium : A flaw that causes occasional inconvenience to some users but they can continue to use the product.
    • severity.High : A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.
    • Decide who should fix the bug. Use the Assignees field to assign the issue to that person(s). There is no need to actually fix the bug though. It's simply an indication/acceptance of responsibility. If there is no assignee, we will distribute the penalty for that bug (if any) among all team members.

      • If it is not easy to decide the assignee(s), we recommend (but not enforce) that the feature owner should be assigned bugs related to the feature, Reason: The feature owner should have defended the feature against bugs using automated tests and defensive coding techniques.

    • As far as possible, choose the correct type.*, severity.*, and assignees even for bugs you are not accepting or for bugs that are marked as duplicates. Reason: your non-acceptance or duplication status may be rejected in a later phase, in which case we need to grade it as an accepted/non-duplicate bug.

    • Justify your response. For all of the following cases, you must add a comment justifying your stance. Testers will get to respond to all those cases and will be double-checked by the teaching team in later phases. Indiscriminate/unreasonable dev/tester responses, if deemed as a case of trying to game the system, will be penalized.
      • downgrading severity
      • non-acceptance of a bug
      • changing the bug type
      • non-obvious duplicate
     

    Conceptualize product and document it as a user guide(draft), draft a rough project plan. Complete Phase 1.

    Phase 2 Project tasks

    Documentation:

    Recommended: Divide among yourselves who will update which parts of the document(s).

    • User Guide:
      Start drafting a user guide in a convenient medium (e.g., a GoogleDoc) to describe what the product would be like when it is at v2.0. Which means, you can include commands that you may not implement in the project.

      • We recommend that you follow the reference project's User Guide in terms of structure and format.
      • As this is a beginning draft, don't waste time in formatting, copy editing, etc. It is fine as long as the tutor can get a rough idea of the features from this draft. You can also do just the 'Features' section and omit the other parts.
      • However, do try to come up with concrete command syntax for feature that you would implement (at least for those that you will implement by v1.4).
      • Include a mock-up of how your interface may look (e.g., either GUI or CLI landing screen). (GUI mock-up can be hand-drawn or created using a tool such as PowerPoint or Balsamiq).
    • Developer Guide:
      Update the developer guide (target user profile, user stories, use cases, and non-functional requirements) based on the feedback from your tutors.

    Admin pages:

    Create/update the following pages in your project repo:

    • Create the About Us page:
      Use this page from the reference project as a reference for the format. We need this page for module admin purposes. Please follow the format closely or else our scripts will not be able to give credit for your work.
      • You may copy the page and replace info of SE-EDU developers with info of your team, including a suitable photo as described here.
      • Including the name/photo of the supervisor/lecturer is optional.
      • The photo of a team member should be docs/images/githbub_username_in_lower_case.png e.g. docs/images/johndoe.png. If you photo is in jpg format, name the file as .png anyway.
      • Indicate the different roles played and responsibilities held by each team member. You can reassign these roles and responsibilities (as explained in Admin Project Scope) later in the project, if necessary.
     
    • The purpose of the profile photo is for the teaching team to identify you. Therefore, you should choose a recent individual photo showing your face clearly (i.e., not too small) -- somewhat similar to a passport photo. Some examples can be seen in the 'Teaching team' page. Given below are some examples of good and bad profile photos.

    • If you are uncomfortable posting your photo due to security reasons, you can post a lower resolution image so that it is hard for someone to misuse that image for fraudulent purposes. If you are concerned about privacy, you can request permission to omit your photo from the page by writing to prof.

     
    • Roles indicate aspects you are in charge of and responsible for. E.g., if you are in charge of documentation, you are the person who should allocate which parts of the documentation is to be done by who, ensure the document is in right format, ensure consistency etc.

      This is a non-exhaustive list; you may define additional roles.

      • Team lead: Responsible for overall project coordination.
      • Documentation (short for ‘in charge of documentation’): Responsible for the quality of various project documents.
      • Testing: Ensures the testing of the project is done properly and on time.
      • Code quality: Looks after code quality, ensures adherence to coding standards, etc.
      • Deliverables and deadlines: Ensure project deliverables are done on time and in the right format.
      • Integration: In charge of versioning of the code, maintaining the code repository, integrating various parts of the software to create a whole.
      • Scheduling and tracking: In charge of defining, assigning, and tracking project tasks.
      • [Tool ABC] expert: e.g. Intellij expert, Git expert, etc. Helps other team member with matters related to the specific tool.
      • In charge of[Component XYZ]: e.g. In charge of Model, UI, Storage, etc. If you are in charge of a component, you are expected to know that component well, and review changes done to that component in v1.3-v1.4.

    Please make sure each of the important roles are assigned to one person in the team. It is OK to have a 'backup' for each role, but for each aspect there should be one person who is unequivocally the person responsible for it.

    • README page: Update it to match your project.

      • Add a UI mock-up of your intended final product.
        Note that the image of the UI should be docs/images/Ui.png so that it can be downloaded by our scripts. Limit the file to contain one screenshot/mock-up only and ensure the new image is roughly 1280px X 1024px in size. Reason: when we compile these images from all teams into one page (example), yours should not look out of place.

      • The original README file (which doubles as the landing page of your project website) is written to read like a setup instructions page. You should restructure this page to look like the home page of a real product (not a school project) targeting real users.  e.g. remove the section on feedback and reference to duke issue tracker

    Pull Requests to your team organization

    • Use PRs as the mechanism to implement the extensions this week.
      • Create PRs to your team repo's master branch.
    • Have these PRs merged in your team repo.
    • [Only for this week] create PRs with titles following the format: [Team id]-<your github username>-<Extension id>. Example: [CS2113T-W12-1]-johndoe-A-Gradle
      • After this week, you can create PRs with any meaningful title to continue working on your project
    • Each team member should review another member's PR on GitHub.
    • More details about the suggested workflow:

    Relevant: [Admin Appendix E(extract): Workflow ]

     

    Workflow

    Before you do any coding for the project,

    • Ensure you have set the Git username correctly (as explained in Appendix E) in all Computers you use for coding.
    • Read our reuse policy (in Admin: Appendix B), in particular, how to give credit when you reuse code from the Internet or classmates:
     

    Setting Git Username to Match GitHub Username

    We use various tools to analyze your code. For us to be able to identify your commits, you should use the GitHub username as your Git username as well. If there is a mismatch, or if you use multiple user names for Git, our tools might miss some of your work and as a result you might not get credit for some of your work.

    In each Computer you use for coding, after installing Git, you should set the Git username as follows.

    1. Open a command window that can run Git commands (e.g., Git bash window)
    2. Run the command git config --global user.name YOUR_GITHUB_USERNAME
      e.g., git config --global user.name JohnDoe

    More info about setting Git username is here.

     

    Policy on reuse

    Reuse is encouraged. However, note that reuse has its own costs (such as the learning curve, additional complexity, usage restrictions, and unknown bugs). Furthermore, you will not be given credit for work done by others. Rather, you will be given credit for using work done by others.

    • You are allowed to reuse work from your classmates, subject to following conditions:
      • The work has been published by us or the authors.
      • You clearly give credit to the original author(s).
    • You are allowed to reuse work from external sources, subject to following conditions:
      • The work comes from a source of 'good standing' (such as an established open source project). This means you cannot reuse code written by an outside 'friend'.
      • You clearly give credit to the original author. Acknowledge use of third party resources clearly e.g. in the welcome message, splash screen (if any) or under the 'about' menu. If you are open about reuse, you are less likely to get into trouble if you unintentionally reused something copyrighted.
      • You do not violate the license under which the work has been released. Please  do not use 3rd-party images/audio in your software unless they have been specifically released to be used freely. Just because you found it in the Internet does not mean it is free for reuse.
      • Always get permission from us before you reuse third-party libraries. Please post your 'request to use 3rd party library' in our forum. That way, the whole class get to see what libraries are being used by others.
      • This also ensures you learn the ethics to attribute credits to the correct stake holders/owners.

    Giving credit for reused work

    Given below are how to give credit for things you reuse from elsewhere. These requirements are specific to this module  i.e., not applicable outside the module (outside the module you should follow the rules specified by your employer and the license of the reused work)

    If you used a third party library:

    • Mention in the README.adoc (under the Acknowledgements section)
    • mention in the Project Portfolio Page if the library has a significant relevance to the features you implemented

    If you reused code snippets found on the Internet  e.g. from StackOverflow answers or
    referred code in another software or
    referred project code by current/past student:

    • If you read the code to understand the approach and implemented it yourself, mention it as a comment
      Example:
      //Solution below adapted from https://stackoverflow.com/a/16252290
      {Your implmentation of the reused solution here ...}
      
    • If you copy-pasted a non-trivial code block (possibly with minor modifications  renaming, layout changes, changes to comments, etc.), also mark the code block as reused code (using @@author tags)
      Format:
      //@@author {yourGithubUsername}-reused
      //{Info about the source...}
      
      {Reused code (possibly with minor modifications) here ...}
      
      //@@author
      
      Example of reusing a code snippet (with minor modifications):
      persons = getList()
      //@@author johndoe-reused
      //Reused from https://stackoverflow.com/a/34646172 with minor modifications
      Collections.sort(persons, new Comparator<CustomData>() {
          @Override
          public int compare(CustomData lhs, CustomData rhs) {
              return lhs.customInt > rhs.customInt ? -1 : (lhs.customInt < rhs.customInt) ? 1 : 0;
          }
      });
      //@@author
      return persons;
      

    Adding @@author tags to indicate authorship

    • Mark your code with a //@@author {yourGithubUsername}. Note the double @.
      The //@@author tag should indicates the beginning of the code you wrote. The code up to the next //@@author tag or the end of the file (whichever comes first) will be considered as was written by that author. Here is a sample code file:

      //@@author johndoe
      method 1 ...
      method 2 ...
      //@@author sarahkhoo
      method 3 ...
      //@@author johndoe
      method 4 ...
      
    • If you don't know who wrote the code segment below yours, you may put an empty //@@author (i.e. no GitHub username) to indicate the end of the code segment you wrote. The author of code below yours can add the GitHub username to the empty tag later. Here is a sample code with an empty author tag:

      method 0 ...
      //@@author johndoe
      method 1 ...
      method 2 ...
      //@@author
      method 3 ...
      method 4 ...
      
    • The author tag syntax varies based on file type e.g. for java, css, fxml. Use the corresponding comment syntax for non-Java files.
      Here is an example code from an xml/fxml file.

      <!-- @@author sereneWong -->
      <textbox>
        <label>...</label>
        <input>...</input>
      </textbox>
      ...
      
    • Do not put the //@@author inside java header comments.
      👎

      /**
        * Returns true if ...
        * @@author johndoe
        */
      

      👍

      //@@author johndoe
      /**
        * Returns true if ...
        */
      

    What to and what not to annotate

    • Annotate both functional and test code There is no need to annotate documentation files.

    • Annotate only significant size code blocks that can be reviewed on its own  e.g., a class, a sequence of methods, a method.
      Claiming credit for code blocks smaller than a method is discouraged but allowed. If you do, do it sparingly and only claim meaningful blocks of code such as a block of statements, a loop, or an if-else statement.

      • If an enhancement required you to do tiny changes in many places, there is no need to annotate all those tiny changes; you can describe those changes in the Project Portfolio page instead.
      • If a code block was touched by more than one person, either let the person who wrote most of it (e.g. more than 80%) take credit for the entire block, or leave it as 'unclaimed' (i.e., no author tags).
      • Related to the above point, if you claim a code block as your own, more than 80% of the code in that block should have been written by yourself. For example, no more than 20% of it can be code you reused from somewhere.
      • 💡 GitHub has a blame feature and a history feature that can help you determine who wrote a piece of code.
    • Do not try to boost the quantity of your contribution using unethical means such as duplicating the same code in multiple places. In particular, do not copy-paste test cases to create redundant tests. Even repetitive code blocks within test methods should be extracted out as utility methods to reduce code duplication. Individual members are responsible for making sure code attributed to them are correct. If you notice a team member claiming credit for code that he/she did not write or use other questionable tactics, you can email us (after the final submission) to let us know.

    • If you wrote a significant amount of code that was not used in the final product,

      • Create a folder called {project root}/unused
      • Move unused files (or copies of files containing unused code) to that folder
      • use //@@author {yourGithubUsername}-unused to mark unused code in those files (note the suffix unused) e.g.
      //@@author johndoe-unused
      method 1 ...
      method 2 ...
      

      Please put a comment in the code to explain why it was not used.

    • If you reused code from elsewhere, mark such code as //@@author {yourGithubUsername}-reused (note the suffix reused) e.g.

      //@@author johndoe-reused
      method 1 ...
      method 2 ...
      
    • You can use empty @@author tags to mark code as not yours when RepoSense attribute the to you incorrectly.

      • Code generated by the IDE/framework, should not be annotated as your own.

      • Code you modified in minor ways e.g. adding a parameter. These should not be claimed as yours but you can mention these additional contributions in the Project Portfolio page if you want to claim credit for them.

     

    At the end of the project each student is required to submit a Project Portfolio Page.

    • Objective:

      • For you to use  (e.g. in your resume) as a well-documented data point of your SE experience
      • For us to use as a data point to evaluate your,
        • contributions to the project
        • your documentation skills
    • Sections to include:

      • Overview: A short overview of your product (can use the product introduction you wrote earlier) to provide some context to the reader.

      • Summary of Contributions:

        • Code contributed: Give a link to your code on Project Code Dashboard, which should be https://nuscs2113-ay1920s1.github.io/dashboard/#=undefined&search=github_username_in_lower_case (replace github_username_in_lower_case with your actual username in lower case e.g., johndoe). This link is also available in the Project List Page -- linked to the icon under your photo.
        • Features implemented: A summary of the features you implemented. If you implemented multiple features, you are recommended to indicate which one is the biggest feature.
        • Other contributions:
          • Contributions to project management e.g., setting up project tools, managing releases, managing issue tracker etc.
          • Evidence of helping others e.g. responses you posted in our forum, bugs you reported in other team's products,
          • Evidence of technical leadership e.g. sharing useful information in the forum
      • Relevant descriptions/terms/conventions: Include all relevant details necessary to understand the document, e.g., conventions, symbols or labels introduced by you, even if it was not introduced by you.

      • Contributions to the User Guide: Reproduce the parts in the User Guide that you wrote. This can include features you implemented as well as features you propose to implement.
        The purpose of allowing you to include proposed features is to provide you more flexibility to show your documentation skills. e.g. you can bring in a proposed feature just to give you an opportunity to use a UML diagram type not used by the actual features.

      • Contributions to the Developer Guide: Reproduce the parts in the Developer Guide that you wrote. Ensure there is enough content to evaluate your technical documentation skills and UML modelling skills. You can include descriptions of your design/implementations, possible alternatives, pros and cons of alternatives, etc.

      • If you plan to use the PPP in your Resume, you can also include your SE work outside of the module (will not be graded)

    • Format:

      • File name: [TEAM_ID]-[Your Name]PPP.pdf e.g., [AY1920S1-CS2113T-F10-3][John Doe]PPP.pdf

      • Use one-half spacing between the lines for legibility

      • Follow this example. A PDF version of the same has been uploaded on LumiNUS.

      • 💡 You are free to choose any (collaborative) software to write the documents. However, try to follow the format of the sample user guide, developer guide and PPP given.

      • Do note that extra effort is needed in duplicating and maintaining consistency across UG/DG and PPP. This is a cost of not using automated document generation.

      • It is assumed that all contents in the PPP were written primarily by you. If any section is written by someone else  e.g. someone else described the feature in the User Guide but you implemented the feature, clearly state that the section was written by someone else  (e.g. Start of Extract [from: User Guide] written by Jane Doe).  Reason: Your writing skills will be evaluated based on the PPP

    • Page limit:

      Content Limit
      Overview + Summary of contributions 0.5-1 (soft limit)
      Contributions to the User Guide 2-4 (soft limit)
      Contributions to the Developer Guide 3-5 (soft limit)
      Total 5-8 (strict)
      • Reason for page limit: These submissions are peer-graded (in the PE) which needs to be done in a limited time span.

      • If you have more content than the limit given above, you can give a representative samples of UG and DG that showcase your documentation skills. Those samples should be understandable on their own. For the parts left-out, you can give an abbreviated version and refer the reader to the full UG/DG for more details.

      • It's similar to giving extra details as appendices; the reader will look at the UG/DG if the PPP is not enough to make a judgment. For example, when judging documentation quality, if the part in the PPP is not well-written, there is no point reading the rest in the main UG/DG. That's why you need to put the most representative part of your writings in the PPP and still give an abbreviated version of the rest in the PPP itself. Even when judging the quantity of work, the reader should be able to get a good sense of the quantity by combining what is quoted in the PPP and your abbreviated description of the missing part. There is no guarantee that the evaluator will read the full document.

    Follow the forking workflow in your project up to v1.1. In particular,

    • Get team members to review PRs. A workflow without PR reviews is a risky workflow.
    • Do not merge PRs failing CI. After setting up Travis, the CI status of a PR is reported at the bottom of the PR page. The screenshot below shows the status of a PR that is passing all CI checks.

      If there is a failure, you can click on the Details link in corresponding line to find out more about the failure. Once you figure out the cause of the failure, push the a fix to the PR.

    After completing v1.1, you can adjust process rigor to suit your team's pace, as explained below.

    • Reduce automated checks: You can also reduce the rigor of checkstyle checks to expedite PR processing.

    • Switch to a lighter workflow: While forking workflow is the safest, it is also rather heavy. You an switch to a simpler workflow if the forking workflow is slowing you down. Refer the textbook to find more about alternative workflows: branching workflow, centralized workflow. However, we still recommend that you use PR reviews, at least for PRs affecting others' features.

    You can also increase the rigor/safety of your workflow in the following ways:

    • Use GitHub's Protected Branches feature to protect your master branch against rogue PRs.
     
    • There is no requirement for a minimum coverage level. Note that in a production environment you are often required to have at least 90% of the code covered by tests. In this project, it can be less. The less coverage you have, the higher the risk of regression bugs, which will cost marks if not fixed before the final submission.
    • You must write some tests so that we can evaluate your ability to write tests. (Please refer to Expectations on Lines of Code for LoC requirement).
    • How much of each type of testing should you do? We expect you to decide. You learned different types of testing and what they try to achieve. Based on that, you should decide how much of each type is required. Similarly, you can decide to what extent you want to automate tests, depending on the benefits and the effort required.
     

    Project Management → Revision Control →

    Forking Flow

    In the forking workflow, the 'official' version of the software is kept in a remote repo designated as the 'main repo'. All team members fork the main repo create pull requests from their fork to the main repo.

    To illustrate how the workflow goes, let’s assume Jean wants to fix a bug in the code. Here are the steps:

    1. Jean creates a separate branch in her local repo and fixes the bug in that branch.
    2. Jean pushes the branch to her fork.
    3. Jean creates a pull request from that branch in her fork to the main repo.
    4. Other members review Jean’s pull request.
    5. If reviewers suggested any changes, Jean updates the PR accordingly.
    6. When reviewers are satisfied with the PR, one of the members (usually the team lead or a designated 'maintainer' of the main repo) merges the PR, which brings Jean’s code to the main repo.
    7. Other members, realizing there is new code in the upstream repo, sync their forks with the new upstream repo (i.e. the main repo). This is done by pulling the new code to their own local repo and pushing the updated code to their own fork.

    Duke tasks ( team)

    • Starting this week, you will only work on your team repo.
    • As a team implement the following extensions.
      • Create PRs and have them merged in the team repo.
    • Do note that the A-* extensions are useful in your project as well.
    • As earlier, tag the extension and push your changes to your team repository's master branch once it has been merged.

    A-* Extensions

    • Automate build process with Gradle in your project
    A-Gradle: Build automation with Gradle

    A-Gradle

         Automate project builds using Gradle

    Use Gradle to automate some of the build tasks of the project. Refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to set up Gradle for your project.

    • Minimal: Learn how to use Gradle when it is already set up.
    • Recommended: Learn how to tweak the Gradle gradle set up of for a project.
    • Stretch Goal: Learn how to set up Gradle for a project.
    • Enforce code quality
    A-CheckStyle: Enforce code quality

    A-CheckStyle

         Use CheckStyle

    Use checkStyle to detect coding style violations.

    If you are using Gradle for your project, refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to use CheckStyle via Gradle.

    A-Gradle

         Automate project builds using Gradle

    Use Gradle to automate some of the build tasks of the project. Refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to set up Gradle for your project.

    • Minimal: Learn how to use Gradle when it is already set up.
    • Recommended: Learn how to tweak the Gradle gradle set up of for a project.
    • Stretch Goal: Learn how to set up Gradle for a project.
    • Learn to release a JAR on GitHub
      • You need to create a JAR using Gradle and then drop the JAR in the release you make on GitHub
      • Title the release as mid-v1.1
    A-Jar: Make a release

    A-Jar

         Package the App as a JAR file

    Package the app as an executable JAR file so that it can be distributed easily.

    If you are using Gradle for your project, refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to create a jar file using Gradle.

    A-Gradle

         Automate project builds using Gradle

    Use Gradle to automate some of the build tasks of the project. Refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to set up Gradle for your project.

    • Minimal: Learn how to use Gradle when it is already set up.
    • Recommended: Learn how to tweak the Gradle gradle set up of for a project.
    • Stretch Goal: Learn how to set up Gradle for a project.
    • [Optional] Setup CI
    A-Travis: Continuous Integration optional

    A-Travis

         Use Travis for CI

    Use Travis (and GitHub) to perform Continuous Integration (CI).

    • [Optional] Learn to add a dependency and use a library in your project
      • Do note that you have to comply with the library usage guidelines (You can refer to the notices tab for this week)
    A-Libraries: External libraries optional

    A-Libraries

         Use external libraries

    Use third-party libraries in your project. For example, you can use the Natty library to parse strings into meaningful dates.

    B-* Extensions

    • Create a branch from the base code of your team project in your own forks to implement these extensions
    • Create PRs to your team repo master branch to incorporate the contributions.
      • Each member must implement at least one unique B- extension
      • Ensure you write some unit tests for these increments using JUnit
    B-Reminders: Reminders

    B-Reminders

         Reminders for tasks

    Provide a way to get reminders about tasks e.g., remind the user about upcoming deadlines.

    B-FindFreeTimes: Free time slots

    B-FindFreeTimes

         Find free times

    Provide a way for the user to find free times e.g., when is the nearest day in which I have a 4 hour free slot?.

    B-ViewSchedules: View schedules

    B-ViewSchedules

         View schedules

    Provide a way to view tasks in the form of a schedule e.g., view the schedule for a specific date.

    B-DetectAnomalies: Detect scheduling anomalies

    B-DetectAnomalies

         Detect scheduling anomalies

    Deal with schedule anomalies e.g., detect if a task being added clashes with another task in the list.

    B-Snooze: Snooze

    B-Snooze

         Snoozing/postponing tasks

    Provide a way to easily snooze/postpone/reschedule tasks.

    B-TentativeScheduling: Tentative scheduling

    B-TentativeScheduling

         Tentative scheduling

    Provide a way for an event to be tentatively scheduled in multiple slots, and later to be confirmed to one the slots.

    B-RecurringTasks: Recurring task

    B-RecurringTasks

         Recurring tasks

    Provide support for managing recurring tasks e.g., a weekly project meeting.

    B-DoAfterTasks: Do-after tasks

    B-DoAfterTasks

         'Do after' tasks

    Support the managing of tasks that need to be done after a specific time/task e.g., return book after the exam is over.

    B-DoWithinPeriodTasks: Time bound tasks

    B-DoWithinPeriodTasks

         'Do within a period' task

    Provide support for managing tasks that need to be done within a certain period e.g., collect certificate between Jan 15 and 25th.

    B-FixedDurationTasks: Fixed duration tasks

    B-FixedDurationTasks

         Unscheduled tasks with a fixed duration

    Provide support for managing tasks that takes a fixed amount of time but does not have a fixed start/end time e.g., reading the sales report (needs 2 hours).

    Phase 3: Tester response

    • This phase is optional. If you do not respond to a dev response, we'll assume that you agree with it.
    • In this phase you will get to state whether you agree or disagree with the dev response to the bugs you reported.
    • If a bug reported has been subjected to any of the below by the receiving team, CATcher will allow you to record your objections and the reason for the objection.
      • not accepted
      • severity downgraded
      • bug type changed
    • As before, consider carefully before you object to a team response. If many of your objections were overruled by the teaching team later, you will lose marks for not being able to evaluate a bug report properly.
    • Deadline: Reading week Thursday 2359 hrs
    • Login to CATcher as usual (profile: CS2113/T PE).
    • For the issues listed, go to the details, and read the team's response.
    • If you disagree with any of the items listed, tick on the I disagree tick box and enter your justification for the disagreement, and click Save.

    Issues created for PE-D and PE need to be in a precise format for our grading scripts to work. Incorrectly-formatted responses will have to discarded. Therefore, you are strongly recommended to use CATcher for PE-D and PE activities. If you want to give your response via GitHub instead, please get our permission first.

    • When the phase has been announced as open, go to your pe repo.
    • For the issues listed, go to the details, and read the bot's comment containing the team's response.
    • If you disagree with any of the items listed in that comment, tick on the [ ] I disagree tick box. Edit the comment (do not add a new comment) to replace the [replace this with your reason] with your reasoning. Here is an example:
    Team chose ['response.IssueUnclear']
    - [x] I disagree
    **Reason for disagreement:** I think one can easily reproduce the problem by following the steps I gave.
    

    Phase 4: Moderation by the teaching team

    • In this phase tutors will look through all dev responses you objected to in the previous phase and decide on a final outcome.
    • In the unlikely event that we need your inputs, the tutor will contact you.

    Project: v1.4 [week 13]Project: Assessment

    ����������������������������