tP: Practical Exam Dry Run (PE-D)
PE-D Overview
What: The product version released by the v1.5 iteration is subjected to a round of peer acceptance/system testing, also called the Practical Exam (PE) Dry Run as this round of testing will be similar to the graded Practical Exam that will be done at v1.6.
When: To be done within a period of about 6 hours at the start of week 11 → 12 transition point (i.e., Fri, Oct 31st 1200-1800). We recommend that you spend about 1-1.5 hours of the lecture slot (the one that falls inside the above period) for this task.
Where: You can do the PE-D from anywhere. There is no need to join a Zoom meeting during the PE-D (or the PE).
Grading: The PE dry run affects your grade in the following ways.
- You can earn up to 2 marks (in your final tP score) for your performance in the PE-D.
Graded based on the usefulness and the quality of your bug reports, as evaluated by the receiving team. - PE dry run is a way for you to 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.
Why:
- To train you to do system and acceptance testing, bug reporting, bug bug fixing, communicating with users/testers/developers, evaluating products etc.
- To help you improve your product before the final submission.
PE-D Preparation
- Ensure that you have accepted the invitation to join the GitHub org used by the course. Go to https://github.com/nus-cs2103-AY2526S1 to accept the invitation.
- Ensure you have access to a computer that is able to run course projects e.g., has the right Java version.
- We will create a private repo
ped-{your GitHub username}in the course's GitHub org about 24 hours before the PE-D session starts. We'll let you know when it is ready. You will use that repo's issue tracker to report your PE-D bugs. - The issue tracker will already contain the necessary labels.
- Do not edit the labels (i.e., text/colour) that we have provided.
- You may create more labels if you wish (for your own convenience). Such labels will be ignored by our bug processing scripts.
Do not usetype.andseverity.as prefixes of labels you create yourself.
PE-D During the session
Use MS Teams private messages to contact prof Damith (name: Damith Chatura RAJAPAKSE, NUSNET: dcsdcr) via MS Teams if you need help during the PE-D. You may also use email to contact the teaching team.
How many bugs to report?
Report as many bugs as you can find during the given time. If you can't find many bugs at this stage when the product is largely untested, you are unlikely to be able to find enough bugs in the better-tested final submission later. So, all the more reasons to spend more time and find more bugs now.
For reference, here are what we consider as qualities of a good bug report:
- has a descriptive title
- has enough details e.g., steps to reproduce, expected, actual, and screenshots.
- severity/type labels chosen are not too far off
- is written in a non-confrontational tone
- points out a potentially problematic behavior (or a good way to improve the product)
Evaluation rubric:
| - | Meets expectations | Exceeds expectations | Greatly exceeds expectations |
|---|---|---|---|
| Number of 'good' bug reports | 3-5 | 6-8 | >9 |
| Marks | participation points (PP) only | PP, +1 mark added to tP score | PP, +2 marks |
The 'good' bug reports count is determined by the team receiving your bugs. As you can't be sure which of your bug reports will be considered as good (the last criterion in particular) by the receiving team, we recommend that you aim to submit at least 8-10 bug reports in total if you aim for +1 mark, more if you are aiming for +2 marks. The median bug reports count in the last round was 9.
While PE and PE-D are primarily manual testing sessions, you may also use any test automation tools or test scripts too.
Test the product and report bugs as described below, after the start of the PE-D period (i.e., Friday 1200).
Testing instructions for PE and PE-D
a) Downloading and launching the JAR file
A few hours before the PE-D starts, you will be notified via email which team you will be testing in the PE-D. After sending out those emails. we'll also announce it in Canvas. FYI, team members will be given different teams to test, and the team you test in PE-D is different from the team you test in the PE.
You are not allowed to,
- reveal the team you are testing in the PE-D/PE to anyone## or put that information in a place where others can see it.
- to share your PE-D/PE bug reports with anyone.
- to involve anyone else in your PE-D or PE tasks -- both are individual assignments, to be done by yourself.
Do the following steps after 12 noon on the PE-D day -- get started at least by 4pm.
- First, download the latest
.jarfile and UG/DG.pdffiles from the team's releases page, if you haven't done this already. - Then, you can start testing it and reporting bugs.
- Download the zip file from the given location (to be given to you at least a few hours before the PE), if you haven't done that already.
- The file is zipped using a two-part password.
- We will email you the second part in advance, via email (it's unique to each student). Keep it safe, and have it ready at the start of the PE.
- At the start of the PE, we'll give you the first part of the password (common to the whole class), via a Canvas announcement. Use combined password to unzip the file, which should give you another zip file with the name suffix
_inner.zip. - Unzip that second zip file normally (no password required). That will give you a folder containing the JAR file to test and other PDF files needed for the PE. Warning: do not run the JAR file while it is still inside the zip file.
Ignore thepadding_filefound among the extracted files. Its only purpose is to mask the true size of the JAR file so that someone cannot guess which team they will be testing based on the zip file size.
Some macOS versions will automatically unzip the inner zip file after you unzip the outer zip file using the password. - Strongly recommended: Try above steps using the this sample zip file if you wish (first part of the password:
password1-, second part:password2i.e., you should usepassword1-password2to unzip it).
Use the JAR file inside it to try the steps given below as well, to confirm your computer's Java environment is as expected and can run PE jar files.
Steps for testing a tP JAR file (please follow closely)
- Put the JAR file in an empty folder in which the app is allowed to create files (i.e., do not use a write-protected folder).
- Open a command window. Run the
java -versioncommand to ensure you are using Java 17.
Do this again even if you did this before, as your OS might have auto-updated the default Java version to a newer version. - Check the UG to see if there are extra things you need to do before launching the JAR file e.g., download another file from somewhere
You may visit the team's releases page on GitHub if they have provided some extra files you need to download. - Launch the jar file using the
java -jarcommand rather than double-clicking (reason: to ensure the jar file is using the same java version that you verified above). Use double-clicking as a last resort.
We strongly recommend surrounding the jar filename with double quotes, in case special characters in the filename causes thejava -jarcommand to break.
e.g.,java -jar "[CS2103-F18-1][Task Pro].jar"
Windows users: use the DOS prompt or the PowerShell (not the WSL terminal) to run the JAR file.
Linux users: If the JAR fails with an error labelledGdk-CRITICAL(happens in Wayland display servers), try running it usingGDK_BACKEND=x11 java -jar jar_file_name.jarcommand instead.
If the product doesn't work at all: If the product fails catastrophically e.g., cannot even launch, or even the basic commands crash the app, do the following:
- Check the UG of the team, to see if there are extra things you need to do before launching the JAR.
Confirm that you are using Java 17 and using thejava -jarcommand to run the JAR, as explained in points above. - Contact prof Damith via MS Teams (name:
Damith Chatura RAJAPAKSE, NUSNET:dcsdcr) and give him
(a) a screenshot of the error message, and
(b) your GitHub username. - Wait for him to give you a fallback team to test.
Expected response times: [12 noon - 4pm] 20 minutes, [4-6pm] 5 minutes, [after 6pm] not available (i.e., you need to resolve these issues before 6pm).
Contact the prof via email if you didn't get a response via MSTeams. - Close bug reports you submitted for the previous team (if any).
- You should not go back to testing the previous team after you've been given a fallback team to test.
b) What to test
| In the scope of PE/PE-D | Not in the scope |
|---|---|
| The behaviour of product jar file UG (pdf file only) DG (pdf file only) | The product website, including .md files such as README.mdData and config files that comes with the app (unless they affect the app behavior) Terminal output (unless it attracts the attention of the user and worries/alarms him/her unnecessarily) Code quality issues (but there is no restriction on examining code to identify product/UG/DG bugs) |
- Test based on the Developer Guide (Appendix named Instructions for Manual Testing) and the User Guide PDF files. 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.
If the provided UG/DG PDF files have serious issues (e.g., some parts seem to be missing) you can report it as a bug, and then, use the Web versions of UG/DG for the testing. - You may do both system testing and acceptance testing.
- Focus on product testing first, before expanding the focus to reporting documentation bugs.
Reason: If there are serious issues with the jar file that makes product testing impossible, you need to find that out quickly (within the first 10 minutes) so that you can switch to a different product to test. If you find yourself in such a situation much later, the time spent testing the previous product would go to waste. - Be careful when copying commands from the UG (PDF version) to the app as some PDF viewers can affect the pasted text. If that happens, you might want to open the UG in a different PDF viewer.
If the command you copied spans multiple lines, check to ensure the line break did not mess up the copied command.
c) What bugs to report?
- You may report functionality bugs, feature flaws, UG bugs, and DG bugs.
Do not post suggestions but if the product is missing a critical functionality that makes the product less useful to the intended user, it can be reported as a bug of type
Type.FeatureFlaw. The dev team is allowed to reject bug reports framed as mere suggestions or/and lacking in a convincing justification as to why the omission or the current design of that functionality is problematic.It may be useful to read the PE guidelines the dev team will follow when responding to bug reports, given in the panel below. You can ignore the
General:section though.
d) How to report bugs
- Bug reports created/updated after the allocated time will not count.
e) Bug report format
Each bug should be a separate issue i.e., do not report multiple problems in the same bug report.
If there are multiple bugs in the same report, the dev team will select only one of the bugs in the report and discard the others.When reporting similar bugs, it is safer to report them as separate bugs because there is no penalty for reporting duplicates. But as submitting multiple bug reports take extra time, if you are quite sure they will be considered as duplicates by the dev team later, you can report them together, to save time.
The whole description of the bug should be in the issue description i.e., do not add comments to the issue. Any such comments will be ignored by our scripts.
Assign exactly one
*.severitylabel.
If multipleseverity.*labels are assigned, we'll pick the one with the lowest severity.
If noseverity.*labels is assigned, we'll pickseverity.Lowas the default.
Bug Severity labels:
severity.VeryLow: A flaw that is purely cosmetic and does not affect usage e.g., a typo/spacing/layout/color/font issues in the docs or the UI that doesn't affect usage. Only cosmetic problems should have this label.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., only problems that make the product almost unusable for most users should have this label.
When determining severity documentation bugs, replace user with reader e.g., when deciding severity of DG bugs, consider the impact of the bug on developers reading the DG.
- Assign exactly one
type.*label.
If multipletype.*labels are assigned, we'll pick on of the selected ones at random.
If notype.*labels is assigned, we'll pick one at random.
Type labels:
type.FunctionalityBug: A functionality does not work as specified/expected.type.FeatureFlaw: Some functionality missing from a feature delivered in v1.6 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.6 features.
These issues are counted against the product design aspect of the project. Therefore, other design problems (e.g., low testability, mismatches to the target user/problem, project constraint violations etc.) can be put in this category as well.
Features that work as specified by the UG but should have been designed to work differently (from the end-user's point of view) fall in this category too.type.DocumentationBug: A flaw in the documentation e.g., a missing step, a wrong instruction, typos
- If you assign more than one type label, we'll pick one of them at random. If there is no type label, we will revert back to the one given by the tester.
- If a bug fits multiple types equally well, the team is free to choose the one they think the best match.
- Write good quality bug reports; poor quality or incorrect bug reports will not earn credit.
Remember to give enough details for the receiving team to reproduce the bug. If the receiving team cannot reproduce the bug, you will not be able to get credit for it.
Do not create/assign sub-issues. Each issue will count as a separate bug report, even if you link them together as sub-issues.
Do not refer one bug report from another (e.g.,
This bug is similar to #12) as such links will no longer work after the bug report is copied over during later PE/PE-D phases.If you need to include
<or>symbols in your bug report, you can either use\to escape them (i.e., use\<and\>e.g.,x \< yinstead ofx < y) or wrap it inside back-ticks.
Reason: GitHub strips out content wrapped in<and>, for security reasons.
PE-D After the session
- The relevant bug reports will be transferred to your team's tP issue tracker within a day after the session is over. Once you have received the bug reports for your product, you can decide whether you will act on reported issues before the final submission v1.6. For some issues, the correct decision could be to reject or postpone to a version beyond v1.6.
Reminder: There is no penalty for any of the bugs you received in the PE-D.
Dealing with "What the h___ the tester was thinking?" type bug reports
Some bug reports will make you angry because they seem baseless, wrong, rude etc. It's still possible to get value from such bug reports though:
- After you got over the initial indignation, dig deeper to see if there's even the slightest possibility that there is a bug. For example, consider this scenario:
- The tester claims a certain command doesn't work.
- All your team members tried the exact same command and it works as advertised. What the h___ the tester is trying to pull here?
- In reality, the error is actually caused by a duplicate entry in the database resulting from a previous command; the tester didn't mention that command in the bug report (because s/he didn't realize the two are connected).
- The reported bug might be non-existent but the tester's screw up can indicate other areas to improve. For example, the tester reports a missing feature that is clearly mentioned as 'not implemented' in the UG, but perhaps the UG can be improved to make that fact harder to miss?
- What exactly about the bug report that makes you angry? Remind yourself not to do the same offence when you report bugs yourself in the future.
Use the pain of dealing with this kind of bug reports as an opportunity to develop the following mindset:
The product is guilty until proven innocent: If the bug report has even a hint of something amiss with the product, it's your (not the tester's) responsibility to try and prove if it is really a problem or not. Why? because finding a bug is a win for you -- as you can then fix it and thereby avoid the embarrassment of releasing a buggy product.
A crappy bug report is better than no bug report: If the bug actually exists, it is better to have some indication about it than none at all. In a real project, a tester that fails to find bugs can cause more harm to your career than a tester who finds bugs but doesn't report them well.
I used to get angry at bug reports, but not anymore: If you work hard, take pride in the quality of your work, it's no wonder that you get angry when others find faults with your work incorrectly. Aim to move past that phase where you take bug reports personally. The sooner you can tackle any sh*tty bug report calmly and objectively, the sooner you'll rise to the 'professional' software engineer level.
- If you have received stray bug reports (i.e., bug reports that seems to be about a different project), do let us know ASAP (write to the course email).
- Aim to do a systematic triaging of issues received. Some suggestions:
- Close duplicate issues.
- Use labels (create new labels if necessary) to,
- differentiate bugs from the rest (e.g., feature suggestions/flaws).
- indicate priority of the bugs that need fixing.
- Assign each bug to the person who should fix it.
- You may ignore
type/severity.*labels given by the tester. They will not affect you or the tester either way -- they were there just for the testers to practice. You may apply your own type/severity labels if you wish.
In particular, beware of simply following thetype.*given by the tester; it is your job to decide the correct type of the issue. e.g., What the tester labeled as a bug might actually be a feature flaw. - If a bug report is simply a feature suggestion, you can take note of it and close it (to reduce clutter in the issue tracker, and to make it easy for the teaching team to track your progress on dealing with PE-D issues). Similarly, you can close PE-D issues not relevant to v1.6.
Note that listing bugs as 'known bugs' in the UG or specifying unreasonable constraints in the UG to make bugs 'out of scope' will not exempt those bugs from the final grading. That is, PE testers can still earn credit for reporting those bugs and you will still be penalized for them.
However, a product is allowed to have 'known limitations' (e.g., a daily expense tracking application meant for students is unable to handle expenses larger than $999) as long as they don't degrade the product's use within the intended scope. They will not be penalized.
Even bugs inherited from AB3 need to be fixed. As mentioned in a previous week, even bugs you inherited from AB3 need fixing (because "we inherited it from the previous dev team" is not a valid excuse to leave a bug unfixed). If you are unsure if something is such a bug that need fixing, please post in the forum.
Identify bugs you missed in the PE-D: Visit the issue tracker of the team you tested and see bugs reported by others who tested the same product. Identify bugs you missed (if any). That knowledge might help you find similar bugs in your own product as well as find more bugs during the PE.